aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/lib')
-rw-r--r--openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/datatypes/manifest/FileData.java122
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java75
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/TranslationService.java41
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/impl/heattotosca/nested/undervolume/TranslateHeatNestedBelongsToVolumeTest.java33
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/expectedoutputfiles/MainServiceTemplate.yaml2252
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/expectedoutputfiles/ocgmgr_nested_volumeServiceTemplate.yaml88
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/MANIFEST.json139
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/base_ocg.env9
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/base_ocg.yaml89
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01.env27
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01.yaml215
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01_volume.env5
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01_volume.yaml35
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02.env27
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02.yaml217
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02_volume.env5
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02_volume.yaml35
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03.env27
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03.yaml216
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03_volume.env5
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03_volume.yaml35
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04.env27
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04.yaml215
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04_volume.env5
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04_volume.yaml35
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_nested_0.txt19
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr.env26
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr.yaml209
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_0.txt411
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_1.txt19
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_volume.yaml45
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_volume.env8
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_volume.yaml44
33 files changed, 4652 insertions, 108 deletions
diff --git a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/datatypes/manifest/FileData.java b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/datatypes/manifest/FileData.java
index 81bf2fa5a9..2bc549c058 100644
--- a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/datatypes/manifest/FileData.java
+++ b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/datatypes/manifest/FileData.java
@@ -22,75 +22,80 @@ package org.openecomp.sdc.heat.datatypes.manifest;
import org.apache.commons.collections4.CollectionUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import java.util.function.Predicate;
public class FileData {
- protected static final Set<Type> heatFileTypes =
- new HashSet<>(Arrays.asList(Type.HEAT, Type.HEAT_NET, Type.HEAT_VOL));
- private Boolean isBase;
- private String file;
- private Type type;
- private List<FileData> data;
+ protected static final Set<Type> heatFileTypes =
+ new HashSet<>(Arrays.asList(Type.HEAT, Type.HEAT_NET, Type.HEAT_VOL));
+ private Boolean isBase;
+ private String parentFile;
+ private String file;
+ private Type type;
+ private List<FileData> data;
- public static Predicate<FileData> buildFileDataPredicateByType(Type... types) {
- return fileData -> Arrays.asList(types).contains(fileData.getType());
- }
+ public static Predicate<FileData> buildFileDataPredicateByType(Type... types) {
+ return fileData -> Arrays.asList(types).contains(fileData.getType());
+ }
- public static boolean isHeatFile(Type type) {
+ public static boolean isHeatFile(Type type) {
return heatFileTypes.contains(type);
}
- public Boolean getBase() {
- return isBase;
- }
+ public Boolean getBase() {
+ return isBase;
+ }
- public void setBase(Boolean base) {
- isBase = base;
- }
+ public void setBase(Boolean base) {
+ isBase = base;
+ }
- public String getFile() {
- return file;
- }
+ public String getFile() {
+ return file;
+ }
+
+ public void setFile(String file) {
+ this.file = file;
+ }
+
+ public String getParentFile() {
+ return parentFile;
+ }
- public void setFile(String file) {
- this.file = file;
+ public void setParentFile(String parentFile) {
+ this.parentFile = parentFile;
}
- public Type getType() {
+ public Type getType() {
return type;
}
- public void setType(Type type) {
+ public void setType(Type type) {
this.type = type;
}
- public List<FileData> getData() {
- return data;
- }
+ public List<FileData> getData() {
+ return data;
+ }
- public void setData(List<FileData> data) {
- this.data = data;
- }
+ public void setData(List<FileData> data) {
+ this.data = data;
+ }
- /**
- * Add file data.
- *
- * @param data the data
- */
- public void addFileData(FileData data) {
- if (CollectionUtils.isEmpty(this.data)) {
- this.data = new ArrayList<>();
+ /**
+ * Add file data.
+ *
+ * @param data the data
+ */
+ public void addFileData(FileData data) {
+ if (CollectionUtils.isEmpty(this.data)) {
+ this.data = new ArrayList<>();
+ }
+ this.data.add(data);
}
- this.data.add(data);
- }
- public enum Type {
+ public enum Type {
HEAT("HEAT"),
HEAT_ENV("HEAT_ENV"),
@@ -108,20 +113,23 @@ public class FileData {
VF_LICENSE("VF_LICENSE"),
OTHER("OTHER");
- private String displayName;
+ private String displayName;
- Type(String displayName) {
- this.displayName = displayName;
- }
+ Type(String displayName) {
+ this.displayName = displayName;
+ }
- public String getDisplayName() {
- return displayName;
- }
+ public String getDisplayName() {
+ return displayName;
+ }
- public static boolean isArtifact(Type fileType)
- {
- return !Arrays.asList(HEAT,HEAT_ENV, HEAT_VOL).contains(fileType);
- }
+ public static boolean isArtifact(Type fileType) {
+ return !Arrays.asList(HEAT,HEAT_ENV, HEAT_VOL).contains(fileType);
+ }
- }
+ public static boolean canBeAssociated(Type fileType)
+ {
+ return HEAT_VOL == fileType;
+ }
+ }
}
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java
index f2773ae01f..bd8b558f11 100644
--- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java
@@ -213,7 +213,7 @@ public class HeatToToscaUtil {
List<FileData> fileDataList = context.getManifest().getContent().getData();
for (FileData fileData : fileDataList) {
if (TranslationService.getTypesToProcessByTranslator().contains(fileData.getType()) && fileData.getFile()
- .equals(heatFileName)) {
+ .equals(heatFileName)) {
return fileData;
}
}
@@ -225,7 +225,6 @@ public class HeatToToscaUtil {
FileDataCollection fileDataCollection = new FileDataCollection();
Map<String, FileData> filteredFiles = filterFileDataListByType(fileDataList, typeFilter);
Set<String> referenced = new HashSet<>();
-
for (FileData fileData : filteredFiles.values()) {
String fileName = fileData.getFile();
@@ -236,8 +235,8 @@ public class HeatToToscaUtil {
HeatOrchestrationTemplate heatOrchestrationTemplate = new YamlUtil().yamlToObject(
translationContext.getFileContent(fileName), HeatOrchestrationTemplate.class);
if (MapUtils.isNotEmpty(heatOrchestrationTemplate.getResources())) {
- applyFilterOnFileCollection(heatOrchestrationTemplate, translationContext, fileDataCollection,
- filteredFiles, referenced);
+ referenced.addAll(applyFilterOnFileCollection(heatOrchestrationTemplate, translationContext,
+ fileDataCollection, filteredFiles));
}
} else {
@@ -246,7 +245,9 @@ public class HeatToToscaUtil {
}
}
+ referenced.addAll(getAssociatedFiles(filteredFiles.values()));
referenced.forEach(filteredFiles::remove);
+
if (!CollectionUtils.isEmpty(fileDataCollection.getBaseFile())) {
for (FileData fileData : fileDataCollection.getBaseFile()) {
filteredFiles.remove(fileData.getFile());
@@ -256,54 +257,80 @@ public class HeatToToscaUtil {
return fileDataCollection;
}
- private static void applyFilterOnFileCollection(HeatOrchestrationTemplate heatOrchestrationTemplate,
+ private static Set<String> getAssociatedFiles(Collection<FileData> filteredFiles) {
+ Set<String> associatedFiles = new HashSet<>();
+ filteredFiles.stream().filter(file -> file.getParentFile() != null
+ && FileData.Type.canBeAssociated(file.getType()))
+ .forEach(file -> associatedFiles.add(file.getFile()));
+ return associatedFiles;
+ }
+
+ private static Set<String> applyFilterOnFileCollection(HeatOrchestrationTemplate heatOrchestrationTemplate,
TranslationContext translationContext,
FileDataCollection fileDataCollection,
- Map<String, FileData> filteredFiles,
- Set<String> referenced) {
+ Map<String, FileData> filteredFiles) {
+ Set<String> nestedFiles = new HashSet<>();
List<String> filenames = extractFilenamesFromFileDataList(filteredFiles.values());
-
for (Resource resource : heatOrchestrationTemplate.getResources().values()) {
- if (filenames.contains(resource.getType())) {
- handleNestedFile(translationContext, fileDataCollection, filteredFiles, referenced, resource.getType());
- } else if (resource.getType().equals(HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource())) {
- handleResourceGrpNestedFile(resource, translationContext, fileDataCollection, filteredFiles, filenames,
- referenced);
+ String resourceType = resource.getType();
+ if (filenames.contains(resourceType)) {
+ handleNestedFile(translationContext, fileDataCollection, filteredFiles, resourceType);
+ nestedFiles.add(resourceType);
+ } else if (resourceType.equals(HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource())) {
+ Optional<String> nestedFile = handleResourceGrpNestedFile(resource, translationContext,
+ fileDataCollection, filteredFiles, filenames);
+ nestedFile.ifPresent(nestedFiles::add);
}
}
+ return nestedFiles;
}
- private static void handleResourceGrpNestedFile(Resource resource, TranslationContext translationContext,
- FileDataCollection fileDataCollection,
- Map<String, FileData> filteredFiles, List<String> filenames,
- Set<String> referenced) {
+ private static Optional<String> handleResourceGrpNestedFile(Resource resource, TranslationContext
+ translationContext, FileDataCollection fileDataCollection,
+ Map<String, FileData> filteredFiles, List<String> filenames) {
Object resourceDef = resource.getProperties().get(HeatConstants.RESOURCE_DEF_PROPERTY_NAME);
Object innerTypeDef = ((Map) resourceDef).get(HeatConstants.RESOURCE_DEF_TYPE_PROPERTY_NAME);
if (innerTypeDef instanceof String) {
String internalResourceType = (String) innerTypeDef;
if (filenames.contains(internalResourceType)) {
- handleNestedFile(translationContext, fileDataCollection, filteredFiles, referenced,
+ handleNestedFile(translationContext, fileDataCollection, filteredFiles,
internalResourceType);
+ return Optional.of(internalResourceType);
}
}
+ return Optional.empty();
}
private static void handleNestedFile(TranslationContext translationContext, FileDataCollection fileDataCollection,
- Map<String, FileData> filteredFiles, Set<String> referenced,
+ Map<String, FileData> filteredFiles,
String nestedFileName) {
- referenced.add(nestedFileName);
fileDataCollection.addNestedFiles(filteredFiles.get(nestedFileName));
translationContext.getNestedHeatsFiles().add(nestedFileName);
}
- private static Map<String, FileData> filterFileDataListByType(List<FileData> fileDataList,
- Set<FileData.Type> typesToGet) {
+ private static Map<String, FileData> filterFileDataListByType(List<FileData> fileDataList,
+ Set<FileData.Type> typesToGet) {
Map<String, FileData> filtered = new HashMap<>();
- fileDataList.stream().filter(file -> typesToGet.contains(file.getType()))
- .forEach(file -> filtered.put(file.getFile(), file));
+ filterFileDataListByType(fileDataList, filtered, typesToGet, null);
return filtered;
}
+ private static void filterFileDataListByType(List<FileData> fileDataList, Map<String, FileData> filtered,
+ Set<FileData.Type> typesToGet, String parentFileName) {
+ fileDataList.stream().filter(file -> typesToGet.contains(file.getType()))
+ .forEach(file -> {
+ filtered.put(file.getFile(), file);
+ file.setParentFile(parentFileName);
+ });
+
+ Set<FileData.Type> canBeAssociatedTypes = typesToGet.stream()
+ .filter(FileData.Type::canBeAssociated).collect(Collectors.toSet());
+
+ fileDataList.stream().filter(file -> Objects.nonNull(file.getData()))
+ .forEach(file -> filterFileDataListByType(file.getData(), filtered,
+ canBeAssociatedTypes, file.getFile()));
+ }
+
private static List<String> extractFilenamesFromFileDataList(Collection<FileData> fileDataList) {
return fileDataList.stream().map(FileData::getFile).collect(Collectors.toList());
}
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 ee0cee6bab..2a845fb06a 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
@@ -131,34 +131,21 @@ public class TranslationService {
*/
public void translateHeatFile(ServiceTemplate serviceTemplate, FileData heatFileData,
TranslationContext context) {
- translateHeatFile(serviceTemplate, heatFileData, null, context);
- }
-
- /**
- * Translate heat file.
- *
- * @param serviceTemplate the service template
- * @param heatFileData the current heat file data
- * @param parentHeatFileName the main heat to which associated current heat file (e.g. volume heat)
- * @param context the context
- */
- public void translateHeatFile(ServiceTemplate serviceTemplate, FileData heatFileData, String parentHeatFileName,
- TranslationContext context) {
String heatFileName = heatFileData.getFile();
HeatOrchestrationTemplate heatOrchestrationTemplate = new YamlUtil()
.yamlToObject(context.getFileContent(heatFileName), HeatOrchestrationTemplate.class);
translateInputParameters(serviceTemplate, heatOrchestrationTemplate, heatFileData, context,
- heatFileName, parentHeatFileName);
+ heatFileName);
+
translateResources(heatFileName, serviceTemplate, heatOrchestrationTemplate, context);
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, heatFileData.getFile(), context));
+ heatFileData.getData().stream().filter(data -> FileData.Type.canBeAssociated(data.getType()))
+ .forEach(data -> translateHeatFile(serviceTemplate, data, context));
}
}
@@ -244,7 +231,7 @@ public class TranslationService {
private void translateInputParameters(ServiceTemplate serviceTemplate,
HeatOrchestrationTemplate heatOrchestrationTemplate,
FileData heatFileData, TranslationContext context,
- String heatFileName, String parentHeatFileName) {
+ String heatFileName) {
if (heatOrchestrationTemplate.getParameters() == null) {
return;
}
@@ -252,7 +239,7 @@ public class TranslationService {
Map<String, ParameterDefinition> parameterDefinitionMap =
TranslatorHeatToToscaParameterConverter
.parameterConverter(serviceTemplate, heatOrchestrationTemplate.getParameters(),
- heatOrchestrationTemplate, heatFileName, parentHeatFileName, context);
+ heatOrchestrationTemplate, heatFileName, heatFileData.getParentFile(), context);
Environment heatEnvFile = getHeatEnvFile(heatFileData, context);
Map<String, Object> parameters = heatEnvFile.getParameters();
Object parameterValue;
@@ -286,19 +273,19 @@ public class TranslationService {
}
- private void updateAnnotations(Map<String, ParameterDefinition> inputParameters, Map<String, ParameterDefinition> newParameters) {
-
+ private void updateAnnotations(Map<String, ParameterDefinition> inputParameters, Map<String,
+ ParameterDefinition> newParameters) {
newParameters.entrySet().stream().filter(stringParameterDefinitionEntry ->
- inputParameters.containsKey(stringParameterDefinitionEntry.getKey()) &&
- isHasAnnotation(inputParameters, stringParameterDefinitionEntry)).
- forEach(stringParameterDefinitionEntry -> {
- List inputParamVFModuleList = getVFModulesList(inputParameters.get(stringParameterDefinitionEntry.getKey()));
+ inputParameters.containsKey(stringParameterDefinitionEntry.getKey())
+ && isHasAnnotation(inputParameters, stringParameterDefinitionEntry))
+ .forEach(stringParameterDefinitionEntry -> {
+ List inputParamVFModuleList = getVFModulesList(
+ inputParameters.get(stringParameterDefinitionEntry.getKey()));
List newParamVFModuleList = getVFModulesList(stringParameterDefinitionEntry.getValue());
- if(inputParamVFModuleList.contains(newParamVFModuleList.get(0))){
+ if (inputParamVFModuleList.contains(newParamVFModuleList.get(0))) {
newParamVFModuleList.remove(0);
}
newParamVFModuleList.addAll(inputParamVFModuleList);
-
});
}
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/impl/heattotosca/nested/undervolume/TranslateHeatNestedBelongsToVolumeTest.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/impl/heattotosca/nested/undervolume/TranslateHeatNestedBelongsToVolumeTest.java
new file mode 100644
index 0000000000..9c5b422e04
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/impl/heattotosca/nested/undervolume/TranslateHeatNestedBelongsToVolumeTest.java
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+package org.openecomp.sdc.translator.impl.heattotosca.nested.undervolume;
+
+import org.junit.Test;
+import org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation.BaseResourceTranslationTest;
+
+public class TranslateHeatNestedBelongsToVolumeTest extends BaseResourceTranslationTest {
+ {
+ inputFilesPath = "/mock/heat/nested/nestedundervolume/inputs";
+ outputFilesPath = "/mock/heat/nested/nestedundervolume/expectedoutputfiles";
+ }
+
+ @Test
+ public void testTranslate() throws Exception {
+ testTranslation();
+ }
+
+}
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/expectedoutputfiles/MainServiceTemplate.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/expectedoutputfiles/MainServiceTemplate.yaml
new file mode 100644
index 0000000000..aadea7bb86
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/expectedoutputfiles/MainServiceTemplate.yaml
@@ -0,0 +1,2252 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+ template_name: Main
+imports:
+- openecomp_heat_index:
+ file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+ file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+ org.openecomp.resource.vfc.nodes.heat.ocgmgr:
+ derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+ org.openecomp.resource.vfc.nodes.heat.ocgapp:
+ derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+ inputs:
+ keycloak_rpm_name:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: keycloak_rpm_name
+ type: string
+ description: keycloak rpm name
+ default: keycloak-pkg-x86_64.rpm
+ ocgapp_oam_protected_ip_3:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_oam_protected_ip_3
+ type: string
+ description: OCG OAM IP list
+ ocgapp_volume_type_2:
+ label: vm volume type
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ source_type: HEAT
+ param_name: ocgapp_volume_type_2
+ type: string
+ description: the name of the target volume backend for ocgapp1
+ default: SF-Default-SSD
+ ocgapp_volume_type_1:
+ label: vm volume type
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_02
+ source_type: HEAT
+ param_name: ocgapp_volume_type_1
+ type: string
+ description: the name of the target volume backend for ocgapp1
+ default: SF-Default-SSD
+ ocgapp_oam_protected_ip_2:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ source_type: HEAT
+ param_name: ocgapp_oam_protected_ip_2
+ type: string
+ description: OCG OAM IP list
+ ocgapp_volume_type_3:
+ label: vm volume type
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_volume_type_3
+ type: string
+ description: the name of the target volume backend for ocgapp1
+ default: SF-Default-SSD
+ eth1_netmask:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: eth1_netmask
+ type: string
+ description: mask length
+ default: 21
+ domain_name:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: domain_name
+ type: string
+ description: address
+ default: eng.mobilephone.net
+ eth1_ip:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: eth1_ip
+ type: string
+ description: address
+ default: 107.112.168.129
+ eth2_ip_range:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: eth2_ip_range
+ type: string
+ description: range
+ default: 107.242.64.1
+ ocg_user:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocg_user
+ type: string
+ description: user to install ocg
+ default: fworks
+ ocgapp_oam_direct_ip_2:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ source_type: HEAT
+ param_name: ocgapp_oam_direct_ip_2
+ type: string
+ description: OCG OAM IP list
+ ocgapp_oam_direct_ip_1:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_02
+ source_type: HEAT
+ param_name: ocgapp_oam_direct_ip_1
+ type: string
+ description: OCG OAM IP list
+ ocgapp_oam_direct_ip_0:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_01
+ source_type: HEAT
+ param_name: ocgapp_oam_direct_ip_0
+ type: string
+ description: OCG OAM IP list
+ ocgapp_oam_direct_ip_3:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_oam_direct_ip_3
+ type: string
+ description: OCG OAM IP list
+ ocgmgr_volume_ids:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocgmgr_volume_ids
+ type: json
+ description: Unique IDs for volumes
+ ocg_install_jar:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocg_install_jar
+ type: string
+ description: location of ocg installer
+ default: /home/fworks/Installer/ocg10/installer.jar
+ wim_install_file:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: wim_install_file
+ type: string
+ description: WIM Install File location
+ default: /home/fworks/Installer/wim/ovlm-integration-module.sh
+ ovlm_install_dir:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ovlm_install_dir
+ type: string
+ description: Location of the ovlm-install dir
+ default: /home/fworks/Installer/weaver
+ ocg_install_properties:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocg_install_properties
+ type: string
+ description: location of ocg install properties
+ default: /tmp/ocg.install.properties
+ ocgmgr_names:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocgmgr_names
+ type: list
+ description: OCG MGR VM names list (should be 2, since we have 2 MGR VMs)
+ entry_schema:
+ type: string
+ ocgapp_volume_size_3:
+ label: Cinder volume size
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_volume_size_3
+ type: float
+ description: the size of the Cinder volume
+ default: 400
+ constraints:
+ - in_range:
+ - 100
+ - 400
+ ocgapp_volume_type_0:
+ label: vm volume type
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_01
+ source_type: HEAT
+ param_name: ocgapp_volume_type_0
+ type: string
+ description: the name of the target volume backend for ocgapp1
+ default: SF-Default-SSD
+ ocgapp_oam_protected_ip_1:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_02
+ source_type: HEAT
+ param_name: ocgapp_oam_protected_ip_1
+ type: string
+ description: OCG OAM IP list
+ ocgapp_oam_protected_ip_0:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_01
+ source_type: HEAT
+ param_name: ocgapp_oam_protected_ip_0
+ type: string
+ description: OCG OAM IP list
+ ocgapp_volume_size_2:
+ label: Cinder volume size
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ source_type: HEAT
+ param_name: ocgapp_volume_size_2
+ type: float
+ description: the size of the Cinder volume
+ default: 400
+ constraints:
+ - in_range:
+ - 100
+ - 400
+ ocgapp_volume_size_1:
+ label: Cinder volume size
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_02
+ source_type: HEAT
+ param_name: ocgapp_volume_size_1
+ type: float
+ description: the size of the Cinder volume
+ default: 400
+ constraints:
+ - in_range:
+ - 100
+ - 400
+ ocgapp_volume_size_0:
+ label: Cinder volume size
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_01
+ source_type: HEAT
+ param_name: ocgapp_volume_size_0
+ type: float
+ description: the size of the Cinder volume
+ default: 400
+ constraints:
+ - in_range:
+ - 100
+ - 400
+ ocgmgr_image_name:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocgmgr_image_name
+ type: string
+ description: operative system image
+ default: vOCG_MGR_SNAP_20180130
+ vf_module_id:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgmgr
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: vf_module_id
+ type: string
+ description: Unique ID for this VF module instance
+ ocgmgr_oam_protected_ips:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocgmgr_oam_protected_ips
+ type: list
+ description: OCG OAM IP list
+ entry_schema:
+ type: string
+ vnf_name:
+ label: OCG VNF Name
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgmgr
+ - ocgapp_01
+ - ocgapp_04
+ - base_ocg
+ source_type: HEAT
+ param_name: vnf_name
+ type: string
+ description: OCG VNF Name
+ default: zrdm5avocg01
+ nameserver_ip:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: nameserver_ip
+ type: string
+ description: nameserver
+ default: 135.214.16.119
+ ocgapp_name_3:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_name_3
+ type: string
+ description: OCG VM server name list (there should be 2, since we have 2 app vms)
+ ovlm_install_properties:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ovlm_install_properties
+ type: string
+ description: ovlm install properties
+ default: /tmp/ovlm.install.properties
+ ocgapp_name_0:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_01
+ source_type: HEAT
+ param_name: ocgapp_name_0
+ type: string
+ description: OCG VM server name list (there should be 2, since we have 2 app vms)
+ ocgapp_flavor_name:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_flavor_name
+ type: string
+ description: resources to be applied on instances
+ default: nv.c8r32d320
+ cor_direct_net_name:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: cor_direct_net_name
+ type: string
+ description: COR_DIRECT network where instances will connect
+ ocgapp_name_2:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ source_type: HEAT
+ param_name: ocgapp_name_2
+ type: string
+ description: OCG VM server name list (there should be 2, since we have 2 app vms)
+ oam_direct_net_name:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: oam_direct_net_name
+ type: string
+ description: OAM network where instances will connect
+ ocgapp_name_1:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_02
+ source_type: HEAT
+ param_name: ocgapp_name_1
+ type: string
+ description: OCG VM server name list (there should be 2, since we have 2 app vms)
+ vnf_id:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgmgr
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: vnf_id
+ type: string
+ description: Unique ID for this VF instance
+ ocgapp_cor_direct_v6_ip_0:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_01
+ source_type: HEAT
+ param_name: ocgapp_cor_direct_v6_ip_0
+ type: string
+ description: fixed IP assignment for VM's on the COR_DIRECT network
+ availability_zone_0:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_02
+ - ocgmgr
+ - ocgapp_01
+ source_type: HEAT
+ param_name: availability_zone_0
+ type: string
+ description: availability zone 1 ID or name
+ availability_zone_1:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgmgr
+ - ocgapp_04
+ source_type: HEAT
+ param_name: availability_zone_1
+ type: string
+ description: availability zone 2 ID or name
+ OS::stack_name:
+ type: string
+ required: false
+ ocgapp_cor_direct_v6_ip_3:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_cor_direct_v6_ip_3
+ type: string
+ description: fixed IP assignment for VM's on the COR_DIRECT network
+ ocgapp_cor_direct_v6_ip_1:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_02
+ source_type: HEAT
+ param_name: ocgapp_cor_direct_v6_ip_1
+ type: string
+ description: fixed IP assignment for VM's on the COR_DIRECT network
+ ocgmgr_flavor_name:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocgmgr_flavor_name
+ type: string
+ description: resources to be applied on instances
+ default: nv.c8r32d320
+ ocgapp_cor_direct_v6_ip_2:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ source_type: HEAT
+ param_name: ocgapp_cor_direct_v6_ip_2
+ type: string
+ description: fixed IP assignment for VM's on the COR_DIRECT network
+ ocgmgr_public_key:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocgmgr_public_key
+ type: string
+ description: creator's ssh public key
+ ocgapp_volume_id_0:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_01
+ source_type: HEAT
+ param_name: ocgapp_volume_id_0
+ type: string
+ description: Unique IDs for volumes
+ java_home:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: java_home
+ type: string
+ description: java home
+ default: /home/fworks/java/jdk1.8.0_112
+ ocgapp_volume_id_1:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_02
+ source_type: HEAT
+ param_name: ocgapp_volume_id_1
+ type: string
+ description: Unique IDs for volumes
+ ocgapp_volume_id_2:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ source_type: HEAT
+ param_name: ocgapp_volume_id_2
+ type: string
+ description: Unique IDs for volumes
+ ocgapp_volume_id_3:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_volume_id_3
+ type: string
+ description: Unique IDs for volumes
+ ocgapp_image_name:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_image_name
+ type: string
+ description: operative system image
+ default: NIMBUS_OCG-APPLICATION_20180328.qcow2
+ ocgapp_public_key:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_public_key
+ type: string
+ description: creator's ssh public key
+ default: ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAh5B/f9JmJL5HcIJT+XeGnE9Jlv22NYGweMx+M2eX53X0sxdB8onhqDiLFODgDgXUuQk11NM2tQeA+xH+nlZxdETK+5uKb2SLwsPjZnxHQPrGQP1KKAZi9aKoZFjYmWrYuqzQFT9QRz3gehG+pX82mzMkkE/Da2/XJ62zu8PKfapn63MhhmxG5w5onuN2XsM2zfI6GILFM56ppLtMCkgvzXVcWOpr7pD4kpnC9WavxwAkmQPrWIbTi0MKIEeuON0B+KRgC3b8GnCpuE2GFTffAm1MBgi0Urs8e3XGHsilVMqYdaCPZwq5ZKlzivX5wZQH9yT9m9Db6XLL66ZIaBHt2w== rsa-key-20170906
+ ocg_shared_server_grp_id:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocg_shared_server_grp_id
+ type: string
+ description: OCG anti-affinity server group
+ oam_protected_net_name:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgmgr
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: oam_protected_net_name
+ type: string
+ description: OAM network where instances will connect
+ ocgapp_shared_sec_grp_id:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_shared_sec_grp_id
+ type: string
+ description: security group
+ ocgmgr_volume_type_0:
+ label: mgr vm 1 volume type
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocgmgr_volume_type_0
+ type: string
+ description: the name of the target volume backend for the first OCG MGR
+ default: SF-Default-SSD
+ ocgapp_cor_direct_ip_2:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ source_type: HEAT
+ param_name: ocgapp_cor_direct_ip_2
+ type: string
+ description: OCG COR_DIRECT IP list
+ ocgapp_cor_direct_ip_3:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_04
+ source_type: HEAT
+ param_name: ocgapp_cor_direct_ip_3
+ type: string
+ description: OCG COR_DIRECT IP list
+ volume_count:
+ label: volume count
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: volume_count
+ type: float
+ description: num of volumes needed
+ default: 2
+ constraints:
+ - valid_values:
+ - 0
+ - 1
+ - 2
+ ocgapp_cor_direct_ip_0:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_01
+ source_type: HEAT
+ param_name: ocgapp_cor_direct_ip_0
+ type: string
+ description: OCG COR_DIRECT IP list
+ ocgapp_cor_direct_ip_1:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_02
+ source_type: HEAT
+ param_name: ocgapp_cor_direct_ip_1
+ type: string
+ description: OCG COR_DIRECT IP list
+ eth2_ip:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: eth2_ip
+ type: string
+ description: address
+ default: 107.242.64.49
+ ocgmgr_volume_size_0:
+ label: Cinder volume 1 size
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocgmgr_volume_size_0
+ type: float
+ description: the size of the Cinder volume
+ default: 400
+ constraints:
+ - in_range:
+ - 50
+ - 400
+ ocgmgr_shared_sec_grp_id:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgmgr
+ source_type: HEAT
+ param_name: ocgmgr_shared_sec_grp_id
+ type: string
+ description: security group
+ eth1_ip_range:
+ hidden: false
+ immutable: false
+ annotations:
+ source:
+ type: org.openecomp.annotations.Source
+ properties:
+ vf_module_label:
+ - ocgapp_03
+ - ocgapp_02
+ - ocgapp_01
+ - ocgapp_04
+ source_type: HEAT
+ param_name: eth1_ip_range
+ type: string
+ description: range
+ default: 130.4.128.0
+ node_templates:
+ ocgmgr_volume_resource_group:
+ type: org.openecomp.resource.abstract.nodes.heat.ocgmgr_nested_volume
+ directives:
+ - substitutable
+ properties:
+ service_template_filter:
+ substitute_service_template: ocgmgr_nested_volumeServiceTemplate.yaml
+ count:
+ get_input: volume_count
+ mandatory: false
+ volume_type:
+ get_input: ocgmgr_volume_type_0
+ size:
+ get_input: ocgmgr_volume_size_0
+ vnf_name:
+ get_input: vnf_name
+ index:
+ get_property:
+ - SELF
+ - service_template_filter
+ - index_value
+ OCGMGR_SECURITY_GROUP:
+ type: org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules
+ properties:
+ name:
+ str_replace:
+ template: VF_NAME_sec_grp_OCGMGR
+ params:
+ VF_NAME:
+ get_input: vnf_name
+ description: ocg mgr security group
+ rules:
+ - protocol: tcp
+ ethertype: IPv4
+ port_range_max: 65535
+ remote_ip_prefix: 0.0.0.0/0
+ direction: egress
+ port_range_min: 1
+ - protocol: udp
+ ethertype: IPv4
+ port_range_max: 65535
+ remote_ip_prefix: 0.0.0.0/0
+ direction: egress
+ port_range_min: 1
+ - protocol: icmp
+ ethertype: IPv4
+ remote_ip_prefix: 0.0.0.0/0
+ direction: egress
+ - protocol: tcp
+ ethertype: IPv4
+ port_range_max: 65535
+ remote_ip_prefix: 0.0.0.0/0
+ direction: ingress
+ port_range_min: 1
+ - protocol: udp
+ ethertype: IPv4
+ port_range_max: 65535
+ remote_ip_prefix: 0.0.0.0/0
+ direction: ingress
+ port_range_min: 1
+ - protocol: icmp
+ ethertype: IPv4
+ remote_ip_prefix: 0.0.0.0/0
+ direction: ingress
+ requirements:
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgmgr_oam_protected_0_port
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgmgr_oam_protected_1_port
+ relationship: org.openecomp.relationships.AttachesTo
+ ocgapp_cor_direct_port_3:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ - ip_version: 6
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_cor_direct_ip_3
+ - ip_address:
+ get_input: ocgapp_cor_direct_v6_ip_3
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_cor_port_3
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: cor_direct
+ network:
+ get_input: cor_direct_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_3
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_cor_direct_port_2:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ - ip_version: 6
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_cor_direct_ip_2
+ - ip_address:
+ get_input: ocgapp_cor_direct_v6_ip_2
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_cor_port_2
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: cor_direct
+ network:
+ get_input: cor_direct_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_2
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_server_2:
+ type: org.openecomp.resource.vfc.nodes.heat.ocgapp
+ properties:
+ flavor:
+ get_input: ocgapp_flavor_name
+ key_name: UNSUPPORTED_RESOURCE_ocgapp_admin_key
+ availability_zone:
+ get_input: availability_zone_1
+ image:
+ get_input: ocgapp_image_name
+ metadata:
+ vf_module_id:
+ get_input: vf_module_id
+ vnf_id:
+ get_input: vnf_id
+ vnf_name:
+ get_input: vnf_name
+ personality:
+ /etc/hostname:
+ str_replace:
+ template: |
+ ${NAME}.${DOMAIN_NAME}
+ params:
+ ${NAME}:
+ get_input: ocgapp_name_2
+ ${DOMAIN_NAME}:
+ get_input: domain_name
+ /etc/resolv.conf:
+ str_replace:
+ template: |
+ nameserver ${NAME_SERVER}
+ domain ${DOMAIN_NAME}
+ params:
+ ${NAME_SERVER}:
+ get_input: nameserver_ip
+ ${DOMAIN_NAME}:
+ get_input: domain_name
+ /etc/sysconfig/network-scripts/route-eth2:
+ str_replace:
+ template: |
+ ${ETH2_IP_RANGE} via ${ETH2_IP} dev eth2
+ params:
+ ${ETH2_IP_RANGE}:
+ get_input: eth2_ip_range
+ ${ETH2_IP}:
+ get_input: eth2_ip
+ /etc/sysconfig/network-scripts/route-eth1:
+ str_replace:
+ template: |
+ ${ETH1_IP_RANGE}/${ETH1_NETMASK} via ${ETH1_IP} dev eth1
+ params:
+ ${ETH1_IP_RANGE}:
+ get_input: eth1_ip_range
+ ${ETH1_IP}:
+ get_input: eth1_ip
+ ${ETH1_NETMASK}:
+ get_input: eth1_netmask
+ user_data_format: RAW
+ name:
+ get_input: ocgapp_name_2
+ scheduler_hints:
+ group:
+ get_input: ocg_shared_server_grp_id
+ requirements:
+ - local_storage:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_volume_2
+ relationship: ocgapp_volume_attachment_2
+ ocgapp_server_1:
+ type: org.openecomp.resource.vfc.nodes.heat.ocgapp
+ properties:
+ flavor:
+ get_input: ocgapp_flavor_name
+ key_name: UNSUPPORTED_RESOURCE_ocgapp_admin_key
+ availability_zone:
+ get_input: availability_zone_0
+ image:
+ get_input: ocgapp_image_name
+ metadata:
+ vf_module_id:
+ get_input: vf_module_id
+ vnf_id:
+ get_input: vnf_id
+ vnf_name:
+ get_input: vnf_name
+ personality:
+ /etc/hostname:
+ str_replace:
+ template: |
+ ${NAME}.${DOMAIN_NAME}
+ params:
+ ${NAME}:
+ get_input: ocgapp_name_1
+ ${DOMAIN_NAME}:
+ get_input: domain_name
+ /etc/resolv.conf:
+ str_replace:
+ template: |
+ nameserver ${NAME_SERVER}
+ domain ${DOMAIN_NAME}
+ params:
+ ${NAME_SERVER}:
+ get_input: nameserver_ip
+ ${DOMAIN_NAME}:
+ get_input: domain_name
+ /etc/sysconfig/network-scripts/route-eth2:
+ str_replace:
+ template: |
+ ${ETH2_IP_RANGE} via ${ETH2_IP} dev eth2
+ params:
+ ${ETH2_IP_RANGE}:
+ get_input: eth2_ip_range
+ ${ETH2_IP}:
+ get_input: eth2_ip
+ /etc/sysconfig/network-scripts/route-eth1:
+ str_replace:
+ template: |
+ ${ETH1_IP_RANGE}/${ETH1_NETMASK} via ${ETH1_IP} dev eth1
+ params:
+ ${ETH1_IP_RANGE}:
+ get_input: eth1_ip_range
+ ${ETH1_IP}:
+ get_input: eth1_ip
+ ${ETH1_NETMASK}:
+ get_input: eth1_netmask
+ user_data_format: RAW
+ name:
+ get_input: ocgapp_name_1
+ scheduler_hints:
+ group:
+ get_input: ocg_shared_server_grp_id
+ requirements:
+ - local_storage:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_volume_1
+ relationship: ocgapp_volume_attachment_1
+ ocgapp_server_0:
+ type: org.openecomp.resource.vfc.nodes.heat.ocgapp
+ properties:
+ flavor:
+ get_input: ocgapp_flavor_name
+ key_name: UNSUPPORTED_RESOURCE_ocgapp_admin_key
+ availability_zone:
+ get_input: availability_zone_0
+ image:
+ get_input: ocgapp_image_name
+ metadata:
+ vf_module_id:
+ get_input: vf_module_id
+ vnf_id:
+ get_input: vnf_id
+ vnf_name:
+ get_input: vnf_name
+ personality:
+ /etc/hostname:
+ str_replace:
+ template: |
+ ${NAME}.${DOMAIN_NAME}
+ params:
+ ${NAME}:
+ get_input: ocgapp_name_0
+ ${DOMAIN_NAME}:
+ get_input: domain_name
+ /etc/resolv.conf:
+ str_replace:
+ template: |
+ nameserver ${NAME_SERVER}
+ domain ${DOMAIN_NAME}
+ params:
+ ${NAME_SERVER}:
+ get_input: nameserver_ip
+ ${DOMAIN_NAME}:
+ get_input: domain_name
+ /etc/sysconfig/network-scripts/route-eth2:
+ str_replace:
+ template: |
+ ${ETH2_IP_RANGE} via ${ETH2_IP} dev eth2
+ params:
+ ${ETH2_IP_RANGE}:
+ get_input: eth2_ip_range
+ ${ETH2_IP}:
+ get_input: eth2_ip
+ /etc/sysconfig/network-scripts/route-eth1:
+ str_replace:
+ template: |
+ ${ETH1_IP_RANGE}/${ETH1_NETMASK} via ${ETH1_IP} dev eth1
+ params:
+ ${ETH1_IP_RANGE}:
+ get_input: eth1_ip_range
+ ${ETH1_IP}:
+ get_input: eth1_ip
+ ${ETH1_NETMASK}:
+ get_input: eth1_netmask
+ user_data_format: RAW
+ name:
+ get_input: ocgapp_name_0
+ scheduler_hints:
+ group:
+ get_input: ocg_shared_server_grp_id
+ requirements:
+ - local_storage:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_volume_0
+ relationship: ocgapp_volume_attachment_0
+ ocgmgr_oam_protected_0_port:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgmgr_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input:
+ - ocgmgr_oam_protected_ips
+ - 0
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgmgr_oam_port_0
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_protected
+ network:
+ get_input: oam_protected_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgmgr_server_0
+ relationship: tosca.relationships.network.BindsTo
+ ocgmgr_server_0:
+ type: org.openecomp.resource.vfc.nodes.heat.ocgmgr
+ properties:
+ flavor:
+ get_input: ocgmgr_flavor_name
+ key_name: UNSUPPORTED_RESOURCE_ocgmgr_admin_key
+ availability_zone:
+ get_input: availability_zone_0
+ image:
+ get_input: ocgmgr_image_name
+ metadata:
+ vf_module_id:
+ get_input: vf_module_id
+ vnf_id:
+ get_input: vnf_id
+ vnf_name:
+ get_input: vnf_name
+ user_data_format: SOFTWARE_CONFIG
+ name:
+ get_input:
+ - ocgmgr_names
+ - 0
+ ocgmgr_server_1:
+ type: org.openecomp.resource.vfc.nodes.heat.ocgmgr
+ properties:
+ flavor:
+ get_input: ocgmgr_flavor_name
+ key_name: UNSUPPORTED_RESOURCE_ocgmgr_admin_key
+ availability_zone:
+ get_input: availability_zone_1
+ image:
+ get_input: ocgmgr_image_name
+ metadata:
+ vf_module_id:
+ get_input: vf_module_id
+ vnf_id:
+ get_input: vnf_id
+ vnf_name:
+ get_input: vnf_name
+ user_data_format: RAW
+ name:
+ get_input:
+ - ocgmgr_names
+ - 1
+ ocgapp_server_3:
+ type: org.openecomp.resource.vfc.nodes.heat.ocgapp
+ properties:
+ flavor:
+ get_input: ocgapp_flavor_name
+ key_name: UNSUPPORTED_RESOURCE_ocgapp_admin_key
+ availability_zone:
+ get_input: availability_zone_1
+ image:
+ get_input: ocgapp_image_name
+ metadata:
+ vf_module_id:
+ get_input: vf_module_id
+ vnf_id:
+ get_input: vnf_id
+ vnf_name:
+ get_input: vnf_name
+ personality:
+ /etc/hostname:
+ str_replace:
+ template: |
+ ${NAME}.${DOMAIN_NAME}
+ params:
+ ${NAME}:
+ get_input: ocgapp_name_3
+ ${DOMAIN_NAME}:
+ get_input: domain_name
+ /etc/resolv.conf:
+ str_replace:
+ template: |
+ nameserver ${NAME_SERVER}
+ domain ${DOMAIN_NAME}
+ params:
+ ${NAME_SERVER}:
+ get_input: nameserver_ip
+ ${DOMAIN_NAME}:
+ get_input: domain_name
+ /etc/sysconfig/network-scripts/route-eth2:
+ str_replace:
+ template: |
+ ${ETH2_IP_RANGE} via ${ETH2_IP} dev eth2
+ params:
+ ${ETH2_IP_RANGE}:
+ get_input: eth2_ip_range
+ ${ETH2_IP}:
+ get_input: eth2_ip
+ /etc/sysconfig/network-scripts/route-eth1:
+ str_replace:
+ template: |
+ ${ETH1_IP_RANGE}/${ETH1_NETMASK} via ${ETH1_IP} dev eth1
+ params:
+ ${ETH1_IP_RANGE}:
+ get_input: eth1_ip_range
+ ${ETH1_IP}:
+ get_input: eth1_ip
+ ${ETH1_NETMASK}:
+ get_input: eth1_netmask
+ user_data_format: RAW
+ name:
+ get_input:
+ - ocgapp_name_3
+ scheduler_hints:
+ group:
+ get_input: ocg_shared_server_grp_id
+ requirements:
+ - local_storage:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_volume_3
+ relationship: ocgapp_volume_attachment_3
+ ocgapp_oam_direct_port_1:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_oam_direct_ip_1
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_direct_port_1
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_direct
+ network:
+ get_input: oam_direct_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_1
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_oam_direct_port_2:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_oam_direct_ip_2
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_direct_port_2
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_direct
+ network:
+ get_input: oam_direct_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_2
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_oam_direct_port_3:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_oam_direct_ip_3
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_direct_port_3
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_direct
+ network:
+ get_input: oam_direct_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_3
+ relationship: tosca.relationships.network.BindsTo
+ OCGAPP_SECURITY_GROUP:
+ type: org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules
+ properties:
+ name:
+ str_replace:
+ template: VF_NAME_sec_grp_OCGAPP
+ params:
+ VF_NAME:
+ get_input: vnf_name
+ description: ocg app security group
+ rules:
+ - protocol: tcp
+ ethertype: IPv4
+ port_range_max: 65535
+ remote_ip_prefix: 0.0.0.0/0
+ direction: egress
+ port_range_min: 1
+ - protocol: udp
+ ethertype: IPv4
+ port_range_max: 65535
+ remote_ip_prefix: 0.0.0.0/0
+ direction: egress
+ port_range_min: 1
+ - protocol: icmp
+ ethertype: IPv4
+ remote_ip_prefix: 0.0.0.0/0
+ direction: egress
+ - protocol: tcp
+ ethertype: IPv4
+ port_range_max: 65535
+ remote_ip_prefix: 0.0.0.0/0
+ direction: ingress
+ port_range_min: 1
+ - protocol: udp
+ ethertype: IPv4
+ port_range_max: 65535
+ remote_ip_prefix: 0.0.0.0/0
+ direction: ingress
+ port_range_min: 1
+ - protocol: icmp
+ ethertype: IPv4
+ remote_ip_prefix: 0.0.0.0/0
+ direction: ingress
+ - protocol: tcp
+ ethertype: IPv6
+ port_range_max: 65535
+ remote_ip_prefix: ::/0
+ direction: egress
+ port_range_min: 1
+ - protocol: udp
+ ethertype: IPv6
+ port_range_max: 65535
+ remote_ip_prefix: ::/0
+ direction: egress
+ port_range_min: 1
+ - protocol: icmp
+ ethertype: IPv6
+ remote_ip_prefix: ::/0
+ direction: egress
+ - protocol: tcp
+ ethertype: IPv6
+ port_range_max: 65535
+ remote_ip_prefix: ::/0
+ direction: ingress
+ port_range_min: 1
+ - protocol: udp
+ ethertype: IPv6
+ port_range_max: 65535
+ remote_ip_prefix: ::/0
+ direction: ingress
+ port_range_min: 1
+ - protocol: icmp
+ ethertype: IPv6
+ remote_ip_prefix: ::/0
+ direction: ingress
+ requirements:
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_oam_protected_port_3
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_oam_direct_port_3
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_cor_direct_port_3
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_oam_protected_port_0
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_oam_direct_port_0
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_cor_direct_port_0
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_oam_protected_port_1
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_oam_direct_port_1
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_cor_direct_port_1
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_oam_protected_port_2
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_oam_direct_port_2
+ relationship: org.openecomp.relationships.AttachesTo
+ - port:
+ capability: tosca.capabilities.Attachment
+ node: ocgapp_cor_direct_port_2
+ relationship: org.openecomp.relationships.AttachesTo
+ ocgapp_volume_1:
+ type: org.openecomp.resource.vfc.nodes.heat.cinder.Volume
+ properties:
+ volume_type:
+ get_input: ocgapp_volume_type_1
+ size: '(get_input : ocgapp_volume_size_1) * 1024'
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_volume_1
+ params:
+ VF_NAME:
+ get_input: vnf_name
+ STACK_NAME:
+ get_input: OS::stack_name
+ ocgapp_volume_0:
+ type: org.openecomp.resource.vfc.nodes.heat.cinder.Volume
+ properties:
+ volume_type:
+ get_input: ocgapp_volume_type_0
+ size: '(get_input : ocgapp_volume_size_0) * 1024'
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_volume_1
+ params:
+ VF_NAME:
+ get_input: vnf_name
+ STACK_NAME:
+ get_input: OS::stack_name
+ ocgapp_volume_3:
+ type: org.openecomp.resource.vfc.nodes.heat.cinder.Volume
+ properties:
+ volume_type:
+ get_input: ocgapp_volume_type_3
+ size: '(get_input : ocgapp_volume_size_3) * 1024'
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_volume_3
+ params:
+ VF_NAME:
+ get_input: vnf_name
+ STACK_NAME:
+ get_input: OS::stack_name
+ ocgapp_oam_direct_port_0:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_oam_direct_ip_0
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_direct_port_0
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_direct
+ network:
+ get_input: oam_direct_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_0
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_volume_2:
+ type: org.openecomp.resource.vfc.nodes.heat.cinder.Volume
+ properties:
+ volume_type:
+ get_input: ocgapp_volume_type_2
+ size: '(get_input : ocgapp_volume_size_2) * 1024'
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_volume_2
+ params:
+ VF_NAME:
+ get_input: vnf_name
+ STACK_NAME:
+ get_input: OS::stack_name
+ ocgapp_cor_direct_port_1:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ - ip_version: 6
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_cor_direct_ip_1
+ - ip_address:
+ get_input: ocgapp_cor_direct_v6_ip_1
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_cor_port_1
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: cor_direct
+ network:
+ get_input: cor_direct_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_1
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_cor_direct_port_0:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ - ip_version: 6
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_cor_direct_ip_0
+ - ip_address:
+ get_input: ocgapp_cor_direct_v6_ip_0
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_cor_port_0
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: cor_direct
+ network:
+ get_input: cor_direct_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_0
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_oam_protected_port_1:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_oam_protected_ip_1
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_protected_port_1
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_protected
+ network:
+ get_input: oam_protected_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_1
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_oam_protected_port_0:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_oam_protected_ip_0
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_protected_port_0
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_protected
+ network:
+ get_input: oam_protected_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_0
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_oam_protected_port_3:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_oam_protected_ip_3
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_protected_port_3
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_protected
+ network:
+ get_input: oam_protected_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_3
+ relationship: tosca.relationships.network.BindsTo
+ ocgmgr_oam_protected_1_port:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgmgr_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input:
+ - ocgmgr_oam_protected_ips
+ - 1
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgmgr_oam_port_1
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_protected
+ network:
+ get_input: oam_protected_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgmgr_server_1
+ relationship: tosca.relationships.network.BindsTo
+ ocgapp_oam_protected_port_2:
+ type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+ properties:
+ ip_requirements:
+ - ip_version: 4
+ ip_count_required:
+ is_required: true
+ floating_ip_count_required:
+ is_required: false
+ security_groups:
+ - get_input: ocgapp_shared_sec_grp_id
+ fixed_ips:
+ - ip_address:
+ get_input: ocgapp_oam_protected_ip_2
+ mac_requirements:
+ mac_count_required:
+ is_required: false
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_protected_port_2
+ params:
+ VNF_NAME:
+ get_input: vnf_name
+ network_role_tag: oam_protected
+ network:
+ get_input: oam_protected_net_name
+ requirements:
+ - binding:
+ capability: tosca.capabilities.network.Bindable
+ node: ocgapp_server_2
+ relationship: tosca.relationships.network.BindsTo
+ relationship_templates:
+ ocgapp_volume_attachment_3:
+ type: org.openecomp.relationships.VolumeAttachesTo
+ properties:
+ volume_id: ocgapp_volume_3
+ instance_uuid: ocgapp_server_3
+ ocgapp_volume_attachment_2:
+ type: org.openecomp.relationships.VolumeAttachesTo
+ properties:
+ volume_id: ocgapp_volume_2
+ instance_uuid: ocgapp_server_2
+ ocgapp_volume_attachment_1:
+ type: org.openecomp.relationships.VolumeAttachesTo
+ properties:
+ volume_id: ocgapp_volume_1
+ instance_uuid: ocgapp_server_1
+ ocgapp_volume_attachment_0:
+ type: org.openecomp.relationships.VolumeAttachesTo
+ properties:
+ volume_id: ocgapp_volume_0
+ instance_uuid: ocgapp_server_0
+ groups:
+ base_ocg_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/base_ocg.yaml
+ description: |
+ Base HOT template to create The Security Group for the the OCG VNF
+ members:
+ - OCGMGR_SECURITY_GROUP
+ - OCGAPP_SECURITY_GROUP
+ ocgapp_04_volume_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgapp_04_volume.yaml
+ members:
+ - ocgapp_volume_3
+ ocgmgr_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgmgr.yaml
+ description: OCG Managers template
+ members:
+ - ocgmgr_oam_protected_0_port
+ - ocgmgr_server_0
+ - ocgmgr_server_1
+ - ocgmgr_oam_protected_1_port
+ ocgapp_02_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgapp_02.yaml
+ description: OCG Apps template
+ members:
+ - ocgapp_server_1
+ - ocgapp_cor_direct_port_1
+ - ocgapp_oam_direct_port_1
+ - ocgapp_oam_protected_port_1
+ ocgapp_03_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgapp_03.yaml
+ description: OCG Apps template
+ members:
+ - ocgapp_server_2
+ - ocgapp_oam_direct_port_2
+ - ocgapp_cor_direct_port_2
+ - ocgapp_oam_protected_port_2
+ ocg_RSG_group:
+ type: tosca.groups.Root
+ members:
+ - ocgapp_server_3
+ - ocgapp_server_0
+ - ocgapp_server_1
+ - ocgapp_server_2
+ ocgapp_01_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgapp_01.yaml
+ description: OCG Apps template
+ members:
+ - ocgapp_server_0
+ - ocgapp_cor_direct_port_0
+ - ocgapp_oam_protected_port_0
+ - ocgapp_oam_direct_port_0
+ ocgapp_04_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgapp_04.yaml
+ description: OCG Apps template
+ members:
+ - ocgapp_cor_direct_port_3
+ - ocgapp_oam_direct_port_3
+ - ocgapp_oam_protected_port_3
+ - ocgapp_server_3
+ ocgapp_01_volume_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgapp_01_volume.yaml
+ members:
+ - ocgapp_volume_0
+ ocgapp_02_volume_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgapp_02_volume.yaml
+ members:
+ - ocgapp_volume_1
+ ocgapp_03_volume_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgapp_03_volume.yaml
+ members:
+ - ocgapp_volume_2
+ ocgmgr_volume_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgmgr_volume.yaml
+ description: OCG template for MGR volumes
+ members:
+ - ocgmgr_volume_resource_group
+ outputs:
+ ocgapp_volume_id_0:
+ description: the ocgapp volume id 0
+ value: ocgapp_volume_0
+ ocgapp_volume_id_1:
+ description: the ocgapp volume id 1
+ value: ocgapp_volume_1
+ ocgapp_volume_id_2:
+ description: the ocgapp volume id 2
+ value: ocgapp_volume_2
+ ocgapp_volume_id_3:
+ description: the ocgapp volume id 3
+ value: ocgapp_volume_3
+ ocgmgr_volume_ids:
+ description: ocgmgr volume ids
+ value:
+ get_attribute:
+ - ocgmgr_volume_resource_group
+ - ocgmgr_volume_id_0
+ policies:
+ ocg_RSG_policy:
+ type: org.openecomp.policies.placement.Antilocate
+ properties:
+ name:
+ str_replace:
+ template: VF_NAME_server_grp_OCG
+ params:
+ VF_NAME:
+ get_input: vnf_name
+ container_type: host
+ targets:
+ - ocg_RSG_group \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/expectedoutputfiles/ocgmgr_nested_volumeServiceTemplate.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/expectedoutputfiles/ocgmgr_nested_volumeServiceTemplate.yaml
new file mode 100644
index 0000000000..0de9369c69
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/expectedoutputfiles/ocgmgr_nested_volumeServiceTemplate.yaml
@@ -0,0 +1,88 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+ template_name: ocgmgr_nested_volume
+imports:
+- openecomp_heat_index:
+ file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+ file: GlobalSubstitutionTypesServiceTemplate.yaml
+topology_template:
+ inputs:
+ volume_type:
+ label: Volume Type
+ hidden: false
+ immutable: false
+ type: string
+ description: type of cinder volumes
+ size:
+ label: Volume Size
+ hidden: false
+ immutable: false
+ type: float
+ description: size of the cinder volumes
+ constraints:
+ - in_range:
+ - 50
+ - 400
+ vnf_name:
+ label: VNF Name
+ hidden: false
+ immutable: false
+ type: string
+ description: vnf name
+ index:
+ label: Volume index
+ hidden: false
+ immutable: false
+ type: float
+ description: number of volumes to spin up
+ constraints:
+ - valid_values:
+ - 0
+ - 1
+ - 2
+ OS::stack_name:
+ type: string
+ required: false
+ node_templates:
+ ocgmgr_volume_0:
+ type: org.openecomp.resource.vfc.nodes.heat.cinder.Volume
+ properties:
+ volume_type:
+ get_input: volume_type
+ size: '(get_input : size) * 1024'
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_INDEX
+ params:
+ VF_NAME:
+ get_input: vnf_name
+ INDEX:
+ get_input: index
+ STACK_NAME:
+ get_input: OS::stack_name
+ groups:
+ ocgmgr_nested_volume_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/ocgmgr_nested_volume.yaml
+ description: Nested volume file for ocg mgrs
+ members:
+ - ocgmgr_volume_0
+ outputs:
+ ocgmgr_volume_id_0:
+ description: the ocgmgr volume uuids
+ value: ocgmgr_volume_0
+ substitution_mappings:
+ node_type: org.openecomp.resource.abstract.nodes.heat.ocgmgr_nested_volume
+ capabilities:
+ feature_ocgmgr_volume_0:
+ - ocgmgr_volume_0
+ - feature
+ attachment_ocgmgr_volume_0:
+ - ocgmgr_volume_0
+ - attachment
+ requirements:
+ dependency_ocgmgr_volume_0:
+ - ocgmgr_volume_0
+ - dependency
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/MANIFEST.json
new file mode 100644
index 0000000000..dc47034e54
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/MANIFEST.json
@@ -0,0 +1,139 @@
+{
+ "name": "23_defect_fix",
+ "description": "a",
+ "version": "0.0",
+ "data": [
+ {
+ "isBase": false,
+ "file": "ocgmgr.yaml",
+ "type": "HEAT",
+ "data": [
+ {
+ "file": "ocgmgr.env",
+ "type": "HEAT_ENV"
+ },
+ {
+ "file": "ocgmgr_volume.yaml",
+ "type": "HEAT_VOL",
+ "data": [
+ {
+ "file": "ocgmgr_volume.env",
+ "type": "HEAT_ENV"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "isBase": false,
+ "file": "ocgapp_04.yaml",
+ "type": "HEAT",
+ "data": [
+ {
+ "file": "ocgapp_04.env",
+ "type": "HEAT_ENV"
+ },
+ {
+ "file": "ocgapp_04_volume.yaml",
+ "type": "HEAT_VOL",
+ "data": [
+ {
+ "file": "ocgapp_04_volume.env",
+ "type": "HEAT_ENV"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "isBase": false,
+ "file": "ocgapp_03.yaml",
+ "type": "HEAT",
+ "data": [
+ {
+ "file": "ocgapp_03.env",
+ "type": "HEAT_ENV"
+ },
+ {
+ "file": "ocgapp_03_volume.yaml",
+ "type": "HEAT_VOL",
+ "data": [
+ {
+ "file": "ocgapp_03_volume.env",
+ "type": "HEAT_ENV"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "isBase": false,
+ "file": "ocgapp_02.yaml",
+ "type": "HEAT",
+ "data": [
+ {
+ "file": "ocgapp_02.env",
+ "type": "HEAT_ENV"
+ },
+ {
+ "file": "ocgapp_02_volume.yaml",
+ "type": "HEAT_VOL",
+ "data": [
+ {
+ "file": "ocgapp_02_volume.env",
+ "type": "HEAT_ENV"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "isBase": false,
+ "file": "ocgapp_01.yaml",
+ "type": "HEAT",
+ "data": [
+ {
+ "file": "ocgapp_01.env",
+ "type": "HEAT_ENV"
+ },
+ {
+ "file": "ocgapp_01_volume.yaml",
+ "type": "HEAT_VOL",
+ "data": [
+ {
+ "file": "ocgapp_01_volume.env",
+ "type": "HEAT_ENV"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "isBase": true,
+ "file": "base_ocg.yaml",
+ "type": "HEAT",
+ "data": [
+ {
+ "file": "base_ocg.env",
+ "type": "HEAT_ENV"
+ }
+ ]
+ },
+ {
+ "file": "ocgmgr_nested_volume.yaml",
+ "type": "HEAT"
+ },
+ {
+ "file": "ocgapp_nested_0.txt",
+ "type": "OTHER"
+ },
+ {
+ "file": "ocgmgr_nested_1.txt",
+ "type": "OTHER"
+ },
+ {
+ "file": "ocgmgr_nested_0.txt",
+ "type": "OTHER"
+ }
+ ]
+} \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/base_ocg.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/base_ocg.env
new file mode 100644
index 0000000000..e9bc8b298f
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/base_ocg.env
@@ -0,0 +1,9 @@
+#OCG Base Template ENV File
+#Version 1.0
+#Authors:
+
+#####################
+parameters:
+#####################
+
+ vnf_name: 'zrdm6bvocg_redesign'
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/base_ocg.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/base_ocg.yaml
new file mode 100644
index 0000000000..fc07aae4df
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/base_ocg.yaml
@@ -0,0 +1,89 @@
+heat_template_version: 2015-04-30
+#OCG Base Template
+#AUTHORS:
+description: >
+ Base HOT template to create The Security Group for the the OCG VNF
+
+#####################
+parameters:
+#####################
+
+## GLOBAL//Basic Parameters
+ vnf_name:
+ type: string
+ description: Unique name for this VF instance
+# For manual spinups, value must be in the ENV file. Must be removed from ENV before uploading to ASDC
+
+#####################
+resources:
+#####################
+
+ OCGAPP_SECURITY_GROUP:
+ type: OS::Neutron::SecurityGroup
+ properties:
+ description: ocg app security group
+ name:
+ str_replace:
+ template: VF_NAME_sec_grp_OCGAPP
+ params:
+ VF_NAME: {get_param: vnf_name}
+ rules: [{"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": egress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": ingress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": egress, "ethertype": IPv6, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": "::/0"},
+ {"direction": egress, "ethertype": IPv6, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": "::/0"},
+ {"direction": egress, "ethertype": IPv6, "protocol": icmp, "remote_ip_prefix": "::/0"},
+ {"direction": ingress, "ethertype": IPv6, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": "::/0"},
+ {"direction": ingress, "ethertype": IPv6, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": "::/0"},
+ {"direction": ingress, "ethertype": IPv6, "protocol": icmp, "remote_ip_prefix": "::/0"}
+ ]
+
+ OCGMGR_SECURITY_GROUP:
+ type: OS::Neutron::SecurityGroup
+ properties:
+ description: ocg mgr security group
+ name:
+ str_replace:
+ template: VF_NAME_sec_grp_OCGMGR
+ params:
+ VF_NAME: {get_param: vnf_name}
+ rules: [{"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": egress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": egress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": ingress, "ethertype": IPv4, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": 0.0.0.0/0},
+ {"direction": ingress, "ethertype": IPv4, "protocol": icmp, "remote_ip_prefix": 0.0.0.0/0},
+ #{"direction": egress, "ethertype": IPv6, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": "::/0"},
+ #{"direction": egress, "ethertype": IPv6, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": "::/0"},
+ #{"direction": egress, "ethertype": IPv6, "protocol": icmp, "remote_ip_prefix": "::/0"},
+ #{"direction": ingress, "ethertype": IPv6, "port_range_min": 1, "port_range_max": 65535, "protocol": tcp, "remote_ip_prefix": "::/0"},
+ #{"direction": ingress, "ethertype": IPv6, "port_range_min": 1, "port_range_max": 65535, "protocol": udp, "remote_ip_prefix": "::/0"},
+ #{"direction": ingress, "ethertype": IPv6, "protocol": icmp, "remote_ip_prefix": "::/0"}
+ ]
+
+ ocg_RSG:
+ type: OS::Nova::ServerGroup
+ properties:
+ name:
+ str_replace:
+ template: VF_NAME_server_grp_OCG
+ params:
+ VF_NAME: {get_param: vnf_name}
+ policies:
+ - anti-affinity
+
+outputs:
+ ocgapp_shared_sec_grp_id:
+ description: UUID of OCG APP Resource SecurityGroup
+ value: { get_resource: OCGAPP_SECURITY_GROUP }
+
+ ocgmgr_shared_sec_grp_id:
+ description: UUID of OCG MGR Resource SecutiryGroup
+ value: {get_resource: OCGMGR_SECURITY_GROUP}
+
+ ocg_shared_server_grp_id:
+ description: UUID of OCG anti-affinity server group
+ value: {get_resource: ocg_RSG}
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01.env
new file mode 100644
index 0000000000..fbd4e77fc1
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01.env
@@ -0,0 +1,27 @@
+#file version 1.0
+parameters:
+ ocgapp_image_name: NIMBUS_OCG-APPLICATION_20180328.qcow2
+ ocgapp_flavor_name: nv.c8r32d320
+ ocgapp_public_key: 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAh5B/f9JmJL5HcIJT+XeGnE9Jlv22NYGweMx+M2eX53X0sxdB8onhqDiLFODgDgXUuQk11NM2tQeA+xH+nlZxdETK+5uKb2SLwsPjZnxHQPrGQP1KKAZi9aKoZFjYmWrYuqzQFT9QRz3gehG+pX82mzMkkE/Da2/XJ62zu8PKfapn63MhhmxG5w5onuN2XsM2zfI6GILFM56ppLtMCkgvzXVcWOpr7pD4kpnC9WavxwAkmQPrWIbTi0MKIEeuON0B+KRgC3b8GnCpuE2GFTffAm1MBgi0Urs8e3XGHsilVMqYdaCPZwq5ZKlzivX5wZQH9yT9m9Db6XLL66ZIaBHt2w== rsa-key-20170906'
+# oam_protected_net_name: MNS-25180-T-RDM6B_oam_protected_net_1
+# oam_direct_net_name: MNS-25180-T-RDM6B_oam_direct_net_1
+# cor_direct_net_name: MNS-25180-T-RDM6B_cor_direct_net_1
+# ocgapp_oam_protected_ip_0: 107.112.163.94
+# ocgapp_oam_direct_ip_0: 107.112.168.138
+# ocgapp_cor_direct_ip_0: 107.242.64.58
+# ocgapp_cor_direct_v6_ip_0: 2606:ae00:2e20:1404::10
+# ocgapp_name_0: zrdm6bvocg01app001_REDESIGN
+# availability_zone_0: rdm6b-kvm-az01
+# ocgapp_shared_sec_grp_id: acd420c8-37a0-4493-9296-bab085e76f45
+# ocg_shared_server_grp_id: e1ac6d1c-32aa-43dc-b1e1-0c33e69167f9
+ nameserver_ip: 135.214.16.119
+ eth1_ip_range: 130.4.128.0
+ eth1_netmask: 21
+ eth1_ip: 107.112.168.129
+ eth2_ip_range: 107.242.64.1
+ eth2_ip: 107.242.64.49
+ domain_name: 'eng.mobilephone.net'
+# ocgapp_volume_id_0: 3c87a5dc-0dee-4831-8942-8ca44fdaf01a
+# vnf_name: zrdm6bvocg01_REDEDSIGN
+# vnf_id: 'dummy'
+# vf_module_id: 'dummy'
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01.yaml
new file mode 100644
index 0000000000..a1338725d9
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01.yaml
@@ -0,0 +1,215 @@
+heat_template_version: 2015-04-30
+#file version 1.0
+description: OCG Apps template
+
+parameters:
+ ocgapp_image_name:
+ type: string
+ description: operative system image
+ ocgapp_flavor_name:
+ type: string
+ description: resources to be applied on instances
+ ocgapp_public_key:
+ type: string
+ description: creator's ssh public key
+ oam_protected_net_name:
+ type: string
+ description: OAM network where instances will connect
+ oam_direct_net_name:
+ type: string
+ description: OAM network where instances will connect
+ cor_direct_net_name:
+ type: string
+ description: COR_DIRECT network where instances will connect
+ ocgapp_oam_protected_ip_0:
+ type: string
+ description: OCG OAM IP list
+ ocgapp_oam_direct_ip_0:
+ type: string
+ description: OCG OAM IP list
+ ocgapp_cor_direct_ip_0:
+ type: string
+ description: OCG COR_DIRECT IP list
+ ocgapp_cor_direct_v6_ip_0:
+ type: string
+ description: fixed IP assignment for VM's on the COR_DIRECT network
+ ocgapp_name_0:
+ type: string
+ description: OCG VM server name list (there should be 2, since we have 2 app vms)
+ availability_zone_0:
+ type: string
+ description: availability zone 1 ID or name
+ ocg_shared_server_grp_id:
+ type: string
+ description: OCG anti-affinity server group
+ ocgapp_shared_sec_grp_id:
+ type: string
+ description: security group
+ ocgapp_volume_id_0:
+ type: string
+ description: Unique IDs for volumes
+ vnf_name:
+ type: string
+ description: Unique name for this VF instance
+ vnf_id:
+ type: string
+ description: Unique ID for this VF instance
+ vf_module_id:
+ type: string
+ description: Unique ID for this VF module instance
+ nameserver_ip:
+ type: string
+ description: nameserver
+ eth1_ip_range:
+ type: string
+ description: range
+ eth1_netmask:
+ type: string
+ description: mask length
+ eth1_ip:
+ type: string
+ description: address
+ eth2_ip_range:
+ type: string
+ description: range
+ eth2_ip:
+ type: string
+ description: address
+ domain_name:
+ type: string
+ description: address
+
+resources:
+
+ vm_config_0:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: ungrouped
+ config:
+ str_replace:
+ template: {get_file: ocgapp_nested_0.txt}
+ params:
+ $ocg_hostname: { get_param: ocgapp_name_0 }
+ $ocg_hostip: { get_param: ocgapp_oam_protected_ip_0 }
+ $volume_id: {get_param: ocgapp_volume_id_0 }
+
+ ocgapp_admin_key:
+ type: OS::Nova::KeyPair
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_STACK_NAME_key_pair
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ STACK_NAME: {get_param: 'OS::stack_name'}
+ public_key: {get_param: ocgapp_public_key}
+ save_private_key: false
+
+ ocgapp_config_0:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: vm_config_0}
+
+ # APP_SERVER_0
+ ocgapp_oam_protected_port_0:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_protected_port_0
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_protected_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_oam_protected_ips, 0]}}]
+ fixed_ips: [{ "ip_address": {get_param: ocgapp_oam_protected_ip_0}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_oam_direct_port_0:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_direct_port_0
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_direct_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_oam_direct_ips, 0]}}]
+ fixed_ips: [{ "ip_address": {get_param: ocgapp_oam_direct_ip_0}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_cor_direct_port_0:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_cor_port_0
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: cor_direct_net_name}
+ fixed_ips: [{"ip_address": {get_param: ocgapp_cor_direct_ip_0}}, {"ip_address": {get_param: ocgapp_cor_direct_v6_ip_0}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_server_0:
+ type: OS::Nova::Server
+ properties:
+ key_name: {get_resource: ocgapp_admin_key}
+ name: {get_param: ocgapp_name_0}
+ image: {get_param: ocgapp_image_name}
+ flavor: {get_param: ocgapp_flavor_name}
+ availability_zone: {get_param: availability_zone_0}
+ scheduler_hints:
+ group: { get_param: ocg_shared_server_grp_id }
+ personality:
+ # Add resolv.conf file
+ "/etc/resolv.conf":
+ str_replace:
+ template: |
+ nameserver ${NAME_SERVER}
+ domain ${DOMAIN_NAME}
+ params:
+ ${NAME_SERVER}: {get_param: nameserver_ip}
+ ${DOMAIN_NAME}: {get_param: domain_name}
+ # Add hostname file
+ "/etc/hostname":
+ str_replace:
+ template: |
+ ${NAME}.${DOMAIN_NAME}
+ params:
+ ${NAME}: {get_param: ocgapp_name_0}
+ ${DOMAIN_NAME}: {get_param: domain_name}
+ # Add route-eth1 file
+ "/etc/sysconfig/network-scripts/route-eth1":
+ str_replace:
+ template: |
+ ${ETH1_IP_RANGE}/${ETH1_NETMASK} via ${ETH1_IP} dev eth1
+ params:
+ ${ETH1_IP_RANGE}: {get_param: eth1_ip_range}
+ ${ETH1_NETMASK}: {get_param: eth1_netmask}
+ ${ETH1_IP}: {get_param: eth1_ip}
+ # Add route-eth2 file
+ "/etc/sysconfig/network-scripts/route-eth2":
+ str_replace:
+ template: |
+ ${ETH2_IP_RANGE} via ${ETH2_IP} dev eth2
+ params:
+ ${ETH2_IP_RANGE}: {get_param: eth2_ip_range}
+# ${ETH2_NETMASK}: {get_param: eth2_netmask}
+ ${ETH2_IP}: {get_param: eth2_ip}
+ networks:
+ - port: {get_resource: ocgapp_oam_protected_port_0}
+ - port: {get_resource: ocgapp_oam_direct_port_0}
+ - port: {get_resource: ocgapp_cor_direct_port_0}
+ metadata:
+ vnf_id: {get_param: vnf_id}
+ vf_module_id: {get_param: vf_module_id}
+ vnf_name: {get_param: vnf_name}
+ user_data_format: RAW
+ user_data: {get_resource: ocgapp_config_0}
+# user_data: {get_resource: server_interface_config}
+
+ ocgapp_volume_attachment_0:
+ type: OS::Cinder::VolumeAttachment
+ properties:
+ volume_id: {get_param: ocgapp_volume_id_0}
+ instance_uuid: {get_resource: ocgapp_server_0}
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01_volume.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01_volume.env
new file mode 100644
index 0000000000..369444f6f8
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01_volume.env
@@ -0,0 +1,5 @@
+#file version 1.0
+parameters:
+ vnf_name: 'zrdm5avocg01'
+ ocgapp_volume_size_0: 400
+ ocgapp_volume_type_0: SF-Default-SSD
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01_volume.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01_volume.yaml
new file mode 100644
index 0000000000..3e96789145
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_01_volume.yaml
@@ -0,0 +1,35 @@
+heat_template_version: 2015-04-30
+#file version 2.3
+parameters:
+ vnf_name:
+ type: string
+ label: OCG VNF Name
+ description: OCG VNF Name
+ ocgapp_volume_size_0:
+ type: number
+ label: Cinder volume size
+ description: the size of the Cinder volume
+ constraints:
+ - range: { min: 100, max: 400 }
+ ocgapp_volume_type_0:
+ type: string
+ label: vm volume type
+ description: the name of the target volume backend for ocgapp1
+
+resources:
+ ocgapp_volume_0:
+ type: OS::Cinder::Volume
+ properties:
+ size: {get_param: ocgapp_volume_size_0 }
+ volume_type: {get_param: ocgapp_volume_type_0}
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_volume_1
+ params:
+ VF_NAME: { get_param: vnf_name }
+ STACK_NAME: { get_param: 'OS::stack_name' }
+
+outputs:
+ ocgapp_volume_id_0:
+ description: the ocgapp volume id 0
+ value: { get_resource: ocgapp_volume_0 } \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02.env
new file mode 100644
index 0000000000..aae3195d29
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02.env
@@ -0,0 +1,27 @@
+#file version 1.0
+parameters:
+ ocgapp_image_name: NIMBUS_OCG-APPLICATION_20180328.qcow2
+ ocgapp_flavor_name: nv.c8r32d320
+ ocgapp_public_key: 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAh5B/f9JmJL5HcIJT+XeGnE9Jlv22NYGweMx+M2eX53X0sxdB8onhqDiLFODgDgXUuQk11NM2tQeA+xH+nlZxdETK+5uKb2SLwsPjZnxHQPrGQP1KKAZi9aKoZFjYmWrYuqzQFT9QRz3gehG+pX82mzMkkE/Da2/XJ62zu8PKfapn63MhhmxG5w5onuN2XsM2zfI6GILFM56ppLtMCkgvzXVcWOpr7pD4kpnC9WavxwAkmQPrWIbTi0MKIEeuON0B+KRgC3b8GnCpuE2GFTffAm1MBgi0Urs8e3XGHsilVMqYdaCPZwq5ZKlzivX5wZQH9yT9m9Db6XLL66ZIaBHt2w== rsa-key-20170906'
+# oam_protected_net_name: MNS-25180-T-RDM6B_oam_protected_net_1
+# oam_direct_net_name: MNS-25180-T-RDM6B_oam_direct_net_1
+# cor_direct_net_name: MNS-25180-T-RDM6B_cor_direct_net_1
+# ocgapp_oam_protected_ip_1: 107.112.163.95
+# ocgapp_oam_direct_ip_1: 107.112.168.139
+# ocgapp_cor_direct_ip_1: 107.242.64.59
+# ocgapp_cor_direct_v6_ip_1: 2606:ae00:2e20:1404::11
+# ocgapp_name_1: zrdm6bvocg01app002_REDESIGN
+# availability_zone_0: rdm6b-kvm-az01
+# ocgapp_shared_sec_grp_id: acd420c8-37a0-4493-9296-bab085e76f45
+# ocg_shared_server_grp_id: e1ac6d1c-32aa-43dc-b1e1-0c33e69167f9
+ nameserver_ip: 135.214.16.119
+ eth1_ip_range: 130.4.128.0
+ eth1_netmask: 21
+ eth1_ip: 107.112.168.129
+ eth2_ip_range: 107.242.64.1
+ eth2_ip: 107.242.64.49
+ domain_name: eng.mobilephone.net
+# ocgapp_volume_id_1: c13725c4-adb8-4512-b2ec-2b4be476fe7c
+# vnf_name: zrdm6bvocg01_REDESIGN
+# vnf_id: 'dummy'
+# vf_module_id: 'dummy'
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02.yaml
new file mode 100644
index 0000000000..c435b123fc
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02.yaml
@@ -0,0 +1,217 @@
+heat_template_version: 2015-04-30
+#file version 1.0
+description: OCG Apps template
+
+parameters:
+ ocgapp_image_name:
+ type: string
+ description: operative system image
+ ocgapp_flavor_name:
+ type: string
+ description: resources to be applied on instances
+ ocgapp_public_key:
+ type: string
+ description: creator's ssh public key
+ oam_protected_net_name:
+ type: string
+ description: OAM network where instances will connect
+ oam_direct_net_name:
+ type: string
+ description: OAM network where instances will connect
+ cor_direct_net_name:
+ type: string
+ description: COR_DIRECT network where instances will connect
+ ocgapp_oam_protected_ip_1:
+ type: string
+ description: OCG OAM IP list
+ ocgapp_oam_direct_ip_1:
+ type: string
+ description: OCG OAM IP list
+ ocgapp_cor_direct_ip_1:
+ type: string
+ description: OCG COR_DIRECT IP list
+ ocgapp_cor_direct_v6_ip_1:
+ type: string
+ description: fixed IP assignment for VM's on the COR_DIRECT network
+ ocgapp_name_1:
+ type: string
+ description: OCG VM server name list (there should be 2, since we have 2 app vms)
+ availability_zone_0:
+ type: string
+ description: availability zone 1 ID or name
+ ocg_shared_server_grp_id:
+ type: string
+ description: OCG anti-affinity server group
+ ocgapp_shared_sec_grp_id:
+ type: string
+ description: security group
+ ocgapp_volume_id_1:
+ type: string
+ description: Unique IDs for volumes
+ vnf_name:
+ type: string
+ description: Unique name for this VF instance
+ vnf_id:
+ type: string
+ description: Unique ID for this VF instance
+ vf_module_id:
+ type: string
+ description: Unique ID for this VF module instance
+ nameserver_ip:
+ type: string
+ description: nameserver
+ eth1_ip_range:
+ type: string
+ description: range
+ eth1_netmask:
+ type: string
+ description: mask length
+ eth1_ip:
+ type: string
+ description: address
+ eth2_ip_range:
+ type: string
+ description: range
+ eth2_ip:
+ type: string
+ description: address
+ domain_name:
+ type: string
+ description: address
+
+resources:
+
+ vm_config_1:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: ungrouped
+ config:
+ str_replace:
+ template: {get_file: ocgapp_nested_0.txt}
+ params:
+ $ocg_hostname: { get_param: ocgapp_name_1 }
+ $ocg_hostip: { get_param: ocgapp_oam_protected_ip_1 }
+ $volume_id: {get_param: ocgapp_volume_id_1 }
+
+ ocgapp_admin_key:
+ type: OS::Nova::KeyPair
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_STACK_NAME_key_pair
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ STACK_NAME: {get_param: 'OS::stack_name'}
+ public_key: {get_param: ocgapp_public_key}
+ save_private_key: false
+
+ ocgapp_config_1:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: vm_config_1}
+
+# APP_SERVER_1
+ ocgapp_oam_protected_port_1:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_protected_port_1
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_protected_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_oam_protected_ips, 0]}}]
+ fixed_ips: [{ "ip_address": {get_param: ocgapp_oam_protected_ip_1}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_oam_direct_port_1:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_direct_port_1
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_direct_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_oam_direct_ips, 0]}}]
+ fixed_ips: [{ "ip_address": {get_param: ocgapp_oam_direct_ip_1}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_cor_direct_port_1:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_cor_port_1
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: cor_direct_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_cor_direct_ips, 0]}}, {"ip_address": {get_param: [ocgapp_cor_direct_v6_ips, 0]}}]
+ fixed_ips: [{"ip_address": {get_param: ocgapp_cor_direct_ip_1}}, {"ip_address": {get_param: ocgapp_cor_direct_v6_ip_1}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_server_1:
+ type: OS::Nova::Server
+ properties:
+ key_name: {get_resource: ocgapp_admin_key}
+ name: {get_param: ocgapp_name_1 }
+ image: {get_param: ocgapp_image_name}
+ flavor: {get_param: ocgapp_flavor_name}
+ availability_zone: {get_param: availability_zone_0}
+ scheduler_hints:
+ group: { get_param: ocg_shared_server_grp_id }
+ personality:
+ # Add resolv.conf file
+ "/etc/resolv.conf":
+ str_replace:
+ template: |
+ nameserver ${NAME_SERVER}
+ domain ${DOMAIN_NAME}
+ params:
+ ${NAME_SERVER}: {get_param: nameserver_ip}
+ ${DOMAIN_NAME}: {get_param: domain_name}
+ # Add hostname file
+ "/etc/hostname":
+ str_replace:
+ template: |
+ ${NAME}.${DOMAIN_NAME}
+ params:
+ ${NAME}: {get_param: ocgapp_name_1}
+ ${DOMAIN_NAME}: {get_param: domain_name}
+ # Add route-eth1 file
+ "/etc/sysconfig/network-scripts/route-eth1":
+ str_replace:
+ template: |
+ ${ETH1_IP_RANGE}/${ETH1_NETMASK} via ${ETH1_IP} dev eth1
+ params:
+ ${ETH1_IP_RANGE}: {get_param: eth1_ip_range}
+ ${ETH1_NETMASK}: {get_param: eth1_netmask}
+ ${ETH1_IP}: {get_param: eth1_ip}
+ # Add route-eth2 file
+ "/etc/sysconfig/network-scripts/route-eth2":
+ str_replace:
+ template: |
+ ${ETH2_IP_RANGE} via ${ETH2_IP} dev eth2
+ params:
+ ${ETH2_IP_RANGE}: {get_param: eth2_ip_range}
+# ${ETH2_NETMASK}: {get_param: eth2_netmask}
+ ${ETH2_IP}: {get_param: eth2_ip}
+ networks:
+ - port: {get_resource: ocgapp_oam_protected_port_1}
+ - port: {get_resource: ocgapp_oam_direct_port_1}
+ - port: {get_resource: ocgapp_cor_direct_port_1}
+ metadata:
+ vnf_id: {get_param: vnf_id}
+ vf_module_id: {get_param: vf_module_id}
+ vnf_name: {get_param: vnf_name}
+ user_data_format: RAW
+ user_data: {get_resource: ocgapp_config_1}
+# user_data: {get_resource: server_interface_config}
+
+ ocgapp_volume_attachment_1:
+ type: OS::Cinder::VolumeAttachment
+ properties:
+ volume_id: {get_param: ocgapp_volume_id_1}
+ instance_uuid: {get_resource: ocgapp_server_1}
+
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02_volume.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02_volume.env
new file mode 100644
index 0000000000..37b385fd76
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02_volume.env
@@ -0,0 +1,5 @@
+#file version 1.0
+parameters:
+ vnf_name: 'zrdm5avocg01'
+ ocgapp_volume_size_1: 400
+ ocgapp_volume_type_1: SF-Default-SSD
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02_volume.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02_volume.yaml
new file mode 100644
index 0000000000..3153e819a8
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_02_volume.yaml
@@ -0,0 +1,35 @@
+heat_template_version: 2015-04-30
+#file version 2.3
+parameters:
+ vnf_name:
+ type: string
+ label: OCG VNF Name
+ description: OCG VNF Name
+ ocgapp_volume_size_1:
+ type: number
+ label: Cinder volume size
+ description: the size of the Cinder volume
+ constraints:
+ - range: { min: 100, max: 400 }
+ ocgapp_volume_type_1:
+ type: string
+ label: vm volume type
+ description: the name of the target volume backend for ocgapp1
+
+resources:
+ ocgapp_volume_1:
+ type: OS::Cinder::Volume
+ properties:
+ size: {get_param: ocgapp_volume_size_1 }
+ volume_type: {get_param: ocgapp_volume_type_1}
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_volume_1
+ params:
+ VF_NAME: { get_param: vnf_name }
+ STACK_NAME: { get_param: 'OS::stack_name' }
+
+outputs:
+ ocgapp_volume_id_1:
+ description: the ocgapp volume id 1
+ value: { get_resource: ocgapp_volume_1 } \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03.env
new file mode 100644
index 0000000000..428442e56c
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03.env
@@ -0,0 +1,27 @@
+#file version 1.0
+parameters:
+ ocgapp_image_name: NIMBUS_OCG-APPLICATION_20180328.qcow2
+ ocgapp_flavor_name: nv.c8r32d320
+ ocgapp_public_key: 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAh5B/f9JmJL5HcIJT+XeGnE9Jlv22NYGweMx+M2eX53X0sxdB8onhqDiLFODgDgXUuQk11NM2tQeA+xH+nlZxdETK+5uKb2SLwsPjZnxHQPrGQP1KKAZi9aKoZFjYmWrYuqzQFT9QRz3gehG+pX82mzMkkE/Da2/XJ62zu8PKfapn63MhhmxG5w5onuN2XsM2zfI6GILFM56ppLtMCkgvzXVcWOpr7pD4kpnC9WavxwAkmQPrWIbTi0MKIEeuON0B+KRgC3b8GnCpuE2GFTffAm1MBgi0Urs8e3XGHsilVMqYdaCPZwq5ZKlzivX5wZQH9yT9m9Db6XLL66ZIaBHt2w== rsa-key-20170906'
+# oam_protected_net_name: MNS-25180-T-RDM6B_oam_protected_net_1
+# oam_direct_net_name: MNS-25180-T-RDM6B_oam_direct_net_1
+# cor_direct_net_name: MNS-25180-T-RDM6B_cor_direct_net_1
+# ocgapp_oam_protected_ip_2: 107.112.163.96
+# ocgapp_oam_direct_ip_2: 107.112.168.140
+# ocgapp_cor_direct_ip_2: 107.242.64.60
+# ocgapp_cor_direct_v6_ip_2: 2606:ae00:2e20:1404::12
+# ocgapp_name_2: zrdm6bvocg01app003_REDESIGN
+# availability_zone_1: rdm6b-kvm-az02
+# ocgapp_shared_sec_grp_id: acd420c8-37a0-4493-9296-bab085e76f45
+# ocg_shared_server_grp_id: e1ac6d1c-32aa-43dc-b1e1-0c33e69167f9
+ nameserver_ip: 135.214.16.119
+ eth1_ip_range: 130.4.128.0
+ eth1_netmask: 21
+ eth1_ip: 107.112.168.129
+ eth2_ip_range: 107.242.64.1
+ eth2_ip: 107.242.64.49
+ domain_name: eng.mobilephone.net
+# ocgapp_volume_id_2: b6fc2fa2-a5a7-470d-b022-ad38f0b7de90
+# vnf_name: zrdm6bvocg01_REDESIGN
+# vnf_id: 'dummy'
+# vf_module_id: 'dummy'
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03.yaml
new file mode 100644
index 0000000000..a4c88f8238
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03.yaml
@@ -0,0 +1,216 @@
+heat_template_version: 2015-04-30
+#file version 1.0
+description: OCG Apps template
+
+parameters:
+ ocgapp_image_name:
+ type: string
+ description: operative system image
+ ocgapp_flavor_name:
+ type: string
+ description: resources to be applied on instances
+ ocgapp_public_key:
+ type: string
+ description: creator's ssh public key
+ oam_protected_net_name:
+ type: string
+ description: OAM network where instances will connect
+ oam_direct_net_name:
+ type: string
+ description: OAM network where instances will connect
+ cor_direct_net_name:
+ type: string
+ description: COR_DIRECT network where instances will connect
+ ocgapp_oam_protected_ip_2:
+ type: string
+ description: OCG OAM IP list
+ ocgapp_oam_direct_ip_2:
+ type: string
+ description: OCG OAM IP list
+ ocgapp_cor_direct_ip_2:
+ type: string
+ description: OCG COR_DIRECT IP list
+ ocgapp_cor_direct_v6_ip_2:
+ type: string
+ description: fixed IP assignment for VM's on the COR_DIRECT network
+ ocgapp_name_2:
+ type: string
+ description: OCG VM server name list (there should be 2, since we have 2 app vms)
+ availability_zone_1:
+ type: string
+ description: availability zone 2 ID or name
+ ocg_shared_server_grp_id:
+ type: string
+ description: OCG anti-affinity server group
+ ocgapp_shared_sec_grp_id:
+ type: string
+ description: security group
+ ocgapp_volume_id_2:
+ type: string
+ description: Unique IDs for volumes
+ vnf_name:
+ type: string
+ description: Unique name for this VF instance
+ vnf_id:
+ type: string
+ description: Unique ID for this VF instance
+ vf_module_id:
+ type: string
+ description: Unique ID for this VF module instance
+ nameserver_ip:
+ type: string
+ description: nameserver
+ eth1_ip_range:
+ type: string
+ description: range
+ eth1_netmask:
+ type: string
+ description: mask length
+ eth1_ip:
+ type: string
+ description: address
+ eth2_ip_range:
+ type: string
+ description: range
+ eth2_ip:
+ type: string
+ description: address
+ domain_name:
+ type: string
+ description: address
+
+resources:
+
+ vm_config_2:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: ungrouped
+ config:
+ str_replace:
+ template: {get_file: ocgapp_nested_0.txt}
+ params:
+ $ocg_hostname: { get_param: ocgapp_name_2 }
+ $ocg_hostip: { get_param: ocgapp_oam_protected_ip_2 }
+ $volume_id: {get_param: ocgapp_volume_id_2 }
+
+ ocgapp_admin_key:
+ type: OS::Nova::KeyPair
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_STACK_NAME_key_pair
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ STACK_NAME: {get_param: 'OS::stack_name'}
+ public_key: {get_param: ocgapp_public_key}
+ save_private_key: false
+
+ ocgapp_config_2:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: vm_config_2}
+
+# APP_SERVER_2
+ ocgapp_oam_protected_port_2:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_protected_port_2
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_protected_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_oam_protected_ips, 0]}}]
+ fixed_ips: [{ "ip_address": {get_param: ocgapp_oam_protected_ip_2}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_oam_direct_port_2:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_direct_port_2
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_direct_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_oam_direct_ips, 0]}}]
+ fixed_ips: [{ "ip_address": {get_param: ocgapp_oam_direct_ip_2}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_cor_direct_port_2:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_cor_port_2
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: cor_direct_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_cor_direct_ips, 0]}}, {"ip_address": {get_param: [ocgapp_cor_direct_v6_ips, 0]}}]
+ fixed_ips: [{"ip_address": {get_param: ocgapp_cor_direct_ip_2}}, {"ip_address": {get_param: ocgapp_cor_direct_v6_ip_2}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_server_2:
+ type: OS::Nova::Server
+ properties:
+ key_name: {get_resource: ocgapp_admin_key}
+ name: {get_param: ocgapp_name_2}
+ image: {get_param: ocgapp_image_name}
+ flavor: {get_param: ocgapp_flavor_name}
+ availability_zone: {get_param: availability_zone_1}
+ scheduler_hints:
+ group: { get_param: ocg_shared_server_grp_id }
+ personality:
+ # Add resolv.conf file
+ "/etc/resolv.conf":
+ str_replace:
+ template: |
+ nameserver ${NAME_SERVER}
+ domain ${DOMAIN_NAME}
+ params:
+ ${NAME_SERVER}: {get_param: nameserver_ip}
+ ${DOMAIN_NAME}: {get_param: domain_name}
+ # Add hostname file
+ "/etc/hostname":
+ str_replace:
+ template: |
+ ${NAME}.${DOMAIN_NAME}
+ params:
+ ${NAME}: {get_param: ocgapp_name_2}
+ ${DOMAIN_NAME}: {get_param: domain_name}
+ # Add route-eth1 file
+ "/etc/sysconfig/network-scripts/route-eth1":
+ str_replace:
+ template: |
+ ${ETH1_IP_RANGE}/${ETH1_NETMASK} via ${ETH1_IP} dev eth1
+ params:
+ ${ETH1_IP_RANGE}: {get_param: eth1_ip_range}
+ ${ETH1_NETMASK}: {get_param: eth1_netmask}
+ ${ETH1_IP}: {get_param: eth1_ip}
+ # Add route-eth2 file
+ "/etc/sysconfig/network-scripts/route-eth2":
+ str_replace:
+ template: |
+ ${ETH2_IP_RANGE} via ${ETH2_IP} dev eth2
+ params:
+ ${ETH2_IP_RANGE}: {get_param: eth2_ip_range}
+# ${ETH2_NETMASK}: {get_param: eth2_netmask}
+ ${ETH2_IP}: {get_param: eth2_ip}
+ networks:
+ - port: {get_resource: ocgapp_oam_protected_port_2}
+ - port: {get_resource: ocgapp_oam_direct_port_2}
+ - port: {get_resource: ocgapp_cor_direct_port_2}
+ metadata:
+ vnf_id: {get_param: vnf_id}
+ vf_module_id: {get_param: vf_module_id}
+ vnf_name: {get_param: vnf_name}
+ user_data_format: RAW
+ user_data: {get_resource: ocgapp_config_2}
+
+ ocgapp_volume_attachment_2:
+ type: OS::Cinder::VolumeAttachment
+ properties:
+ volume_id: {get_param: ocgapp_volume_id_2}
+ instance_uuid: {get_resource: ocgapp_server_2}
+
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03_volume.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03_volume.env
new file mode 100644
index 0000000000..35f142884b
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03_volume.env
@@ -0,0 +1,5 @@
+#file version 1.0
+parameters:
+ vnf_name: 'zrdm5avocg01'
+ ocgapp_volume_size_2: 400
+ ocgapp_volume_type_2: SF-Default-SSD
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03_volume.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03_volume.yaml
new file mode 100644
index 0000000000..f67551f76d
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_03_volume.yaml
@@ -0,0 +1,35 @@
+heat_template_version: 2015-04-30
+#file version 2.3
+parameters:
+ vnf_name:
+ type: string
+ label: OCG VNF Name
+ description: OCG VNF Name
+ ocgapp_volume_size_2:
+ type: number
+ label: Cinder volume size
+ description: the size of the Cinder volume
+ constraints:
+ - range: { min: 100, max: 400 }
+ ocgapp_volume_type_2:
+ type: string
+ label: vm volume type
+ description: the name of the target volume backend for ocgapp1
+
+resources:
+ ocgapp_volume_2:
+ type: OS::Cinder::Volume
+ properties:
+ size: {get_param: ocgapp_volume_size_2 }
+ volume_type: {get_param: ocgapp_volume_type_2}
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_volume_2
+ params:
+ VF_NAME: { get_param: vnf_name }
+ STACK_NAME: { get_param: 'OS::stack_name' }
+
+outputs:
+ ocgapp_volume_id_2:
+ description: the ocgapp volume id 2
+ value: { get_resource: ocgapp_volume_2 } \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04.env
new file mode 100644
index 0000000000..fe83f2d08b
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04.env
@@ -0,0 +1,27 @@
+#file version 1.0
+parameters:
+ ocgapp_image_name: NIMBUS_OCG-APPLICATION_20180328.qcow2
+ ocgapp_flavor_name: nv.c8r32d320
+ ocgapp_public_key: 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAh5B/f9JmJL5HcIJT+XeGnE9Jlv22NYGweMx+M2eX53X0sxdB8onhqDiLFODgDgXUuQk11NM2tQeA+xH+nlZxdETK+5uKb2SLwsPjZnxHQPrGQP1KKAZi9aKoZFjYmWrYuqzQFT9QRz3gehG+pX82mzMkkE/Da2/XJ62zu8PKfapn63MhhmxG5w5onuN2XsM2zfI6GILFM56ppLtMCkgvzXVcWOpr7pD4kpnC9WavxwAkmQPrWIbTi0MKIEeuON0B+KRgC3b8GnCpuE2GFTffAm1MBgi0Urs8e3XGHsilVMqYdaCPZwq5ZKlzivX5wZQH9yT9m9Db6XLL66ZIaBHt2w== rsa-key-20170906'
+# oam_protected_net_name: MNS-25180-T-RDM6B_oam_protected_net_1
+# oam_direct_net_name: MNS-25180-T-RDM6B_oam_direct_net_1
+# cor_direct_net_name: MNS-25180-T-RDM6B_cor_direct_net_1
+# ocgapp_oam_protected_ip_3: 107.112.163.97
+# ocgapp_oam_direct_ip_3: 107.112.168.141
+# ocgapp_cor_direct_ip_3: 107.242.64.61
+# ocgapp_cor_direct_v6_ip_3: 2606:ae00:2e20:1404::13
+# ocgapp_name_3: zrdm6bvocg01app004_REDESIGN
+# availability_zone_1: rdm6b-kvm-az02
+# ocgapp_shared_sec_grp_id: acd420c8-37a0-4493-9296-bab085e76f45
+# ocg_shared_server_grp_id: e1ac6d1c-32aa-43dc-b1e1-0c33e69167f9
+ nameserver_ip: 135.214.16.119
+ eth1_ip_range: 130.4.128.0
+ eth1_netmask: 21
+ eth1_ip: 107.112.168.129
+ eth2_ip_range: 107.242.64.1
+ eth2_ip: 107.242.64.49
+ domain_name: eng.mobilephone.net
+# ocgapp_volume_id_3: 85eeae51-8115-49ac-837e-e0079860f330
+# vnf_name: zrdm6bvocg01_REDESIGN
+# vnf_id: 'dummy'
+# vf_module_id: 'dummy'
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04.yaml
new file mode 100644
index 0000000000..aeb9fe9597
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04.yaml
@@ -0,0 +1,215 @@
+heat_template_version: 2015-04-30
+#file version 1.0
+description: OCG Apps template
+
+parameters:
+ ocgapp_image_name:
+ type: string
+ description: operative system image
+ ocgapp_flavor_name:
+ type: string
+ description: resources to be applied on instances
+ ocgapp_public_key:
+ type: string
+ description: creator's ssh public key
+ oam_protected_net_name:
+ type: string
+ description: OAM network where instances will connect
+ oam_direct_net_name:
+ type: string
+ description: OAM network where instances will connect
+ cor_direct_net_name:
+ type: string
+ description: COR_DIRECT network where instances will connect
+ ocgapp_oam_protected_ip_3:
+ type: string
+ description: OCG OAM IP list
+ ocgapp_oam_direct_ip_3:
+ type: string
+ description: OCG OAM IP list
+ ocgapp_cor_direct_ip_3:
+ type: string
+ description: OCG COR_DIRECT IP list
+ ocgapp_cor_direct_v6_ip_3:
+ type: string
+ description: fixed IP assignment for VM's on the COR_DIRECT network
+ ocgapp_name_3:
+ type: string
+ description: OCG VM server name list (there should be 2, since we have 2 app vms)
+ availability_zone_1:
+ type: string
+ description: availability zone 2 ID or name
+ ocg_shared_server_grp_id:
+ type: string
+ description: OCG anti-affinity server group
+ ocgapp_shared_sec_grp_id:
+ type: string
+ description: security group
+ ocgapp_volume_id_3:
+ type: string
+ description: Unique IDs for volumes
+ vnf_name:
+ type: string
+ description: Unique name for this VF instance
+ vnf_id:
+ type: string
+ description: Unique ID for this VF instance
+ vf_module_id:
+ type: string
+ description: Unique ID for this VF module instance
+ nameserver_ip:
+ type: string
+ description: nameserver
+ eth1_ip_range:
+ type: string
+ description: range
+ eth1_netmask:
+ type: string
+ description: mask length
+ eth1_ip:
+ type: string
+ description: address
+ eth2_ip_range:
+ type: string
+ description: range
+ eth2_ip:
+ type: string
+ description: address
+ domain_name:
+ type: string
+ description: address
+
+resources:
+
+ vm_config_3:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: ungrouped
+ config:
+ str_replace:
+ template: {get_file: ocgapp_nested_0.txt}
+ params:
+ $ocg_hostname: { get_param: ocgapp_name_3 }
+ $ocg_hostip: { get_param: ocgapp_oam_protected_ip_3 }
+ $volume_id: {get_param: ocgapp_volume_id_3 }
+
+ ocgapp_admin_key:
+ type: OS::Nova::KeyPair
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_STACK_NAME_key_pair
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ STACK_NAME: {get_param: 'OS::stack_name'}
+ public_key: {get_param: ocgapp_public_key}
+ save_private_key: false
+
+ ocgapp_config_3:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: vm_config_3}
+
+# APP_SERVER_3
+ ocgapp_oam_protected_port_3:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_protected_port_3
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_protected_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_oam_protected_ips, 3]}}]
+ fixed_ips: [{ "ip_address": {get_param: ocgapp_oam_protected_ip_3}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_oam_direct_port_3:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_oam_direct_port_3
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_direct_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_oam_direct_ips, 3]}}]
+ fixed_ips: [{ "ip_address": {get_param: ocgapp_oam_direct_ip_3}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_cor_direct_port_3:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgapp_cor_port_3
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: cor_direct_net_name}
+# fixed_ips: [{"ip_address": {get_param: [ocgapp_cor_direct_ips, 3]}}, {"ip_address": {get_param: [ocgapp_cor_direct_v6_ips, 3]}}]
+ fixed_ips: [{"ip_address": {get_param: ocgapp_cor_direct_ip_3}}, {"ip_address": {get_param: ocgapp_cor_direct_v6_ip_3}}]
+ security_groups: [{get_param: ocgapp_shared_sec_grp_id}]
+
+ ocgapp_server_3:
+ type: OS::Nova::Server
+ properties:
+ key_name: {get_resource: ocgapp_admin_key}
+ name: {get_param: [ocgapp_name_3]}
+ image: {get_param: ocgapp_image_name}
+ flavor: {get_param: ocgapp_flavor_name}
+ availability_zone: {get_param: availability_zone_1}
+ scheduler_hints:
+ group: { get_param: ocg_shared_server_grp_id }
+ personality:
+ # Add resolv.conf file
+ "/etc/resolv.conf":
+ str_replace:
+ template: |
+ nameserver ${NAME_SERVER}
+ domain ${DOMAIN_NAME}
+ params:
+ ${NAME_SERVER}: {get_param: nameserver_ip}
+ ${DOMAIN_NAME}: {get_param: domain_name}
+ # Add hostname file
+ "/etc/hostname":
+ str_replace:
+ template: |
+ ${NAME}.${DOMAIN_NAME}
+ params:
+ ${NAME}: {get_param: ocgapp_name_3}
+ ${DOMAIN_NAME}: {get_param: domain_name}
+ # Add route-eth1 file
+ "/etc/sysconfig/network-scripts/route-eth1":
+ str_replace:
+ template: |
+ ${ETH1_IP_RANGE}/${ETH1_NETMASK} via ${ETH1_IP} dev eth1
+ params:
+ ${ETH1_IP_RANGE}: {get_param: eth1_ip_range}
+ ${ETH1_NETMASK}: {get_param: eth1_netmask}
+ ${ETH1_IP}: {get_param: eth1_ip}
+ # Add route-eth2 file
+ "/etc/sysconfig/network-scripts/route-eth2":
+ str_replace:
+ template: |
+ ${ETH2_IP_RANGE} via ${ETH2_IP} dev eth2
+ params:
+ ${ETH2_IP_RANGE}: {get_param: eth2_ip_range}
+# ${ETH2_NETMASK}: {get_param: eth2_netmask}
+ ${ETH2_IP}: {get_param: eth2_ip}
+ networks:
+ - port: {get_resource: ocgapp_oam_protected_port_3}
+ - port: {get_resource: ocgapp_oam_direct_port_3}
+ - port: {get_resource: ocgapp_cor_direct_port_3}
+ metadata:
+ vnf_id: {get_param: vnf_id}
+ vf_module_id: {get_param: vf_module_id}
+ vnf_name: {get_param: vnf_name}
+ user_data_format: RAW
+ user_data: {get_resource: ocgapp_config_3}
+
+ ocgapp_volume_attachment_3:
+ type: OS::Cinder::VolumeAttachment
+ properties:
+ volume_id: {get_param: ocgapp_volume_id_3}
+ instance_uuid: {get_resource: ocgapp_server_3}
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04_volume.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04_volume.env
new file mode 100644
index 0000000000..983d5d2e33
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04_volume.env
@@ -0,0 +1,5 @@
+#file version 1.0
+parameters:
+ vnf_name: 'zrdm5avocg01'
+ ocgapp_volume_size_3: 400
+ ocgapp_volume_type_3: SF-Default-SSD
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04_volume.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04_volume.yaml
new file mode 100644
index 0000000000..2419c1868a
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_04_volume.yaml
@@ -0,0 +1,35 @@
+heat_template_version: 2015-04-30
+#file version 2.3
+parameters:
+ vnf_name:
+ type: string
+ label: OCG VNF Name
+ description: OCG VNF Name
+ ocgapp_volume_size_3:
+ type: number
+ label: Cinder volume size
+ description: the size of the Cinder volume
+ constraints:
+ - range: { min: 100, max: 400 }
+ ocgapp_volume_type_3:
+ type: string
+ label: vm volume type
+ description: the name of the target volume backend for ocgapp1
+
+resources:
+ ocgapp_volume_3:
+ type: OS::Cinder::Volume
+ properties:
+ size: {get_param: ocgapp_volume_size_3 }
+ volume_type: {get_param: ocgapp_volume_type_3}
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_volume_3
+ params:
+ VF_NAME: { get_param: vnf_name }
+ STACK_NAME: { get_param: 'OS::stack_name' }
+
+outputs:
+ ocgapp_volume_id_3:
+ description: the ocgapp volume id 3
+ value: { get_resource: ocgapp_volume_3 } \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_nested_0.txt b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_nested_0.txt
new file mode 100644
index 0000000000..57ab985c77
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgapp_nested_0.txt
@@ -0,0 +1,19 @@
+#cloud-config
+
+runcmd:
+
+ # Allow for host resolution - With proper DNS in place, this is not needed
+ - echo "$ocg_hostip $ocg_hostname" >> /etc/hosts
+
+ ##########################
+ # Cinder Volume Mounting
+ ##########################
+ - sudo su - root
+ - voldata_id="$volume_id"
+ - voldata_dev="/dev/disk/by-id/virtio-$(echo ${voldata_id} | cut -c -20)"
+ - mkfs.ext4 ${voldata_dev}
+ - sudo mkdir -pv /opt/ocg/data
+ - sudo chown -R fworks:fworks /opt/ocg/data
+ - echo "${voldata_dev} /opt/ocg/data ext4 defaults 1 2" >> /etc/fstab
+ - mount /opt/ocg/data
+ \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr.env
new file mode 100644
index 0000000000..501135aba8
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr.env
@@ -0,0 +1,26 @@
+#file version 1.0
+parameters:
+ ocgmgr_image_name: 'vOCG_MGR_SNAP_20180130'
+ ocgmgr_flavor_name: nv.c8r32d320
+ java_home: /home/fworks/java/jdk1.8.0_112
+ ocg_user: fworks
+ ovlm_install_dir: /home/fworks/Installer/weaver
+ ocg_install_jar: /home/fworks/Installer/ocg10/installer.jar
+ ocg_install_properties: /tmp/ocg.install.properties
+ wim_install_file: /home/fworks/Installer/wim/ovlm-integration-module.sh
+ keycloak_rpm_name: keycloak-pkg-x86_64.rpm
+ ovlm_install_properties: /tmp/ovlm.install.properties
+# ocgmgr_public_key: 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAh5B/f9JmJL5HcIJT+XeGnE9Jlv22NYGweMx+M2eX53X0sxdB8onhqDiLFODgDgXUuQk11NM2tQeA+xH+nlZxdETK+5uKb2SLwsPjZnxHQPrGQP1KKAZi9aKoZFjYmWrYuqzQFT9QRz3gehG+pX82mzMkkE/Da2/XJ62zu8PKfapn63MhhmxG5w5onuN2XsM2zfI6GILFM56ppLtMCkgvzXVcWOpr7pD4kpnC9WavxwAkmQPrWIbTi0MKIEeuON0B+KRgC3b8GnCpuE2GFTffAm1MBgi0Urs8e3XGHsilVMqYdaCPZwq5ZKlzivX5wZQH9yT9m9Db6XLL66ZIaBHt2w== rsa-key-20170906'
+# oam_protected_net_name: MNS-25180-T-RDM6B_oam_protected_net_1
+# ocgmgr_oam_protected_ips: 107.112.163.100,107.112.163.101
+# ocgmgr_names: zrdm6bvocg01mgr001-ap,zrdm6bvocg01mgr002-ap
+# availability_zone_0: rdm6b-kvm-az01
+# availability_zone_1: rdm6b-kvm-az02
+# ocgmgr_shared_sec_grp_id: ca86ec60-38b7-4d72-b1f6-423a4f0c4be9
+# ocgmgr_volume_ids: [
+# "0848cea8-c9de-45e5-a047-472b778488fe",
+# "c089f811-5122-4273-80c1-e6f48034b0a5"
+#]
+# vnf_name: zrdm6bvocg01_ap
+# vnf_id: 'dummy'
+# vf_module_id: 'dummy'
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr.yaml
new file mode 100644
index 0000000000..7735817555
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr.yaml
@@ -0,0 +1,209 @@
+heat_template_version: 2015-04-30
+#file version 1.0
+description: OCG Managers template
+
+parameters:
+ ocgmgr_image_name:
+ type: string
+ description: operative system image
+ ocgmgr_flavor_name:
+ type: string
+ description: resources to be applied on instances
+ ocgmgr_public_key:
+ type: string
+ description: creator's ssh public key
+ oam_protected_net_name:
+ type: string
+ description: OAM network where instances will connect
+ ocgmgr_oam_protected_ips:
+ type: comma_delimited_list
+ description: OCG OAM IP list
+ ocgmgr_names:
+ type: comma_delimited_list
+ description: OCG MGR VM names list (should be 2, since we have 2 MGR VMs)
+ availability_zone_0:
+ type: string
+ description: availability zone 0 ID or name
+ availability_zone_1:
+ type: string
+ description: availability zone 1 ID or name
+ ocgmgr_shared_sec_grp_id:
+ type: string
+ description: security group
+ ocgmgr_volume_ids:
+ type: json
+ description: Unique IDs for volumes
+ vnf_name:
+ type: string
+ description: Unique name for this VF instance
+ vnf_id:
+ type: string
+ description: Unique ID for this VF instance
+ vf_module_id:
+ type: string
+ description: Unique ID for this VF module instance
+ java_home:
+ type: string
+ description: java home
+ ocg_user:
+ type: string
+ description: user to install ocg
+ ocg_install_jar:
+ type: string
+ description: location of ocg installer
+ ocg_install_properties:
+ type: string
+ description: location of ocg install properties
+ wim_install_file:
+ type: string
+ description: WIM Install File location
+ ovlm_install_dir:
+ type: string
+ description: Location of the ovlm-install dir
+ keycloak_rpm_name:
+ type: string
+ description: keycloak rpm name
+ ovlm_install_properties:
+ type: string
+ description: ovlm install properties
+resources:
+ vm_config_0:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: ungrouped
+ config:
+ str_replace:
+ template: {get_file: ocgmgr_nested_0.txt}
+# resource_def:
+# type: ocgmgr_nested.yaml
+ params:
+ $java_home: { get_param: java_home }
+ $ocg_user: { get_param: ocg_user }
+ $ocg_install_jar: { get_param: ocg_install_jar }
+ $ocg_install_properties: { get_param: ocg_install_properties }
+ $ocg_hostname: { get_param: [ocgmgr_names, 0]}
+ $ocg_hostip: { get_param: [ocgmgr_oam_protected_ips, 0]}
+ $wim_install_file: { get_param: wim_install_file }
+ $ovlm_install_properties: { get_param: ovlm_install_properties }
+ $ovlm_hostname: {get_param: [ocgmgr_names, 0]}
+ $ovlm_mgr002_hostname: {get_param: [ocgmgr_names, 1]}
+ $ovlm_install_dir: {get_param: ovlm_install_dir}
+ $keycloak_rpm_name: {get_param: keycloak_rpm_name}
+ $volume_id: {get_param: [ocgmgr_volume_ids, 0]}
+
+ vm_config_1:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: ungrouped
+ config:
+ str_replace:
+ template: {get_file: ocgmgr_nested_1.txt}
+ params:
+ $ocg_hostname: { get_param: [ocgmgr_names, 1]}
+ $ocg_hostip: { get_param: [ocgmgr_oam_protected_ips, 1]}
+ $volume_id: {get_param: [ocgmgr_volume_ids, 1]}
+
+ ocgmgr_admin_key:
+ type: OS::Nova::KeyPair
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_STACK_NAME_key_pair
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ STACK_NAME: {get_param: 'OS::stack_name'}
+ public_key: {get_param: ocgmgr_public_key}
+ save_private_key: false
+
+ ocgmgr_oam_protected_0_port:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgmgr_oam_port_0
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_protected_net_name}
+ fixed_ips: [{"ip_address": {get_param: [ocgmgr_oam_protected_ips, 0]}}]
+ security_groups: [{get_param: ocgmgr_shared_sec_grp_id}]
+
+ ocgmgr_config_0:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: vm_config_0}
+
+ ocgmgr_config_1:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: vm_config_1}
+
+ ocgmgr_server_0:
+ type: OS::Nova::Server
+ properties:
+ key_name: {get_resource: ocgmgr_admin_key}
+ name: {get_param: [ocgmgr_names, 0]}
+ image: {get_param: ocgmgr_image_name}
+ flavor: {get_param: ocgmgr_flavor_name}
+ availability_zone: {get_param: availability_zone_0}
+ networks:
+ - port: {get_resource: ocgmgr_oam_protected_0_port}
+ metadata:
+ vnf_id: {get_param: vnf_id}
+ vf_module_id: {get_param: vf_module_id}
+ vnf_name: {get_param: vnf_name}
+ user_data_format: SOFTWARE_CONFIG
+ user_data: {get_resource: ocgmgr_config_0}
+ #user_data: {get_resource: server_interface_config}
+
+ ocgmgr_oam_protected_1_port:
+ type: OS::Neutron::Port
+ properties:
+ name:
+ str_replace:
+ template: VNF_NAME_ocgmgr_oam_port_1
+ params:
+ VNF_NAME: {get_param: vnf_name}
+ network: {get_param: oam_protected_net_name}
+ fixed_ips: [{"ip_address": {get_param: [ocgmgr_oam_protected_ips, 1]}}]
+ security_groups: [{get_param: ocgmgr_shared_sec_grp_id}]
+
+ ocgmgr_server_1:
+ type: OS::Nova::Server
+ properties:
+ key_name: {get_resource: ocgmgr_admin_key}
+ name: {get_param: [ocgmgr_names, 1]}
+ image: {get_param: ocgmgr_image_name}
+ flavor: {get_param: ocgmgr_flavor_name}
+ availability_zone: {get_param: availability_zone_1}
+ networks:
+ - port: {get_resource: ocgmgr_oam_protected_1_port}
+ metadata:
+ vnf_id: {get_param: vnf_id}
+ vf_module_id: {get_param: vf_module_id}
+ vnf_name: {get_param: vnf_name}
+ user_data_format: RAW
+ user_data: {get_resource: ocgmgr_config_1}
+ #user_data: {get_resource: server_interface_config}
+
+ ocgmgr_volume_attachment_0:
+ type: OS::Cinder::VolumeAttachment
+ properties:
+ volume_id: {get_param: [ocgmgr_volume_ids, 0]}
+ instance_uuid: {get_resource: ocgmgr_server_0}
+
+ ocgmgr_volume_attachment_1:
+ type: OS::Cinder::VolumeAttachment
+ properties:
+ volume_id: {get_param: [ocgmgr_volume_ids, 1]}
+ instance_uuid: {get_resource: ocgmgr_server_1}
+
+ #server_interface_config:
+ # type: OS::Heat::CloudConfig
+ # properties:
+ # cloud_config:
+ # write_files:
+ # - path: /etc/sysconfig/network-scripts/route-eth0
+ # permissions: "0644"
+ # content: { get_param: dns_route_eth0 }
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_0.txt b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_0.txt
new file mode 100644
index 0000000000..7100bb7b6b
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_0.txt
@@ -0,0 +1,411 @@
+#cloud-config
+
+write_files:
+ - path: /tmp/ocg-bashrc
+ content: |
+ export JAVA_HOME=$java_home
+ export FUSIONWORKS_HOME=/home/$ocg_user/ocg10/fwhome
+ export FUSIONWORKS_PROD=/home/$ocg_user/ocg10/fwprod
+ export PATH=$PATH:$JAVA_HOME/bin:$FUSIONWORKS_PROD/bin:$FUSIONWORKS_HOME:$FUSIONWORKS_PROD:$HOME:.
+ export OVLMCM_BASEURL=https://$ovlm_hostname:28010
+ export OVLMFE_BASEURL=https://$ovlm_hostname:28050
+ export OVLMDM_BASEURL=https://$ovlm_hostname:28130
+ export OVLMFA_BASEURL=https://$ovlm_hostname:28800
+ export baseurl=https://localhost:28050
+ export OVLM_INTEGRATION_HOME=/home/$ocg_user/ovlm-integration-module
+ export OVLMFE_VERIFY_SERVER_CERTIFICATE=yes
+ export OVLMFE_CA_BUNDLE_PATH=~/weaver_install/ovlm-install/certs/ca_bundle
+ export OVLMCM_VERIFY_SERVER_CERTIFICATE=yes
+ export OVLMCM_CA_BUNDLE_PATH=~/weaver_install/ovlm-install/certs/ca_bundle
+ export OVLMDM_VERIFY_SERVER_CERTIFICATE=yes
+ export OVLMDM_CA_BUNDLE_PATH=~/weaver_install/ovlm-install/certs/ca_bundle
+ export OVLMFA_VERIFY_SERVER_CERTIFICATE=yes
+ export OVLMFA_CA_BUNDLE_PATH=~/weaver_install/ovlm-install/certs/ca_bundle
+
+ - path: /tmp/keycloak-bashrc
+ content: |
+ export JBOSS_HOME=/home/$ocg_user/keycloak
+ export JAVA_HOME=$java_home
+ export PATH=$PATH:$JAVA_HOME/bin
+
+ - path: /tmp/keycloak-setup.sh
+ permissions: '0755'
+ content: |
+ cp -f /tmp/keycloak.conf /home/$ocg_user/keycloak/etc/keycloak.conf
+ cp -f /tmp/keycloak.properties /home/$ocg_user/keycloak/etc/keycloak.properties
+ sed -i -e 's/<server name="default-server">/& <https-listener name="https" socket-binding="https" security-realm="UndertowRealm"\/>/' /home/$ocg_user/keycloak/etc/standalone/standalone.xml
+ sed -i -e 's/127.0.0.1/$ovlm_hostname/' /home/$ocg_user/keycloak/etc/standalone/standalone.xml
+ sed -i -e 's/8080/8090/' /home/$ocg_user/keycloak/etc/standalone/standalone.xml
+ sed -i -e 's/8443/9443/' /home/$ocg_user/keycloak/etc/standalone/standalone.xml
+ sed -i -e "s/<security-realms>/&\
+ <security-realm name=\"UndertowRealm\">\
+ <server-identities>\
+ <ssl>\
+ <keystore path=\"keycloak.jks\" relative-to=\"jboss.server.config.dir\" keystore-password=\"password\" \/>\
+ <\/ssl>\
+ <\/server-identities>\
+ <\/security-realm>/" /home/$ocg_user/keycloak/etc/standalone/standalone.xml
+
+ - path: /tmp/keycloak.conf
+ content: |
+ KEYCLOAK_MODE=standalone
+ KEYCLOAK_BIND=0.0.0.0
+ JAVA_HOME=$java_home
+ KEYCLOAK_JAVA_OPTS="\
+ -Djava.net.preferIPv4Stack=true \
+ -Djava.awt.headless=true \
+ -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m"
+ KEYCLOAK_SERVER_OPTS="--properties=/home/$ocg_user/keycloak/etc/keycloak.properties"
+ JBOSS_LOG_DIR=/home/$ocg_user/keycloak/log/standalone
+ JBOSS_CONFIG_DIR=/home/$ocg_user/keycloak/etc/standalone
+ JBOSS_HOME=/home/$ocg_user/keycloak
+
+ - path: /tmp/keycloak.properties
+ content: |
+ jboss.http.port=8090
+ jboss.https.port=9443
+ jboss.management.http.port=9990
+ jboss.management.https.port=9993
+ jboss.server.data.dir=/home/$ocg_user/keycloak/var/standalone
+
+ - path: $ocg_install_properties
+ content: |
+ InstallationId=OCG_MASTER
+ TimeZone=America/New_York
+
+ # Directories where the binaries and configuration will be stored
+ # If the specified directories exist then their content will be deleted.
+ FusionWorksHomeDirectory=/home/$ocg_user/ocg10/fwhome
+ FusionWorksProductDirectory=/home/$ocg_user/ocg10/fwprod
+ ConfigPort=25000
+ ConfigHost=$ocg_hostname
+ EventPort=25010
+ EventHost=$ocg_hostname
+ SNMPAgentPort=25020
+ MediationServerDatabasePort=25030
+
+ JBOSSHost=$ocg_hostname
+ JBOSSHttpPort=25041
+ JBOSSHttpsPort=25042
+ JBOSSRemotePort=25043
+ JBOSSPortBase=25050
+ JAVA_HOME=$java_home
+
+ # addons FW install.properties.template install.properties.template.1 install.properties.template.2 install.properties.template.dup.props install.properties.template.sorted install.properties.template.sorted.uniq java share xml
+ # Do not change these values
+ DatabaseUserName=OCG
+ DatabasePassword=OCG
+
+ # Enable SSL (https) access to the OAM and Policy Manager web applications.
+ # Choices are: OFF, ON
+ EnableWebSsl=
+ # Security option choices are: ON, OFF
+ SecurityOption=
+
+ - path: $ovlm_install_properties
+ content: |
+ protocol: https
+ https_configuration:
+ server:
+ keystore_path: key_store.jks
+ keystore_password: password
+ key_password: password
+ client:
+ verify_server_certificate: true
+ truststore_path: trust_store.jks
+ service_owner:
+ user: ovlm
+ user_group: ovlm
+ ssh_user: ovlmrsync
+ log_rotation:
+ interval: monthly
+ max_file_size: 5000000
+ installer:
+ ssh_bin: /usr/bin/ssh
+ rsync_bin: /usr/bin/rsync
+ ssh_options: ''
+ installation_directories:
+ path_bin: /opt/weaver_home/bin/
+ path_cfg: /opt/weaver_home/etc/
+ path_run: /opt/weaver_home/run/
+ snmp:
+ manager: $ovlm_hostname
+ community: public
+ deployment_manager:
+ hosts:
+ - $ovlm_hostname
+ properties:
+ server:
+ port: 28130
+ spring:
+ datasource:
+ username: dm
+ password: dm
+ logging:
+ file: /opt/ocg/data/weaver_home/ovlm-dm.log
+ workflow_engine:
+ hosts:
+ - $ovlm_hostname
+ properties:
+ server:
+ port: 8099
+ logging:
+ path: /opt/ocg/data/weaver_home/WF/
+ vnfm_gui:
+ hosts:
+ - $ovlm_hostname
+ properties:
+ server:
+ port: 28200
+ logging:
+ file: /opt/ocg/data/weaver_home/ovlm-vnfm.log
+ frontend:
+ hosts:
+ - $ovlm_hostname
+ properties:
+ server:
+ port: 28050
+ logging:
+ file: /opt/ocg/data/weaver_home/ovlm-fe.log
+ configuration_manager:
+ hosts:
+ - $ovlm_hostname
+ properties:
+ server:
+ port: 28010
+ rsync_port: 28000
+ repository-root: /opt/ocg/data/weaver_home/repository-root
+ logging:
+ file: /opt/ocg/data/weaver_home/ovlm-cm.log
+ resource_manager:
+ hosts:
+ - $ovlm_hostname
+ properties:
+ server:
+ port: 28020
+ logging:
+ file: /opt/ocg/data/weaver_home/ovlm-rm.log
+ resource_agent:
+ properties:
+ server:
+ port: 28030
+ sudo_privileges_required: true
+ sudo_privileges:
+ - /bin/postgresql-setup
+ - /bin/rpm
+ - /usr/bin/yum
+ - /bin/bash
+ - /bin/sudo *
+ - /usr/bin/sudo *
+ - /usr/bin/systemctl status *
+ - /usr/bin/systemctl start *
+ - /usr/bin/systemctl stop *
+ - /usr/bin/systemctl restart *
+ - /usr/bin/systemctl is-active *
+ - /usr/bin/systemctl daemon-reload
+ - /sbin/useradd
+ - /sbin/userdel
+ - /sbin/usermod
+ - /bin/mkdir
+ - /bin/rm
+ - /bin/rsync
+ - /usr/bin/rsync
+ - /bin/chown
+ - /bin/chmod
+ resource_agent:
+ metadata:
+ stage:
+ timeout: 100
+ parameters:
+ rsync:
+ timeout: 100
+ bin: rsync
+ repository-root: /opt/ocg/data/weaver_home/repository-root
+ logging:
+ path: /opt/weaver_home/RA/
+ instance_inventory_manager:
+ hosts:
+ - $ovlm_hostname
+ properties:
+ server:
+ port: 28120
+ logging:
+ file: /opt/ocg/data/weaver_home/ovlm-iim.log
+ auth_server:
+ hosts:
+ - $ovlm_hostname
+ admin:
+ username: admin
+ password: Openet01
+ url: https://$ovlm_hostname:9443/auth
+ properties:
+ server:
+ port: 9443
+ failover_agent:
+ hosts:
+ - $ovlm_hostname
+ properties:
+ server:
+ port: 28800
+ mode:
+ init_mode: active
+ remote_host: $ovlm_mgr002_hostname
+ remote_port: 28800
+ post_failover:
+ rsync:
+ interval: 360
+ bin: /usr/bin/rsync
+ timeout: 100
+ location_list:
+ - destination: /tmp/ovlm_dm_failover_dbsync/
+ source: /tmp/ovlm_dm_failover_dbsync/
+ pre: /opt/weaver_home/bin/dm/failover/backup_dm_db.sh
+ complete: /opt/weaver_home/bin/dm/failover/restore_dm_db.sh
+ - destination: /opt/weaver_home/bin/dm/repository-root/
+ source: /opt/weaver_home/bin/dm/repository-root/
+ - destination: /opt/weaver_home/repository-root/
+ source: /opt/weaver_home/repository-root/
+ - destination: /opt/weaver_home/bin/iim/repository-root/
+ source: /opt/weaver_home/bin/iim/repository-root/
+ - destination: /opt/weaver_home/etc/fe/meta/flow_mappings.yml
+ source: /opt/weaver_home/etc/fe/meta/flow_mappings.yml
+ - destination: /tmp/ovlm_keycloak_backup.zip
+ source: /tmp/ovlm_keycloak_backup.zip
+ pre: sudo bash /home/fworks/keycloak/scripts/backup-db.sh /tmp/ovlm_keycloak_backup.zip
+ complete: sudo bash /home/fworks/keycloak/scripts/restore-db.sh /tmp/ovlm_keycloak_backup.zip
+ post:
+ - destination: /home/fworks/ocg10/fwprod/
+ source: /home/fworks/ocg10/fwprod/
+ excludes:
+ pre: sudo sudo -E /home/fworks/ocg10/fwprod/bin/siteReplication/ActiveSite_PreSync_hookpoint.sh $ocg_user /home/fworks/GeoReplication/datadir /home/fworks/GeoReplication/ActiveNode.env
+ post: sudo sudo -E /home/fworks/ocg10/fwprod/bin/siteReplication/ActiveSite_PostSync_hookpoint.sh $ocg_user /home/fworks/GeoReplication/datadir /home/fworks/GeoReplication/ActiveNode.env
+ complete: sudo sudo -E /home/fworks/ocg10/fwprod/bin/siteReplication/PassiveSite_CompleteSync_hookpoint.sh $ocg_user /home/fworks/GeoReplication/datadir /home/fworks/GeoReplication/ActiveNode.env
+ - destination: /home/fworks/ocg10/fwhome/
+ source: /home/fworks/ocg10/fwhome/
+ excludes:
+ pre: sudo sudo -E /home/fworks/ocg10/fwprod/bin/siteReplication/ActiveSite_PreSync_hookpoint.sh $ocg_user /home/fworks/GeoReplication/datadir /home/fworks/GeoReplication/ActiveNode.env
+ post: sudo sudo -E /home/fworks/ocg10/fwprod/bin/siteReplication/ActiveSite_PostSync_hookpoint.sh $ocg_user /home/fworks/GeoReplication/datadir /home/fworks/GeoReplication/ActiveNode.env
+ complete: sudo sudo -E /home/fworks/ocg10/fwprod/bin/siteReplication/PassiveSite_CompleteSync_hookpoint.sh $ocg_user /home/fworks/GeoReplication/datadir /home/fworks/GeoReplication/ActiveNode.env
+ - destination: /home/fworks/ovlm-integration-module/
+ source: /home/fworks/ovlm-integration-module/
+ sudo_privileges_required: true
+ sudo_privileges:
+ - /bin/bash
+ - /bin/sudo *
+ - /usr/bin/sudo *
+ - /usr/bin/rsync
+ - /usr/bin/systemctl status *
+ - /usr/bin/systemctl start *
+ - /usr/bin/systemctl stop *
+ - /usr/bin/systemctl restart *
+ - /usr/bin/systemctl is-active *
+ - /usr/bin/systemctl daemon-reload
+ logging:
+ file: /opt/ocg/data/weaver_home/ovlm-fa.log
+runcmd:
+ - echo "alias l='ls -lrt'" >> /etc/bashrc
+
+ # Allow for host resolution - With proper DNS in place, this is not needed
+ - echo "$ocg_hostip $ocg_hostname" >> /etc/hosts
+
+ ##########################
+ # Cinder Volume Mounting
+ ##########################
+ - sudo su - root
+ - voldata_id="$volume_id"
+ - voldata_dev="/dev/disk/by-id/virtio-$(echo ${voldata_id} | cut -c -20)"
+ - mkfs.ext4 ${voldata_dev}
+ - sudo mkdir -pv /opt/ocg/data
+ - sudo chown -R fworks:fworks /opt/ocg/data
+ - echo "${voldata_dev} /opt/ocg/data ext4 defaults 1 2" >> /etc/fstab
+ - mount /opt/ocg/data
+
+ ##############
+ # OCG install
+ ##############
+ - echo "Installing ocg as user $ocg_user"
+ # Set up the ocg_user environment
+ - su -s /bin/bash -l -c 'cat /tmp/ocg-bashrc >> ~/.bashrc' $ocg_user
+ - su -s /bin/bash -l -c 'cat /tmp/ocg-bashrc >> ~/.profile' $ocg_user
+ - su -s /bin/bash -l -c 'cd && java -jar $ocg_install_jar -install $ocg_install_properties' $ocg_user
+ - su -s /bin/bash -l -c 'cd && StartNameServ && StartMediationServer && StartJBossAppServer' $ocg_user
+ ##############
+ # WIM install
+ ##############
+ #- echo "Installing WIM as user $ocg_user"
+ - su -s /bin/bash -l -c 'cd && cp $wim_install_file .' $ocg_user
+ - su -s /bin/bash -l -c 'cd && ./ovlm-integration-module.sh' $ocg_user
+
+ ##############
+ # OVLM install
+ ##############
+ - echo "Installing ovlm as user $ocg_user"
+
+ # Need to set up password-less ssh for ocg_user so that ovlm-deploy will succeed
+ - su -s /bin/bash -l -c 'ssh-keygen -f ~/.ssh/id_rsa -t rsa -N "" ' $ocg_user
+ - su -s /bin/bash -l -c 'cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys' $ocg_user
+ # Allow sudo on non-tty login for ovlm-install user
+ - echo "Defaults:$ocg_user !requiretty" >> /etc/sudoers
+ # Create directory and Expand the install media
+ - su -s /bin/bash -l -c 'cd && mkdir weaver_install' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install && cp $ovlm_install_dir/ovlm-core-install-enterprise.tar .' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install && cp $ovlm_install_dir/ovlm-thirdparty-dependencies.tar .' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install && tar xvf $ovlm_install_dir/ovlm-core-install-enterprise.tar' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install && cp $ovlm_install_dir/ovlm-client.sh .' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install && tar xvf $ovlm_install_dir/ovlm-thirdparty-dependencies.tar' $ocg_user
+ # Create certs
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install && mkdir -p certs' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install/certs && echo "subjectAltName=DNS:$ovlm_hostname,DNS:$ovlm_mgr002_hostname" > extFile' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install/certs && openssl genrsa -out server.key 2048' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install/certs && openssl req -new -out server.csr -key server.key -subj "/C=US/L=Atlanta/O=DigiCert/CN=*.novalocal"' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install/certs && openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt -extfile extFile' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install/certs && cp server.crt ca_bundle' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install/certs && openssl pkcs12 -export -name weaver -in server.crt -inkey server.key -out server.p12 -passout pass:password' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install/certs && $java_home/bin/keytool -importkeystore -destkeystore keycloak.jks -srckeystore server.p12 -srcstoretype pkcs12 -alias weaver -srcstorepass password -noprompt -deststorepass password -deststoretype JKS -destalias weaver' $ocg_user
+ # Configure and Install keycloak
+ #- cd ~/ovlm-install && rpm -ivh rpms/$keycloak_rpm_name
+ - su -s /bin/bash -l -c 'cat /tmp/keycloak-bashrc >> ~/.profile' $ocg_user
+ - su -s /bin/bash -l -c 'cat /tmp/keycloak-bashrc >> ~/.bashrc' $ocg_user
+ - export KEYCLOAK_USER=$ocg_user;export KEYCLOAK_USER_GROUP=$ocg_user; sudo -E rpm -ivh --relocate /opt/keycloak=/home/$ocg_user/keycloak --relocate /etc/keycloak=/home/$ocg_user/keycloak/etc --relocate /var/log/keycloak=/home/$ocg_user/keycloak/log --relocate /var/run/keycloak=/home/$ocg_user/keycloak/run --relocate /var/opt/keycloak=/home/$ocg_user/keycloak/var /home/$ocg_user/weaver_install/ovlm-install/rpms/keycloak-pkg-x86_64.rpm
+ # setup keycloak
+ - su -s /bin/bash -l -c '/tmp/keycloak-setup.sh' $ocg_user
+ # copy keystore file
+ - su -s /bin/bash -l -c 'cp /home/$ocg_user/weaver_install/ovlm-install/certs/keycloak.jks /home/$ocg_user/keycloak/etc/standalone/.' $ocg_user
+ # Config admin user
+ - su -s /bin/bash -l -c '/home/$ocg_user/keycloak/bin/add-user-keycloak.sh -u admin -p Openet01' $ocg_user
+ # Enable keycloak daemon
+ - systemctl enable keycloak
+ # Start keycloak service
+ - systemctl restart keycloak
+ # Set up the config file and do the weaver install
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install && cp $ovlm_install_properties ./ovlm-install.yml' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install && ./utilities/cipher/encrypt_scripts/encrypt-password.sh -f ./ovlm-install.yml' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install/ovlm-install && ./ovlm-deploy.sh -i ovlm-install.yml -u $ocg_user' $ocg_user
+ - su -s /bin/bash -l -c 'cd ~/weaver_install && sudo bash ovlm-client.sh' $ocg_user
+
+ # Configure keycloak user for Weaver realm
+ - su -s /bin/bash -l -c '/home/$ocg_user/keycloak/bin/add-user-keycloak.sh -u weaver -p Openet01 -r weaver' $ocg_user
+
+ # Restart service
+ - systemctl restart keycloak
+
+ # Steps for weaver.profile
+ - su -s /bin/bash -l -c 'cd && cp ~/weaver_install/ovlm-install/weaver.profile .' $ocg_user
+ - su -s /bin/bash -l -c 'cd && source weaver.profile' $ocg_user
+ - su -s /bin/bash -l -c 'echo "source weaver.profile" >> ~/.profile' $ocg_user
+ - su -s /bin/bash -l -c 'echo "eval \$(on-auth-client -u weaver -p Openet01 --ca_bundle_path /home/fworks/weaver_install/ovlm-install/certs/ca_bundle)" >> ~/.profile' $ocg_user
+
+ # Step to prepare the upload the files
+ - su -s /bin/bash -l -c 'cd && . ~/.profile && cd ~/weaver_install/ovlm-install && ./ovlm-dm-util.sh prepare upload_files' $ocg_user
+
+ # Step to upload the resource agent related binary file into deployment manager
+ - su -s /bin/bash -l -c 'cd && . ~/.profile && cd ~/weaver_install/ovlm-install && ovlm-dm artifact upload -f /home/fworks/weaver_install/ovlm-install/artifact/ovlm-install.tar.gz' $ocg_user
+
+ # Step to upload related configuration files into deployment manager
+ - su -s /bin/bash -l -c 'cd && . ~/.profile && cd ~/weaver_install/ovlm-install && ovlm-dm configuration create -i ovlm-install.yml -u $ocg_user -secure_stage_traffic false -s /home/fworks/weaver_install/ovlm-install/artifact/ssh-keys.tar.gz -c /home/fworks/weaver_install/ovlm-install/artifact/certs.tar.gz -k ~/.ssh/id_rsa -e /home/fworks/weaver_install/ovlm-install/artifact/.installer.png' $ocg_user
+
+ # Step to check OCG-Mgr health status
+ - su -s /bin/bash -l -c 'cd && . ~/.profile && ovlm-fe health status' $ocg_user
+
+ # Step for Replication Import
+ - su -s /bin/bash -l -c 'ReplicationImport -u Administrator -p Openet00 /home/fworks/Installer/OCG_BASE_CONFIG.xml' $ocg_user
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_1.txt b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_1.txt
new file mode 100644
index 0000000000..57ab985c77
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_1.txt
@@ -0,0 +1,19 @@
+#cloud-config
+
+runcmd:
+
+ # Allow for host resolution - With proper DNS in place, this is not needed
+ - echo "$ocg_hostip $ocg_hostname" >> /etc/hosts
+
+ ##########################
+ # Cinder Volume Mounting
+ ##########################
+ - sudo su - root
+ - voldata_id="$volume_id"
+ - voldata_dev="/dev/disk/by-id/virtio-$(echo ${voldata_id} | cut -c -20)"
+ - mkfs.ext4 ${voldata_dev}
+ - sudo mkdir -pv /opt/ocg/data
+ - sudo chown -R fworks:fworks /opt/ocg/data
+ - echo "${voldata_dev} /opt/ocg/data ext4 defaults 1 2" >> /etc/fstab
+ - mount /opt/ocg/data
+ \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_volume.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_volume.yaml
new file mode 100644
index 0000000000..cf354d97da
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_nested_volume.yaml
@@ -0,0 +1,45 @@
+heat_template_version: 2015-04-30
+description: Nested volume file for ocg mgrs
+parameters:
+
+ index:
+ type: number
+ label: Volume index
+ description: number of volumes to spin up
+ constraints:
+ - allowed_values: [0, 1, 2]
+ size:
+ type: number
+ label: Volume Size
+ description: size of the cinder volumes
+ constraints:
+ - range: { min: 50, max: 400 }
+ volume_type:
+ type: string
+ label: Volume Type
+ description: type of cinder volumes
+ vnf_name:
+ type: string
+ label: VNF Name
+ description: vnf name
+
+
+resources:
+ ocgmgr_volume_0:
+ type: OS::Cinder::Volume
+ properties:
+ size: {get_param: size}
+ volume_type: {get_param: volume_type}
+ name:
+ str_replace:
+ template: VF_NAME_STACK_NAME_INDEX
+ params:
+ VF_NAME: {get_param: vnf_name}
+ STACK_NAME: {get_param: 'OS::stack_name'}
+ INDEX: {get_param: index}
+
+
+outputs:
+ ocgmgr_volume_id_0:
+ description: the ocgmgr volume uuids
+ value: {get_resource: ocgmgr_volume_0}
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_volume.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_volume.env
new file mode 100644
index 0000000000..dd36b3e80f
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_volume.env
@@ -0,0 +1,8 @@
+#file version 1.0
+parameters:
+ vnf_name: 'zrdm6bvocg01'
+ ocgmgr_volume_size_0: 400
+ #ocgmgr_volume_size_1: 100
+ ocgmgr_volume_type_0: SF-Default-SSD
+ #ocgmgr_volume_type_1: SF-Default-SSD
+ volume_count: 2
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_volume.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_volume.yaml
new file mode 100644
index 0000000000..6a458c8eca
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedundervolume/inputs/ocgmgr_volume.yaml
@@ -0,0 +1,44 @@
+heat_template_version: 2015-04-30
+
+description: OCG template for MGR volumes
+#file version 1.0
+parameters:
+ vnf_name:
+ type: string
+ label: OCG VNF Name
+ description: OCG VNF Name
+ ocgmgr_volume_size_0:
+ type: number
+ label: Cinder volume 1 size
+ description: the size of the Cinder volume
+ constraints:
+ - range: { min: 50, max: 400 }
+ ocgmgr_volume_type_0:
+ type: string
+ label: mgr vm 1 volume type
+ description: the name of the target volume backend for the first OCG MGR
+ volume_count:
+ type: number
+ label: volume count
+ description: num of volumes needed
+ constraints:
+ - allowed_values: [0, 1, 2]
+resources:
+
+ ocgmgr_volume_resource_group:
+ type: OS::Heat::ResourceGroup
+ properties:
+ count: {get_param: volume_count}
+ index_var: index
+ resource_def:
+ type: ocgmgr_nested_volume.yaml
+ properties:
+ index: index
+ size: {get_param: ocgmgr_volume_size_0}
+ volume_type: {get_param: ocgmgr_volume_type_0}
+ vnf_name: {get_param: vnf_name}
+
+outputs:
+ ocgmgr_volume_ids:
+ description: ocgmgr volume ids
+ value: {get_attr: [ocgmgr_volume_resource_group, ocgmgr_volume_id_0]}