aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.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/TranslationService.java')
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java185
1 files changed, 120 insertions, 65 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java
index 1d90d8b2af..ab41d43cc9 100644
--- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java
@@ -20,11 +20,13 @@
package org.openecomp.sdc.translator.services.heattotosca;
+import org.apache.commons.collections4.MapUtils;
import org.openecomp.core.translator.datatypes.TranslatorOutput;
import org.openecomp.core.utilities.file.FileContentHandler;
import org.openecomp.core.utilities.file.FileUtils;
import org.openecomp.core.utilities.yaml.YamlUtil;
import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
import org.openecomp.sdc.heat.datatypes.manifest.FileData;
import org.openecomp.sdc.heat.datatypes.model.Environment;
import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
@@ -33,38 +35,50 @@ import org.openecomp.sdc.heat.datatypes.model.Resource;
import org.openecomp.sdc.heat.datatypes.structure.ValidationStructureList;
import org.openecomp.sdc.heat.services.tree.HeatTreeManager;
import org.openecomp.sdc.heat.services.tree.HeatTreeManagerUtil;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
+import org.openecomp.sdc.logging.types.LoggerConstants;
+import org.openecomp.sdc.logging.types.LoggerErrorCode;
+import org.openecomp.sdc.logging.types.LoggerErrorDescription;
+import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
import org.openecomp.sdc.tosca.datatypes.ToscaGroupType;
import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
import org.openecomp.sdc.tosca.datatypes.model.GroupDefinition;
-import org.openecomp.sdc.tosca.datatypes.model.Metadata;
+import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
import org.openecomp.sdc.tosca.datatypes.model.ParameterDefinition;
+import org.openecomp.sdc.tosca.datatypes.model.PropertyType;
import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
import org.openecomp.sdc.tosca.datatypes.model.TopologyTemplate;
+import org.openecomp.sdc.tosca.services.DataModelUtil;
import org.openecomp.sdc.tosca.services.ToscaConstants;
import org.openecomp.sdc.tosca.services.ToscaFileOutputService;
import org.openecomp.sdc.tosca.services.ToscaUtil;
import org.openecomp.sdc.tosca.services.impl.ToscaFileOutputServiceCsarImpl;
import org.openecomp.sdc.translator.datatypes.heattotosca.AttachedResourceId;
+import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
import org.openecomp.sdc.translator.datatypes.heattotosca.to.FileDataCollection;
+import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.EntityConsolidationData;
+import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.GetAttrFuncData;
import org.openecomp.sdc.translator.services.heattotosca.errors.ResourceNotFoundInHeatFileErrorBuilder;
import org.openecomp.sdc.translator.services.heattotosca.globaltypes.GlobalTypesGenerator;
import org.openecomp.sdc.translator.services.heattotosca.mapping.TranslatorHeatToToscaParameterConverter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
-
public class TranslationService {
- protected static Logger logger = LoggerFactory.getLogger(TranslationService.class);
+ protected static Logger logger = (Logger) LoggerFactory.getLogger(TranslationService.class);
+ protected static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
/**
* Gets types to process by translator.
@@ -85,6 +99,8 @@ public class TranslationService {
* @return the translator output
*/
public TranslatorOutput translateHeatFiles(TranslationContext translationContext) {
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
ServiceTemplate mainServiceTemplate = createMainServiceTemplate(translationContext);
List<FileData> fileDataList = translationContext.getManifest().getContent().getData();
FileDataCollection fileDataCollection = HeatToToscaUtil.getFileCollectionsByFilter(fileDataList,
@@ -102,59 +118,31 @@ public class TranslationService {
}
ToscaServiceModel toscaServiceModel =
- createToscaServiceModel(mainServiceTemplate, translationContext);
+ HeatToToscaUtil.createToscaServiceModel(mainServiceTemplate, translationContext);
TranslatorOutput translatorOutput = new TranslatorOutput();
translatorOutput.setToscaServiceModel(toscaServiceModel);
- return translatorOutput;
- }
- private ToscaServiceModel createToscaServiceModel(ServiceTemplate entryDefinitionServiceTemplate,
- TranslationContext translationContext) {
- return new ToscaServiceModel(getCsarArtifactFiles(translationContext),
- getServiceTemplates(translationContext),
- ToscaUtil.getServiceTemplateFileName(entryDefinitionServiceTemplate));
+ mdcDataDebugMessage.debugExitMessage(null, null);
+ return translatorOutput;
}
- private Map<String, ServiceTemplate> getServiceTemplates(TranslationContext translationContext) {
- List<ServiceTemplate> serviceTemplates = new ArrayList<>();
- serviceTemplates.addAll(GlobalTypesGenerator.getGlobalTypesServiceTemplate().values());
- serviceTemplates.addAll(translationContext.getTranslatedServiceTemplates().values());
- Map<String, ServiceTemplate> serviceTemplatesMap = new HashMap<>();
+ private ServiceTemplate createMainServiceTemplate(TranslationContext translationContext) {
- for (ServiceTemplate template : serviceTemplates) {
- serviceTemplatesMap.put(ToscaUtil.getServiceTemplateFileName(template), template);
- }
- return serviceTemplatesMap;
- }
- private FileContentHandler getCsarArtifactFiles(TranslationContext translationContext) {
- FileContentHandler artifactFiles = new FileContentHandler();
- artifactFiles.setFiles(translationContext.getFiles());
- artifactFiles.setFiles(translationContext.getExternalArtifacts());
-
- HeatTreeManager heatTreeManager =
- HeatTreeManagerUtil.initHeatTreeManager(translationContext.getFiles());
- heatTreeManager.createTree();
- ValidationStructureList validationStructureList =
- new ValidationStructureList(heatTreeManager.getTree());
- byte[] validationStructureFile =
- FileUtils.convertToBytes(validationStructureList, FileUtils.FileExtension.JSON);
- artifactFiles.addFile("HEAT.meta", validationStructureFile);
-
- return artifactFiles;
- }
+ mdcDataDebugMessage.debugEntryMessage(null, null);
- private ServiceTemplate createMainServiceTemplate(TranslationContext translationContext) {
ServiceTemplate mainServiceTemplate = new ServiceTemplate();
- translationContext.getTranslatedServiceTemplates().put("Main", mainServiceTemplate);
- Metadata templateMetadata = new Metadata();
- templateMetadata.setTemplate_name("Main");
+ translationContext.getTranslatedServiceTemplates()
+ .put(Constants.MAIN_TEMPLATE_NAME, mainServiceTemplate);
+ Map<String, String> templateMetadata = new HashMap<>();
+ templateMetadata.put(ToscaConstants.ST_METADATA_TEMPLATE_NAME, Constants.MAIN_TEMPLATE_NAME);
mainServiceTemplate.setTosca_definitions_version(ToscaConstants.TOSCA_DEFINITIONS_VERSION);
mainServiceTemplate.setMetadata(templateMetadata);
mainServiceTemplate.setTopology_template(new TopologyTemplate());
mainServiceTemplate.setImports(GlobalTypesGenerator.getGlobalTypesImportList());
+ mdcDataDebugMessage.debugExitMessage(null, null);
return mainServiceTemplate;
}
@@ -167,6 +155,10 @@ public class TranslationService {
*/
public void translateHeatFile(ServiceTemplate serviceTemplate, FileData heatFileData,
TranslationContext context) {
+
+
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
String heatFileName = heatFileData.getFile();
HeatOrchestrationTemplate heatOrchestrationTemplate = new YamlUtil()
.yamlToObject(context.getFileContent(heatFileName), HeatOrchestrationTemplate.class);
@@ -177,23 +169,47 @@ public class TranslationService {
translateOutputParameters(serviceTemplate, heatOrchestrationTemplate, heatFileData,
heatFileName, context);
createHeatStackGroup(serviceTemplate, heatFileData, heatOrchestrationTemplate, context);
+ handleHeatPseudoParam(heatFileName, serviceTemplate, context);
if (Objects.nonNull(heatFileData.getData())) {
heatFileData.getData().stream().filter(data -> data.getType() == FileData.Type.HEAT_VOL)
.forEach(data -> translateHeatFile(serviceTemplate, data, context));
}
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
+ }
+
+ private void handleHeatPseudoParam(String heatFileName, ServiceTemplate serviceTemplate,
+ TranslationContext context) {
+ Map<String, String> translatedHeatPseudoParam =
+ context.getUsedHeatPseudoParams().get(heatFileName);
+ if (Objects.nonNull(translatedHeatPseudoParam)) {
+ for (String heatPseudoParam : translatedHeatPseudoParam.keySet()) {
+ if (!serviceTemplate.getTopology_template().getInputs().containsKey(heatPseudoParam)) {
+ ParameterDefinition parameterDefinition = new ParameterDefinition();
+ parameterDefinition.setType(PropertyType.STRING.getDisplayName());
+ parameterDefinition.setRequired(false);
+ String parameterDefinitionId = translatedHeatPseudoParam.get(heatPseudoParam);
+ DataModelUtil.addInputParameterToTopologyTemplate(serviceTemplate, parameterDefinitionId,
+ parameterDefinition);
+ }
+ }
+ }
}
private void createHeatStackGroup(ServiceTemplate serviceTemplate, FileData heatFileData,
HeatOrchestrationTemplate heatOrchestrationTemplate,
TranslationContext context) {
+
+
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
ToscaFileOutputService toscaFileOutputService = new ToscaFileOutputServiceCsarImpl();
- String fileName = heatFileData.getFile();
- final String fileNameWoExtension =
- FileUtils.getFileWithoutExtention(fileName);//.heatFileData.getFile().split("\\.")[0];
+ final String fileName = heatFileData.getFile();
+ final String heatStackGroupId = FileUtils.getFileWithoutExtention(fileName) + "_group";
GroupDefinition groupDefinition = new GroupDefinition();
- groupDefinition.setType(ToscaGroupType.HEAT_STACK.getDisplayName());
+ groupDefinition.setType(ToscaGroupType.HEAT_STACK);
groupDefinition.setProperties(new HashMap<>());
groupDefinition.getProperties()
.put("heat_file", "../" + toscaFileOutputService.getArtifactsFolderName() + "/" + fileName);
@@ -207,11 +223,10 @@ public class TranslationService {
return; //not creating a group when no resources are present in the heat input
}
groupDefinition.getMembers().addAll(heatStackGroupMembers.get(fileName));
- if (serviceTemplate.getTopology_template().getGroups() == null) {
- Map<String, GroupDefinition> groups = new HashMap<>();
- serviceTemplate.getTopology_template().setGroups(groups);
- }
- serviceTemplate.getTopology_template().getGroups().put(fileNameWoExtension, groupDefinition);
+ DataModelUtil
+ .addGroupDefinitionToTopologyTemplate(serviceTemplate, heatStackGroupId, groupDefinition);
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
}
private void translateInputParameters(ServiceTemplate serviceTemplate,
@@ -219,13 +234,16 @@ public class TranslationService {
FileData heatFileData, TranslationContext context,
String heatFileName) {
+
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
if (heatOrchestrationTemplate.getParameters() == null) {
return;
}
Map<String, ParameterDefinition> parameterDefinitionMap =
TranslatorHeatToToscaParameterConverter
- .parameterConverter(heatOrchestrationTemplate.getParameters(),
+ .parameterConverter(serviceTemplate,heatOrchestrationTemplate.getParameters(),
heatOrchestrationTemplate, heatFileName, context);
Environment heatEnvFile = getHeatEnvFile(heatFileData, context);
Map<String, Object> parameters = heatEnvFile.getParameters();
@@ -236,7 +254,7 @@ public class TranslationService {
parameterValue = parameters.get(paramName);
if (parameterValue != null) {
entry.getValue().set_default(TranslatorHeatToToscaParameterConverter
- .getToscaParameterDefaultValue(parameterValue, entry.getValue().getType(),
+ .getToscaParameterDefaultValue(null, null, parameterValue, entry.getValue().getType(),
heatFileName, heatOrchestrationTemplate, context));
}
}
@@ -248,18 +266,24 @@ public class TranslationService {
} else {
inputs.putAll(parameterDefinitionMap);
}
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
}
private void translateOutputParameters(ServiceTemplate serviceTemplate,
HeatOrchestrationTemplate heatOrchestrationTemplate,
FileData heatFileData, String heatFileName,
TranslationContext context) {
+
+
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
if (heatOrchestrationTemplate.getOutputs() == null) {
return;
}
Map<String, ParameterDefinition> parameterDefinitionMap =
TranslatorHeatToToscaParameterConverter
- .parameterOutputConverter(heatOrchestrationTemplate.getOutputs(),
+ .parameterOutputConverter(serviceTemplate,heatOrchestrationTemplate.getOutputs(),
heatOrchestrationTemplate, heatFileName, context);
if (serviceTemplate.getTopology_template().getOutputs() != null) {
serviceTemplate.getTopology_template().getOutputs().putAll(parameterDefinitionMap);
@@ -271,30 +295,40 @@ public class TranslationService {
updateSharedResources(serviceTemplate, heatFileName, heatOrchestrationTemplate,
heatOrchestrationTemplate.getOutputs(), context);
}
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
}
private void updateSharedResources(ServiceTemplate serviceTemplate, String heatFileName,
HeatOrchestrationTemplate heatOrchestrationTemplate,
Map<String, Output> outputs, TranslationContext context) {
- for (Map.Entry<String, Output> paramName : outputs.entrySet()) {
+
+
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
+ for (Map.Entry<String, Output> parameter : outputs.entrySet()) {
Optional<AttachedResourceId> attachedSharedResourceId = HeatToToscaUtil
.extractAttachedResourceId(heatFileName, heatOrchestrationTemplate, context,
- paramName.getValue().getValue());
+ parameter.getValue().getValue());
if (attachedSharedResourceId.isPresent() && attachedSharedResourceId.get().isGetResource()
&& attachedSharedResourceId.get().getTranslatedId() != null) {
String sharedTranslatedResourceId =
attachedSharedResourceId.get().getTranslatedId().toString();
- updateSharedResource(serviceTemplate, context, paramName, sharedTranslatedResourceId,
+ updateSharedResource(serviceTemplate, context, parameter, sharedTranslatedResourceId,
heatOrchestrationTemplate.getResources()
.get(attachedSharedResourceId.get().getEntityId()));
} else {
- String contrailSharedResourceId = HeatToToscaUtil
- .extractContrailGetResourceAttachedHeatResourceId(paramName.getValue().getValue());
- if (contrailSharedResourceId != null
- && context.getTranslatedIds().get(heatFileName).get(contrailSharedResourceId) != null) {
- updateSharedResource(serviceTemplate, context, paramName,
- context.getTranslatedIds().get(heatFileName).get(contrailSharedResourceId),
- heatOrchestrationTemplate.getResources().get(contrailSharedResourceId));
+ Optional<String> contrailSharedResourceId = HeatToToscaUtil
+ .extractContrailGetResourceAttachedHeatResourceId(parameter.getValue().getValue());
+ if (contrailSharedResourceId.isPresent()
+ && context.getTranslatedIds().get(heatFileName).get(contrailSharedResourceId.get())
+ != null) {
+ String sharedTranslatedResourceId = context.getTranslatedIds().get(heatFileName).get
+ (contrailSharedResourceId.get());
+ ConsolidationDataUtil.removeSharedResource(serviceTemplate, heatOrchestrationTemplate,
+ context, parameter.getKey(),contrailSharedResourceId.get(), sharedTranslatedResourceId);
+ updateSharedResource(serviceTemplate, context, parameter,sharedTranslatedResourceId,
+ heatOrchestrationTemplate.getResources().get(contrailSharedResourceId.get()));
}
}
}
@@ -302,21 +336,40 @@ public class TranslationService {
&& serviceTemplate.getTopology_template().getOutputs().size() == 0) {
serviceTemplate.getTopology_template().setOutputs(null);
}
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
}
private void updateSharedResource(ServiceTemplate serviceTemplate, TranslationContext context,
Map.Entry<String, Output> paramName,
String sharedTranslatedResourceId, Resource resource) {
+
+
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
context.addHeatSharedResourcesByParam(paramName.getKey(), sharedTranslatedResourceId, resource);
serviceTemplate.getTopology_template().getOutputs().remove(paramName.getKey());
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
}
private void translateResources(String heatFileName, ServiceTemplate serviceTemplate,
HeatOrchestrationTemplate heatOrchestrationTemplate,
TranslationContext context) {
+
+
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
+ if(MapUtils.isEmpty(heatOrchestrationTemplate.getResources())){
+ return;
+ }
+
for (String resourceId : heatOrchestrationTemplate.getResources().keySet()) {
Resource resource = heatOrchestrationTemplate.getResources().get(resourceId);
if (resource == null) {
+ MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+ LoggerTragetServiceName.TRANSLATE_RESOURCE, ErrorLevel.ERROR.name(),
+ LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.TRANSLATE_HEAT);
throw new CoreException(
new ResourceNotFoundInHeatFileErrorBuilder(resourceId, heatFileName).build());
}
@@ -324,6 +377,8 @@ public class TranslationService {
.translateResource(heatFileName, serviceTemplate, heatOrchestrationTemplate, resource,
resourceId, context);
}
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
}
private Environment getHeatEnvFile(FileData heatFileData, TranslationContext context) {