weizhouapache commented on code in PR #13032:
URL: https://github.com/apache/cloudstack/pull/13032#discussion_r3334323339
##########
framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManagerImpl.java:
##########
@@ -880,19 +989,102 @@ public Extension
registerExtensionWithResource(RegisterExtensionCmd cmd) {
String resourceType = cmd.getResourceType();
if (!EnumUtils.isValidEnum(ExtensionResourceMap.ResourceType.class,
resourceType)) {
throw new InvalidParameterValueException(
- String.format("Currently only [%s] can be used to register
an extension of type Orchestrator",
+ String.format("Currently only [%s] can be used to register
an extension",
EnumSet.allOf(ExtensionResourceMap.ResourceType.class)));
}
- ClusterVO clusterVO = clusterDao.findByUuid(resourceId);
- if (clusterVO == null) {
- throw new InvalidParameterValueException("Invalid cluster ID
specified");
+ ExtensionVO extension = extensionDao.findById(extensionId);
+ if (extension == null) {
+ throw new InvalidParameterValueException("Invalid extension
specified");
+ }
+ ExtensionResourceMap.ResourceType resType =
ExtensionResourceMap.ResourceType.valueOf(resourceType);
+ if (ExtensionResourceMap.ResourceType.PhysicalNetwork.equals(resType))
{
+ PhysicalNetworkVO physicalNetwork =
physicalNetworkDao.findByUuid(resourceId);
+ if (physicalNetwork == null) {
+ throw new InvalidParameterValueException("Invalid physical
network ID specified");
+ }
+ ExtensionResourceMap extensionResourceMap =
registerExtensionWithPhysicalNetwork(physicalNetwork, extension,
cmd.getDetails());
+ return
extensionDao.findById(extensionResourceMap.getExtensionId());
+ } else if (ExtensionResourceMap.ResourceType.Cluster.equals(resType)) {
+ ClusterVO clusterVO = clusterDao.findByUuid(resourceId);
+ if (clusterVO == null) {
+ throw new InvalidParameterValueException("Invalid cluster ID
specified");
+ }
+ ExtensionResourceMap extensionResourceMap =
registerExtensionWithCluster(clusterVO, extension, cmd.getDetails());
+ return
extensionDao.findById(extensionResourceMap.getExtensionId());
+ } else {
+ throw new InvalidParameterValueException("Unsupported resource
type specified");
+ }
+ }
+
+ @Override
+ @ActionEvent(eventType = EventTypes.EVENT_EXTENSION_RESOURCE_UPDATE,
eventDescription = "updating extension resource")
+ public Extension
updateRegisteredExtensionWithResource(UpdateRegisteredExtensionCmd cmd) {
+ final String resourceId = cmd.getResourceId();
+ final Long extensionId = cmd.getExtensionId();
+ final String resourceType = cmd.getResourceType();
+ final Map<String, String> details = cmd.getDetails();
+ final Boolean cleanupDetails = cmd.isCleanupDetails();
+
+ if (!EnumUtils.isValidEnum(ExtensionResourceMap.ResourceType.class,
resourceType)) {
+ throw new InvalidParameterValueException(
+ String.format("Currently only [%s] can be used to update
an extension registration",
+
EnumSet.allOf(ExtensionResourceMap.ResourceType.class)));
}
ExtensionVO extension = extensionDao.findById(extensionId);
if (extension == null) {
throw new InvalidParameterValueException("Invalid extension
specified");
}
- ExtensionResourceMap extensionResourceMap =
registerExtensionWithCluster(clusterVO, extension, cmd.getDetails());
- return extensionDao.findById(extensionResourceMap.getExtensionId());
+
+ ExtensionResourceMap.ResourceType resType =
ExtensionResourceMap.ResourceType.valueOf(resourceType);
+ long resolvedResourceId;
+ if (ExtensionResourceMap.ResourceType.PhysicalNetwork.equals(resType))
{
+ PhysicalNetworkVO physicalNetwork =
physicalNetworkDao.findByUuid(resourceId);
+ if (physicalNetwork == null) {
+ try {
+ physicalNetwork =
physicalNetworkDao.findById(Long.parseLong(resourceId));
+ } catch (NumberFormatException ignored) {
+ }
+ }
+ if (physicalNetwork == null) {
+ throw new InvalidParameterValueException("Invalid physical
network ID specified");
+ }
+ resolvedResourceId = physicalNetwork.getId();
+ } else {
+ ClusterVO clusterVO = clusterDao.findByUuid(resourceId);
+ if (clusterVO == null) {
+ throw new InvalidParameterValueException("Invalid cluster ID
specified");
+ }
+ resolvedResourceId = clusterVO.getId();
+ }
+
+ List<ExtensionResourceMapVO> mappings =
extensionResourceMapDao.listByResourceIdAndType(resolvedResourceId, resType);
+ ExtensionResourceMapVO targetMapping = null;
+ if (CollectionUtils.isNotEmpty(mappings)) {
+ for (ExtensionResourceMapVO mapping : mappings) {
+ if (mapping.getExtensionId() == extensionId) {
+ targetMapping = mapping;
+ break;
+ }
+ }
+ }
Review Comment:
good point, i will add it
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]