aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationNovaServerImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationNovaServerImpl.java')
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationNovaServerImpl.java764
1 files changed, 375 insertions, 389 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationNovaServerImpl.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationNovaServerImpl.java
index 09439e2ea1..e865984468 100644
--- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationNovaServerImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationNovaServerImpl.java
@@ -16,23 +16,37 @@
package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
+import static org.openecomp.sdc.heat.services.HeatConstants.SNAPSHOT_ID_PROPERTY_NAME;
+import static org.openecomp.sdc.heat.services.HeatConstants.VOL_ID_PROPERTY_NAME;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
+import org.onap.sdc.tosca.datatypes.model.GroupDefinition;
+import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
+import org.onap.sdc.tosca.datatypes.model.NodeType;
+import org.onap.sdc.tosca.datatypes.model.RelationshipTemplate;
+import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
+import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
+import org.openecomp.sdc.heat.datatypes.model.PropertiesMapKeyTypes;
import org.openecomp.sdc.heat.datatypes.model.Resource;
+import org.openecomp.sdc.heat.datatypes.model.ResourceReferenceFunctions;
import org.openecomp.sdc.heat.services.HeatConstants;
import org.openecomp.sdc.logging.api.Logger;
import org.openecomp.sdc.logging.api.LoggerFactory;
import org.openecomp.sdc.tosca.datatypes.ToscaCapabilityType;
import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
import org.openecomp.sdc.tosca.datatypes.ToscaRelationshipType;
-import org.onap.sdc.tosca.datatypes.model.GroupDefinition;
-import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
-import org.onap.sdc.tosca.datatypes.model.NodeType;
-import org.onap.sdc.tosca.datatypes.model.RelationshipTemplate;
-import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
-import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
import org.openecomp.sdc.tosca.services.DataModelUtil;
import org.openecomp.sdc.tosca.services.ToscaConstants;
import org.openecomp.sdc.translator.datatypes.heattotosca.AttachedResourceId;
@@ -48,422 +62,394 @@ import org.openecomp.sdc.translator.services.heattotosca.NameExtractor;
import org.openecomp.sdc.translator.services.heattotosca.ResourceTranslationFactory;
import org.openecomp.sdc.translator.services.heattotosca.mapping.TranslatorHeatToToscaPropertyConverter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
+public class ResourceTranslationNovaServerImpl extends ResourceTranslationBase {
+ private static final Logger logger = LoggerFactory.getLogger(ResourceTranslationNovaServerImpl.class);
+ private static final String BLOCK_DEVICE_MAPPING_DEVICE_NAME = "device_name";
+ private static final String VOL_ATTACH_DEVICE_PROPERTY_NAME = "device";
+
+ @Override
+ protected void translate(TranslateTo translateTo) {
+ TranslationContext context = translateTo.getContext();
+ Map<String, Object> properties = translateTo.getResource().getProperties();
+ String heatFileName = translateTo.getHeatFileName();
+ ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
+ String nodeTypeRef = createLocalNodeType(serviceTemplate, translateTo.getResource(),
+ translateTo.getResourceId(), translateTo.getTranslatedId());
+ //create compute in consolidation data
+ ConsolidationDataUtil.getComputeTemplateConsolidationData(context, serviceTemplate,
+ nodeTypeRef, translateTo.getTranslatedId());
+ NodeTemplate novaNodeTemplate = new NodeTemplate();
+ novaNodeTemplate.setType(nodeTypeRef);
+ HeatOrchestrationTemplate heatOrchestrationTemplate =
+ translateTo.getHeatOrchestrationTemplate();
+ novaNodeTemplate.setProperties(TranslatorHeatToToscaPropertyConverter
+ .getToscaPropertiesSimpleConversion(serviceTemplate, translateTo.getResourceId(),
+ properties, novaNodeTemplate.getProperties(), heatFileName,
+ heatOrchestrationTemplate, translateTo.getResource().getType(),
+ novaNodeTemplate, context));
+ HeatToToscaUtil.mapBoolean(novaNodeTemplate, HeatToToscaUtil
+ .getToscaPropertyName(translateTo, HeatConstants.CONFIG_DRIVE_PROPERTY_NAME));
+ manageNovaServerNetwork(translateTo, novaNodeTemplate);
+ manageNovaServerBlockDeviceMapping(translateTo, novaNodeTemplate);
+ manageNovaServerGroupMapping(translateTo, novaNodeTemplate);
+ DataModelUtil.addNodeTemplate(serviceTemplate, translateTo.getTranslatedId(), novaNodeTemplate);
+ }
+ private void manageNovaServerGroupMapping(TranslateTo translateTo,
+ NodeTemplate novaNodeTemplate) {
+ Map<String, Object> properties = translateTo.getResource().getProperties();
+ if (isSchedulerHintsPropExist(properties)) {
+ Object schedulerHints = properties.get(ResourceReferenceFunctions.SCHEDULER_HINTS.getFunction());
+ if (schedulerHints instanceof Map) {
+ addServerGroupHintsToPoliciesGroups(translateTo,
+ novaNodeTemplate, (Map<String, Object>) schedulerHints);
+ } else {
+ logger.warn("'scheduler_hints' property of resource '{}' is not valid. This property should be a map",
+ translateTo.getResourceId());
+ }
+ }
+ }
-public class ResourceTranslationNovaServerImpl extends ResourceTranslationBase {
- protected static Logger logger =
- (Logger) LoggerFactory.getLogger(ResourceTranslationNovaServerImpl.class);
-
- @Override
- protected void translate(TranslateTo translateTo) {
- TranslationContext context = translateTo.getContext();
- Map<String, Object> properties = translateTo.getResource().getProperties();
- String heatFileName = translateTo.getHeatFileName();
-
- ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
- String nodeTypeRef = createLocalNodeType(serviceTemplate, translateTo.getResource(),
- translateTo.getResourceId(), translateTo.getTranslatedId(), context);
-
- //create compute in consolidation data
- ConsolidationDataUtil.getComputeTemplateConsolidationData(context, serviceTemplate,
- nodeTypeRef, translateTo.getTranslatedId());
-
- NodeTemplate novaNodeTemplate = new NodeTemplate();
- novaNodeTemplate.setType(nodeTypeRef);
- HeatOrchestrationTemplate heatOrchestrationTemplate =
- translateTo.getHeatOrchestrationTemplate();
- novaNodeTemplate.setProperties(TranslatorHeatToToscaPropertyConverter
- .getToscaPropertiesSimpleConversion(serviceTemplate, translateTo.getResourceId(),
- properties, novaNodeTemplate.getProperties(), heatFileName,
- heatOrchestrationTemplate, translateTo.getResource().getType(),
- novaNodeTemplate, context));
-
- HeatToToscaUtil.mapBoolean(novaNodeTemplate, HeatToToscaUtil
- .getToscaPropertyName(translateTo, HeatConstants.CONFIG_DRIVE_PROPERTY_NAME));
-
- manageNovaServerNetwork(translateTo, novaNodeTemplate);
- manageNovaServerBlockDeviceMapping(translateTo, novaNodeTemplate);
- manageNovaServerGroupMapping(translateTo, context, properties, heatFileName, serviceTemplate,
- novaNodeTemplate, heatOrchestrationTemplate);
- DataModelUtil.addNodeTemplate(serviceTemplate, translateTo.getTranslatedId(), novaNodeTemplate);
- }
-
- private void manageNovaServerGroupMapping(TranslateTo translateTo, TranslationContext context,
- Map<String, Object> properties, String heatFileName,
- ServiceTemplate serviceTemplate,
- NodeTemplate novaNodeTemplate,
- HeatOrchestrationTemplate heatOrchestrationTemplate) {
- if (isSchedulerHintsPropExist(properties)) {
- Object schedulerHints = properties.get("scheduler_hints");
- if (schedulerHints instanceof Map) {
- addServerGroupHintsToPoliciesGroups(translateTo, context, heatFileName, serviceTemplate,
- novaNodeTemplate, heatOrchestrationTemplate, (Map<String, Object>) schedulerHints);
- } else {
- logger.warn("'scheduler_hints' property of resource '" + translateTo.getResourceId()
- + "' is not valid. This property should be a map");
- }
+ private void addServerGroupHintsToPoliciesGroups(TranslateTo translateTo,
+ NodeTemplate novaNodeTemplate,
+ Map<String, Object> schedulerHints) {
+ for (Object hint : schedulerHints.values()) {
+ Optional<AttachedResourceId> attachedResourceId = HeatToToscaUtil
+ .extractAttachedResourceId(translateTo.getHeatFileName(), translateTo
+ .getHeatOrchestrationTemplate(), translateTo.getContext(), hint);
+ if (attachedResourceId.isPresent()) {
+ AttachedResourceId serverGroupResourceId = attachedResourceId.get();
+ Object serverGroupResourceToTranslate = serverGroupResourceId.getEntityId();
+ if (serverGroupResourceId.isGetResource()) {
+ addServerGroupHintGetResource(translateTo, novaNodeTemplate, serverGroupResourceToTranslate);
+ } else if (serverGroupResourceId.isGetParam() && serverGroupResourceToTranslate instanceof String) {
+ addServerGroupHintGetParam(translateTo, novaNodeTemplate, serverGroupResourceToTranslate);
+ }
+ }
+ }
}
- }
-
- private void addServerGroupHintsToPoliciesGroups(TranslateTo translateTo,
- TranslationContext context, String heatFileName,
- ServiceTemplate serviceTemplate,
- NodeTemplate novaNodeTemplate,
- HeatOrchestrationTemplate
- heatOrchestrationTemplate,
- Map<String, Object> schedulerHints) {
- for (Object hint : schedulerHints.values()) {
- Optional<AttachedResourceId> attachedResourceId = HeatToToscaUtil
- .extractAttachedResourceId(heatFileName, heatOrchestrationTemplate, context, hint);
- if (attachedResourceId.isPresent()) {
- AttachedResourceId serverGroupResourceId = attachedResourceId.get();
- Object serverGroupResourceToTranslate = serverGroupResourceId.getEntityId();
- if (serverGroupResourceId.isGetResource()) {
- boolean isHintOfTypeNovaServerGroup =
- isHintOfTypeNovaServerGroup(heatOrchestrationTemplate,
- serverGroupResourceToTranslate);
- if (isHintOfTypeNovaServerGroup) {
- addNovaServerToPolicyGroup(translateTo, context, heatFileName, serviceTemplate,
- heatOrchestrationTemplate, (String) serverGroupResourceToTranslate,
- novaNodeTemplate);
- }
- } else if (serverGroupResourceId.isGetParam()
- && serverGroupResourceToTranslate instanceof String) {
- TranslatedHeatResource
- translatedServerGroupResource =
- context.getHeatSharedResourcesByParam().get(serverGroupResourceToTranslate);
- if (Objects.nonNull(translatedServerGroupResource)
- && !HeatToToscaUtil.isHeatFileNested(translateTo, translateTo.getHeatFileName())
- && isResourceTypeServerGroup(translatedServerGroupResource)) {
+
+ private void addServerGroupHintGetParam(TranslateTo translateTo, NodeTemplate novaNodeTemplate,
+ Object serverGroupResourceToTranslate) {
+ TranslatedHeatResource translatedServerGroupResource = translateTo.getContext()
+ .getHeatSharedResourcesByParam().get(serverGroupResourceToTranslate);
+ if (Objects.nonNull(translatedServerGroupResource)
+ && !HeatToToscaUtil.isHeatFileNested(translateTo, translateTo.getHeatFileName())
+ && isResourceTypeServerGroup(translatedServerGroupResource)) {
Map<String, GroupDefinition> groups =
- serviceTemplate.getTopology_template().getGroups();
- if(MapUtils.isNotEmpty(groups) && Objects.nonNull(groups.get(translatedServerGroupResource
- .getTranslatedId()))) {
- groups
- .get(translatedServerGroupResource.getTranslatedId()).getMembers()
- .add(translateTo.getTranslatedId());
- //Add group Id to compute consolidation data
- updateComputeConsolidationDataGroup(translateTo, novaNodeTemplate,
- translatedServerGroupResource.getTranslatedId());
+ translateTo.getServiceTemplate().getTopology_template().getGroups();
+ if (MapUtils.isNotEmpty(groups) && Objects.nonNull(groups.get(translatedServerGroupResource
+ .getTranslatedId()))) {
+ groups.get(translatedServerGroupResource.getTranslatedId()).getMembers()
+ .add(translateTo.getTranslatedId());
+ //Add group Id to compute consolidation data
+ updateComputeConsolidationDataGroup(translateTo, novaNodeTemplate,
+ translatedServerGroupResource.getTranslatedId());
}
- }
}
- }
}
- }
-
- private boolean isResourceTypeServerGroup(TranslatedHeatResource translatedServerGroupResource) {
- return translatedServerGroupResource.getHeatResource().getType().equals(HeatResourcesTypes.NOVA_SERVER_GROUP_RESOURCE_TYPE.getHeatResource());
- }
-
- private void updateComputeConsolidationDataGroup(TranslateTo translateTo,
- NodeTemplate novaNodeTemplate,
- String groupId) {
- TranslationContext translationContext = translateTo.getContext();
- ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
- ComputeTemplateConsolidationData computeTemplateConsolidationData = ConsolidationDataUtil
- .getComputeTemplateConsolidationData(translationContext, serviceTemplate,
- novaNodeTemplate.getType(),
- translateTo.getTranslatedId());
- ConsolidationDataUtil.updateGroupIdInConsolidationData(computeTemplateConsolidationData,
- groupId);
- }
-
- private boolean isHintOfTypeNovaServerGroup(HeatOrchestrationTemplate heatOrchestrationTemplate,
- Object resourceToTranslate) {
- return heatOrchestrationTemplate.getResources().get(resourceToTranslate).getType()
- .equals(HeatResourcesTypes.NOVA_SERVER_GROUP_RESOURCE_TYPE.getHeatResource());
- }
-
- private void addNovaServerToPolicyGroup(TranslateTo translateTo, TranslationContext context,
- String heatFileName, ServiceTemplate serviceTemplate,
- HeatOrchestrationTemplate heatOrchestrationTemplate,
- String resourceToTranslate,
- NodeTemplate novaNodeTemplate) {
- Resource serverGroup =
- HeatToToscaUtil.getResource(heatOrchestrationTemplate, resourceToTranslate, heatFileName);
- Optional<String> serverGroupTranslatedId = ResourceTranslationFactory.getInstance(serverGroup)
- .translateResource(heatFileName, serviceTemplate, heatOrchestrationTemplate, serverGroup,
- resourceToTranslate, context);
- if (serverGroupTranslatedId.isPresent()) {
- serviceTemplate.getTopology_template().getGroups().get(serverGroupTranslatedId.get())
- .getMembers().add(translateTo.getTranslatedId());
- updateComputeConsolidationDataGroup(translateTo, novaNodeTemplate,
- serverGroupTranslatedId.get());
+ private void addServerGroupHintGetResource(TranslateTo translateTo, NodeTemplate novaNodeTemplate,
+ Object serverGroupResourceToTranslate) {
+ boolean isHintOfTypeNovaServerGroup = isHintOfTypeNovaServerGroup(translateTo
+ .getHeatOrchestrationTemplate(), serverGroupResourceToTranslate);
+ if (isHintOfTypeNovaServerGroup) {
+ addNovaServerToPolicyGroup(translateTo, (String) serverGroupResourceToTranslate, novaNodeTemplate);
+ }
}
- }
-
- private boolean isSchedulerHintsPropExist(Map<String, Object> properties) {
- return !MapUtils.isEmpty(properties) && Objects.nonNull(properties.get("scheduler_hints"));
- }
-
- private void manageNovaServerBlockDeviceMapping(TranslateTo translateTo,
- NodeTemplate novaNodeTemplate) {
- String heatFileName = translateTo.getHeatFileName();
- TranslationContext context = translateTo.getContext();
- ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
- Resource resource = translateTo.getResource();
- String resourceId = translateTo.getResourceId();
- String novaServerTranslatedId = translateTo.getTranslatedId();
- HeatOrchestrationTemplate heatOrchestrationTemplate = translateTo
- .getHeatOrchestrationTemplate();
- List<Map<String, Object>> blockDeviceMappingList = getBlockDeviceMappingList(resource);
- if (CollectionUtils.isEmpty(blockDeviceMappingList)) {
- return;
+
+ private boolean isResourceTypeServerGroup(TranslatedHeatResource translatedServerGroupResource) {
+ return translatedServerGroupResource.getHeatResource().getType()
+ .equals(HeatResourcesTypes.NOVA_SERVER_GROUP_RESOURCE_TYPE.getHeatResource());
}
- Object volumeIdObject;
- Object snapshotIdObject;
- String volumeResourceId;
- int index = 0;
- for (Map<String, Object> blockDeviceMapping : blockDeviceMappingList) {
- volumeIdObject = blockDeviceMapping.get("volume_id");
- snapshotIdObject = blockDeviceMapping.get("snapshot_id");
-
- if (volumeIdObject == null && snapshotIdObject == null) {
- logger.warn("Resource '" + resourceId
- + "' has block_device_mapping property with empty/missing volume_id and snapshot_id "
- + "properties. Entry number "
- + (index + 1) + ", this entry will be ignored in TOSCA translation.");
- index++;
- continue;
- }
- if (volumeIdObject == null) {
- Optional<AttachedResourceId> attachedSnapshotId = HeatToToscaUtil
- .extractAttachedResourceId(heatFileName, heatOrchestrationTemplate, context,
- snapshotIdObject);
- if (attachedSnapshotId.isPresent()) {
- volumeResourceId = novaServerTranslatedId + "_" + attachedSnapshotId.get().getEntityId();
- String deviceName = (String) blockDeviceMapping.get("device_name");
- String relationshipId = novaServerTranslatedId + "_" + index;
-
- createVolumeAttachesToRelationship(serviceTemplate, deviceName, novaServerTranslatedId,
- volumeResourceId, relationshipId);
- createCinderVolumeNodeTemplate(serviceTemplate, translateTo.getResourceId(),
- volumeResourceId, heatFileName, blockDeviceMapping, heatOrchestrationTemplate,
- context);
- connectNovaServerToVolume(novaNodeTemplate, volumeResourceId, relationshipId,
- translateTo);
+ private void updateComputeConsolidationDataGroup(TranslateTo translateTo,
+ NodeTemplate novaNodeTemplate,
+ String groupId) {
+ TranslationContext translationContext = translateTo.getContext();
+ ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
+ ComputeTemplateConsolidationData computeTemplateConsolidationData = ConsolidationDataUtil
+ .getComputeTemplateConsolidationData(translationContext, serviceTemplate,
+ novaNodeTemplate.getType(), translateTo.getTranslatedId());
+ ConsolidationDataUtil.updateGroupIdInConsolidationData(computeTemplateConsolidationData, groupId);
+ }
+
+ private boolean isHintOfTypeNovaServerGroup(HeatOrchestrationTemplate heatOrchestrationTemplate,
+ Object resourceToTranslate) {
+ return heatOrchestrationTemplate.getResources().get(resourceToTranslate).getType()
+ .equals(HeatResourcesTypes.NOVA_SERVER_GROUP_RESOURCE_TYPE.getHeatResource());
+ }
+
+ private void addNovaServerToPolicyGroup(TranslateTo translateTo,
+ String resourceToTranslate,
+ NodeTemplate novaNodeTemplate) {
+ Resource serverGroup =
+ HeatToToscaUtil.getResource(translateTo.getHeatOrchestrationTemplate(), resourceToTranslate,
+ translateTo.getHeatFileName());
+ Optional<String> serverGroupTranslatedId = ResourceTranslationFactory.getInstance(serverGroup)
+ .translateResource(translateTo.getHeatFileName(), translateTo.getServiceTemplate(),
+ translateTo.getHeatOrchestrationTemplate(), serverGroup, resourceToTranslate,
+ translateTo.getContext());
+ if (serverGroupTranslatedId.isPresent()) {
+ translateTo.getServiceTemplate().getTopology_template().getGroups().get(serverGroupTranslatedId.get())
+ .getMembers().add(translateTo.getTranslatedId());
+ updateComputeConsolidationDataGroup(translateTo, novaNodeTemplate, serverGroupTranslatedId.get());
+ }
+ }
+
+ private boolean isSchedulerHintsPropExist(Map<String, Object> properties) {
+ return !MapUtils.isEmpty(properties)
+ && Objects.nonNull(properties.get(ResourceReferenceFunctions.SCHEDULER_HINTS.getFunction()));
+ }
+
+ private void manageNovaServerBlockDeviceMapping(TranslateTo translateTo,
+ NodeTemplate novaNodeTemplate) {
+ Resource resource = translateTo.getResource();
+ List<Map<String, Object>> blockDeviceMappingList = getBlockDeviceMappingList(resource);
+ if (CollectionUtils.isEmpty(blockDeviceMappingList)) {
+ return;
+ }
+ int index = 0;
+ for (Map<String, Object> blockDeviceMapping : blockDeviceMappingList) {
+ index = connectBlockDeviceToNovaServer(translateTo, novaNodeTemplate, index, blockDeviceMapping);
+ }
+ }
+
+ private int connectBlockDeviceToNovaServer(TranslateTo translateTo, NodeTemplate novaNodeTemplate, int index,
+ Map<String, Object> blockDeviceMapping) {
+ Object volumeIdObject = blockDeviceMapping.get(VOL_ID_PROPERTY_NAME);
+ Object snapshotIdObject = blockDeviceMapping.get(SNAPSHOT_ID_PROPERTY_NAME);
+
+ if (volumeIdObject == null && snapshotIdObject == null) {
+ logger.warn("Resource '{}' has block_device_mapping property with empty/missing volume_id and snapshot_id "
+ + "properties. Entry number {}, this entry will be ignored in TOSCA translation.",
+ translateTo.getResourceId(), (index + 1));
+ index++;
+ return index;
+ }
+ if (volumeIdObject == null) {
+ connectBlockDeviceUsingSnapshotId(translateTo, novaNodeTemplate, snapshotIdObject, index,
+ blockDeviceMapping);
+ } else {
+ connectBlockDeviceUsingVolumeId(translateTo, novaNodeTemplate, volumeIdObject);
}
- } else {
+ index++;
+ return index;
+ }
+
+ private void connectBlockDeviceUsingVolumeId(TranslateTo translateTo, NodeTemplate novaNodeTemplate,
+ Object volumeIdObject) {
Optional<AttachedResourceId> attachedVolumeId = HeatToToscaUtil
- .extractAttachedResourceId(heatFileName, heatOrchestrationTemplate, context,
- volumeIdObject);
+ .extractAttachedResourceId(translateTo.getHeatFileName(), translateTo.getHeatOrchestrationTemplate(),
+ translateTo.getContext(), volumeIdObject);
if (attachedVolumeId.isPresent() && attachedVolumeId.get().isGetResource()) {
- connectNovaServerToVolume(novaNodeTemplate,
- (String) attachedVolumeId.get().getTranslatedId(), null, translateTo);
+ connectNovaServerToVolume(novaNodeTemplate, (String) attachedVolumeId.get().getTranslatedId(), null,
+ translateTo);
}
- }
- index++;
}
- }
-
- private void connectNovaServerToVolume(NodeTemplate novaNodeTemplate, String volumeResourceId,
- String relationshipId, TranslateTo translateTo) {
- RequirementAssignment requirementAssignment = new RequirementAssignment();
- requirementAssignment.setCapability(ToscaCapabilityType.NATIVE_ATTACHMENT);
- requirementAssignment.setNode(volumeResourceId);
- if (relationshipId != null) {
- requirementAssignment.setRelationship(relationshipId);
- } else {
- requirementAssignment
- .setRelationship(ToscaRelationshipType.NATIVE_ATTACHES_TO);
+
+ private void connectBlockDeviceUsingSnapshotId(TranslateTo translateTo, NodeTemplate novaNodeTemplate,
+ Object snapshotIdObject, int index,
+ Map<String, Object> blockDeviceMapping) {
+ String novaServerTranslatedId = translateTo.getTranslatedId();
+ String volumeResourceId;
+ Optional<AttachedResourceId> attachedSnapshotId = HeatToToscaUtil
+ .extractAttachedResourceId(translateTo.getHeatFileName(), translateTo.getHeatOrchestrationTemplate(),
+ translateTo.getContext(), snapshotIdObject);
+ if (attachedSnapshotId.isPresent()) {
+ volumeResourceId = novaServerTranslatedId + "_" + attachedSnapshotId.get().getEntityId();
+ String deviceName = (String) blockDeviceMapping.get(BLOCK_DEVICE_MAPPING_DEVICE_NAME);
+ String relationshipId = novaServerTranslatedId + "_" + index;
+ createVolumeAttachesToRelationship(translateTo.getServiceTemplate(), deviceName, novaServerTranslatedId,
+ volumeResourceId, relationshipId);
+ createCinderVolumeNodeTemplate(translateTo, volumeResourceId, blockDeviceMapping);
+ connectNovaServerToVolume(novaNodeTemplate, volumeResourceId, relationshipId,
+ translateTo);
+ }
}
- DataModelUtil
- .addRequirementAssignment(novaNodeTemplate, ToscaConstants.LOCAL_STORAGE_REQUIREMENT_ID,
- requirementAssignment);
- //Add volume consolidation data
- ConsolidationDataUtil.updateComputeConsolidationDataVolumes(translateTo, novaNodeTemplate
- .getType(), translateTo.getTranslatedId(), ToscaConstants.LOCAL_STORAGE_REQUIREMENT_ID,
- requirementAssignment);
- }
-
- private void createCinderVolumeNodeTemplate(ServiceTemplate serviceTemplate, String resourceId,
- String volumeResourceId, String heatFileName,
- Map<String, Object> blockDeviceMapping,
- HeatOrchestrationTemplate heatOrchestrationTemplate,
- TranslationContext context) {
- NodeTemplate cinderVolumeNodeTemplate = new NodeTemplate();
- cinderVolumeNodeTemplate.setType(ToscaNodeType.CINDER_VOLUME);
- cinderVolumeNodeTemplate.setProperties(TranslatorHeatToToscaPropertyConverter
- .getToscaPropertiesSimpleConversion(serviceTemplate, resourceId, blockDeviceMapping, null,
- heatFileName, heatOrchestrationTemplate,
- HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource(),
- cinderVolumeNodeTemplate, context));
- DataModelUtil.addNodeTemplate(serviceTemplate, volumeResourceId, cinderVolumeNodeTemplate);
- }
-
- private void createVolumeAttachesToRelationship(ServiceTemplate serviceTemplate,
- String deviceName, String novaServerTranslatedId,
- String volumeId, String relationshipId) {
- RelationshipTemplate relationshipTemplate = new RelationshipTemplate();
- relationshipTemplate.setType(ToscaRelationshipType.CINDER_VOLUME_ATTACHES_TO);
- Map<String, Object> properties = new HashMap<>();
- properties.put("instance_uuid", novaServerTranslatedId);
- properties.put("volume_id", volumeId);
- if (deviceName != null) {
- properties.put("device", deviceName);
+
+ private void connectNovaServerToVolume(NodeTemplate novaNodeTemplate, String volumeResourceId,
+ String relationshipId, TranslateTo translateTo) {
+ RequirementAssignment requirementAssignment = new RequirementAssignment();
+ requirementAssignment.setCapability(ToscaCapabilityType.NATIVE_ATTACHMENT);
+ requirementAssignment.setNode(volumeResourceId);
+ if (relationshipId != null) {
+ requirementAssignment.setRelationship(relationshipId);
+ } else {
+ requirementAssignment
+ .setRelationship(ToscaRelationshipType.NATIVE_ATTACHES_TO);
+ }
+ DataModelUtil.addRequirementAssignment(novaNodeTemplate, ToscaConstants.LOCAL_STORAGE_REQUIREMENT_ID,
+ requirementAssignment);
+ //Add volume consolidation data
+ ConsolidationDataUtil.updateComputeConsolidationDataVolumes(translateTo, novaNodeTemplate.getType(),
+ translateTo.getTranslatedId(), ToscaConstants.LOCAL_STORAGE_REQUIREMENT_ID, requirementAssignment);
}
- relationshipTemplate.setProperties(properties);
- DataModelUtil.addRelationshipTemplate(serviceTemplate, relationshipId, relationshipTemplate);
- }
+ private void createCinderVolumeNodeTemplate(TranslateTo translateTo,
+ String volumeResourceId,
+ Map<String, Object> blockDeviceMapping) {
+ NodeTemplate cinderVolumeNodeTemplate = new NodeTemplate();
+ cinderVolumeNodeTemplate.setType(ToscaNodeType.CINDER_VOLUME);
+ cinderVolumeNodeTemplate.setProperties(TranslatorHeatToToscaPropertyConverter
+ .getToscaPropertiesSimpleConversion(translateTo.getServiceTemplate(), translateTo.getResourceId(),
+ blockDeviceMapping, null,
+ translateTo.getHeatFileName(), translateTo.getHeatOrchestrationTemplate(),
+ HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource(),
+ cinderVolumeNodeTemplate, translateTo.getContext()));
+ DataModelUtil.addNodeTemplate(translateTo.getServiceTemplate(), volumeResourceId, cinderVolumeNodeTemplate);
+ }
- private List<Map<String, Object>> getBlockDeviceMappingList(Resource resource) {
- if (Objects.isNull(resource.getProperties())) {
- return Collections.emptyList();
+ private void createVolumeAttachesToRelationship(ServiceTemplate serviceTemplate,
+ String deviceName, String novaServerTranslatedId,
+ String volumeId, String relationshipId) {
+ RelationshipTemplate relationshipTemplate = new RelationshipTemplate();
+ relationshipTemplate.setType(ToscaRelationshipType.CINDER_VOLUME_ATTACHES_TO);
+ Map<String, Object> properties = new HashMap<>();
+ properties.put(ToscaConstants.INSTANCE_UUID_PROPERTY_NAME, novaServerTranslatedId);
+ properties.put(ToscaConstants.VOL_ID_PROPERTY_NAME, volumeId);
+ if (deviceName != null) {
+ properties.put(VOL_ATTACH_DEVICE_PROPERTY_NAME, deviceName);
+ }
+ relationshipTemplate.setProperties(properties);
+ DataModelUtil.addRelationshipTemplate(serviceTemplate, relationshipId, relationshipTemplate);
}
- List<Map<String, Object>> blockDeviceMappingList =
- (List<Map<String, Object>>) resource.getProperties().get("block_device_mapping");
- List<Map<String, Object>> blockDeviceMappingV2List =
- (List<Map<String, Object>>) resource.getProperties().get("block_device_mapping_v2");
-
- if (blockDeviceMappingList != null && blockDeviceMappingV2List != null) {
- blockDeviceMappingList.addAll(blockDeviceMappingV2List);
- } else if (CollectionUtils.isEmpty(blockDeviceMappingList)
- && CollectionUtils.isEmpty(blockDeviceMappingV2List)) {
- return null;
-
- } else {
- blockDeviceMappingList =
- blockDeviceMappingList != null ? blockDeviceMappingList : blockDeviceMappingV2List;
+
+ private List<Map<String, Object>> getBlockDeviceMappingList(Resource resource) {
+ if (Objects.isNull(resource.getProperties())) {
+ return Collections.emptyList();
+ }
+ List<Map<String, Object>> blockDeviceMappingList =
+ (List<Map<String, Object>>) resource.getProperties().get(HeatConstants.BLOCK_DEVICE_MAPPING);
+ List<Map<String, Object>> blockDeviceMappingV2List =
+ (List<Map<String, Object>>) resource.getProperties().get(HeatConstants.BLOCK_DEVICE_MAPPING_V2);
+
+ if (blockDeviceMappingList != null && blockDeviceMappingV2List != null) {
+ blockDeviceMappingList.addAll(blockDeviceMappingV2List);
+ } else if (CollectionUtils.isEmpty(blockDeviceMappingList)
+ && CollectionUtils.isEmpty(blockDeviceMappingV2List)) {
+ return Collections.emptyList();
+
+ } else {
+ blockDeviceMappingList =
+ blockDeviceMappingList != null ? blockDeviceMappingList : blockDeviceMappingV2List;
+ }
+ return blockDeviceMappingList;
}
- return blockDeviceMappingList;
- }
- private void manageNovaServerNetwork(TranslateTo translateTo,
- NodeTemplate novaNodeTemplate) {
- Resource resource = translateTo.getResource();
- String translatedId = translateTo.getTranslatedId();
+ private void manageNovaServerNetwork(TranslateTo translateTo,
+ NodeTemplate novaNodeTemplate) {
+ Resource resource = translateTo.getResource();
+ String translatedId = translateTo.getTranslatedId();
- if (resource.getProperties() == null) {
- return;
- }
- Object networks = resource.getProperties().get("networks");
- if(Objects.isNull(networks)
- || !(networks instanceof List)){
- return;
- }
+ if (resource.getProperties() == null) {
+ return;
+ }
+ Object networks = resource.getProperties().get(PropertiesMapKeyTypes.NETWORKS.getKeyMap());
+ if (Objects.isNull(networks) || !(networks instanceof List)) {
+ return;
+ }
+
+ List<Map<String, Object>> heatNetworkList = (List<Map<String, Object>>) networks;
- List<Map<String, Object>> heatNetworkList =
- (List<Map<String, Object>>) networks;
+ for (Map<String, Object> heatNetwork : heatNetworkList) {
+ getOrTranslatePortTemplate(translateTo, heatNetwork.get(
+ Constants.PORT_PROPERTY_NAME), translatedId, novaNodeTemplate);
+ }
+ }
- for (Map<String, Object> heatNetwork : heatNetworkList) {
- getOrTranslatePortTemplate(translateTo, heatNetwork.get(
- Constants.PORT_PROPERTY_NAME), translatedId, novaNodeTemplate);
+ private void getOrTranslatePortTemplate(TranslateTo translateTo,
+ Object port,
+ String novaServerResourceId,
+ NodeTemplate novaNodeTemplate) {
+ String heatFileName = translateTo.getHeatFileName();
+ HeatOrchestrationTemplate heatOrchestrationTemplate = translateTo.getHeatOrchestrationTemplate();
+ TranslationContext context = translateTo.getContext();
+ Optional<AttachedResourceId> attachedPortId = HeatToToscaUtil
+ .extractAttachedResourceId(heatFileName, heatOrchestrationTemplate, context, port);
+ if (!attachedPortId.isPresent() || !attachedPortId.get().isGetResource()) {
+ return;
+ }
+ String resourceId = (String) attachedPortId.get().getEntityId();
+ Resource portResource = HeatToToscaUtil.getResource(heatOrchestrationTemplate, resourceId, heatFileName);
+ if (!isSupportedPortResource(portResource)) {
+ logger.warn("NovaServer connect to port resource with id : {} and type : {}. This resource type is not "
+ + "supported, therefore the connection to the port is ignored. Supported types are: {}, {}",
+ resourceId, portResource.getType(), HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource(),
+ HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource());
+ return;
+ } else if (HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE
+ .getHeatResource().equals(portResource.getType())) {
+ Map<String, Object> properties = portResource.getProperties();
+ if (!MapUtils.isEmpty(properties) && Objects.nonNull(properties.get(HeatConstants.PORT_TUPLE_REFS))) {
+ novaNodeTemplate.getProperties().put(ToscaConstants.CONTRAIL_SERVICE_INSTANCE_IND, true);
+ }
+ }
+ ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
+ Optional<String> translatedPortId = ResourceTranslationFactory.getInstance(portResource)
+ .translateResource(heatFileName, serviceTemplate, heatOrchestrationTemplate, portResource,
+ resourceId, context);
+ if (translatedPortId.isPresent()) {
+ NodeTemplate portNodeTemplate =
+ DataModelUtil.getNodeTemplate(serviceTemplate, translatedPortId.get());
+ DataModelUtil.addBindingReqFromPortToCompute(novaServerResourceId, portNodeTemplate);
+ // Add ports
+ ConsolidationDataUtil.updatePortInConsolidationData(translateTo, novaNodeTemplate.getType(), resourceId,
+ portResource.getType(), translatedPortId.get());
+ } else {
+ logger.warn("NovaServer connect to port resource with id : {} and type : {}. This resource type is not "
+ + "supported, therefore the connection to the port is ignored.", resourceId, portResource
+ .getType());
+ }
}
- }
-
- private void getOrTranslatePortTemplate(TranslateTo translateTo,
- Object port,
- String novaServerResourceId,
- NodeTemplate novaNodeTemplate) {
- String heatFileName = translateTo.getHeatFileName();
- HeatOrchestrationTemplate heatOrchestrationTemplate = translateTo
- .getHeatOrchestrationTemplate();
- ServiceTemplate serviceTemplate = translateTo.getServiceTemplate();
- TranslationContext context = translateTo.getContext();
-
- Optional<AttachedResourceId> attachedPortId = HeatToToscaUtil
- .extractAttachedResourceId(heatFileName, heatOrchestrationTemplate, context, port);
-
- if (!attachedPortId.isPresent()) {
- return;
+
+ private boolean isSupportedPortResource(Resource portResource) {
+ return Arrays.asList(HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource(),
+ HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource())
+ .contains(portResource.getType());
}
- if (attachedPortId.get().isGetResource()) {
- String resourceId = (String) attachedPortId.get().getEntityId();
- Resource portResource =
- HeatToToscaUtil.getResource(heatOrchestrationTemplate, resourceId, heatFileName);
- if (!Arrays.asList(HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource(),
- HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource())
- .contains(portResource.getType())) {
- logger.warn("NovaServer connect to port resource with id : " + resourceId + " and type : "
- + portResource.getType()
- + ". This resource type is not supported, therefore the connection to the port is "
- + "ignored. Supported types are: "
- + HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource() + ", "
- + HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE
- .getHeatResource());
- return;
- } else if (HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE
- .getHeatResource().equals(portResource.getType())) {
- Map<String, Object> properties = portResource.getProperties();
- if (!MapUtils.isEmpty(properties) && Objects.nonNull(properties.get("port_tuple_refs"))) {
- novaNodeTemplate.getProperties().put("contrail_service_instance_ind", true);
+
+ private String createLocalNodeType(ServiceTemplate serviceTemplate, Resource resource,
+ String resourceId, String translatedId) {
+ NameExtractor nodeTypeNameExtractor = TranslationContext.getNameExtractorImpl(resource.getType());
+ String nodeTypeName =
+ nodeTypeNameExtractor.extractNodeTypeName(resource, resourceId, translatedId);
+
+ if (!isNodeTypeCreated(serviceTemplate, nodeTypeName)) {
+ DataModelUtil.addNodeType(serviceTemplate, nodeTypeName, createNodeType());
}
- }
- Optional<String> translatedPortId = ResourceTranslationFactory.getInstance(portResource)
- .translateResource(heatFileName, serviceTemplate, heatOrchestrationTemplate, portResource,
- resourceId, context);
- if (translatedPortId.isPresent()) {
- NodeTemplate portNodeTemplate =
- DataModelUtil.getNodeTemplate(serviceTemplate, translatedPortId.get());
- DataModelUtil.addBindingReqFromPortToCompute(novaServerResourceId, portNodeTemplate);
-
- // Add ports
- ConsolidationDataUtil.updatePortInConsolidationData(translateTo, novaNodeTemplate.getType(), resourceId,
- portResource.getType(), translatedPortId.get());
- } else {
- logger.warn("NovaServer connect to port resource with id : " + resourceId + " and type : "
- + portResource.getType()
- + ". This resource type is not supported, therefore the connection to the port is "
- + "ignored.");
- }
+ return nodeTypeName;
}
- }
+ /**
+ * Get property Regex matcher list.
+ *
+ * @return Regex expression per nova resource property, while nova node type name is consider when
+ * setting the name value.
+ */
+ public List<PropertyRegexMatcher> getPropertyRegexMatchersForNovaNodeType() {
+ List<PropertyRegexMatcher> propertyRegexMatchers = new ArrayList<>(3);
+ propertyRegexMatchers
+ .add(new PropertyRegexMatcher(Constants.NAME_PROPERTY_NAME,
+ Arrays.asList(".+_name$", ".+_names$", ".+_name_[0-9]+"), "_name"));
+ propertyRegexMatchers
+ .add(new PropertyRegexMatcher("image", Collections.singletonList(".+_image_name$"),
+ "_image_name"));
+ propertyRegexMatchers
+ .add(new PropertyRegexMatcher("flavor", Collections.singletonList(".+_flavor_name$"),
+ "_flavor_name"));
+ return propertyRegexMatchers;
+ }
- private String createLocalNodeType(ServiceTemplate serviceTemplate, Resource resource, String
- resourceId,
- String translatedId, TranslationContext context) {
- NameExtractor nodeTypeNameExtractor = context.getNameExtractorImpl(resource.getType());
- String nodeTypeName =
- nodeTypeNameExtractor.extractNodeTypeName(resource, resourceId, translatedId);
+ private boolean isNodeTypeCreated(ServiceTemplate serviceTemplate, String nodeTypeName) {
+ return !MapUtils.isEmpty(serviceTemplate.getNode_types())
+ && Objects.nonNull(serviceTemplate.getNode_types().get(nodeTypeName));
+ }
- if (!isNodeTypeCreated(serviceTemplate, nodeTypeName)) {
- DataModelUtil.addNodeType(serviceTemplate, nodeTypeName, createNodeType());
+ private NodeType createNodeType() {
+ NodeType nodeType = new NodeType();
+ nodeType.setDerived_from(ToscaNodeType.NOVA_SERVER);
+ return nodeType;
}
- return nodeTypeName;
- }
-
- /**
- * Get property Regx matcher list.
- *
- * @return Regex exprission per nova resource property, while nova node type name is consider when
- * setting the name value.
- */
- public List<PropertyRegexMatcher> getPropertyRegexMatchersForNovaNodeType() {
- List<PropertyRegexMatcher> propertyRegexMatchers = new ArrayList<>();
- propertyRegexMatchers
- .add(new PropertyRegexMatcher(Constants.NAME_PROPERTY_NAME,
- Arrays.asList(".+_name$", ".+_names$", ".+_name_[0-9]+"), "_name"));
- propertyRegexMatchers
- .add(new PropertyRegexMatcher("image", Collections.singletonList(".+_image_name$"),
- "_image_name"));
- propertyRegexMatchers
- .add(new PropertyRegexMatcher("flavor", Collections.singletonList(".+_flavor_name$"),
- "_flavor_name"));
- return propertyRegexMatchers;
- }
-
- private boolean isNodeTypeCreated(ServiceTemplate serviceTemplate, String nodeTypeName) {
- return !MapUtils.isEmpty(serviceTemplate.getNode_types())
- && Objects.nonNull(serviceTemplate.getNode_types().get(nodeTypeName));
- }
-
- private NodeType createNodeType() {
- NodeType nodeType = new NodeType();
- nodeType.setDerived_from(ToscaNodeType.NOVA_SERVER);
- return nodeType;
- }
}