2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.common.scripts;
23 import java.io.ObjectInputStream.BlockDataInputStream
25 import java.io.ObjectInputStream.BlockDataInputStream
27 //import groovy.util.Node;
29 import javax.xml.parsers.DocumentBuilder
30 import javax.xml.parsers.DocumentBuilderFactory
32 import org.apache.commons.lang3.*
33 import org.w3c.dom.Document
34 import org.w3c.dom.Element
35 import org.w3c.dom.Node
36 import org.w3c.dom.NodeList
37 import org.xml.sax.InputSource
38 import org.onap.so.logger.MessageEnum
39 import org.onap.so.logger.MsoLogger
44 public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
45 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, VfModuleBase.class);
48 protected XmlParser xmlParser = new XmlParser()
53 * @return the XmlParser.
55 protected XmlParser getXmlParser() {
60 * Find the VF Module with specified ID in the specified Generic VF. If no such
61 * VF Module is found, null is returned.
63 * @param genericVnf The Generic VNF in which to search for the specified VF Moduel.
64 * @param vfModuleId The ID of the VF Module for which to search.
65 * @return a VFModule object for the found VF Module or null if no VF Module is found.
67 protected VfModule findVfModule(String genericVnf, String vfModuleId) {
69 def genericVnfNode = xmlParser.parseText(genericVnf)
70 def vfModulesNode = utils.getChildNode(genericVnfNode, 'vf-modules')
71 if (vfModulesNode == null) {
74 def vfModuleList = utils.getIdenticalChildren(vfModulesNode, 'vf-module')
75 for (vfModuleNode in vfModuleList) {
76 def vfModuleIdNode = utils.getChildNode(vfModuleNode, 'vf-module-id')
77 if ((vfModuleIdNode != null) && (vfModuleIdNode.text().equals(vfModuleId))) {
78 return new VfModule(vfModuleNode, (vfModuleList.size() == 1))
85 * Transform all '*_network' parameter specifications from the incoming '*-params' root
86 * element to a corresponding list of 'vnf-networks' specifications (typically used when
87 * invoking the VNF Rest Adpater). Each element in '*-params' whose name attribute ends
88 * with '_network' is used to create an 'vnf-networks' element.
90 * @param paramsNode A Node representing a '*-params' element.
91 * @return a String of 'vnf-networks' elements, one for each 'param' element whose name
92 * attribute ends with '_network'.
94 protected String transformNetworkParamsToVnfNetworks(String paramsRootXml) {
95 if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
98 def String vnfNetworks = ''
100 paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
101 def paramsNode = xmlParser.parseText(paramsRootXml)
102 def params = utils.getIdenticalChildren(paramsNode, 'param')
103 for (param in params) {
104 def String attrName = (String) param.attribute('name')
105 if (attrName.endsWith('_network')) {
106 def networkRole = attrName.substring(0, (attrName.length()-'_network'.length()))
107 def networkName = param.text()
108 String vnfNetwork = """
110 <network-role>${MsoUtils.xmlEscape(networkRole)}</network-role>
111 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
114 vnfNetworks = vnfNetworks + vnfNetwork
117 } catch (Exception e) {
118 msoLogger.warn(MessageEnum.BPMN_GENERAL_WARNING, 'Exception transforming network params to vnfNetworks', "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, 'Exception is: \n' + e);
124 * Transform the parameter specifications from the incoming '*-params' root element to
125 * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
126 * Each element in '*-params' is used to create an 'entry' element.
128 * @param paramsNode A Node representing a '*-params' element.
129 * @return a String of 'entry' elements, one for each 'param' element.
131 protected String transformParamsToEntries(String paramsRootXml) {
132 if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
135 def String entries = ''
137 paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
138 def paramsNode = xmlParser.parseText(paramsRootXml)
139 def params = utils.getIdenticalChildren(paramsNode, 'param')
140 for (param in params) {
141 def key = (String) param.attribute('name')
145 def value = (String) param.text()
148 <key>${MsoUtils.xmlEscape(key)}</key>
149 <value>${MsoUtils.xmlEscape(value)}</value>
152 entries = entries + entry
154 } catch (Exception e) {
155 msoLogger.warn(MessageEnum.BPMN_GENERAL_WARNING, 'Exception transforming params to entries', "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, 'Exception transforming params to entries', e);
161 * Transform the parameter specifications from the incoming '*-params' root element to
162 * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
163 * Each element in '*-params' is used to create an 'entry' element.
165 * @param paramsNode A Node representing a '*-params' element.
166 * @return a String of 'entry' elements, one for each 'param' element.
168 protected String transformVolumeParamsToEntries(String paramsRootXml) {
169 if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
172 def String entries = ''
174 paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
175 def paramsNode = xmlParser.parseText(paramsRootXml)
176 def params = utils.getIdenticalChildren(paramsNode, 'param')
177 for (param in params) {
178 def key = (String) param.attribute('name')
182 if ( !(key in ['vnf_id', 'vnf_name', 'vf_module_id', 'vf_module_name'])) {
183 def value = (String) param.text()
186 <key>${MsoUtils.xmlEscape(key)}</key>
187 <value>${MsoUtils.xmlEscape(value)}</value>
190 entries = entries + entry
193 } catch (Exception e) {
194 msoLogger.warn(MessageEnum.BPMN_GENERAL_WARNING, 'Exception transforming params to entries', "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, 'Exception transforming params to entries', e);
200 * Extract the Tenant Id from the Volume Group information returned by AAI.
202 * @param volumeGroupXml Volume Group XML returned by AAI.
203 * @return the Tenant Id extracted from the Volume Group information. 'null' is returned if
204 * the Tenant Id is missing or could not otherwise be extracted.
206 protected String getTenantIdFromVolumeGroup(String volumeGroupXml) {
207 def groovy.util.Node volumeGroupNode = xmlParser.parseText(volumeGroupXml)
208 def groovy.util.Node relationshipList = utils.getChildNode(volumeGroupNode, 'relationship-list')
209 if (relationshipList != null) {
210 def groovy.util.NodeList relationships = utils.getIdenticalChildren(relationshipList, 'relationship')
211 for (groovy.util.Node relationship in relationships) {
212 def groovy.util.Node relatedTo = utils.getChildNode(relationship, 'related-to')
213 if ((relatedTo != null) && (relatedTo.text().equals('tenant'))) {
214 def groovy.util.NodeList relationshipDataList = utils.getIdenticalChildren(relationship, 'relationship-data')
215 for (groovy.util.Node relationshipData in relationshipDataList) {
216 def groovy.util.Node relationshipKey = utils.getChildNode(relationshipData, 'relationship-key')
217 if ((relationshipKey != null) && (relationshipKey.text().equals('tenant.tenant-id'))) {
218 def groovy.util.Node relationshipValue = utils.getChildNode(relationshipData, 'relationship-value')
219 if (relationshipValue != null) {
220 return relationshipValue.text()
232 * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
233 * and puts them into the format expected by VNF adapter.
234 * @param vnfParamsMap - map of VNF parameters passed in the request body
235 * @param sdncGetResponse - response string from SDNC GET topology request
239 * @param vfModuleName
240 * @param vfModuleIndex - can be null
241 * @return a String of key/value entries for vfModuleParams
245 protected String buildVfModuleParams(Map<String, String> vnfParamsMap, String sdncGetResponse, String vnfId, String vnfName,
246 String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
248 //Get SDNC Response Data
250 String data = utils.getNodeXml(sdncGetResponse, "response-data")
252 String serviceData = utils.getNodeXml(data, "service-data")
253 serviceData = utils.removeXmlPreamble(serviceData)
254 serviceData = utils.removeXmlNamespaces(serviceData)
255 String vnfRequestInfo = utils.getNodeXml(serviceData, "vnf-request-information")
256 String oldVnfId = utils.getNodeXml(vnfRequestInfo, "vnf-id")
257 oldVnfId = utils.removeXmlPreamble(oldVnfId)
258 oldVnfId = utils.removeXmlNamespaces(oldVnfId)
259 serviceData = serviceData.replace(oldVnfId, "")
260 def vnfId1 = utils.getNodeText(serviceData, "vnf-id")
262 Map<String, String> paramsMap = new HashMap<String, String>()
264 if (vfModuleIndex != null) {
265 paramsMap.put("vf_module_index", "${vfModuleIndex}")
269 paramsMap.put("vnf_id", "${vnfId}")
270 paramsMap.put("vnf_name", "${vnfName}")
271 paramsMap.put("vf_module_id", "${vfModuleId}")
272 paramsMap.put("vf_module_name", "${vfModuleName}")
273 paramsMap.put("environment_context", "${environmentContext}")
274 paramsMap.put("workload_context", "${workloadContext}")
276 InputSource source = new InputSource(new StringReader(data));
277 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
278 docFactory.setNamespaceAware(true)
279 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
280 Document responseXml = docBuilder.parse(source)
283 // Availability Zones Data
285 NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
286 String aZonePosition = "0"
287 for (int z = 0; z < aZonesList.getLength(); z++) {
288 Node node = aZonesList.item(z)
289 if (node.getNodeType() == Node.ELEMENT_NODE) {
290 Element eElement = (Element) node
291 String aZoneValue = utils.getElementText(eElement, "availability-zone")
292 aZonePosition = z.toString()
293 paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
297 // Map of network-roles and network-tags from vm-networks
299 NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
300 Map<String, String> networkRoleMap = new HashMap<String, String>()
301 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
302 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
303 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
304 Element eElementNetworkKey = (Element) nodeNetworkKey
305 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
306 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
307 if (networkRoleValue.isEmpty()) {
308 networkRoleValue = networkRole
310 networkRoleMap.put(networkRole, networkRoleValue)
316 StringBuilder sbNet = new StringBuilder()
318 NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
319 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
320 Node node = vnfNetworkList.item(x)
321 if (node.getNodeType() == Node.ELEMENT_NODE) {
322 Element eElement = (Element) node
323 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
324 String networkRole = utils.getElementText(eElement, "network-role")
325 if (vnfNetworkKey.isEmpty()) {
326 vnfNetworkKey = networkRoleMap.get(networkRole)
327 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
328 vnfNetworkKey = networkRole
331 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
332 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
333 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
334 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
335 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
336 paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
337 paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
338 paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
339 paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
340 paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
342 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
343 StringBuffer sriovFilterBuf = new StringBuffer()
345 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
346 Node node1 = sriovVlanFilterList.item(i)
347 if (node1.getNodeType() == Node.ELEMENT_NODE) {
348 Element eElement1 = (Element) node1
349 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
350 if (i != sriovVlanFilterList.getLength() - 1) {
351 values = sriovFilterBuf.append(value + ",")
354 values = sriovFilterBuf.append(value);
358 if (!values.isEmpty()) {
359 paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
371 def floatingIPKeyValue
373 def floatingIPV6KeyValue
374 StringBuilder sb = new StringBuilder()
376 NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
377 for (int x = 0; x < vmsList.getLength(); x++) {
378 Node node = vmsList.item(x)
379 if (node.getNodeType() == Node.ELEMENT_NODE) {
380 Element eElement = (Element) node
381 key = utils.getElementText(eElement, "vm-type")
383 String position = "0"
384 StringBuilder sb1 = new StringBuilder()
385 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
386 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
387 for(int i = 0; i < valueList.getLength(); i++){
388 Node node1 = valueList.item(i)
389 if (node1.getNodeType() == Node.ELEMENT_NODE) {
390 Element eElement1 = (Element) node1
391 value = utils.getElementText(eElement1, "vm-name")
392 if (i != valueList.getLength() - 1) {
393 values = sb1.append(value + ",")
396 values = sb1.append(value);
398 position = i.toString()
399 paramsMap.put("${key}_name_${position}", "${value}")
402 for(int n = 0; n < vmNetworksList.getLength(); n++){
403 String floatingIpKeyValueStr = ""
404 String floatingIpV6KeyValueStr = ""
405 Node nodeNetworkKey = vmNetworksList.item(n)
406 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
407 Element eElementNetworkKey = (Element) nodeNetworkKey
408 String ipAddressValues
409 String ipV6AddressValues
410 String networkPosition = "0"
411 StringBuilder sb2 = new StringBuilder()
412 StringBuilder sb3 = new StringBuilder()
413 StringBuilder sb4 = new StringBuilder()
414 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
415 if (networkKey.isEmpty()) {
416 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
418 floatingIPKey = key + '_' + networkKey + '_floating_ip'
419 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
420 if(!floatingIPKeyValue.isEmpty()){
421 paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
423 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
424 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
425 if(!floatingIPV6KeyValue.isEmpty()){
426 paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
428 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
429 for(int a = 0; a < networkIpsList.getLength(); a++){
430 Node ipAddress = networkIpsList.item(a)
431 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
432 Element eElementIpAddress = (Element) ipAddress
433 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
434 if (a != networkIpsList.getLength() - 1) {
435 ipAddressValues = sb2.append(ipAddressValue + ",")
438 ipAddressValues = sb2.append(ipAddressValue);
440 networkPosition = a.toString()
441 paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
445 paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
447 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
448 String interfaceRoutePrefixValues = sb3.append("[")
450 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
451 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
452 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
453 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
454 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
455 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
456 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
458 if (a != interfaceRoutePrefixesList.getLength() - 1) {
459 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
462 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
466 interfaceRoutePrefixValues = sb3.append("]")
467 if (interfaceRoutePrefixesList.getLength() > 0) {
468 paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
471 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
472 for(int a = 0; a < networkIpsV6List.getLength(); a++){
473 Node ipV6Address = networkIpsV6List.item(a)
474 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
475 Element eElementIpV6Address = (Element) ipV6Address
476 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
477 if (a != networkIpsV6List.getLength() - 1) {
478 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
481 ipV6AddressValues = sb4.append(ipV6AddressValue);
483 networkPosition = a.toString()
484 paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
487 paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
490 paramsMap.put("${key}_names", "${values}")
493 //SDNC Response Params
494 String sdncResponseParams = ""
495 List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
496 String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
497 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
500 NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
501 for (int z = 0; z < paramsList.getLength(); z++) {
502 Node node = paramsList.item(z)
503 Element eElement = (Element) node
504 String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
505 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
506 String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
507 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
512 // Parameters received from the request should overwrite any parameters received from SDNC
513 if (vnfParamsMap != null) {
514 for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
515 String vnfKey = entry.getKey()
516 String vnfValue = entry.getValue()
517 paramsMap.put("$vnfKey", "$vnfValue")
521 StringBuilder sbParams = new StringBuilder()
522 def vfModuleParams = ""
523 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
525 String paramName = entry.getKey()
526 String paramValue = entry.getValue()
529 <key>${MsoUtils.xmlEscape(paramName)}</key>
530 <value>${MsoUtils.xmlEscape(paramValue)}</value>
534 vfModuleParams = sbParams.append(paramsXml)
537 return vfModuleParams
543 * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
544 * for both VNF and VF Module
545 * and puts them into the format expected by VNF adapter.
546 * @param vnfParamsMap - map of VNF parameters passed in the request body
547 * @param vnfSdncGetResponse - response string from SDNC GET VNF topology request
548 * @param vfmoduleSdncGetResponse - response string from SDNC GET VF Module topology request
552 * @param vfModuleName
553 * @param vfModuleIndex - can be null
554 * @return a String of key/value entries for vfModuleParams
557 protected String buildVfModuleParamsFromCombinedTopologies(Map<String, String> vnfParamsMap, String vnfSdncGetResponse, String vfmoduleSdncGetResponse, String vnfId, String vnfName,
558 String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
560 // Set up initial parameters
562 Map<String, String> paramsMap = new HashMap<String, String>()
564 if (vfModuleIndex != null) {
565 paramsMap.put("vf_module_index", "${vfModuleIndex}")
569 paramsMap.put("vnf_id", "${vnfId}")
570 paramsMap.put("vnf_name", "${vnfName}")
571 paramsMap.put("vf_module_id", "${vfModuleId}")
572 paramsMap.put("vf_module_name", "${vfModuleName}")
573 paramsMap.put("environment_context","${environmentContext}")
574 paramsMap.put("workload_context", "${workloadContext}")
576 //Get SDNC Response Data for VNF
578 String vnfData = utils.getNodeXml(vnfSdncGetResponse, "response-data")
580 String vnfTopology = utils.getNodeXml(vnfData, "vnf-topology")
581 vnfTopology = utils.removeXmlPreamble(vnfTopology)
582 vnfTopology = utils.removeXmlNamespaces(vnfTopology)
584 InputSource sourceVnf = new InputSource(new StringReader(vnfData));
585 DocumentBuilderFactory docFactoryVnf = DocumentBuilderFactory.newInstance();
586 docFactoryVnf.setNamespaceAware(true)
587 DocumentBuilder docBuilderVnf = docFactoryVnf.newDocumentBuilder()
588 Document responseXmlVnf = docBuilderVnf.parse(sourceVnf)
590 // Availability Zones Data
592 NodeList aZonesList = responseXmlVnf.getElementsByTagNameNS("*", "availability-zones")
593 String aZonePosition = "0"
594 for (int z = 0; z < aZonesList.getLength(); z++) {
595 Node node = aZonesList.item(z)
596 if (node.getNodeType() == Node.ELEMENT_NODE) {
597 Element eElement = (Element) node
598 String aZoneValue = utils.getElementText(eElement, "availability-zone")
599 aZonePosition = z.toString()
600 paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
604 //Get SDNC Response Data for VF Module
606 String vfModuleData = utils.getNodeXml(vfmoduleSdncGetResponse, "response-data")
608 String vfModuleTopology = utils.getNodeXml(vfModuleData, "vf-module-topology")
609 vfModuleTopology = utils.removeXmlPreamble(vfModuleTopology)
610 vfModuleTopology = utils.removeXmlNamespaces(vfModuleTopology)
611 String vfModuleTopologyIdentifier = utils.getNodeXml(vfModuleTopology, "vf-module-topology-identifier")
613 InputSource sourceVfModule = new InputSource(new StringReader(vfModuleData));
614 DocumentBuilderFactory docFactoryVfModule = DocumentBuilderFactory.newInstance();
615 docFactoryVfModule.setNamespaceAware(true)
616 DocumentBuilder docBuilderVfModule = docFactoryVfModule.newDocumentBuilder()
617 Document responseXmlVfModule = docBuilderVfModule.parse(sourceVfModule)
619 // Map of network-roles and network-tags from vm-networks
621 NodeList vmNetworksListGlobal = responseXmlVfModule.getElementsByTagNameNS("*", "vm-networks")
622 Map<String, String> networkRoleMap = new HashMap<String, String>()
623 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
624 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
625 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
626 Element eElementNetworkKey = (Element) nodeNetworkKey
627 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
628 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
629 if (networkRoleValue.isEmpty()) {
630 networkRoleValue = networkRole
632 networkRoleMap.put(networkRole, networkRoleValue)
638 StringBuilder sbNet = new StringBuilder()
640 NodeList vnfNetworkList = responseXmlVnf.getElementsByTagNameNS("*", "vnf-networks")
641 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
642 Node node = vnfNetworkList.item(x)
643 if (node.getNodeType() == Node.ELEMENT_NODE) {
644 Element eElement = (Element) node
645 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
646 String networkRole = utils.getElementText(eElement, "network-role")
647 if (vnfNetworkKey.isEmpty()) {
648 vnfNetworkKey = networkRoleMap.get(networkRole)
649 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
650 vnfNetworkKey = networkRole
653 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
654 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
655 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
656 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
657 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
658 paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
659 paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
660 paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
661 paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
662 paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
664 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
665 StringBuffer sriovFilterBuf = new StringBuffer()
667 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
668 Node node1 = sriovVlanFilterList.item(i)
669 if (node1.getNodeType() == Node.ELEMENT_NODE) {
670 Element eElement1 = (Element) node1
671 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
672 if (i != sriovVlanFilterList.getLength() - 1) {
673 values = sriovFilterBuf.append(value + ",")
676 values = sriovFilterBuf.append(value);
680 if (!values.isEmpty()) {
681 paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
695 def floatingIPKeyValue
697 def floatingIPV6KeyValue
698 StringBuilder sb = new StringBuilder()
700 NodeList vmsList = responseXmlVfModule.getElementsByTagNameNS("*","vm")
701 for (int x = 0; x < vmsList.getLength(); x++) {
702 Node node = vmsList.item(x)
703 if (node.getNodeType() == Node.ELEMENT_NODE) {
704 Element eElement = (Element) node
705 key = utils.getElementText(eElement, "vm-type")
707 String position = "0"
708 StringBuilder sb1 = new StringBuilder()
709 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
710 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
711 for(int i = 0; i < valueList.getLength(); i++){
712 Node node1 = valueList.item(i)
713 if (node1.getNodeType() == Node.ELEMENT_NODE) {
714 Element eElement1 = (Element) node1
715 value = utils.getElementText(eElement1, "vm-name")
716 if (i != valueList.getLength() - 1) {
717 values = sb1.append(value + ",")
720 values = sb1.append(value);
722 position = i.toString()
723 paramsMap.put("${key}_name_${position}", "${value}")
726 for(int n = 0; n < vmNetworksList.getLength(); n++){
727 String floatingIpKeyValueStr = ""
728 String floatingIpV6KeyValueStr = ""
729 Node nodeNetworkKey = vmNetworksList.item(n)
730 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
731 Element eElementNetworkKey = (Element) nodeNetworkKey
732 String ipAddressValues
733 String ipV6AddressValues
734 String networkPosition = "0"
735 StringBuilder sb2 = new StringBuilder()
736 StringBuilder sb3 = new StringBuilder()
737 StringBuilder sb4 = new StringBuilder()
738 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
739 if (networkKey.isEmpty()) {
740 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
742 floatingIPKey = key + '_' + networkKey + '_floating_ip'
743 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
744 if(!floatingIPKeyValue.isEmpty()){
745 paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
747 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
748 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
749 if(!floatingIPV6KeyValue.isEmpty()){
750 paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
752 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
753 for(int a = 0; a < networkIpsList.getLength(); a++){
754 Node ipAddress = networkIpsList.item(a)
755 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
756 Element eElementIpAddress = (Element) ipAddress
757 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
758 if (a != networkIpsList.getLength() - 1) {
759 ipAddressValues = sb2.append(ipAddressValue + ",")
762 ipAddressValues = sb2.append(ipAddressValue);
764 networkPosition = a.toString()
765 paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
769 paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
771 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
772 String interfaceRoutePrefixValues = sb3.append("[")
774 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
775 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
776 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
777 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
778 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
779 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
780 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
782 if (a != interfaceRoutePrefixesList.getLength() - 1) {
783 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
786 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
790 interfaceRoutePrefixValues = sb3.append("]")
791 if (interfaceRoutePrefixesList.getLength() > 0) {
792 paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
795 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
796 for(int a = 0; a < networkIpsV6List.getLength(); a++){
797 Node ipV6Address = networkIpsV6List.item(a)
798 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
799 Element eElementIpV6Address = (Element) ipV6Address
800 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
801 if (a != networkIpsV6List.getLength() - 1) {
802 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
805 ipV6AddressValues = sb4.append(ipV6AddressValue);
807 networkPosition = a.toString()
808 paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
811 paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
814 paramsMap.put("${key}_names", "${values}")
817 //SDNC Response Params
818 List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
820 String vnfParamsChildNodes = utils.getChildNodes(vnfData, "param")
821 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
822 // No SDNC params for VNF
824 NodeList paramsList = responseXmlVnf.getElementsByTagNameNS("*", "param")
825 for (int z = 0; z < paramsList.getLength(); z++) {
826 Node node = paramsList.item(z)
827 Element eElement = (Element) node
828 String vnfParameterName = utils.getElementText(eElement, "name")
829 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
830 String vnfParameterValue = utils.getElementText(eElement, "value")
831 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
836 String vfModuleParamsChildNodes = utils.getChildNodes(vfModuleData, "param")
837 if(vfModuleParamsChildNodes == null || vfModuleParamsChildNodes.length() < 1){
838 // No SDNC params for VF Module
840 NodeList paramsList = responseXmlVfModule.getElementsByTagNameNS("*", "param")
841 for (int z = 0; z < paramsList.getLength(); z++) {
842 Node node = paramsList.item(z)
843 Element eElement = (Element) node
844 String vnfParameterName = utils.getElementText(eElement, "name")
845 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
846 String vnfParameterValue = utils.getElementText(eElement, "value")
847 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
852 // Parameters received from the request should overwrite any parameters received from SDNC
853 if (vnfParamsMap != null) {
854 for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
855 String vnfKey = entry.getKey()
856 String vnfValue = entry.getValue()
857 paramsMap.put("$vnfKey", "$vnfValue")
861 StringBuilder sbParams = new StringBuilder()
862 def vfModuleParams = ""
863 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
865 String paramName = entry.getKey()
866 String paramValue = entry.getValue()
869 <key>${MsoUtils.xmlEscape(paramName)}</key>
870 <value>${MsoUtils.xmlEscape(paramValue)}</value>
874 vfModuleParams = sbParams.append(paramsXml)
877 return vfModuleParams
883 * VBNG specific method that parses VNF parameters passed in on the
884 * incoming requests and SDNC parameters returned from SDNC get response
885 * and puts them into the format expected by VNF adapter.
886 * @param vnfParamsMap - map of VNF parameters passed in the request body
887 * @param sdncGetResponse - response string from SDNC GET topology request
891 * @param vfModuleName
892 * @return a String of key/value entries for vfModuleParams
895 protected String buildVfModuleParamsVbng(String vnfParams, String sdncGetResponse, String vnfId, String vnfName,
896 String vfModuleId, String vfModuleName) {
898 //Get SDNC Response Data
900 String data = utils.getNodeXml(sdncGetResponse, "response-data")
908 <value>${MsoUtils.xmlEscape(vnfId)}</value>
912 <value>${MsoUtils.xmlEscape(vnfName)}</value>
915 <key>vf_module_id</key>
916 <value>${MsoUtils.xmlEscape(vfModuleId)}</value>
919 <key>vf_module_name</key>
920 <value>${MsoUtils.xmlEscape(vfModuleName)}</value>
923 msoLogger.debug("vnfInfo: " + vnfInfo)
924 InputSource source = new InputSource(new StringReader(data));
925 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
926 docFactory.setNamespaceAware(true)
927 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
928 Document responseXml = docBuilder.parse(source)
931 // Availability Zones Data
933 StringBuilder sbAZone = new StringBuilder()
934 NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
935 String aZonePosition = "0"
936 for (int z = 0; z < aZonesList.getLength(); z++) {
937 Node node = aZonesList.item(z)
938 if (node.getNodeType() == Node.ELEMENT_NODE) {
939 Element eElement = (Element) node
940 String aZoneValue = utils.getElementText(eElement, "availability-zone")
941 aZonePosition = z.toString()
944 <key>availability_zone_${MsoUtils.xmlEscape(aZonePosition)}</key>
945 <value>${MsoUtils.xmlEscape(aZoneValue)}</value>
947 aZones = sbAZone.append(aZoneXml)
951 // Map of network-roles and network-tags from vm-networks
953 NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
954 Map<String, String> networkRoleMap = new HashMap<String, String>()
955 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
956 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
957 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
958 Element eElementNetworkKey = (Element) nodeNetworkKey
959 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
960 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
961 if (networkRoleValue.isEmpty()) {
962 networkRoleValue = networkRole
964 networkRoleMap.put(networkRole, networkRoleValue)
969 String vnfNetworkNetId = ""
970 String vnfNetworkNetName = ""
971 String vnfNetworkSubNetId = ""
972 String vnfNetworkV6SubNetId = ""
973 String vnfNetworkNetFqdn = ""
974 String vnfNetworksSriovVlanFilters = ""
975 StringBuilder sbNet = new StringBuilder()
976 StringBuilder sbNet2 = new StringBuilder()
977 StringBuilder sbNet3 = new StringBuilder()
978 StringBuilder sbNet4 = new StringBuilder()
979 StringBuilder sbNet5 = new StringBuilder()
980 StringBuilder sbNet6 = new StringBuilder()
981 NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
982 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
983 Node node = vnfNetworkList.item(x)
984 if (node.getNodeType() == Node.ELEMENT_NODE) {
985 Element eElement = (Element) node
986 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
987 String networkRole = utils.getElementText(eElement, "network-role")
988 if (vnfNetworkKey.isEmpty()) {
989 vnfNetworkKey = networkRoleMap.get(networkRole)
990 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
991 vnfNetworkKey = networkRole
994 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
995 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
996 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
997 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
998 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
999 String vnfNetworkNetIdXml =
1001 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_id</key>
1002 <value>${MsoUtils.xmlEscape(vnfNetworkNeutronIdValue)}</value>
1004 vnfNetworkNetId = sbNet.append(vnfNetworkNetIdXml)
1005 String vnfNetworkNetNameXml =
1007 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_name</key>
1008 <value>${MsoUtils.xmlEscape(vnfNetworkNetNameValue)}</value>
1010 vnfNetworkNetName = sbNet2.append(vnfNetworkNetNameXml)
1011 String vnfNetworkSubNetIdXml =
1013 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_subnet_id</key>
1014 <value>${MsoUtils.xmlEscape(vnfNetworkSubNetIdValue)}</value>
1016 vnfNetworkSubNetId = sbNet3.append(vnfNetworkSubNetIdXml)
1017 String vnfNetworkV6SubNetIdXml =
1019 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_v6_subnet_id</key>
1020 <value>${MsoUtils.xmlEscape(vnfNetworkV6SubNetIdValue)}</value>
1022 vnfNetworkV6SubNetId = sbNet5.append(vnfNetworkV6SubNetIdXml)
1023 String vnfNetworkNetFqdnXml =
1025 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_fqdn</key>
1026 <value>${MsoUtils.xmlEscape(vnfNetworkNetFqdnValue)}</value>
1028 vnfNetworkNetFqdn = sbNet4.append(vnfNetworkNetFqdnXml)
1030 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
1031 StringBuffer sriovFilterBuf = new StringBuffer()
1033 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
1034 Node node1 = sriovVlanFilterList.item(i)
1035 if (node1.getNodeType() == Node.ELEMENT_NODE) {
1036 Element eElement1 = (Element) node1
1037 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
1038 if (i != sriovVlanFilterList.getLength() - 1) {
1039 values = sriovFilterBuf.append(value + ",")
1042 values = sriovFilterBuf.append(value);
1046 if (!values.isEmpty()) {
1047 String vnfNetworkSriovVlanFilterXml =
1049 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_ATT_VF_VLAN_FILTER</key>
1050 <value>${MsoUtils.xmlEscape(values)}</value>
1052 vnfNetworksSriovVlanFilters = sbNet6.append(vnfNetworkSriovVlanFilterXml)
1059 String vnfVMSPositions = ""
1060 String vmNetworks = ""
1061 String vmNetworksPositions = ""
1062 String vmNetworksPositionsV6 = ""
1063 String interfaceRoutePrefixes = ""
1069 def floatingIPKeyValue
1071 def floatingIPV6KeyValue
1072 StringBuilder sb = new StringBuilder()
1073 StringBuilder sbPositions = new StringBuilder()
1074 StringBuilder sbVmNetworks = new StringBuilder()
1075 StringBuilder sbNetworksPositions = new StringBuilder()
1076 StringBuilder sbInterfaceRoutePrefixes = new StringBuilder()
1077 StringBuilder sbNetworksPositionsV6 = new StringBuilder()
1079 NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
1080 for (int x = 0; x < vmsList.getLength(); x++) {
1081 Node node = vmsList.item(x)
1082 if (node.getNodeType() == Node.ELEMENT_NODE) {
1083 Element eElement = (Element) node
1084 key = utils.getElementText(eElement, "vm-type")
1086 String position = "0"
1087 StringBuilder sb1 = new StringBuilder()
1088 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
1089 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
1090 for(int i = 0; i < valueList.getLength(); i++){
1091 Node node1 = valueList.item(i)
1092 if (node1.getNodeType() == Node.ELEMENT_NODE) {
1093 Element eElement1 = (Element) node1
1094 value = utils.getElementText(eElement1, "vm-name")
1095 if (i != valueList.getLength() - 1) {
1096 values = sb1.append(value + ",")
1099 values = sb1.append(value);
1101 position = i.toString()
1102 String vnfPositionXml =
1104 <key>${MsoUtils.xmlEscape(key)}_name_${MsoUtils.xmlEscape(position)}</key>
1105 <value>${MsoUtils.xmlEscape(value)}</value>
1107 nfVMSPositions = sbPositions.append(vnfPositionXml)
1110 for(int n = 0; n < vmNetworksList.getLength(); n++){
1111 String floatingIpKeyValueStr = ""
1112 String floatingIpV6KeyValueStr = ""
1113 Node nodeNetworkKey = vmNetworksList.item(n)
1114 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
1115 Element eElementNetworkKey = (Element) nodeNetworkKey
1116 String ipAddressValues
1117 String ipV6AddressValues
1118 String networkPosition = "0"
1119 StringBuilder sb2 = new StringBuilder()
1120 StringBuilder sb3 = new StringBuilder()
1121 StringBuilder sb4 = new StringBuilder()
1122 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
1123 if (networkKey.isEmpty()) {
1124 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
1126 floatingIPKey = key + '_' + networkKey + '_floating_ip'
1127 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
1128 if(!floatingIPKeyValue.isEmpty()){
1129 floatingIpKeyValueStr = """<entry>
1130 <key>$floatingIPKey</key>
1131 <value>$floatingIPKeyValue</value>
1134 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
1135 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
1136 if(!floatingIPV6KeyValue.isEmpty()){
1137 floatingIpV6KeyValueStr = """<entry>
1138 <key>$floatingIPV6Key</key>
1139 <value>$floatingIPV6KeyValue</value>
1142 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
1143 for(int a = 0; a < networkIpsList.getLength(); a++){
1144 Node ipAddress = networkIpsList.item(a)
1145 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
1146 Element eElementIpAddress = (Element) ipAddress
1147 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
1148 if (a != networkIpsList.getLength() - 1) {
1149 ipAddressValues = sb2.append(ipAddressValue + ",")
1152 ipAddressValues = sb2.append(ipAddressValue);
1154 networkPosition = a.toString()
1155 String vmNetworksPositionsXml =
1157 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
1158 <value>${MsoUtils.xmlEscape(ipAddressValue)}</value>
1160 vmNetworksPositions = sbNetworksPositions.append(vmNetworksPositionsXml)
1163 vmNetworksPositions = sbNetworksPositions.append(floatingIpKeyValueStr).append(floatingIpV6KeyValueStr)
1165 String vmNetworksXml =
1167 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ips</key>
1168 <value>${MsoUtils.xmlEscape(ipAddressValues)}</value>
1170 vmNetworks = sbVmNetworks.append(vmNetworksXml)
1172 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
1173 String interfaceRoutePrefixValues = sb3.append("[")
1175 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
1176 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
1177 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
1178 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
1179 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
1180 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
1181 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
1183 if (a != interfaceRoutePrefixesList.getLength() - 1) {
1184 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
1187 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
1191 interfaceRoutePrefixValues = sb3.append("]")
1192 if (interfaceRoutePrefixesList.getLength() > 0) {
1193 String interfaceRoutePrefixesXml =
1195 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_route_prefixes</key>
1196 <value>${MsoUtils.xmlEscape(interfaceRoutePrefixValues)}</value>
1198 interfaceRoutePrefixes = sbInterfaceRoutePrefixes.append(interfaceRoutePrefixesXml)
1201 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
1202 for(int a = 0; a < networkIpsV6List.getLength(); a++){
1203 Node ipV6Address = networkIpsV6List.item(a)
1204 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
1205 Element eElementIpV6Address = (Element) ipV6Address
1206 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
1207 if (a != networkIpsV6List.getLength() - 1) {
1208 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
1211 ipV6AddressValues = sb4.append(ipV6AddressValue);
1213 networkPosition = a.toString()
1214 String vmNetworksPositionsV6Xml =
1216 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
1217 <value>${MsoUtils.xmlEscape(ipV6AddressValue)}</value>
1219 vmNetworksPositionsV6 = sbNetworksPositionsV6.append(vmNetworksPositionsV6Xml)
1222 String vmNetworksV6Xml =
1224 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ips</key>
1225 <value>${MsoUtils.xmlEscape(ipV6AddressValues)}</value>
1227 vmNetworks = sbVmNetworks.append(vmNetworksV6Xml)
1232 <key>${MsoUtils.xmlEscape(key)}_names</key>
1233 <value>${MsoUtils.xmlEscape(values)}</value>
1235 vnfVMS = sb.append(vnfXml)
1238 //SDNC Response Params
1239 String sdncResponseParams = ""
1240 List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
1241 String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
1242 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
1245 NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
1246 for (int z = 0; z < paramsList.getLength(); z++) {
1247 Node node = paramsList.item(z)
1248 Element eElement = (Element) node
1249 String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
1250 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
1251 String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
1254 <key>${MsoUtils.xmlEscape(vnfParameterName)}</key>
1255 <value>${MsoUtils.xmlEscape(vnfParameterValue)}</value>
1257 sdncResponseParams = sb.append(paraEntry)
1263 def vfModuleParams = """
1267 ${vnfNetworkNetName}
1268 ${vnfNetworkSubNetId}
1269 ${vnfNetworkV6SubNetId}
1270 ${vnfNetworkNetFqdn}
1271 ${vnfNetworksSriovVlanFilters}
1275 ${vmNetworksPositions}
1276 ${vmNetworksPositionsV6}
1277 ${interfaceRoutePrefixes}
1279 ${sdncResponseParams}"""
1281 return vfModuleParams