diff options
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/ResourceTranslationCinderVolumeAttachmentImpl.java')
1 files changed, 168 insertions, 164 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/ResourceTranslationCinderVolumeAttachmentImpl.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationCinderVolumeAttachmentImpl.java index 73debf02a8..a2ed9e92f7 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationCinderVolumeAttachmentImpl.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationCinderVolumeAttachmentImpl.java @@ -1,26 +1,32 @@ -/*- - * ============LICENSE_START======================================================= - * SDC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ +/* + * Copyright © 2016-2018 European Support Limited + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * ============LICENSE_END========================================================= */ package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation; +import static org.openecomp.sdc.translator.services.heattotosca.HeatToToscaLogConstants.LOG_INVALID_INSTANCE_UUID; +import static org.openecomp.sdc.translator.services.heattotosca.HeatToToscaLogConstants.LOG_UNSUPPORTED_VOLUME_ATTACHMENT_MSG; +import static org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil.getResource; + +import java.util.List; +import java.util.Optional; + import org.apache.commons.lang3.StringUtils; +import org.onap.sdc.tosca.datatypes.model.NodeTemplate; +import org.onap.sdc.tosca.datatypes.model.RelationshipTemplate; +import org.onap.sdc.tosca.datatypes.model.RequirementAssignment; import org.openecomp.sdc.common.errors.CoreException; import org.openecomp.sdc.heat.datatypes.manifest.FileData; import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes; @@ -28,11 +34,9 @@ import org.openecomp.sdc.heat.datatypes.model.Resource; 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.ToscaRelationshipType; import org.openecomp.sdc.tosca.datatypes.ToscaTopologyTemplateElements; -import org.onap.sdc.tosca.datatypes.model.NodeTemplate; -import org.onap.sdc.tosca.datatypes.model.RelationshipTemplate; -import org.onap.sdc.tosca.datatypes.model.RequirementAssignment; import org.openecomp.sdc.tosca.services.DataModelUtil; import org.openecomp.sdc.tosca.services.ToscaConstants; import org.openecomp.sdc.translator.datatypes.heattotosca.AttachedResourceId; @@ -45,170 +49,170 @@ import org.openecomp.sdc.translator.services.heattotosca.errors.MissingMandatory import org.openecomp.sdc.translator.services.heattotosca.helper.VolumeTranslationHelper; import org.openecomp.sdc.translator.services.heattotosca.mapping.TranslatorHeatToToscaPropertyConverter; -import java.util.List; -import java.util.Optional; +public class ResourceTranslationCinderVolumeAttachmentImpl extends ResourceTranslationBase { -import static org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil.getResource; + protected static Logger logger = LoggerFactory.getLogger(ResourceTranslationCinderVolumeAttachmentImpl.class); + + @Override + protected void translate(TranslateTo translateTo) { + RelationshipTemplate relationTemplate = new RelationshipTemplate(); + relationTemplate.setType(ToscaRelationshipType.CINDER_VOLUME_ATTACHES_TO); + String heatFileName = translateTo.getHeatFileName(); + relationTemplate.setProperties(TranslatorHeatToToscaPropertyConverter + .getToscaPropertiesSimpleConversion(translateTo.getServiceTemplate(), + translateTo.getResourceId(), translateTo.getResource().getProperties(), + relationTemplate.getProperties(), heatFileName, + translateTo.getHeatOrchestrationTemplate(), translateTo.getResource().getType(), + relationTemplate, translateTo.getContext())); + + String volumeIdPropertyName = HeatConstants.VOL_ID_PROPERTY_NAME; + AttachedResourceId attachedVolumeId = getAttachedResourceId(translateTo, volumeIdPropertyName); + String instanceUuid = HeatConstants.INSTANCE_UUID_PROPERTY_NAME; + AttachedResourceId attachedNovaServerId = getAttachedResourceId(translateTo, instanceUuid); + if (attachedNovaServerId.isGetResource()) { + handleNovaGetResource(translateTo, relationTemplate, attachedVolumeId, + (String) attachedNovaServerId.getEntityId()); + } else { + logger.warn(LOG_INVALID_INSTANCE_UUID, translateTo.getResourceId(), translateTo.getResource().getType()); + } + } -public class ResourceTranslationCinderVolumeAttachmentImpl extends ResourceTranslationBase { + @Override + protected Optional<ToscaTopologyTemplateElements> getTranslatedToscaTopologyElement(TranslateTo translateTo) { + if (isEssentialRequirementsValid(translateTo)) { + return Optional.of(ToscaTopologyTemplateElements.RELATIONSHIP_TEMPLATE); + } else { + return Optional.empty(); + } + } - private static final String UNSUPPORTED_VOLUME_ATTACHMENT_MSG = - "Volume attachment with id '{}' is pointing to unsupported resource type({}) through the property " + - "'volume_id'. The connection to the volume is ignored. Supported types are: {}"; - - protected static Logger logger = LoggerFactory.getLogger(ResourceTranslationCinderVolumeAttachmentImpl.class); - - @Override - protected void translate(TranslateTo translateTo) { - RelationshipTemplate relationTemplate = new RelationshipTemplate(); - relationTemplate.setType(ToscaRelationshipType.CINDER_VOLUME_ATTACHES_TO); - String relationshipTemplateId = translateTo.getTranslatedId(); - String heatFileName = translateTo.getHeatFileName(); - relationTemplate.setProperties(TranslatorHeatToToscaPropertyConverter - .getToscaPropertiesSimpleConversion(translateTo.getServiceTemplate(),translateTo - .getResourceId(),translateTo.getResource().getProperties(), - relationTemplate.getProperties(), heatFileName, - translateTo.getHeatOrchestrationTemplate(), translateTo.getResource().getType(), - relationTemplate, translateTo.getContext())); - - String volumeIdPropertyName = "volume_id"; - AttachedResourceId attachedVolumeId = getAttachedResourceId(translateTo, volumeIdPropertyName); - String instanceUuid = HeatConstants.INSTANCE_UUID_PROPERTY_NAME; - AttachedResourceId attachedNovaServerId = getAttachedResourceId(translateTo, instanceUuid); - - if (attachedNovaServerId.isGetResource()) { - handleNovaGetResource(translateTo, relationTemplate, relationshipTemplateId, heatFileName, - attachedVolumeId, (String) attachedNovaServerId.getEntityId()); - } else { - logger.warn("Heat resource: '" + translateTo.getResourceId() + "' with type: '" - + translateTo.getResource().getType() - + "' include 'instance_uuid' property without 'get_resource' function, therefore this " - + "resource will be ignored in TOSCA translation."); + private AttachedResourceId getAttachedResourceId(TranslateTo translateTo, String propertyName) { + Optional<AttachedResourceId> attachedResourceId = HeatToToscaUtil.extractAttachedResourceId(translateTo, + propertyName); + if (!attachedResourceId.isPresent()) { + throw new CoreException(new MissingMandatoryPropertyErrorBuilder(propertyName).build()); + } + return attachedResourceId.get(); + } + + private void handleNovaGetResource(TranslateTo translateTo, RelationshipTemplate relationTemplate, + AttachedResourceId volResourceId, String novaResourceId) { + RequirementAssignment requirement = new RequirementAssignment(); + String toscaCapabilityAttachment = ToscaCapabilityType.NATIVE_ATTACHMENT; + requirement.setCapability(toscaCapabilityAttachment); + if (volResourceId.isGetResource()) { + createVolumeNovaRelationshipForVolGetResource(translateTo, relationTemplate, volResourceId, requirement); + } else if (volResourceId.isGetParam() && volResourceId.getEntityId() instanceof String) { + createVolumeNovaRelationshipForVolGetParam(translateTo, relationTemplate, volResourceId, requirement); + } + translateNovaServerResource(translateTo, novaResourceId, requirement); } - } - - @Override - protected Optional<ToscaTopologyTemplateElements> getTranslatedToscaTopologyElement( - TranslateTo translateTo) { - if (isEssentialRequirementsValid(translateTo)) { - return Optional.of(ToscaTopologyTemplateElements.RELATIONSHIP_TEMPLATE); - } else { - return Optional.empty(); + + private void translateNovaServerResource(TranslateTo translateTo, String novaResourceId, + RequirementAssignment requirement) { + Resource novaServerResource = + getResource(translateTo.getHeatOrchestrationTemplate(), novaResourceId, translateTo.getHeatFileName()); + if (!StringUtils.equals(HeatResourcesTypes.NOVA_SERVER_RESOURCE_TYPE.getHeatResource(), + novaServerResource.getType())) { + logger.warn(LOG_UNSUPPORTED_VOLUME_ATTACHMENT_MSG, translateTo.getResourceId(), + novaServerResource.getType(), HeatResourcesTypes.NOVA_SERVER_RESOURCE_TYPE.getHeatResource()); + return; + } + Optional<String> translatedNovaServerId = ResourceTranslationFactory.getInstance(novaServerResource) + .translateResource(translateTo.getHeatFileName(), translateTo.getServiceTemplate(), + translateTo.getHeatOrchestrationTemplate(), novaServerResource, novaResourceId, + translateTo.getContext()); + + if (translatedNovaServerId.isPresent() && StringUtils.isNotEmpty(requirement.getNode())) { + NodeTemplate novaServerNodeTemplate = DataModelUtil + .getNodeTemplate(translateTo.getServiceTemplate(), translatedNovaServerId.get()); + DataModelUtil.addRequirementAssignment(novaServerNodeTemplate, ToscaConstants + .LOCAL_STORAGE_REQUIREMENT_ID, requirement); + //Add volume information to consolidation data + ConsolidationDataUtil.updateComputeConsolidationDataVolumes(translateTo, + novaServerNodeTemplate.getType(), translatedNovaServerId.get(), ToscaConstants + .LOCAL_STORAGE_REQUIREMENT_ID, requirement); + } } - } - private AttachedResourceId getAttachedResourceId(TranslateTo translateTo, String propertyName) { - Optional<AttachedResourceId> attachedResourceId = - HeatToToscaUtil.extractAttachedResourceId(translateTo, propertyName); - if (!attachedResourceId.isPresent()) { - throw new CoreException(new MissingMandatoryPropertyErrorBuilder(propertyName).build()); + private void createVolumeNovaRelationshipForVolGetParam(TranslateTo translateTo, + RelationshipTemplate relationTemplate, + AttachedResourceId volResourceId, + RequirementAssignment requirement) { + String volumeResourceIdParamName = (String) volResourceId.getEntityId(); + if (translateTo.getContext().getHeatSharedResourcesByParam().containsKey(volumeResourceIdParamName) + && !isHeatFileNested(translateTo, translateTo.getHeatFileName())) { + handleSharedVolume(translateTo, relationTemplate, requirement, volumeResourceIdParamName); + } else { + handleUnsharedVolume(translateTo, relationTemplate, requirement, volumeResourceIdParamName); + } } - return attachedResourceId.get(); - } - - private void handleNovaGetResource(TranslateTo translateTo, RelationshipTemplate relationTemplate, - String relationshipTemplateId, String heatFileName, - AttachedResourceId volResourceId, String novaResourceId) { - RequirementAssignment requirement = new RequirementAssignment(); - String toscaCapabilityAttachment = "tosca.capabilities.Attachment"; - requirement.setCapability(toscaCapabilityAttachment); - if (volResourceId.isGetResource()) { - Resource volServerResource = getResource(translateTo.getHeatOrchestrationTemplate(), - (String) volResourceId.getTranslatedId(), heatFileName); - if (!StringUtils.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource(), - volServerResource.getType())) { - logger.warn(UNSUPPORTED_VOLUME_ATTACHMENT_MSG, translateTo.getResourceId(), volServerResource.getType(), - HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource()); - return; - } - requirement.setNode((String) volResourceId.getTranslatedId()); - requirement.setRelationship(relationshipTemplateId); - DataModelUtil - .addRelationshipTemplate(translateTo.getServiceTemplate(), relationshipTemplateId, - relationTemplate); - } else if (volResourceId.isGetParam() && volResourceId.getEntityId() instanceof String) { - String volumeResourceIdParamName = (String) volResourceId.getEntityId(); - if (translateTo.getContext().getHeatSharedResourcesByParam() - .containsKey(volumeResourceIdParamName) && !isHeatFileNested(translateTo, heatFileName)) { - Resource volServerResource = - translateTo.getContext().getHeatSharedResourcesByParam().get(volumeResourceIdParamName) - .getHeatResource(); + + private void handleSharedVolume(TranslateTo translateTo, RelationshipTemplate relationTemplate, + RequirementAssignment requirement, String volumeResourceIdParamName) { + Resource volServerResource = translateTo.getContext().getHeatSharedResourcesByParam() + .get(volumeResourceIdParamName).getHeatResource(); if (!StringUtils.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource(), - volServerResource.getType())) { - logger.warn(UNSUPPORTED_VOLUME_ATTACHMENT_MSG, translateTo.getResourceId(), volServerResource.getType(), - HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource()); - return; + volServerResource.getType())) { + logger.warn(LOG_UNSUPPORTED_VOLUME_ATTACHMENT_MSG, translateTo.getResourceId(), + volServerResource.getType(), + HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource()); + return; } - requirement.setNode( - translateTo.getContext().getHeatSharedResourcesByParam().get(volumeResourceIdParamName) - .getTranslatedId()); - requirement.setRelationship(relationshipTemplateId); - DataModelUtil - .addRelationshipTemplate(translateTo.getServiceTemplate(), relationshipTemplateId, + requirement.setNode(translateTo.getContext().getHeatSharedResourcesByParam().get(volumeResourceIdParamName) + .getTranslatedId()); + requirement.setRelationship(translateTo.getTranslatedId()); + DataModelUtil.addRelationshipTemplate(translateTo.getServiceTemplate(), translateTo.getTranslatedId(), + relationTemplate); + } + + private void createVolumeNovaRelationshipForVolGetResource(TranslateTo translateTo, + RelationshipTemplate relationTemplate, + AttachedResourceId volResourceId, + RequirementAssignment requirement) { + Resource volServerResource = getResource(translateTo.getHeatOrchestrationTemplate(), + (String) volResourceId.getTranslatedId(), translateTo.getHeatFileName()); + if (!StringUtils.equals(HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource(), + volServerResource.getType())) { + logger.warn(LOG_UNSUPPORTED_VOLUME_ATTACHMENT_MSG, translateTo.getResourceId(), volServerResource.getType(), + HeatResourcesTypes.CINDER_VOLUME_RESOURCE_TYPE.getHeatResource()); + return; + } + requirement.setNode((String) volResourceId.getTranslatedId()); + requirement.setRelationship(translateTo.getTranslatedId()); + DataModelUtil.addRelationshipTemplate(translateTo.getServiceTemplate(), translateTo.getTranslatedId(), relationTemplate); - } else { - handleUnsharedVolume(translateTo, relationTemplate, relationshipTemplateId, heatFileName, - requirement, volumeResourceIdParamName); - } } - Resource novaServerResource = - getResource(translateTo.getHeatOrchestrationTemplate(), novaResourceId, heatFileName); - if (!StringUtils.equals(HeatResourcesTypes.NOVA_SERVER_RESOURCE_TYPE.getHeatResource(), - novaServerResource.getType())) { - logger.warn(UNSUPPORTED_VOLUME_ATTACHMENT_MSG,translateTo.getResourceId(), - novaServerResource.getType(), HeatResourcesTypes.NOVA_SERVER_RESOURCE_TYPE.getHeatResource()); - return; + + private void handleUnsharedVolume(TranslateTo translateTo, RelationshipTemplate relationTemplate, + RequirementAssignment requirement, String volumeResourceId) { + List<FileData> allFilesData = translateTo.getContext().getManifest().getContent().getData(); + Optional<FileData> fileData = HeatToToscaUtil.getFileData(translateTo.getHeatFileName(), allFilesData); + if (fileData.isPresent()) { + Optional<ResourceFileDataAndIDs> fileDataContainingResource = + new VolumeTranslationHelper(logger) + .getFileDataContainingVolume(fileData.get().getData(), volumeResourceId, translateTo, + FileData.Type.HEAT_VOL); + fileDataContainingResource.ifPresent(resourceFileDataAndIDs -> addRelationshipToServiceTemplate( + translateTo, relationTemplate, requirement, resourceFileDataAndIDs)); + } } - Optional<String> translatedNovaServerId = - ResourceTranslationFactory.getInstance(novaServerResource) - .translateResource(heatFileName, translateTo.getServiceTemplate(), - translateTo.getHeatOrchestrationTemplate(), novaServerResource, novaResourceId, - translateTo.getContext()); - - if (translatedNovaServerId.isPresent() && StringUtils.isNotEmpty(requirement.getNode())) { - NodeTemplate novaServerNodeTemplate = DataModelUtil - .getNodeTemplate(translateTo.getServiceTemplate(), translatedNovaServerId.get()); - DataModelUtil.addRequirementAssignment(novaServerNodeTemplate, ToscaConstants - .LOCAL_STORAGE_REQUIREMENT_ID, requirement); - //Add volume information to consolidation data - ConsolidationDataUtil.updateComputeConsolidationDataVolumes(translateTo, - novaServerNodeTemplate.getType(), translatedNovaServerId.get(), ToscaConstants - .LOCAL_STORAGE_REQUIREMENT_ID, requirement); + + private boolean isHeatFileNested(TranslateTo translateTo, String heatFileName) { + return translateTo.getContext().getNestedHeatsFiles().contains(heatFileName); } - } - - private void handleUnsharedVolume(TranslateTo translateTo, RelationshipTemplate relationTemplate, - String relationshipTemplateId, String heatFileName, - RequirementAssignment requirement, String volumeResourceId) { - List<FileData> allFilesData = translateTo.getContext().getManifest().getContent().getData(); - Optional<FileData> fileData = HeatToToscaUtil.getFileData(heatFileName, allFilesData); - if (fileData.isPresent()) { - Optional<ResourceFileDataAndIDs> fileDataContainingResource = - new VolumeTranslationHelper(logger) - .getFileDataContainingVolume(fileData.get().getData(), volumeResourceId, translateTo, - FileData.Type.HEAT_VOL); - fileDataContainingResource.ifPresent( - resourceFileDataAndIDs -> addRelationshipToServiceTemplate(translateTo, relationTemplate, - relationshipTemplateId, requirement, resourceFileDataAndIDs)); + + private void addRelationshipToServiceTemplate(TranslateTo translateTo, + RelationshipTemplate relationTemplate, + RequirementAssignment requirement, + ResourceFileDataAndIDs resourceFileDataAndIDs) { + String translatedId = resourceFileDataAndIDs.getTranslatedResourceId(); + String toscaVolIdPropName = + HeatToToscaUtil.getToscaPropertyName(translateTo, HeatConstants.VOL_ID_PROPERTY_NAME); + relationTemplate.getProperties().put(toscaVolIdPropName, translatedId); + requirement.setNode(translatedId); + requirement.setRelationship(translateTo.getTranslatedId()); + DataModelUtil.addRelationshipTemplate(translateTo.getServiceTemplate(), translateTo.getTranslatedId(), + relationTemplate); } - } - - private boolean isHeatFileNested(TranslateTo translateTo, String heatFileName) { - return translateTo.getContext().getNestedHeatsFiles().contains(heatFileName); - } - - private void addRelationshipToServiceTemplate(TranslateTo translateTo, - RelationshipTemplate relationTemplate, - String relationshipTemplateId, - RequirementAssignment requirement, - ResourceFileDataAndIDs resourceFileDataAndIDs) { - String translatedId = resourceFileDataAndIDs.getTranslatedResourceId(); - String toscaVolIdPropName = - HeatToToscaUtil.getToscaPropertyName(translateTo, HeatConstants.VOL_ID_PROPERTY_NAME); - relationTemplate.getProperties().put(toscaVolIdPropName, translatedId); - requirement.setNode(translatedId); - requirement.setRelationship(relationshipTemplateId); - DataModelUtil.addRelationshipTemplate(translateTo.getServiceTemplate(), relationshipTemplateId, - relationTemplate); - } } |