AT&T 1712 and 1802 release code
[so.git] / bpmn / MSOCommonBPMN / src / main / groovy / org / openecomp / mso / bpmn / common / scripts / VfModuleBase.groovy
index 473b711..e0b9c30 100644 (file)
 \r
 package org.openecomp.mso.bpmn.common.scripts;\r
 \r
+import java.io.ObjectInputStream.BlockDataInputStream\r
+\r
 //import groovy.util.Node;\r
 \r
 import javax.xml.parsers.DocumentBuilder\r
 import javax.xml.parsers.DocumentBuilderFactory\r
 \r
 import org.apache.commons.lang3.*\r
-import org.camunda.bpm.engine.runtime.Execution\r
 import org.w3c.dom.Document\r
 import org.w3c.dom.Element\r
 import org.w3c.dom.Node\r
@@ -234,245 +235,274 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
          \r
         \r
         protected String buildVfModuleParams(Map<String, String> vnfParamsMap, String sdncGetResponse, String vnfId, String vnfName,\r
-                       String vfModuleId, String vfModuleName, String vfModuleIndex) {\r
-                       \r
-                       //Get SDNC Response Data\r
-                       \r
-                       String data = utils.getNodeXml(sdncGetResponse, "response-data")\r
-                       data = data.replaceAll("&lt;", "<")\r
-                       data = data.replaceAll("&gt;", ">")\r
+               String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {\r
+               \r
+               //Get SDNC Response Data\r
+               \r
+               String data = utils.getNodeXml(sdncGetResponse, "response-data")\r
+               data = data.replaceAll("&lt;", "<")\r
+               data = data.replaceAll("&gt;", ">")\r
 \r
-                       String serviceData = utils.getNodeXml(data, "service-data")\r
-                       serviceData = utils.removeXmlPreamble(serviceData)\r
-                       serviceData = utils.removeXmlNamespaces(serviceData)\r
-                       String vnfRequestInfo = utils.getNodeXml(serviceData, "vnf-request-information")\r
-                       String oldVnfId = utils.getNodeXml(vnfRequestInfo, "vnf-id")\r
-                       oldVnfId = utils.removeXmlPreamble(oldVnfId)\r
-                       oldVnfId = utils.removeXmlNamespaces(oldVnfId)\r
-                       serviceData = serviceData.replace(oldVnfId, "")\r
-                       def vnfId1 = utils.getNodeText1(serviceData, "vnf-id")\r
-                       \r
-                       Map<String, String> paramsMap = new HashMap<String, String>()\r
-                       \r
-                       if (vfModuleIndex != null) {\r
-                               paramsMap.put("vf_module_index", "${vfModuleIndex}")\r
-                       }\r
+               String serviceData = utils.getNodeXml(data, "service-data")\r
+               serviceData = utils.removeXmlPreamble(serviceData)\r
+               serviceData = utils.removeXmlNamespaces(serviceData)\r
+               String vnfRequestInfo = utils.getNodeXml(serviceData, "vnf-request-information")\r
+               String oldVnfId = utils.getNodeXml(vnfRequestInfo, "vnf-id")\r
+               oldVnfId = utils.removeXmlPreamble(oldVnfId)\r
+               oldVnfId = utils.removeXmlNamespaces(oldVnfId)\r
+               serviceData = serviceData.replace(oldVnfId, "")\r
+               def vnfId1 = utils.getNodeText1(serviceData, "vnf-id")\r
+               \r
+               Map<String, String> paramsMap = new HashMap<String, String>()\r
+               \r
+               if (vfModuleIndex != null) {\r
+                       paramsMap.put("vf_module_index", "${vfModuleIndex}")\r
+               }\r
 \r
-                       // Add-on data\r
-                       paramsMap.put("vnf_id", "${vnfId}")\r
-                       paramsMap.put("vnf_name", "${vnfName}")\r
-                       paramsMap.put("vf_module_id", "${vfModuleId}")\r
-                       paramsMap.put("vf_module_name", "${vfModuleName}")\r
-                       \r
-                       InputSource source = new InputSource(new StringReader(data));\r
-                       DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();\r
-                       docFactory.setNamespaceAware(true)\r
-                       DocumentBuilder docBuilder = docFactory.newDocumentBuilder()\r
-                       Document responseXml = docBuilder.parse(source)\r
+               // Add-on data\r
+               paramsMap.put("vnf_id", "${vnfId}")\r
+               paramsMap.put("vnf_name", "${vnfName}")\r
+               paramsMap.put("vf_module_id", "${vfModuleId}")\r
+               paramsMap.put("vf_module_name", "${vfModuleName}")\r
+               paramsMap.put("environment_context", "${environmentContext}")\r
+               paramsMap.put("workload_context", "${workloadContext}")\r
+               \r
+               InputSource source = new InputSource(new StringReader(data));\r
+               DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();\r
+               docFactory.setNamespaceAware(true)\r
+               DocumentBuilder docBuilder = docFactory.newDocumentBuilder()\r
+               Document responseXml = docBuilder.parse(source)\r
 \r
 \r
-                       // Availability Zones Data\r
-                       \r
-                       NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")\r
-                       String aZonePosition = "0"\r
-                       for (int z = 0; z < aZonesList.getLength(); z++) {\r
-                               Node node = aZonesList.item(z)\r
-                               if (node.getNodeType() == Node.ELEMENT_NODE) {\r
-                                       Element eElement = (Element) node\r
-                                       String aZoneValue = utils.getElementText(eElement, "availability-zone")\r
-                                       aZonePosition = z.toString()\r
-                                       paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")\r
+               // Availability Zones Data\r
+               \r
+               NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")\r
+               String aZonePosition = "0"\r
+               for (int z = 0; z < aZonesList.getLength(); z++) {\r
+                       Node node = aZonesList.item(z)\r
+                       if (node.getNodeType() == Node.ELEMENT_NODE) {\r
+                               Element eElement = (Element) node\r
+                               String aZoneValue = utils.getElementText(eElement, "availability-zone")\r
+                               aZonePosition = z.toString()\r
+                               paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")\r
+                       }\r
+               }\r
+               \r
+               // Map of network-roles and network-tags from vm-networks\r
+               \r
+               NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")\r
+               Map<String, String> networkRoleMap = new HashMap<String, String>()\r
+               for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){\r
+                       Node nodeNetworkKey = vmNetworksListGlobal.item(n)\r
+                       if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {\r
+                               Element eElementNetworkKey = (Element) nodeNetworkKey\r
+                               String networkRole = utils.getElementText(eElementNetworkKey, "network-role")\r
+                               String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")\r
+                               if (networkRoleValue.isEmpty()) {\r
+                                       networkRoleValue = networkRole\r
                                }\r
+                               networkRoleMap.put(networkRole, networkRoleValue)                               \r
                        }\r
+               }               \r
 \r
-                       // VNF Networks Data\r
-                       \r
-                       StringBuilder sbNet = new StringBuilder()\r
-                       \r
-                       NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")\r
-                       for (int x = 0; x < vnfNetworkList.getLength(); x++) {\r
-                               Node node = vnfNetworkList.item(x)\r
-                               if (node.getNodeType() == Node.ELEMENT_NODE) {\r
-                                       Element eElement = (Element) node\r
-                                       String vnfNetworkKey = utils.getElementText(eElement, "network-role")\r
-                                       String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")\r
-                                       String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")\r
-                                       String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")\r
-                                       String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")\r
-                                       String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")\r
-                                       paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")\r
-                                       paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")\r
-                                       paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")\r
-                                       paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")\r
-                                       paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")\r
-                                       \r
-                                       NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")\r
-                                       StringBuffer sriovFilterBuf = new StringBuffer()\r
-                                       String values = ""\r
-                                       for(int i = 0; i < sriovVlanFilterList.getLength(); i++){\r
-                                               Node node1 = sriovVlanFilterList.item(i)\r
-                                               if (node1.getNodeType() == Node.ELEMENT_NODE) {\r
-                                                       Element eElement1 = (Element) node1\r
-                                                       String value = utils.getElementText(eElement1, "sriov-vlan-filter")\r
-                                                       if (i != sriovVlanFilterList.getLength() - 1) {\r
-                                                               values = sriovFilterBuf.append(value + ",")\r
-                                                       }\r
-                                                       else {\r
-                                                               values = sriovFilterBuf.append(value);\r
-                                                       }\r
+               // VNF Networks Data\r
+               \r
+               StringBuilder sbNet = new StringBuilder()\r
+               \r
+               NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")\r
+               for (int x = 0; x < vnfNetworkList.getLength(); x++) {\r
+                       Node node = vnfNetworkList.item(x)\r
+                       if (node.getNodeType() == Node.ELEMENT_NODE) {\r
+                               Element eElement = (Element) node                               \r
+                               String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")\r
+                               String networkRole = utils.getElementText(eElement, "network-role")\r
+                               if (vnfNetworkKey.isEmpty()) {\r
+                                       vnfNetworkKey = networkRoleMap.get(networkRole)\r
+                                       if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {\r
+                                               vnfNetworkKey = networkRole\r
+                                       }                                       \r
+                               }                               \r
+                               String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")\r
+                               String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")\r
+                               String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")\r
+                               String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")\r
+                               String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")\r
+                               paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")\r
+                               paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")\r
+                               paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")\r
+                               paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")\r
+                               paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")\r
+                               \r
+                               NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")\r
+                               StringBuffer sriovFilterBuf = new StringBuffer()\r
+                               String values = ""\r
+                               for(int i = 0; i < sriovVlanFilterList.getLength(); i++){\r
+                                       Node node1 = sriovVlanFilterList.item(i)\r
+                                       if (node1.getNodeType() == Node.ELEMENT_NODE) {\r
+                                               Element eElement1 = (Element) node1\r
+                                               String value = utils.getElementText(eElement1, "sriov-vlan-filter")\r
+                                               if (i != sriovVlanFilterList.getLength() - 1) {\r
+                                                       values = sriovFilterBuf.append(value + ",")\r
                                                }\r
-                                       }\r
-                                       if (!values.isEmpty()) {\r
-                                                       paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")\r
+                                               else {\r
+                                                       values = sriovFilterBuf.append(value);\r
                                                }\r
                                        }\r
-                       }\r
+                               }\r
+                               if (!values.isEmpty()) {\r
+                                               paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")\r
+                                       }\r
+                               }\r
+               }\r
 \r
-                       // VNF-VMS Data\r
-                       \r
-                       def key\r
-                       def value\r
-                       def networkKey\r
-                       def networkValue\r
-                       def floatingIPKey\r
-                       def floatingIPKeyValue\r
-                       def floatingIPV6Key\r
-                       def floatingIPV6KeyValue\r
-                       StringBuilder sb = new StringBuilder()\r
+               // VNF-VMS Data\r
+               \r
+               def key\r
+               def value\r
+               def networkKey\r
+               def networkValue\r
+               def floatingIPKey\r
+               def floatingIPKeyValue\r
+               def floatingIPV6Key\r
+               def floatingIPV6KeyValue\r
+               StringBuilder sb = new StringBuilder()\r
 \r
-                       NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")\r
-                       for (int x = 0; x < vmsList.getLength(); x++) {\r
-                               Node node = vmsList.item(x)\r
-                               if (node.getNodeType() == Node.ELEMENT_NODE) {\r
-                                       Element eElement = (Element) node\r
-                                       key = utils.getElementText(eElement, "vm-type")\r
-                                       String values\r
-                                       String position = "0"\r
-                                       StringBuilder sb1 = new StringBuilder()\r
-                                       NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")\r
-                                       NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")\r
-                                       for(int i = 0; i < valueList.getLength(); i++){\r
-                                               Node node1 = valueList.item(i)\r
-                                               if (node1.getNodeType() == Node.ELEMENT_NODE) {\r
-                                                       Element eElement1 = (Element) node1\r
-                                                       value = utils.getElementText(eElement1, "vm-name")\r
-                                                       if (i != valueList.getLength() - 1) {\r
-                                                               values = sb1.append(value + ",")\r
-                                                       }\r
-                                                       else {\r
-                                                               values = sb1.append(value);\r
-                                                       }\r
-                                                       position = i.toString()\r
-                                                       paramsMap.put("${key}_name_${position}", "${value}")\r
+               NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")\r
+               for (int x = 0; x < vmsList.getLength(); x++) {\r
+                       Node node = vmsList.item(x)\r
+                       if (node.getNodeType() == Node.ELEMENT_NODE) {\r
+                               Element eElement = (Element) node\r
+                               key = utils.getElementText(eElement, "vm-type")\r
+                               String values\r
+                               String position = "0"\r
+                               StringBuilder sb1 = new StringBuilder()\r
+                               NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")\r
+                               NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")\r
+                               for(int i = 0; i < valueList.getLength(); i++){\r
+                                       Node node1 = valueList.item(i)\r
+                                       if (node1.getNodeType() == Node.ELEMENT_NODE) {\r
+                                               Element eElement1 = (Element) node1\r
+                                               value = utils.getElementText(eElement1, "vm-name")\r
+                                               if (i != valueList.getLength() - 1) {\r
+                                                       values = sb1.append(value + ",")\r
                                                }\r
+                                               else {\r
+                                                       values = sb1.append(value);\r
+                                               }\r
+                                               position = i.toString()\r
+                                               paramsMap.put("${key}_name_${position}", "${value}")\r
                                        }\r
-                                       for(int n = 0; n < vmNetworksList.getLength(); n++){\r
-                                               String floatingIpKeyValueStr = ""\r
-                                               String floatingIpV6KeyValueStr = ""\r
-                                               Node nodeNetworkKey = vmNetworksList.item(n)\r
-                                               if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {\r
-                                                       Element eElementNetworkKey = (Element) nodeNetworkKey\r
-                                                       String ipAddressValues\r
-                                                       String ipV6AddressValues\r
-                                                       String networkPosition = "0"\r
-                                                       StringBuilder sb2 = new StringBuilder()\r
-                                                       StringBuilder sb3 = new StringBuilder()\r
-                                                       StringBuilder sb4 = new StringBuilder()\r
+                               }\r
+                               for(int n = 0; n < vmNetworksList.getLength(); n++){\r
+                                       String floatingIpKeyValueStr = ""\r
+                                       String floatingIpV6KeyValueStr = ""\r
+                                       Node nodeNetworkKey = vmNetworksList.item(n)\r
+                                       if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {\r
+                                               Element eElementNetworkKey = (Element) nodeNetworkKey\r
+                                               String ipAddressValues\r
+                                               String ipV6AddressValues\r
+                                               String networkPosition = "0"\r
+                                               StringBuilder sb2 = new StringBuilder()\r
+                                               StringBuilder sb3 = new StringBuilder()\r
+                                               StringBuilder sb4 = new StringBuilder()\r
+                                               networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")\r
+                                               if (networkKey.isEmpty()) {\r
                                                        networkKey = utils.getElementText(eElementNetworkKey, "network-role")\r
-                                                       floatingIPKey = key + '_' + networkKey + '_floating_ip'\r
-                                                       floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")\r
-                                                       if(!floatingIPKeyValue.isEmpty()){\r
-                                                               paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")\r
-                                                       }\r
-                                                       floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'\r
-                                                       floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")\r
-                                                       if(!floatingIPV6KeyValue.isEmpty()){\r
-                                                               paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")\r
-                                                       }\r
-                                                       NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")\r
-                                                       for(int a = 0; a < networkIpsList.getLength(); a++){\r
-                                                               Node ipAddress = networkIpsList.item(a)\r
-                                                               if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {\r
-                                                                       Element eElementIpAddress = (Element) ipAddress\r
-                                                                       String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")\r
-                                                                       if (a != networkIpsList.getLength() - 1) {\r
-                                                                               ipAddressValues = sb2.append(ipAddressValue + ",")\r
-                                                                       }\r
-                                                                       else {\r
-                                                                               ipAddressValues = sb2.append(ipAddressValue);\r
-                                                                       }\r
-                                                                       networkPosition = a.toString()\r
-                                                                       paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")\r
+                                               }\r
+                                               floatingIPKey = key + '_' + networkKey + '_floating_ip'\r
+                                               floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")\r
+                                               if(!floatingIPKeyValue.isEmpty()){\r
+                                                       paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")\r
+                                               }\r
+                                               floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'\r
+                                               floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")\r
+                                               if(!floatingIPV6KeyValue.isEmpty()){\r
+                                                       paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")\r
+                                               }\r
+                                               NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")\r
+                                               for(int a = 0; a < networkIpsList.getLength(); a++){\r
+                                                       Node ipAddress = networkIpsList.item(a)\r
+                                                       if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {\r
+                                                               Element eElementIpAddress = (Element) ipAddress\r
+                                                               String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")\r
+                                                               if (a != networkIpsList.getLength() - 1) {\r
+                                                                       ipAddressValues = sb2.append(ipAddressValue + ",")\r
                                                                }\r
-                                                       }\r
-                                                       \r
-                                                       paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")\r
-                                                       \r
-                                                       NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")\r
-                                                       String interfaceRoutePrefixValues = sb3.append("[")\r
-                                                       \r
-                                                       for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){\r
-                                                               Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)\r
-                                                               if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {\r
-                                                                       Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix\r
-                                                                       String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")\r
-                                                                       if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {\r
-                                                                               interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")\r
-                                                                       }\r
-                                                                       if (a != interfaceRoutePrefixesList.getLength() - 1) {\r
-                                                                               interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")\r
-                                                                       }\r
-                                                                       else {\r
-                                                                               interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")\r
-                                                                       }\r
+                                                               else {\r
+                                                                       ipAddressValues = sb2.append(ipAddressValue);\r
                                                                }\r
+                                                               networkPosition = a.toString()\r
+                                                               paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")\r
                                                        }\r
-                                                       interfaceRoutePrefixValues = sb3.append("]")\r
-                                                       if (interfaceRoutePrefixesList.getLength() > 0) {\r
-                                                               paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")\r
+                                               }\r
+                                               \r
+                                               paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")\r
+                                               \r
+                                               NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")\r
+                                               String interfaceRoutePrefixValues = sb3.append("[")\r
+                                               \r
+                                               for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){\r
+                                                       Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)\r
+                                                       if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {\r
+                                                               Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix\r
+                                                               String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")\r
+                                                               if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {\r
+                                                                       interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")\r
+                                                               }\r
+                                                               if (a != interfaceRoutePrefixesList.getLength() - 1) {\r
+                                                                       interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")\r
+                                                               }\r
+                                                               else {\r
+                                                                       interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")\r
+                                                               }\r
                                                        }\r
-                                                       \r
-                                                       NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")\r
-                                                       for(int a = 0; a < networkIpsV6List.getLength(); a++){\r
-                                                               Node ipV6Address = networkIpsV6List.item(a)\r
-                                                               if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {\r
-                                                                       Element eElementIpV6Address = (Element) ipV6Address\r
-                                                                       String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")\r
-                                                                       if (a != networkIpsV6List.getLength() - 1) {\r
-                                                                               ipV6AddressValues = sb4.append(ipV6AddressValue + ",")\r
-                                                                       }\r
-                                                                       else {\r
-                                                                               ipV6AddressValues = sb4.append(ipV6AddressValue);\r
-                                                                       }\r
-                                                                       networkPosition = a.toString()\r
-                                                                       paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")\r
+                                               }\r
+                                               interfaceRoutePrefixValues = sb3.append("]")\r
+                                               if (interfaceRoutePrefixesList.getLength() > 0) {\r
+                                                       paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")\r
+                                               }\r
+                                               \r
+                                               NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")\r
+                                               for(int a = 0; a < networkIpsV6List.getLength(); a++){\r
+                                                       Node ipV6Address = networkIpsV6List.item(a)\r
+                                                       if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {\r
+                                                               Element eElementIpV6Address = (Element) ipV6Address\r
+                                                               String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")\r
+                                                               if (a != networkIpsV6List.getLength() - 1) {\r
+                                                                       ipV6AddressValues = sb4.append(ipV6AddressValue + ",")\r
                                                                }\r
+                                                               else {\r
+                                                                       ipV6AddressValues = sb4.append(ipV6AddressValue);\r
+                                                               }\r
+                                                               networkPosition = a.toString()\r
+                                                               paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")\r
                                                        }\r
-                                                       paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")\r
                                                }\r
+                                               paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")\r
                                        }\r
-                                       paramsMap.put("${key}_names", "${values}")\r
                                }\r
+                               paramsMap.put("${key}_names", "${values}")\r
                        }\r
-               //SDNC Response Params\r
-                       String sdncResponseParams = ""\r
-                       List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]\r
-                       String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")\r
-                       if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){\r
-                               // No SDNC params\r
-                       }else{\r
-                               NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")\r
-                               for (int z = 0; z < paramsList.getLength(); z++) {\r
-                                       Node node = paramsList.item(z)\r
-                                       Element eElement = (Element) node\r
-                                       String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")\r
-                                       if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {\r
-                                               String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")\r
-                                               paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")\r
-                                       }\r
+               }\r
+       //SDNC Response Params\r
+               String sdncResponseParams = ""\r
+               List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]\r
+               String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")\r
+               if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){\r
+                       // No SDNC params\r
+               }else{\r
+                       NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")\r
+                       for (int z = 0; z < paramsList.getLength(); z++) {\r
+                               Node node = paramsList.item(z)\r
+                               Element eElement = (Element) node\r
+                               String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")\r
+                               if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {\r
+                                       String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")\r
+                                       paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")\r
                                }\r
                        }\r
-                       \r
+               }\r
+               \r
                // Parameters received from the request should overwrite any parameters received from SDNC\r
                if (vnfParamsMap != null) {\r
                        for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {\r
@@ -490,18 +520,18 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                        String paramValue = entry.getValue()\r
                        paramsXml =\r
                                        """<entry>\r
-                                               <key>${paramName}</key>\r
-                                               <value>${paramValue}</value>\r
-                                       </entry>\r
-                                       """\r
-\r
+                                                       <key>${paramName}</key>\r
+                                                       <value>${paramValue}</value>\r
+                                               </entry>\r
+                                               """\r
+       \r
                        vfModuleParams = sbParams.append(paramsXml)\r
                }\r
                \r
                return vfModuleParams\r
-               \r
+       \r
        }\r
-                       \r
+       \r
                        \r
                        /*\r
                         * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response\r
@@ -519,7 +549,7 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                         */                       \r
                         \r
                         protected String buildVfModuleParamsFromCombinedTopologies(Map<String, String> vnfParamsMap, String vnfSdncGetResponse, String vfmoduleSdncGetResponse, String vnfId, String vnfName,\r
-                                       String vfModuleId, String vfModuleName, String vfModuleIndex) {\r
+                                       String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {\r
                                        \r
                                        // Set up initial parameters\r
                                        \r
@@ -533,7 +563,9 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                                        paramsMap.put("vnf_id", "${vnfId}")\r
                                        paramsMap.put("vnf_name", "${vnfName}")\r
                                        paramsMap.put("vf_module_id", "${vfModuleId}")\r
-                                       paramsMap.put("vf_module_name", "${vfModuleName}")                                      \r
+                                       paramsMap.put("vf_module_name", "${vfModuleName}")\r
+                                       paramsMap.put("environment_context","${environmentContext}")            \r
+                                       paramsMap.put("workload_context", "${workloadContext}")                 \r
                                        \r
                                        //Get SDNC Response Data for VNF\r
                                        \r
@@ -564,6 +596,40 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                                                        paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")\r
                                                }\r
                                        }\r
+                                       \r
+                                       //Get SDNC Response Data for VF Module\r
+                                       \r
+                                       String vfModuleData = utils.getNodeXml(vfmoduleSdncGetResponse, "response-data")\r
+                                       vfModuleData = vfModuleData.replaceAll("&lt;", "<")\r
+                                       vfModuleData = vfModuleData.replaceAll("&gt;", ">")\r
+               \r
+                                       String vfModuleTopology = utils.getNodeXml(vfModuleData, "vf-module-topology")\r
+                                       vfModuleTopology = utils.removeXmlPreamble(vfModuleTopology)\r
+                                       vfModuleTopology = utils.removeXmlNamespaces(vfModuleTopology)\r
+                                       String vfModuleTopologyIdentifier = utils.getNodeXml(vfModuleTopology, "vf-module-topology-identifier")\r
+                                       \r
+                                       InputSource sourceVfModule = new InputSource(new StringReader(vfModuleData));\r
+                                       DocumentBuilderFactory docFactoryVfModule = DocumentBuilderFactory.newInstance();\r
+                                       docFactoryVfModule.setNamespaceAware(true)\r
+                                       DocumentBuilder docBuilderVfModule = docFactoryVfModule.newDocumentBuilder()\r
+                                       Document responseXmlVfModule = docBuilderVfModule.parse(sourceVfModule)\r
+                                       \r
+                                       // Map of network-roles and network-tags from vm-networks\r
+                                       \r
+                                       NodeList vmNetworksListGlobal = responseXmlVfModule.getElementsByTagNameNS("*", "vm-networks")\r
+                                       Map<String, String> networkRoleMap = new HashMap<String, String>()\r
+                                       for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){\r
+                                               Node nodeNetworkKey = vmNetworksListGlobal.item(n)\r
+                                               if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {\r
+                                                       Element eElementNetworkKey = (Element) nodeNetworkKey\r
+                                                       String networkRole = utils.getElementText(eElementNetworkKey, "network-role")\r
+                                                       String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")\r
+                                                       if (networkRoleValue.isEmpty()) {\r
+                                                               networkRoleValue = networkRole\r
+                                                       }\r
+                                                       networkRoleMap.put(networkRole, networkRoleValue)\r
+                                               }\r
+                                       }                       \r
                \r
                                        // VNF Networks Data\r
                                        \r
@@ -573,8 +639,15 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                                        for (int x = 0; x < vnfNetworkList.getLength(); x++) {\r
                                                Node node = vnfNetworkList.item(x)\r
                                                if (node.getNodeType() == Node.ELEMENT_NODE) {\r
-                                                       Element eElement = (Element) node\r
-                                                       String vnfNetworkKey = utils.getElementText(eElement, "network-role")\r
+                                                       Element eElement = (Element) node                                                       \r
+                                                       String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")\r
+                                                       String networkRole = utils.getElementText(eElement, "network-role")\r
+                                                       if (vnfNetworkKey.isEmpty()) {\r
+                                                               vnfNetworkKey = networkRoleMap.get(networkRole)\r
+                                                               if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {\r
+                                                                       vnfNetworkKey = networkRole\r
+                                                               }                                       \r
+                                                       }       \r
                                                        String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")\r
                                                        String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")\r
                                                        String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")\r
@@ -608,22 +681,7 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                                                        }\r
                                        }\r
                                        \r
-                                       //Get SDNC Response Data for VF Module\r
-                                       \r
-                                       String vfModuleData = utils.getNodeXml(vfmoduleSdncGetResponse, "response-data")\r
-                                       vfModuleData = vfModuleData.replaceAll("&lt;", "<")\r
-                                       vfModuleData = vfModuleData.replaceAll("&gt;", ">")\r
-               \r
-                                       String vfModuleTopology = utils.getNodeXml(vfModuleData, "vf-module-topology")\r
-                                       vfModuleTopology = utils.removeXmlPreamble(vfModuleTopology)\r
-                                       vfModuleTopology = utils.removeXmlNamespaces(vfModuleTopology)\r
-                                       String vfModuleTopologyIdentifier = utils.getNodeXml(vfModuleTopology, "vf-module-topology-identifier")\r
                                        \r
-                                       InputSource sourceVfModule = new InputSource(new StringReader(vfModuleData));\r
-                                       DocumentBuilderFactory docFactoryVfModule = DocumentBuilderFactory.newInstance();\r
-                                       docFactoryVfModule.setNamespaceAware(true)\r
-                                       DocumentBuilder docBuilderVfModule = docFactoryVfModule.newDocumentBuilder()\r
-                                       Document responseXmlVfModule = docBuilderVfModule.parse(sourceVfModule)\r
                                \r
                                        // VMS Data\r
                                        \r
@@ -675,7 +733,10 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                                                                        StringBuilder sb2 = new StringBuilder()\r
                                                                        StringBuilder sb3 = new StringBuilder()\r
                                                                        StringBuilder sb4 = new StringBuilder()\r
-                                                                       networkKey = utils.getElementText(eElementNetworkKey, "network-role")\r
+                                                                       networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")\r
+                                                                       if (networkKey.isEmpty()) {\r
+                                                                               networkKey = utils.getElementText(eElementNetworkKey, "network-role")\r
+                                                                       }\r
                                                                        floatingIPKey = key + '_' + networkKey + '_floating_ip'\r
                                                                        floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")\r
                                                                        if(!floatingIPKeyValue.isEmpty()){\r
@@ -886,6 +947,23 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                                aZones = sbAZone.append(aZoneXml)\r
                        }\r
                }\r
+               \r
+               // Map of network-roles and network-tags from vm-networks\r
+               \r
+               NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")\r
+               Map<String, String> networkRoleMap = new HashMap<String, String>()\r
+               for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){\r
+                       Node nodeNetworkKey = vmNetworksListGlobal.item(n)\r
+                       if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {\r
+                               Element eElementNetworkKey = (Element) nodeNetworkKey\r
+                               String networkRole = utils.getElementText(eElementNetworkKey, "network-role")\r
+                               String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")\r
+                               if (networkRoleValue.isEmpty()) {\r
+                                       networkRoleValue = networkRole\r
+                               }\r
+                               networkRoleMap.put(networkRole, networkRoleValue)\r
+                       }\r
+               }\r
        \r
                // VNF Networks Data\r
                String vnfNetworkNetId = ""\r
@@ -905,7 +983,14 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                        Node node = vnfNetworkList.item(x)\r
                        if (node.getNodeType() == Node.ELEMENT_NODE) {\r
                                Element eElement = (Element) node\r
-                               String vnfNetworkKey = utils.getElementText(eElement, "network-role")\r
+                               String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")\r
+                               String networkRole = utils.getElementText(eElement, "network-role")\r
+                               if (vnfNetworkKey.isEmpty()) {\r
+                                       vnfNetworkKey = networkRoleMap.get(networkRole)\r
+                                       if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {\r
+                                               vnfNetworkKey = networkRole\r
+                                       }                                       \r
+                               }\r
                                String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")\r
                                String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")\r
                                String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")\r
@@ -1034,7 +1119,10 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                                                StringBuilder sb2 = new StringBuilder()\r
                                                StringBuilder sb3 = new StringBuilder()\r
                                                StringBuilder sb4 = new StringBuilder()\r
-                                               networkKey = utils.getElementText(eElementNetworkKey, "network-role")\r
+                                               networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")\r
+                                               if (networkKey.isEmpty()) {\r
+                                                       networkKey = utils.getElementText(eElementNetworkKey, "network-role")\r
+                                               }\r
                                                floatingIPKey = key + '_' + networkKey + '_floating_ip'\r
                                                floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")\r
                                                if(!floatingIPKeyValue.isEmpty()){\r