summaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-core/src/main/java/org/openecomp/sdc/generator/core/services/ManualVspToscaGenerationService.java
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-core/src/main/java/org/openecomp/sdc/generator/core/services/ManualVspToscaGenerationService.java')
-rw-r--r--openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-core/src/main/java/org/openecomp/sdc/generator/core/services/ManualVspToscaGenerationService.java433
1 files changed, 433 insertions, 0 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-core/src/main/java/org/openecomp/sdc/generator/core/services/ManualVspToscaGenerationService.java b/openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-core/src/main/java/org/openecomp/sdc/generator/core/services/ManualVspToscaGenerationService.java
new file mode 100644
index 0000000000..6d488c0221
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-tosca-generator-lib/openecomp-sdc-tosca-generator-core/src/main/java/org/openecomp/sdc/generator/core/services/ManualVspToscaGenerationService.java
@@ -0,0 +1,433 @@
+package org.openecomp.sdc.generator.core.services;
+
+import static org.openecomp.sdc.generator.util.GeneratorConstants.ALLOWED_FLAVORS_PROPERTY;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.DISK_SIZE;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.DISK_SIZE_PROP_DESC_PREFIX;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.IMAGES_PROPERTY;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.MEM_SIZE;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.MEM_SIZE_PROP_DESC_PREFIX;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.NUM_CPUS;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.NUM_CPUS_PROP_DESC_PREFIX;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.PORT_NODE_TEMPLATE_ID_SUFFIX;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.RELEASE_VENDOR;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.TOSCA_SERVICE_TEMPLATE_FILE_NAME_SUFFIX;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.VFC_NODE_TEMPLATE_ID_SUFFIX;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.VNF_CONFIG_NODE_TEMPLATE_ID_SUFFIX;
+import static org.openecomp.sdc.generator.util.GeneratorConstants.VNF_NODE_TEMPLATE_ID_SUFFIX;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.openecomp.sdc.generator.core.utils.GeneratorUtils;
+import org.openecomp.sdc.generator.datatypes.tosca.MultiFlavorVfcImage;
+import org.openecomp.sdc.generator.datatypes.tosca.VspModelInfo;
+import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.datatypes.model.Import;
+import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
+import org.openecomp.sdc.tosca.datatypes.model.NodeType;
+import org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition;
+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.ToscaAnalyzerService;
+import org.openecomp.sdc.tosca.services.ToscaConstants;
+import org.openecomp.sdc.tosca.services.ToscaUtil;
+import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
+import org.openecomp.sdc.translator.services.heattotosca.Constants;
+import org.openecomp.sdc.translator.services.heattotosca.globaltypes.GlobalTypesGenerator;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * The type Manual vsp tosca generator.
+ */
+public class ManualVspToscaGenerationService {
+
+ //Map of the abstract node template id and substitution node type
+ private Map<String, String> abstractSubstitutionIdTypes = new HashMap<>();
+ //Map of service template name and service template for the generated service templates
+ private Map<String, ServiceTemplate> generatedServiceTemplates = new HashMap<>();
+
+
+ /**
+ * Create manual vsp tosca service model tosca service model.
+ *
+ * @param vspModelInfo the vsp model info
+ * @return the tosca service model
+ */
+ public ToscaServiceModel createManualVspToscaServiceModel(VspModelInfo vspModelInfo) {
+ ToscaServiceModel toscaServiceModel = new ToscaServiceModel();
+ ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
+ Map<String, ServiceTemplate> serviceTemplates = new HashMap<>(GlobalTypesGenerator
+ .getGlobalTypesServiceTemplate());
+ toscaServiceModel.setServiceTemplates(serviceTemplates);
+ toscaServiceModel.setEntryDefinitionServiceTemplate(Constants.MAIN_TEMPLATE_NAME
+ + TOSCA_SERVICE_TEMPLATE_FILE_NAME_SUFFIX);
+ createToscaFromVspData(vspModelInfo, toscaServiceModel);
+ for (Map.Entry<String, ServiceTemplate> serviceTemplateEntry :
+ generatedServiceTemplates.entrySet()) {
+ ToscaUtil.addServiceTemplateToMapWithKeyFileName(serviceTemplates, serviceTemplateEntry
+ .getValue());
+ }
+ return toscaServiceModel;
+ }
+
+ private void createToscaFromVspData(VspModelInfo vspModelInfo,
+ ToscaServiceModel toscaServiceModel) {
+ List<ServiceTemplate> serviceTemplates = new ArrayList<>();
+ //Only one component supported
+ Optional<String> componentName = getComponentNameFromVspModel(vspModelInfo);
+ if (componentName.isPresent()) {
+ //Create main service template
+ ServiceTemplate mainServiceTemplate = createMainServiceTemplate(vspModelInfo);
+ generatedServiceTemplates.put(Constants.MAIN_TEMPLATE_NAME, mainServiceTemplate);
+ //Create substitution service template
+ for (Map.Entry<String, String> entry : abstractSubstitutionIdTypes.entrySet()) {
+ ServiceTemplate substitutionServiceTemplate =
+ createSubstitutionServiceTemplate(componentName.get(), entry.getValue(), vspModelInfo,
+ toscaServiceModel);
+ generatedServiceTemplates.put(componentName.get(), substitutionServiceTemplate);
+ }
+ }
+
+ }
+
+ private Optional<String> getComponentNameFromVspModel(VspModelInfo vspModelInfo) {
+ String componentName = null;
+ if (MapUtils.isNotEmpty(vspModelInfo.getComponents())) {
+ //supported for single component only
+ componentName = vspModelInfo.getComponents().entrySet().iterator().next().getValue();
+ }
+ return Optional.ofNullable(componentName);
+ }
+
+ private ServiceTemplate createMainServiceTemplate(VspModelInfo vspModelInfo) {
+ ServiceTemplate mainServiceTemplate = createInitMainServiceTemplate(vspModelInfo
+ .getReleaseVendor());
+ Map<String, String> components = vspModelInfo.getComponents();
+ if (MapUtils.isNotEmpty(components)) {
+ //Currently since only one component is supported we can fetch the component in this manner.
+ // May be need to revisited for supporting multiple components
+ String componentId = components.entrySet().iterator().next().getKey();
+ createVnfConfigurationNodeTemplate(mainServiceTemplate, vspModelInfo);
+ createComponentNodeTemplate(mainServiceTemplate, vspModelInfo, componentId);
+ createVnfNodeTemplate(mainServiceTemplate, vspModelInfo);
+ }
+ return mainServiceTemplate;
+ }
+
+ private void createVnfConfigurationNodeTemplate(ServiceTemplate mainServiceTemplate,
+ VspModelInfo vspModelInfo) {
+ Optional<String> componentName = getComponentNameFromVspModel(vspModelInfo);
+ if (componentName.isPresent()) {
+ NodeTemplate vnfConfigurationNodeTemplate = new NodeTemplate();
+ vnfConfigurationNodeTemplate.setType(ToscaNodeType.VNF_CONFIG_NODE_TYPE);
+ if (Objects.nonNull(vspModelInfo.getAllowedFlavors())) {
+ Map<String, Object> properties = new LinkedHashMap<>();
+ properties.put(ALLOWED_FLAVORS_PROPERTY, vspModelInfo.getAllowedFlavors());
+ vnfConfigurationNodeTemplate.setProperties(properties);
+ }
+ String nodeTemplateId = componentName.get() + VNF_CONFIG_NODE_TEMPLATE_ID_SUFFIX;
+ DataModelUtil.addNodeTemplate(mainServiceTemplate, nodeTemplateId,
+ vnfConfigurationNodeTemplate);
+ }
+ }
+
+ private void createComponentNodeTemplate(ServiceTemplate mainServiceTemplate,
+ VspModelInfo vspModelInfo,
+ String componentId) {
+ Optional<String> componentName = getComponentNameFromVspModel(vspModelInfo);
+ if (componentName.isPresent()) {
+ NodeTemplate vfcNodeTemplate = new NodeTemplate();
+ vfcNodeTemplate.setType(ToscaNodeType.MULTIFLAVOR_VFC_NODE_TYPE);
+ Map<String, Object> properties = new LinkedHashMap<>();
+ if (MapUtils.isNotEmpty(vspModelInfo.getMultiFlavorVfcImages())) {
+ List<MultiFlavorVfcImage> componentImages =
+ vspModelInfo.getMultiFlavorVfcImages().get(componentId);
+ Map<String, MultiFlavorVfcImage> vfcImages = new HashMap<>();
+ for (MultiFlavorVfcImage image : componentImages) {
+ vfcImages.put(image.getSoftware_version(), image);
+ }
+ properties.put(IMAGES_PROPERTY, vfcImages);
+ vfcNodeTemplate.setProperties(properties);
+ }
+ String nodeTemplateId = componentName.get() + VFC_NODE_TEMPLATE_ID_SUFFIX;
+ DataModelUtil.addNodeTemplate(mainServiceTemplate, nodeTemplateId,
+ vfcNodeTemplate);
+ }
+ }
+
+ private void createVnfNodeTemplate(ServiceTemplate mainServiceTemplate,
+ VspModelInfo vspModelInfo) {
+ Optional<String> componentName = getComponentNameFromVspModel(vspModelInfo);
+ if (componentName.isPresent()) {
+ NodeTemplate vnfNodeTemplate = new NodeTemplate();
+ String vnfNodeTemplateType =
+ ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE + "." + componentName.get();
+ vnfNodeTemplate.setType(vnfNodeTemplateType);
+ List<String> directiveList = new ArrayList<>();
+ directiveList.add(ToscaConstants.NODE_TEMPLATE_DIRECTIVE_SUBSTITUTABLE);
+ vnfNodeTemplate.setDirectives(directiveList);
+ vnfNodeTemplate.setProperties(new LinkedHashMap<>());
+ DataModelUtil
+ .addSubstitutionFilteringProperty(getSubstitutionServiceTemplateFileName(componentName
+ .get()), vnfNodeTemplate, 1);
+ //Enable below if we need "abstract_" as prefix like we have in Unified model
+ //String nodeTemplateId =
+ // Constants.ABSTRACT_NODE_TEMPLATE_ID_PREFIX + componentName + "VNF_NODE_TEMPLATE_ID_SUFFIX";
+ String nodeTemplateId = componentName.get() + VNF_NODE_TEMPLATE_ID_SUFFIX;
+ DataModelUtil.addNodeTemplate(mainServiceTemplate, nodeTemplateId,
+ vnfNodeTemplate);
+ abstractSubstitutionIdTypes.put(componentName.get(), vnfNodeTemplateType);
+ }
+ }
+
+ private String getSubstitutionServiceTemplateFileName(String componentName) {
+ return componentName + TOSCA_SERVICE_TEMPLATE_FILE_NAME_SUFFIX;
+ }
+
+ private String getNodeTemplateId(String componentName, String idPrefix, String idSuffix) {
+ StringBuilder builder = new StringBuilder();
+ //builder.append(idPrefix);
+ builder.append(componentName);
+ builder.append(idSuffix);
+ return builder.toString();
+ }
+
+ private ServiceTemplate createInitMainServiceTemplate(String releaseVendor) {
+ ServiceTemplate mainServiceTemplate = new ServiceTemplate();
+ Map<String, String> templateMetadata = new HashMap<>();
+ templateMetadata.put(ToscaConstants.ST_METADATA_TEMPLATE_NAME, Constants.MAIN_TEMPLATE_NAME);
+ if (Objects.nonNull(releaseVendor)) {
+ templateMetadata.put(RELEASE_VENDOR, releaseVendor);
+ }
+ mainServiceTemplate.setTosca_definitions_version(ToscaConstants.TOSCA_DEFINITIONS_VERSION);
+ mainServiceTemplate.setMetadata(templateMetadata);
+ mainServiceTemplate.setTopology_template(new TopologyTemplate());
+ mainServiceTemplate.setImports(getImports());
+ return mainServiceTemplate;
+ }
+
+ private List<Map<String, Import>> getImports() {
+ Map<String, Import> globalSubstitutionTypeImportMap = new HashMap<>();
+ Import globalSubstitutionTypeImport = new Import();
+ globalSubstitutionTypeImport.setFile(ToscaUtil.getServiceTemplateFileName(Constants
+ .GLOBAL_SUBSTITUTION_TYPES_TEMPLATE_NAME));
+ globalSubstitutionTypeImportMap.put(Constants.GLOBAL_SUBSTITUTION_TYPES_TEMPLATE_NAME,
+ globalSubstitutionTypeImport);
+ Map<String, Import> globalImports = new HashMap<>();
+ List<Map<String, Import>> manualVspGlobalTypesImportList = GlobalTypesGenerator
+ .getManualVspGlobalTypesImportList();
+ manualVspGlobalTypesImportList.add(globalSubstitutionTypeImportMap);
+ return manualVspGlobalTypesImportList;
+ }
+
+ private ServiceTemplate createSubstitutionServiceTemplate(String serviceTemplateName,
+ String substitutionNodeTypeId,
+ VspModelInfo vspModelInfo,
+ ToscaServiceModel toscaServiceModel) {
+ ServiceTemplate substitutionServiceTemplate =
+ createInitSubstitutionServiceTemplate(serviceTemplateName);
+ createSubstitutionServiceTemplateComponents(substitutionServiceTemplate, vspModelInfo,
+ toscaServiceModel);
+ createSubstitutionServiceTemplateNics(substitutionServiceTemplate, vspModelInfo,
+ toscaServiceModel);
+ handleSubstitutionMapping(substitutionServiceTemplate, toscaServiceModel,
+ substitutionNodeTypeId, serviceTemplateName);
+ return substitutionServiceTemplate;
+ }
+
+ private void createSubstitutionServiceTemplateComponents(ServiceTemplate
+ substitutionServiceTemplate,
+ VspModelInfo vspModelInfo,
+ ToscaServiceModel toscaServiceModel) {
+ Map<String, String> components = vspModelInfo.getComponents();
+ if (MapUtils.isNotEmpty(components)) {
+ for (String componentId : components.keySet()) {
+ String componentName = components.get(componentId);
+ String localNodeTypeId =
+ createComponentDefinitionNodeTemplate(substitutionServiceTemplate, componentName);
+ createLocalNodeType(substitutionServiceTemplate, localNodeTypeId);
+ }
+ }
+ }
+
+ private void createSubstitutionServiceTemplateNics(ServiceTemplate substitutionServiceTemplate,
+ VspModelInfo vspModelInfo,
+ ToscaServiceModel toscaServiceModel) {
+ Map<String, List<Nic>> nics = vspModelInfo.getNics();
+ if (MapUtils.isNotEmpty(nics)) {
+ for (Map.Entry<String, List<Nic>> entry : nics.entrySet()) {
+ String componentId = entry.getKey();
+ String componentNodeTemplateId = getSubstitutionComponentNodeTemplateId(
+ vspModelInfo.getComponents().get(componentId));
+ List<Nic> nicList = entry.getValue();
+ if (CollectionUtils.isNotEmpty(nicList)) {
+ for (Nic nic : nicList) {
+ NodeTemplate nicNodeTemplate = new NodeTemplate();
+ nicNodeTemplate.setType(ToscaNodeType.NETWORK_PORT);
+ DataModelUtil.addBindingReqFromPortToCompute(componentNodeTemplateId, nicNodeTemplate);
+ DataModelUtil.addNodeTemplate(substitutionServiceTemplate,
+ getNicNodeTemplateId(nic.getName()), nicNodeTemplate);
+ }
+ }
+ }
+ }
+ }
+
+ private String getSubstitutionComponentNodeTemplateId(String componentName) {
+ //TODO: Confirm if anything else is needed here
+ return componentName;
+ }
+
+ private String getNicNodeTemplateId(String nicName) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(nicName);
+ builder.append(PORT_NODE_TEMPLATE_ID_SUFFIX);
+ return builder.toString();
+ }
+
+ private String createComponentDefinitionNodeTemplate(ServiceTemplate substitutionServiceTemplate,
+ String componentName) {
+ NodeTemplate nodeTemplate = new NodeTemplate();
+ String localNodeTypeId = getLocalNodeTypeId(componentName);
+ nodeTemplate.setType(localNodeTypeId);
+ DataModelUtil.addNodeTemplate(substitutionServiceTemplate, componentName, nodeTemplate);
+ return localNodeTypeId;
+ }
+
+ private void createLocalNodeType(ServiceTemplate substitutionServiceTemplate,
+ String localNodeTypeId) {
+ NodeType localNodeType = new NodeType();
+ localNodeType.setDerived_from(ToscaNodeType.COMPUTE);
+ DataModelUtil.addNodeType(substitutionServiceTemplate, localNodeTypeId, localNodeType );
+ }
+
+ private String getLocalNodeTypeId(String componentName) {
+ return ToscaNodeType.VFC_NODE_TYPE_PREFIX + componentName;
+ }
+
+ private ServiceTemplate createInitSubstitutionServiceTemplate(String serviceTemplateName) {
+ ServiceTemplate substitutionServiceTemplate = new ServiceTemplate();
+ Map<String, String> templateMetadata = new HashMap<>();
+ substitutionServiceTemplate.setTosca_definitions_version(ToscaConstants
+ .TOSCA_DEFINITIONS_VERSION);
+ templateMetadata.put(ToscaConstants.ST_METADATA_TEMPLATE_NAME, serviceTemplateName);
+ substitutionServiceTemplate.setMetadata(templateMetadata);
+ substitutionServiceTemplate.setTopology_template(new TopologyTemplate());
+ substitutionServiceTemplate.setImports(getImports());
+ return substitutionServiceTemplate;
+ }
+
+ private void handleSubstitutionMapping(ServiceTemplate substitutionServiceTemplate,
+ ToscaServiceModel toscaServiceModel,
+ String substitutionNodeTypeId,
+ String componentName) {
+ ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
+ ServiceTemplate globalSubstitutionServiceTemplate = fetchGlobalSubstitutionServiceTemplate();
+ NodeType substitutionNodeType =
+ createGlobalSubstitutionNodeType(substitutionServiceTemplate, componentName);
+ DataModelUtil.addNodeType(globalSubstitutionServiceTemplate, substitutionNodeTypeId,
+ substitutionNodeType);
+
+ Map<String, Map<String, List<String>>> substitutionMapping =
+ GeneratorUtils.getSubstitutionNodeTypeExposedConnectionPoints(substitutionNodeType,
+ substitutionServiceTemplate, toscaServiceModel);
+ if (Objects.nonNull(substitutionMapping)) {
+ //add substitution mapping after capability and requirement expose calculation
+ substitutionServiceTemplate.getTopology_template().setSubstitution_mappings(
+ DataModelUtil.createSubstitutionTemplateSubMapping(substitutionNodeTypeId,
+ substitutionNodeType, substitutionMapping));
+ }
+ }
+
+ //*************** CREATE GLOBAL SUBSTITUTION SERVICE TEMPLATE **********************
+
+ private ServiceTemplate createGlobalSubstitutionServiceTemplate(ServiceTemplate
+ substitutionServiceTemplate,
+ String componentName) {
+ ServiceTemplate globalSubstitutionServiceTemplate = fetchGlobalSubstitutionServiceTemplate();
+ NodeType substitutionNodeType =
+ createGlobalSubstitutionNodeType(substitutionServiceTemplate, componentName);
+ String substitutionNodeTypeId = getSubstitutionNodeTypeId(componentName);
+ DataModelUtil.addNodeType(globalSubstitutionServiceTemplate, substitutionNodeTypeId,
+ substitutionNodeType);
+ return globalSubstitutionServiceTemplate;
+ }
+
+ private ServiceTemplate createInitGlobalSubstitutionServiceTemplate() {
+ ServiceTemplate globalSubstitutionServiceTemplate = new ServiceTemplate();
+ Map<String, String> templateMetadata = new HashMap<>();
+ globalSubstitutionServiceTemplate.setTosca_definitions_version(ToscaConstants
+ .TOSCA_DEFINITIONS_VERSION);
+ templateMetadata.put(ToscaConstants.ST_METADATA_TEMPLATE_NAME,
+ Constants.GLOBAL_SUBSTITUTION_TYPES_TEMPLATE_NAME);
+ globalSubstitutionServiceTemplate.setMetadata(templateMetadata);
+ globalSubstitutionServiceTemplate.setImports(getImports());
+ return globalSubstitutionServiceTemplate;
+ }
+
+ private NodeType createGlobalSubstitutionNodeType(ServiceTemplate substitutionServiceTemplate,
+ String componentName) {
+ NodeType substitutionNodeType = new ToscaAnalyzerServiceImpl()
+ .createInitSubstitutionNodeType(substitutionServiceTemplate,
+ ToscaNodeType.VFC_ABSTRACT_SUBSTITUTE);
+ substitutionNodeType.setProperties(
+ getManualVspSubstitutionNodeTypeProperties(substitutionNodeType, componentName));
+ return substitutionNodeType;
+ }
+
+ private Map<String, PropertyDefinition> getManualVspSubstitutionNodeTypeProperties(
+ NodeType substitutionNodeType, String componentName) {
+ //Create num_cpus property
+ PropertyDefinition numCpus = new PropertyDefinition();
+ numCpus.setType(PropertyType.INTEGER.getDisplayName());
+ numCpus.setDescription(NUM_CPUS_PROP_DESC_PREFIX + componentName);
+ numCpus.setRequired(true);
+ //Create disk_size property
+ PropertyDefinition diskSize = new PropertyDefinition();
+ diskSize.setType(PropertyType.SCALAR_UNIT_SIZE.getDisplayName());
+ diskSize.setDescription(DISK_SIZE_PROP_DESC_PREFIX + componentName);
+ diskSize.setRequired(true);
+ //Create mem_size property
+ PropertyDefinition memSize = new PropertyDefinition();
+ memSize.setType(PropertyType.SCALAR_UNIT_SIZE.getDisplayName());
+ memSize.setDescription(MEM_SIZE_PROP_DESC_PREFIX + componentName);
+ memSize.setRequired(true);
+
+ Map<String, PropertyDefinition> manualVspProperties = new LinkedHashMap<>();
+ manualVspProperties.put(NUM_CPUS, numCpus);
+ manualVspProperties.put(DISK_SIZE, diskSize);
+ manualVspProperties.put(MEM_SIZE, memSize);
+
+ return manualVspProperties;
+ }
+
+ private String getSubstitutionNodeTypeId(String componentName) {
+ return ToscaNodeType.MULTIDEPLOYMENTFLAVOR_NODE_TYPE + "." + componentName;
+ }
+
+ /**
+ * Fetch global substitution service template service template.
+ *
+ * @return the global substitution service template
+ */
+ private ServiceTemplate fetchGlobalSubstitutionServiceTemplate() {
+ ServiceTemplate globalSubstitutionServiceTemplate =
+ generatedServiceTemplates.get(Constants.GLOBAL_SUBSTITUTION_TYPES_TEMPLATE_NAME);
+ if (Objects.isNull(globalSubstitutionServiceTemplate)) {
+ globalSubstitutionServiceTemplate = createInitGlobalSubstitutionServiceTemplate();
+ generatedServiceTemplates.put(Constants.GLOBAL_SUBSTITUTION_TYPES_TEMPLATE_NAME,
+ globalSubstitutionServiceTemplate);
+ }
+ return globalSubstitutionServiceTemplate;
+ }
+} \ No newline at end of file