1710 Rebase - Second Attempt
[so.git] / bpmn / MSOCommonBPMN / src / main / groovy / org / openecomp / mso / bpmn / common / scripts / VfModuleBase.groovy
index 7a97d5c..e0393cb 100644 (file)
@@ -501,6 +501,319 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                return vfModuleParams\r
                \r
        }\r
+                       \r
+                       \r
+                       /*\r
+                        * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response\r
+                        * for both VNF and VF Module\r
+                        * and puts them into the format expected by VNF adapter.\r
+                        * @param vnfParamsMap -  map of VNF parameters passed in the request body\r
+                        * @param vnfSdncGetResponse - response string from SDNC GET VNF topology request\r
+                        * @param vfmoduleSdncGetResponse - response string from SDNC GET VF Module topology request\r
+                        * @param vnfId\r
+                        * @param vnfName\r
+                        * @param vfModuleId\r
+                        * @param vfModuleName\r
+                        * @param vfModuleIndex - can be null\r
+                        * @return a String of key/value entries for vfModuleParams\r
+                        */                       \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
+                                       \r
+                                       // Set up initial parameters\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
+                                       //Get SDNC Response Data for VNF\r
+                                       \r
+                                       String vnfData = utils.getNodeXml(vnfSdncGetResponse, "response-data")\r
+                                       vnfData = vnfData.replaceAll("&lt;", "<")\r
+                                       vnfData = vnfData.replaceAll("&gt;", ">")\r
+               \r
+                                       String vnfTopology = utils.getNodeXml(vnfData, "vnf-topology")\r
+                                       vnfTopology = utils.removeXmlPreamble(vnfTopology)\r
+                                       vnfTopology = utils.removeXmlNamespaces(vnfTopology)\r
+                                                                               \r
+                                       InputSource sourceVnf = new InputSource(new StringReader(vnfData));\r
+                                       DocumentBuilderFactory docFactoryVnf = DocumentBuilderFactory.newInstance();\r
+                                       docFactoryVnf.setNamespaceAware(true)\r
+                                       DocumentBuilder docBuilderVnf = docFactoryVnf.newDocumentBuilder()\r
+                                       Document responseXmlVnf = docBuilderVnf.parse(sourceVnf)\r
+                               \r
+                                       // Availability Zones Data\r
+                                       \r
+                                       NodeList aZonesList = responseXmlVnf.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
+                                       // VNF Networks Data\r
+                                       \r
+                                       StringBuilder sbNet = new StringBuilder()\r
+                                       \r
+                                       NodeList vnfNetworkList = responseXmlVnf.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
+                                                               }\r
+                                                       }\r
+                                                       if (!values.isEmpty()) {\r
+                                                                       paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")\r
+                                                               }\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
+                                       // 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 = responseXmlVfModule.getElementsByTagNameNS("*","vm")\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
+                                                       }\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")\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
+                                                                       }\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
+                                                                       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
+                                                                       }\r
+                                                                       paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")\r
+                                                               }\r
+                                                       }\r
+                                                       paramsMap.put("${key}_names", "${values}")\r
+                                               }\r
+                                       }\r
+                               //SDNC Response Params\r
+                                       List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]\r
+                                       \r
+                                       String vnfParamsChildNodes = utils.getChildNodes(vnfData, "param")\r
+                                       if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){\r
+                                               // No SDNC params for VNF\r
+                                       }else{\r
+                                               NodeList paramsList = responseXmlVnf.getElementsByTagNameNS("*", "param")\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, "name")\r
+                                                       if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {\r
+                                                               String vnfParameterValue = utils.getElementText(eElement, "value")\r
+                                                               paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       \r
+                                       String vfModuleParamsChildNodes = utils.getChildNodes(vfModuleData, "param")\r
+                                       if(vfModuleParamsChildNodes == null || vfModuleParamsChildNodes.length() < 1){\r
+                                               // No SDNC params for VF Module\r
+                                       }else{\r
+                                               NodeList paramsList = responseXmlVfModule.getElementsByTagNameNS("*", "param")\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, "name")\r
+                                                       if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {\r
+                                                               String vnfParameterValue = utils.getElementText(eElement, "value")\r
+                                                               paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")\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
+                                               String vnfKey = entry.getKey()\r
+                                               String vnfValue = entry.getValue()\r
+                                               paramsMap.put("$vnfKey", "$vnfValue")\r
+                                       }\r
+                               }\r
+                               \r
+                               StringBuilder sbParams = new StringBuilder()\r
+                               def vfModuleParams = ""\r
+                               for (Map.Entry<String, String> entry : paramsMap.entrySet()) {\r
+                                       String paramsXml\r
+                                       String paramName = entry.getKey()\r
+                                       String paramValue = entry.getValue()\r
+                                       paramsXml =\r
+                                                       """<entry>\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