From 4be9e10f23a3d64607c9d986ce98146c828b94f8 Mon Sep 17 00:00:00 2001 From: zm330 Date: Tue, 30 Apr 2019 20:11:22 +0800 Subject: add resource input Save format when resource is list type e.g. {key2:vf_prop_list,INDEX,key|default} Change-Id: I1cde294eb790df0be6df13cfae9959310b93f366 Issue-ID: SO-1393 Signed-off-by: zm330 --- .../catalogdb/catalogrest/QueryServiceVnfs.java | 2 + .../installer/heat/ToscaResourceInstaller.java | 82 ++++++++++++++-------- .../installer/heat/ToscaResourceInputTest.java | 22 ++++-- 3 files changed, 74 insertions(+), 32 deletions(-) diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java index e5241a4e95..a0d822d394 100644 --- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java +++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceVnfs.java @@ -49,6 +49,7 @@ public class QueryServiceVnfs extends CatalogQuery { + "\t\"nfFunction\" : ,\n" + "\t\"nfType\" : ,\n" + "\t\"nfRole\" : ,\n" + "\t\"nfNamingCode\" : ,\n" + "\t\"multiStageDesign\" : ,\n" + + "\t\"vnfcInstGroupOrder\" : ,\n" + "\t\"resourceInput\" : ,\n" + "<_VFMODULES_>,\n" + "<_GROUPS_>\n" + "\t}"; public QueryServiceVnfs() { @@ -118,6 +119,7 @@ public class QueryServiceVnfs extends CatalogQuery { put(valueMap, "NF_TYPE", o.getNfType()); put(valueMap, "NF_ROLE", o.getNfRole()); put(valueMap, "NF_NAMING_CODE", o.getNfNamingCode()); + put(valueMap, "VNFC_INSTANCE_GROUP_ORDER", o.getVnfcInstanceGroupOrder()); put(valueMap, "MULTI_STEP_DESIGN", o.getMultiStageDesign()); put(valueMap, "RESOURCE_INPUT", o.getResourceInput()); diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java index ddf1f3d84b..5f449c4de7 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java @@ -35,6 +35,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import org.hibernate.StaleObjectStateException; import org.hibernate.exception.ConstraintViolationException; @@ -48,14 +50,7 @@ import org.onap.sdc.tosca.parser.elements.queries.EntityQuery; import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery; import org.onap.sdc.tosca.parser.enums.SdcTypes; import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; -import org.onap.sdc.toscaparser.api.CapabilityAssignment; -import org.onap.sdc.toscaparser.api.CapabilityAssignments; -import org.onap.sdc.toscaparser.api.Group; -import org.onap.sdc.toscaparser.api.NodeTemplate; -import org.onap.sdc.toscaparser.api.Policy; -import org.onap.sdc.toscaparser.api.Property; -import org.onap.sdc.toscaparser.api.RequirementAssignment; -import org.onap.sdc.toscaparser.api.RequirementAssignments; +import org.onap.sdc.toscaparser.api.*; import org.onap.sdc.toscaparser.api.elements.Metadata; import org.onap.sdc.toscaparser.api.functions.GetInput; import org.onap.sdc.toscaparser.api.parameters.Input; @@ -528,27 +523,35 @@ public class ToscaResourceInstaller { logger.debug(" resourceSeq for service uuid(" + service.getModelUUID() + ") : " + resourceSeqStr); } - private static String getValue(Object value, List servInputs) { - String output = null; + + // this of temporary solution + private static String getValue(Object value, List inputs) { + String outInput; + String defaultValue = null; if (value instanceof Map) { - // currently this logic handles only one level of nesting. - return ((LinkedHashMap) value).values().toArray()[0].toString(); + outInput = ((LinkedHashMap) value).values().toArray()[0].toString(); } else if (value instanceof GetInput) { String inputName = ((GetInput) value).getInputName(); - - for (Input input : servInputs) { - if (input.getName().equals(inputName)) { - // keep both input name and default value - // if service input does not supplies value the use default value - String defaultValue = input.getDefault() != null ? (String) input.getDefault().toString() : ""; - output = inputName + "|" + defaultValue;// return default value - } + Optional inputOptional = + inputs.stream().filter(input -> input.getName().equals(inputName)).findFirst(); + if (inputOptional.isPresent()) { + Input input = inputOptional.get(); + defaultValue = input.getDefault() != null ? input.getDefault().toString() : ""; } - + String valueStr = value.toString(); + String regex = "(?<=\\[).*?(?=\\])"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(valueStr); + if (matcher.find()) { + valueStr = matcher.group(); + } else { + valueStr = inputName; + } + outInput = valueStr + "|" + defaultValue; } else { - output = value != null ? value.toString() : ""; + outInput = value != null ? value.toString() : ""; } - return output; // return property value + return outInput; } String getResourceInput(ToscaResourceStructure toscaResourceStructure, String resourceCustomizationUuid) @@ -1791,13 +1794,16 @@ public class ToscaResourceInstaller { vfcInstanceGroupCustom.setFunction(toscaResourceStructure.getSdcCsarHelper() .getNodeTemplatePropertyLeafValue(vnfcNodeTemplate, getInputName)); vfcInstanceGroupCustom.setInstanceGroup(vfcInstanceGroup); - createVFCInstanceGroupMembers(vfcInstanceGroupCustom, group); + + ArrayList inputs = vnfcNodeTemplate.getSubMappingToscaTemplate().getInputs(); + createVFCInstanceGroupMembers(vfcInstanceGroupCustom, group, inputs); return vfcInstanceGroupCustom; } - private void createVFCInstanceGroupMembers(VnfcInstanceGroupCustomization vfcInstanceGroupCustom, Group group) { + private void createVFCInstanceGroupMembers(VnfcInstanceGroupCustomization vfcInstanceGroupCustom, Group group, + List inputList) { List members = group.getMemberNodes(); if (!CollectionUtils.isEmpty(members)) { for (NodeTemplate vfcTemplate : members) { @@ -1815,13 +1821,33 @@ public class ToscaResourceInstaller { vnfcCustomization.setToscaNodeType(testNull(vfcTemplate.getType())); vnfcCustomization .setDescription(testNull(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION))); - - // @After vfcInstanceGroupCustom merged - // vfcInstanceGroupCustom.getVnfcCustomizations().add(vnfcCustomization); + vnfcCustomization.setResourceInput(getVnfcResourceInput(vfcTemplate, inputList)); + vfcInstanceGroupCustom.getVnfcCustomizations().add(vnfcCustomization); } } } + public String getVnfcResourceInput(NodeTemplate vfcTemplate, List inputList) { + Map resouceRequest = new HashMap<>(); + LinkedHashMap vfcTemplateProperties = vfcTemplate.getProperties(); + for (String key : vfcTemplateProperties.keySet()) { + Property property = vfcTemplateProperties.get(key); + String resourceValue = getValue(property.getValue(), inputList); + resouceRequest.put(key, resourceValue); + } + + String jsonStr = null; + try { + ObjectMapper objectMapper = new ObjectMapper(); + jsonStr = objectMapper.writeValueAsString(resouceRequest); + jsonStr = jsonStr.replace("\"", "\\\""); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + + return jsonStr; + } + protected VfModuleCustomization createVFModuleResource(Group group, NodeTemplate vfTemplate, ToscaResourceStructure toscaResourceStructure, VfResourceStructure vfResourceStructure, IVfModuleData vfModuleData, VnfResourceCustomization vnfResource, Service service, diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInputTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInputTest.java index 844adeede2..f6a369e405 100644 --- a/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInputTest.java +++ b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInputTest.java @@ -33,10 +33,7 @@ import org.onap.sdc.toscaparser.api.parameters.Input; import org.onap.so.asdc.client.exceptions.ArtifactInstallerException; import org.onap.so.asdc.installer.ToscaResourceStructure; import org.onap.so.db.catalog.beans.Service; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedHashMap; +import java.util.*; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Mockito.when; @@ -60,6 +57,23 @@ public class ToscaResourceInputTest { @Mock Input input; + @Test + public void getListResourceInput() { + ToscaResourceInstaller toscaResourceInstaller = new ToscaResourceInstaller(); + LinkedHashMap hashMap = new LinkedHashMap<>(); + hashMap.put("key1", property); + when(nodeTemplate.getProperties()).thenReturn(hashMap); + when(property.getValue()).thenReturn(getInput); + when(getInput.getInputName()).thenReturn("nameKey"); + when(input.getName()).thenReturn("nameKey"); + when(input.getDefault()).thenReturn("defaultValue"); + when(getInput.toString()).thenReturn("getinput:[sites,INDEX,role]"); + List inputs = new ArrayList<>(); + inputs.add(input); + String resourceInput = toscaResourceInstaller.getVnfcResourceInput(nodeTemplate, inputs); + assertEquals("{\\\"key1\\\":\\\"sites,INDEX,role|defaultValue\\\"}", resourceInput); + } + @Test public void processResourceSequenceTest() { ToscaResourceInstaller toscaResourceInstaller = new ToscaResourceInstaller(); -- cgit 1.2.3-korg