2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.bpmn.common.scripts
25 import org.onap.so.logger.ErrorCode;
27 import javax.xml.parsers.DocumentBuilder
28 import javax.xml.parsers.DocumentBuilderFactory
30 import org.w3c.dom.Document
31 import org.w3c.dom.Element
32 import org.w3c.dom.Node
33 import org.w3c.dom.NodeList
34 import org.xml.sax.InputSource
35 import org.onap.so.logger.MessageEnum
36 import org.slf4j.Logger
37 import org.slf4j.LoggerFactory
39 public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
40 private static final Logger logger = LoggerFactory.getLogger( VfModuleBase.class);
43 protected XmlParser xmlParser = new XmlParser()
48 * @return the XmlParser.
50 protected XmlParser getXmlParser() {
55 * Find the VF Module with specified ID in the specified Generic VF. If no such
56 * VF Module is found, null is returned.
58 * @param genericVnf The Generic VNF in which to search for the specified VF Moduel.
59 * @param vfModuleId The ID of the VF Module for which to search.
60 * @return a VFModule object for the found VF Module or null if no VF Module is found.
62 protected VfModule findVfModule(String genericVnf, String vfModuleId) {
64 def genericVnfNode = xmlParser.parseText(genericVnf)
65 def vfModulesNode = utils.getChildNode(genericVnfNode, 'vf-modules')
66 if (vfModulesNode == null) {
69 def vfModuleList = utils.getIdenticalChildren(vfModulesNode, 'vf-module')
70 for (vfModuleNode in vfModuleList) {
71 def vfModuleIdNode = utils.getChildNode(vfModuleNode, 'vf-module-id')
72 if ((vfModuleIdNode != null) && (vfModuleIdNode.text().equals(vfModuleId))) {
73 return new VfModule(vfModuleNode, (vfModuleList.size() == 1))
80 * Transform all '*_network' parameter specifications from the incoming '*-params' root
81 * element to a corresponding list of 'vnf-networks' specifications (typically used when
82 * invoking the VNF Rest Adpater). Each element in '*-params' whose name attribute ends
83 * with '_network' is used to create an 'vnf-networks' element.
85 * @param paramsNode A Node representing a '*-params' element.
86 * @return a String of 'vnf-networks' elements, one for each 'param' element whose name
87 * attribute ends with '_network'.
89 protected String transformNetworkParamsToVnfNetworks(String paramsRootXml) {
90 if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
93 def String vnfNetworks = ''
95 paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
96 def paramsNode = xmlParser.parseText(paramsRootXml)
97 def params = utils.getIdenticalChildren(paramsNode, 'param')
98 for (param in params) {
99 def String attrName = (String) param.attribute('name')
100 if (attrName.endsWith('_network')) {
101 def networkRole = attrName.substring(0, (attrName.length()-'_network'.length()))
102 def networkName = param.text()
103 String vnfNetwork = """
105 <network-role>${MsoUtils.xmlEscape(networkRole)}</network-role>
106 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
109 vnfNetworks = vnfNetworks + vnfNetwork
112 } catch (Exception e) {
113 logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
114 'Exception transforming network params to vnfNetworks', "BPMN",
115 ErrorCode.UnknownError.getValue(), 'Exception is: \n' + e);
121 * Transform the parameter specifications from the incoming '*-params' root element to
122 * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
123 * Each element in '*-params' is used to create an 'entry' element.
125 * @param paramsNode A Node representing a '*-params' element.
126 * @return a String of 'entry' elements, one for each 'param' element.
128 protected String transformParamsToEntries(String paramsRootXml) {
129 if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
132 def String entries = ''
134 paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
135 def paramsNode = xmlParser.parseText(paramsRootXml)
136 def params = utils.getIdenticalChildren(paramsNode, 'param')
137 for (param in params) {
138 def key = (String) param.attribute('name')
142 def value = (String) param.text()
145 <key>${MsoUtils.xmlEscape(key)}</key>
146 <value>${MsoUtils.xmlEscape(value)}</value>
149 entries = entries + entry
151 } catch (Exception e) {
152 logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
153 'Exception transforming params to entries', "BPMN",
154 ErrorCode.UnknownError.getValue(), 'Exception transforming params to entries' + e);
160 * Transform the parameter specifications from the incoming '*-params' root element to
161 * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
162 * Each element in '*-params' is used to create an 'entry' element.
164 * @param paramsNode A Node representing a '*-params' element.
165 * @return a String of 'entry' elements, one for each 'param' element.
167 protected String transformVolumeParamsToEntries(String paramsRootXml) {
168 if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
171 def String entries = ''
173 paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
174 def paramsNode = xmlParser.parseText(paramsRootXml)
175 def params = utils.getIdenticalChildren(paramsNode, 'param')
176 for (param in params) {
177 def key = (String) param.attribute('name')
187 def value = (String) param.text()
190 <key>${MsoUtils.xmlEscape(key)}</key>
191 <value>${MsoUtils.xmlEscape(value)}</value>
194 entries = entries + entry
197 } catch (Exception e) {
198 logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
199 'Exception transforming params to entries', "BPMN",
200 ErrorCode.UnknownError.getValue(), 'Exception transforming params to entries' + e);
206 * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
207 * and puts them into the format expected by VNF adapter.
208 * @param vnfParamsMap - map of VNF parameters passed in the request body
209 * @param sdncGetResponse - response string from SDNC GET topology request
213 * @param vfModuleName
214 * @param vfModuleIndex - can be null
215 * @return a String of key/value entries for vfModuleParams
219 protected String buildVfModuleParams(Map<String, String> vnfParamsMap, String sdncGetResponse, String vnfId, String vnfName,
220 String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
222 //Get SDNC Response Data
224 String data = utils.getNodeXml(sdncGetResponse, "response-data")
226 String serviceData = utils.getNodeXml(data, "service-data")
227 serviceData = utils.removeXmlPreamble(serviceData)
228 serviceData = utils.removeXmlNamespaces(serviceData)
229 String vnfRequestInfo = utils.getNodeXml(serviceData, "vnf-request-information")
230 String oldVnfId = utils.getNodeXml(vnfRequestInfo, "vnf-id")
231 oldVnfId = utils.removeXmlPreamble(oldVnfId)
232 oldVnfId = utils.removeXmlNamespaces(oldVnfId)
233 serviceData = serviceData.replace(oldVnfId, "")
234 def vnfId1 = utils.getNodeText(serviceData, "vnf-id")
236 Map<String, String> paramsMap = new HashMap<String, String>()
238 if (vfModuleIndex != null) {
239 paramsMap.put("vf_module_index", "${vfModuleIndex}")
243 paramsMap.put("vnf_id", "${vnfId}")
244 paramsMap.put("vnf_name", "${vnfName}")
245 paramsMap.put("vf_module_id", "${vfModuleId}")
246 paramsMap.put("vf_module_name", "${vfModuleName}")
247 paramsMap.put("environment_context", "${environmentContext}")
248 paramsMap.put("workload_context", "${workloadContext}")
250 InputSource source = new InputSource(new StringReader(data));
251 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
252 docFactory.setNamespaceAware(true)
253 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
254 Document responseXml = docBuilder.parse(source)
257 // Availability Zones Data
259 NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
260 String aZonePosition = "0"
261 for (int z = 0; z < aZonesList.getLength(); z++) {
262 Node node = aZonesList.item(z)
263 if (node.getNodeType() == Node.ELEMENT_NODE) {
264 Element eElement = (Element) node
265 String aZoneValue = utils.getElementText(eElement, "availability-zone")
266 aZonePosition = z.toString()
267 paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
271 // Map of network-roles and network-tags from vm-networks
273 NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
274 Map<String, String> networkRoleMap = new HashMap<String, String>()
275 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
276 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
277 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
278 Element eElementNetworkKey = (Element) nodeNetworkKey
279 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
280 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
281 if (networkRoleValue.isEmpty()) {
282 networkRoleValue = networkRole
284 networkRoleMap.put(networkRole, networkRoleValue)
290 StringBuilder sbNet = new StringBuilder()
292 NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
293 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
294 Node node = vnfNetworkList.item(x)
295 if (node.getNodeType() == Node.ELEMENT_NODE) {
296 Element eElement = (Element) node
297 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
298 String networkRole = utils.getElementText(eElement, "network-role")
299 if (vnfNetworkKey.isEmpty()) {
300 vnfNetworkKey = networkRoleMap.get(networkRole)
301 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
302 vnfNetworkKey = networkRole
305 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
306 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
307 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
308 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
309 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
310 paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
311 paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
312 paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
313 paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
314 paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
316 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
317 StringBuffer sriovFilterBuf = new StringBuffer()
319 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
320 Node node1 = sriovVlanFilterList.item(i)
321 if (node1.getNodeType() == Node.ELEMENT_NODE) {
322 Element eElement1 = (Element) node1
323 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
324 if (i != sriovVlanFilterList.getLength() - 1) {
325 values = sriovFilterBuf.append(value + ",")
328 values = sriovFilterBuf.append(value);
332 if (!values.isEmpty()) {
333 paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
345 def floatingIPKeyValue
347 def floatingIPV6KeyValue
348 StringBuilder sb = new StringBuilder()
350 NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
351 for (int x = 0; x < vmsList.getLength(); x++) {
352 Node node = vmsList.item(x)
353 if (node.getNodeType() == Node.ELEMENT_NODE) {
354 Element eElement = (Element) node
355 key = utils.getElementText(eElement, "vm-type")
357 String position = "0"
358 StringBuilder sb1 = new StringBuilder()
359 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
360 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
361 for(int i = 0; i < valueList.getLength(); i++){
362 Node node1 = valueList.item(i)
363 if (node1.getNodeType() == Node.ELEMENT_NODE) {
364 Element eElement1 = (Element) node1
365 value = utils.getElementText(eElement1, "vm-name")
366 if (i != valueList.getLength() - 1) {
367 values = sb1.append(value + ",")
370 values = sb1.append(value);
372 position = i.toString()
373 paramsMap.put("${key}_name_${position}", "${value}")
376 for(int n = 0; n < vmNetworksList.getLength(); n++){
377 String floatingIpKeyValueStr = ""
378 String floatingIpV6KeyValueStr = ""
379 Node nodeNetworkKey = vmNetworksList.item(n)
380 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
381 Element eElementNetworkKey = (Element) nodeNetworkKey
382 String ipAddressValues
383 String ipV6AddressValues
384 String networkPosition = "0"
385 StringBuilder sb2 = new StringBuilder()
386 StringBuilder sb3 = new StringBuilder()
387 StringBuilder sb4 = new StringBuilder()
388 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
389 if (networkKey.isEmpty()) {
390 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
392 floatingIPKey = key + '_' + networkKey + '_floating_ip'
393 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
394 if(!floatingIPKeyValue.isEmpty()){
395 paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
397 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
398 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
399 if(!floatingIPV6KeyValue.isEmpty()){
400 paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
402 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
403 for(int a = 0; a < networkIpsList.getLength(); a++){
404 Node ipAddress = networkIpsList.item(a)
405 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
406 Element eElementIpAddress = (Element) ipAddress
407 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
408 if (a != networkIpsList.getLength() - 1) {
409 ipAddressValues = sb2.append(ipAddressValue + ",")
412 ipAddressValues = sb2.append(ipAddressValue);
414 networkPosition = a.toString()
415 paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
419 paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
421 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
422 String interfaceRoutePrefixValues = sb3.append("[")
424 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
425 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
426 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
427 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
428 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
429 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
430 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
432 if (a != interfaceRoutePrefixesList.getLength() - 1) {
433 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
436 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
440 interfaceRoutePrefixValues = sb3.append("]")
441 if (interfaceRoutePrefixesList.getLength() > 0) {
442 paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
445 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
446 for(int a = 0; a < networkIpsV6List.getLength(); a++){
447 Node ipV6Address = networkIpsV6List.item(a)
448 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
449 Element eElementIpV6Address = (Element) ipV6Address
450 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
451 if (a != networkIpsV6List.getLength() - 1) {
452 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
455 ipV6AddressValues = sb4.append(ipV6AddressValue);
457 networkPosition = a.toString()
458 paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
461 paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
464 paramsMap.put("${key}_names", "${values}")
467 //SDNC Response Params
468 String sdncResponseParams = ""
469 List<String> sdncResponseParamsToSkip = [
475 String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
476 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
479 NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
480 for (int z = 0; z < paramsList.getLength(); z++) {
481 Node node = paramsList.item(z)
482 Element eElement = (Element) node
483 String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
484 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
485 String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
486 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
491 // make the sdnc_directives parameter
492 String sdncDirectives = "{}"
493 StringBuilder sdncDirectivesBuilder = new StringBuilder()
494 sdncDirectivesBuilder.append("{ \"attributes\": [")
496 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
497 String attributeName = entry.getKey()
498 String attributeValue = entry.getValue()
500 sdncDirectivesBuilder.append(",")
503 sdncDirectivesBuilder.append("{\"attribute_name\":\"${attributeName}\",")
504 sdncDirectivesBuilder.append("\"attribute_value\":\"${attributeValue}\"}")
507 sdncDirectives = sdncDirectivesBuilder.append("]}").toString()
509 paramsMap.put("sdnc_directives", "${sdncDirectives}")
511 // Parameters received from the request should overwrite any parameters received from SDNC
512 // Also build the user_directives parameter
513 String userDirectives = "{}"
514 if (vnfParamsMap != null) {
515 StringBuilder userDirectivesBuilder = new StringBuilder()
516 userDirectivesBuilder.append("{ \"attributes\": [")
518 for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
519 String vnfKey = entry.getKey()
520 String vnfValue = entry.getValue()
521 paramsMap.put("$vnfKey", "$vnfValue")
522 if (!"oof_directives".equals(vnfKey)) {
524 userDirectivesBuilder.append(",")
527 userDirectivesBuilder.append("{\"attribute_name\":\"${vnfKey}\",")
528 userDirectivesBuilder.append("\"attribute_value\":\"${vnfValue}\"}")
532 userDirectives = userDirectivesBuilder.append("]}").toString()
535 paramsMap.put("user_directives", "${userDirectives}")
537 StringBuilder sbParams = new StringBuilder()
538 def vfModuleParams = ""
539 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
541 String paramName = entry.getKey()
542 String paramValue = entry.getValue()
545 <key>${MsoUtils.xmlEscape(paramName)}</key>
546 <value>${MsoUtils.xmlEscape(paramValue)}</value>
550 vfModuleParams = sbParams.append(paramsXml)
553 return vfModuleParams
559 * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
560 * for both VNF and VF Module
561 * and puts them into the format expected by VNF adapter.
562 * @param vnfParamsMap - map of VNF parameters passed in the request body
563 * @param vnfSdncGetResponse - response string from SDNC GET VNF topology request
564 * @param vfmoduleSdncGetResponse - response string from SDNC GET VF Module topology request
568 * @param vfModuleName
569 * @param vfModuleIndex - can be null
570 * @return a String of key/value entries for vfModuleParams
573 protected String buildVfModuleParamsFromCombinedTopologies(Map<String, String> vnfParamsMap, String vnfSdncGetResponse, String vfmoduleSdncGetResponse, String vnfId, String vnfName,
574 String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
576 // Set up initial parameters
578 Map<String, String> paramsMap = new HashMap<String, String>()
580 if (vfModuleIndex != null) {
581 paramsMap.put("vf_module_index", "${vfModuleIndex}")
585 paramsMap.put("vnf_id", "${vnfId}")
586 paramsMap.put("vnf_name", "${vnfName}")
587 paramsMap.put("vf_module_id", "${vfModuleId}")
588 paramsMap.put("vf_module_name", "${vfModuleName}")
589 paramsMap.put("environment_context","${environmentContext}")
590 paramsMap.put("workload_context", "${workloadContext}")
592 //Get SDNC Response Data for VNF
594 String vnfData = utils.getNodeXml(vnfSdncGetResponse, "response-data")
596 String vnfTopology = utils.getNodeXml(vnfData, "vnf-topology")
597 vnfTopology = utils.removeXmlPreamble(vnfTopology)
598 vnfTopology = utils.removeXmlNamespaces(vnfTopology)
600 InputSource sourceVnf = new InputSource(new StringReader(vnfData));
601 DocumentBuilderFactory docFactoryVnf = DocumentBuilderFactory.newInstance();
602 docFactoryVnf.setNamespaceAware(true)
603 DocumentBuilder docBuilderVnf = docFactoryVnf.newDocumentBuilder()
604 Document responseXmlVnf = docBuilderVnf.parse(sourceVnf)
606 // Availability Zones Data
608 NodeList aZonesList = responseXmlVnf.getElementsByTagNameNS("*", "availability-zones")
609 String aZonePosition = "0"
610 for (int z = 0; z < aZonesList.getLength(); z++) {
611 Node node = aZonesList.item(z)
612 if (node.getNodeType() == Node.ELEMENT_NODE) {
613 Element eElement = (Element) node
614 String aZoneValue = utils.getElementText(eElement, "availability-zone")
615 aZonePosition = z.toString()
616 paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
620 //Get SDNC Response Data for VF Module
622 String vfModuleData = utils.getNodeXml(vfmoduleSdncGetResponse, "response-data")
624 String vfModuleTopology = utils.getNodeXml(vfModuleData, "vf-module-topology")
625 vfModuleTopology = utils.removeXmlPreamble(vfModuleTopology)
626 vfModuleTopology = utils.removeXmlNamespaces(vfModuleTopology)
627 String vfModuleTopologyIdentifier = utils.getNodeXml(vfModuleTopology, "vf-module-topology-identifier")
629 InputSource sourceVfModule = new InputSource(new StringReader(vfModuleData));
630 DocumentBuilderFactory docFactoryVfModule = DocumentBuilderFactory.newInstance();
631 docFactoryVfModule.setNamespaceAware(true)
632 DocumentBuilder docBuilderVfModule = docFactoryVfModule.newDocumentBuilder()
633 Document responseXmlVfModule = docBuilderVfModule.parse(sourceVfModule)
635 // Map of network-roles and network-tags from vm-networks
637 NodeList vmNetworksListGlobal = responseXmlVfModule.getElementsByTagNameNS("*", "vm-networks")
638 Map<String, String> networkRoleMap = new HashMap<String, String>()
639 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
640 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
641 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
642 Element eElementNetworkKey = (Element) nodeNetworkKey
643 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
644 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
645 if (networkRoleValue.isEmpty()) {
646 networkRoleValue = networkRole
648 networkRoleMap.put(networkRole, networkRoleValue)
654 StringBuilder sbNet = new StringBuilder()
656 NodeList vnfNetworkList = responseXmlVnf.getElementsByTagNameNS("*", "vnf-networks")
657 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
658 Node node = vnfNetworkList.item(x)
659 if (node.getNodeType() == Node.ELEMENT_NODE) {
660 Element eElement = (Element) node
661 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
662 String networkRole = utils.getElementText(eElement, "network-role")
663 if (vnfNetworkKey.isEmpty()) {
664 vnfNetworkKey = networkRoleMap.get(networkRole)
665 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
666 vnfNetworkKey = networkRole
669 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
670 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
671 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
672 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
673 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
674 paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
675 paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
676 paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
677 paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
678 paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
680 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
681 StringBuffer sriovFilterBuf = new StringBuffer()
683 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
684 Node node1 = sriovVlanFilterList.item(i)
685 if (node1.getNodeType() == Node.ELEMENT_NODE) {
686 Element eElement1 = (Element) node1
687 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
688 if (i != sriovVlanFilterList.getLength() - 1) {
689 values = sriovFilterBuf.append(value + ",")
692 values = sriovFilterBuf.append(value);
696 if (!values.isEmpty()) {
697 paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
711 def floatingIPKeyValue
713 def floatingIPV6KeyValue
714 StringBuilder sb = new StringBuilder()
716 NodeList vmsList = responseXmlVfModule.getElementsByTagNameNS("*","vm")
717 for (int x = 0; x < vmsList.getLength(); x++) {
718 Node node = vmsList.item(x)
719 if (node.getNodeType() == Node.ELEMENT_NODE) {
720 Element eElement = (Element) node
721 key = utils.getElementText(eElement, "vm-type")
723 String position = "0"
724 StringBuilder sb1 = new StringBuilder()
725 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
726 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
727 for(int i = 0; i < valueList.getLength(); i++){
728 Node node1 = valueList.item(i)
729 if (node1.getNodeType() == Node.ELEMENT_NODE) {
730 Element eElement1 = (Element) node1
731 value = utils.getElementText(eElement1, "vm-name")
732 if (i != valueList.getLength() - 1) {
733 values = sb1.append(value + ",")
736 values = sb1.append(value);
738 position = i.toString()
739 paramsMap.put("${key}_name_${position}", "${value}")
742 for(int n = 0; n < vmNetworksList.getLength(); n++){
743 String floatingIpKeyValueStr = ""
744 String floatingIpV6KeyValueStr = ""
745 Node nodeNetworkKey = vmNetworksList.item(n)
746 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
747 Element eElementNetworkKey = (Element) nodeNetworkKey
748 String ipAddressValues
749 String ipV6AddressValues
750 String networkPosition = "0"
751 StringBuilder sb2 = new StringBuilder()
752 StringBuilder sb3 = new StringBuilder()
753 StringBuilder sb4 = new StringBuilder()
754 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
755 if (networkKey.isEmpty()) {
756 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
758 floatingIPKey = key + '_' + networkKey + '_floating_ip'
759 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
760 if(!floatingIPKeyValue.isEmpty()){
761 paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
763 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
764 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
765 if(!floatingIPV6KeyValue.isEmpty()){
766 paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
768 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
769 for(int a = 0; a < networkIpsList.getLength(); a++){
770 Node ipAddress = networkIpsList.item(a)
771 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
772 Element eElementIpAddress = (Element) ipAddress
773 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
774 if (a != networkIpsList.getLength() - 1) {
775 ipAddressValues = sb2.append(ipAddressValue + ",")
778 ipAddressValues = sb2.append(ipAddressValue);
780 networkPosition = a.toString()
781 paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
785 paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
787 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
788 String interfaceRoutePrefixValues = sb3.append("[")
790 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
791 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
792 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
793 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
794 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
795 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
796 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
798 if (a != interfaceRoutePrefixesList.getLength() - 1) {
799 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
802 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
806 interfaceRoutePrefixValues = sb3.append("]")
807 if (interfaceRoutePrefixesList.getLength() > 0) {
808 paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
811 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
812 for(int a = 0; a < networkIpsV6List.getLength(); a++){
813 Node ipV6Address = networkIpsV6List.item(a)
814 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
815 Element eElementIpV6Address = (Element) ipV6Address
816 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
817 if (a != networkIpsV6List.getLength() - 1) {
818 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
821 ipV6AddressValues = sb4.append(ipV6AddressValue);
823 networkPosition = a.toString()
824 paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
827 paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
830 paramsMap.put("${key}_names", "${values}")
833 //SDNC Response Params
834 List<String> sdncResponseParamsToSkip = [
841 String vnfParamsChildNodes = utils.getChildNodes(vnfData, "param")
842 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
843 // No SDNC params for VNF
845 NodeList paramsList = responseXmlVnf.getElementsByTagNameNS("*", "param")
846 for (int z = 0; z < paramsList.getLength(); z++) {
847 Node node = paramsList.item(z)
848 Element eElement = (Element) node
849 String vnfParameterName = utils.getElementText(eElement, "name")
850 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
851 String vnfParameterValue = utils.getElementText(eElement, "value")
852 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
857 String vfModuleParamsChildNodes = utils.getChildNodes(vfModuleData, "param")
858 if(vfModuleParamsChildNodes == null || vfModuleParamsChildNodes.length() < 1){
859 // No SDNC params for VF Module
861 NodeList paramsList = responseXmlVfModule.getElementsByTagNameNS("*", "param")
862 for (int z = 0; z < paramsList.getLength(); z++) {
863 Node node = paramsList.item(z)
864 Element eElement = (Element) node
865 String vnfParameterName = utils.getElementText(eElement, "name")
866 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
867 String vnfParameterValue = utils.getElementText(eElement, "value")
868 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
873 // make the sdnc_directives parameter
874 String sdncDirectives = "{}"
875 StringBuilder sdncDirectivesBuilder = new StringBuilder()
876 sdncDirectivesBuilder.append("{ \"attributes\": [")
878 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
879 String attributeName = entry.getKey()
880 String attributeValue = entry.getValue()
882 sdncDirectivesBuilder.append(",")
885 sdncDirectivesBuilder.append("{\"attribute_name\":\"${attributeName}\",")
886 sdncDirectivesBuilder.append("\"attribute_value\":\"${attributeValue}\"}")
889 sdncDirectives = sdncDirectivesBuilder.append("]}").toString()
891 paramsMap.put("sdnc_directives", "${sdncDirectives}")
894 // Parameters received from the request should overwrite any parameters received from SDNC
895 String userDirectives = "{}"
896 if (vnfParamsMap != null) {
897 StringBuilder userDirectivesBuilder = new StringBuilder()
898 userDirectivesBuilder.append("{ \"attributes\": [")
900 for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
901 String vnfKey = entry.getKey()
902 String vnfValue = entry.getValue()
903 paramsMap.put("$vnfKey", "$vnfValue")
905 userDirectivesBuilder.append(",")
908 userDirectivesBuilder.append("{\"attribute_name\":\"${vnfKey}\",")
909 userDirectivesBuilder.append("\"attribute_value\":\"${vnfValue}\"}")
912 userDirectives = userDirectivesBuilder.append("]}").toString()
915 paramsMap.put("user_directives", "${userDirectives}")
917 StringBuilder sbParams = new StringBuilder()
918 def vfModuleParams = ""
919 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
921 String paramName = entry.getKey()
922 String paramValue = entry.getValue()
925 <key>${MsoUtils.xmlEscape(paramName)}</key>
926 <value>${MsoUtils.xmlEscape(paramValue)}</value>
930 vfModuleParams = sbParams.append(paramsXml)
933 return vfModuleParams
939 * VBNG specific method that parses VNF parameters passed in on the
940 * incoming requests and SDNC parameters returned from SDNC get response
941 * and puts them into the format expected by VNF adapter.
942 * @param vnfParamsMap - map of VNF parameters passed in the request body
943 * @param sdncGetResponse - response string from SDNC GET topology request
947 * @param vfModuleName
948 * @return a String of key/value entries for vfModuleParams
951 protected String buildVfModuleParamsVbng(String vnfParams, String sdncGetResponse, String vnfId, String vnfName,
952 String vfModuleId, String vfModuleName) {
954 //Get SDNC Response Data
956 String data = utils.getNodeXml(sdncGetResponse, "response-data")
964 <value>${MsoUtils.xmlEscape(vnfId)}</value>
968 <value>${MsoUtils.xmlEscape(vnfName)}</value>
971 <key>vf_module_id</key>
972 <value>${MsoUtils.xmlEscape(vfModuleId)}</value>
975 <key>vf_module_name</key>
976 <value>${MsoUtils.xmlEscape(vfModuleName)}</value>
979 logger.debug("vnfInfo: " + vnfInfo)
980 InputSource source = new InputSource(new StringReader(data));
981 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
982 docFactory.setNamespaceAware(true)
983 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
984 Document responseXml = docBuilder.parse(source)
987 // Availability Zones Data
989 StringBuilder sbAZone = new StringBuilder()
990 NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
991 String aZonePosition = "0"
992 for (int z = 0; z < aZonesList.getLength(); z++) {
993 Node node = aZonesList.item(z)
994 if (node.getNodeType() == Node.ELEMENT_NODE) {
995 Element eElement = (Element) node
996 String aZoneValue = utils.getElementText(eElement, "availability-zone")
997 aZonePosition = z.toString()
1000 <key>availability_zone_${MsoUtils.xmlEscape(aZonePosition)}</key>
1001 <value>${MsoUtils.xmlEscape(aZoneValue)}</value>
1003 aZones = sbAZone.append(aZoneXml)
1007 // Map of network-roles and network-tags from vm-networks
1009 NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
1010 Map<String, String> networkRoleMap = new HashMap<String, String>()
1011 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
1012 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
1013 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
1014 Element eElementNetworkKey = (Element) nodeNetworkKey
1015 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
1016 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
1017 if (networkRoleValue.isEmpty()) {
1018 networkRoleValue = networkRole
1020 networkRoleMap.put(networkRole, networkRoleValue)
1024 // VNF Networks Data
1025 String vnfNetworkNetId = ""
1026 String vnfNetworkNetName = ""
1027 String vnfNetworkSubNetId = ""
1028 String vnfNetworkV6SubNetId = ""
1029 String vnfNetworkNetFqdn = ""
1030 String vnfNetworksSriovVlanFilters = ""
1031 StringBuilder sbNet = new StringBuilder()
1032 StringBuilder sbNet2 = new StringBuilder()
1033 StringBuilder sbNet3 = new StringBuilder()
1034 StringBuilder sbNet4 = new StringBuilder()
1035 StringBuilder sbNet5 = new StringBuilder()
1036 StringBuilder sbNet6 = new StringBuilder()
1037 NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
1038 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
1039 Node node = vnfNetworkList.item(x)
1040 if (node.getNodeType() == Node.ELEMENT_NODE) {
1041 Element eElement = (Element) node
1042 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
1043 String networkRole = utils.getElementText(eElement, "network-role")
1044 if (vnfNetworkKey.isEmpty()) {
1045 vnfNetworkKey = networkRoleMap.get(networkRole)
1046 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
1047 vnfNetworkKey = networkRole
1050 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
1051 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
1052 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
1053 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
1054 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
1055 String vnfNetworkNetIdXml =
1057 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_id</key>
1058 <value>${MsoUtils.xmlEscape(vnfNetworkNeutronIdValue)}</value>
1060 vnfNetworkNetId = sbNet.append(vnfNetworkNetIdXml)
1061 String vnfNetworkNetNameXml =
1063 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_name</key>
1064 <value>${MsoUtils.xmlEscape(vnfNetworkNetNameValue)}</value>
1066 vnfNetworkNetName = sbNet2.append(vnfNetworkNetNameXml)
1067 String vnfNetworkSubNetIdXml =
1069 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_subnet_id</key>
1070 <value>${MsoUtils.xmlEscape(vnfNetworkSubNetIdValue)}</value>
1072 vnfNetworkSubNetId = sbNet3.append(vnfNetworkSubNetIdXml)
1073 String vnfNetworkV6SubNetIdXml =
1075 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_v6_subnet_id</key>
1076 <value>${MsoUtils.xmlEscape(vnfNetworkV6SubNetIdValue)}</value>
1078 vnfNetworkV6SubNetId = sbNet5.append(vnfNetworkV6SubNetIdXml)
1079 String vnfNetworkNetFqdnXml =
1081 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_fqdn</key>
1082 <value>${MsoUtils.xmlEscape(vnfNetworkNetFqdnValue)}</value>
1084 vnfNetworkNetFqdn = sbNet4.append(vnfNetworkNetFqdnXml)
1086 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
1087 StringBuffer sriovFilterBuf = new StringBuffer()
1089 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
1090 Node node1 = sriovVlanFilterList.item(i)
1091 if (node1.getNodeType() == Node.ELEMENT_NODE) {
1092 Element eElement1 = (Element) node1
1093 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
1094 if (i != sriovVlanFilterList.getLength() - 1) {
1095 values = sriovFilterBuf.append(value + ",")
1098 values = sriovFilterBuf.append(value);
1102 if (!values.isEmpty()) {
1103 String vnfNetworkSriovVlanFilterXml =
1105 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_ATT_VF_VLAN_FILTER</key>
1106 <value>${MsoUtils.xmlEscape(values)}</value>
1108 vnfNetworksSriovVlanFilters = sbNet6.append(vnfNetworkSriovVlanFilterXml)
1115 String vnfVMSPositions = ""
1116 String vmNetworks = ""
1117 String vmNetworksPositions = ""
1118 String vmNetworksPositionsV6 = ""
1119 String interfaceRoutePrefixes = ""
1125 def floatingIPKeyValue
1127 def floatingIPV6KeyValue
1128 StringBuilder sb = new StringBuilder()
1129 StringBuilder sbPositions = new StringBuilder()
1130 StringBuilder sbVmNetworks = new StringBuilder()
1131 StringBuilder sbNetworksPositions = new StringBuilder()
1132 StringBuilder sbInterfaceRoutePrefixes = new StringBuilder()
1133 StringBuilder sbNetworksPositionsV6 = new StringBuilder()
1135 NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
1136 for (int x = 0; x < vmsList.getLength(); x++) {
1137 Node node = vmsList.item(x)
1138 if (node.getNodeType() == Node.ELEMENT_NODE) {
1139 Element eElement = (Element) node
1140 key = utils.getElementText(eElement, "vm-type")
1142 String position = "0"
1143 StringBuilder sb1 = new StringBuilder()
1144 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
1145 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
1146 for(int i = 0; i < valueList.getLength(); i++){
1147 Node node1 = valueList.item(i)
1148 if (node1.getNodeType() == Node.ELEMENT_NODE) {
1149 Element eElement1 = (Element) node1
1150 value = utils.getElementText(eElement1, "vm-name")
1151 if (i != valueList.getLength() - 1) {
1152 values = sb1.append(value + ",")
1155 values = sb1.append(value);
1157 position = i.toString()
1158 String vnfPositionXml =
1160 <key>${MsoUtils.xmlEscape(key)}_name_${MsoUtils.xmlEscape(position)}</key>
1161 <value>${MsoUtils.xmlEscape(value)}</value>
1163 nfVMSPositions = sbPositions.append(vnfPositionXml)
1166 for(int n = 0; n < vmNetworksList.getLength(); n++){
1167 String floatingIpKeyValueStr = ""
1168 String floatingIpV6KeyValueStr = ""
1169 Node nodeNetworkKey = vmNetworksList.item(n)
1170 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
1171 Element eElementNetworkKey = (Element) nodeNetworkKey
1172 String ipAddressValues
1173 String ipV6AddressValues
1174 String networkPosition = "0"
1175 StringBuilder sb2 = new StringBuilder()
1176 StringBuilder sb3 = new StringBuilder()
1177 StringBuilder sb4 = new StringBuilder()
1178 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
1179 if (networkKey.isEmpty()) {
1180 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
1182 floatingIPKey = key + '_' + networkKey + '_floating_ip'
1183 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
1184 if(!floatingIPKeyValue.isEmpty()){
1185 floatingIpKeyValueStr = """<entry>
1186 <key>$floatingIPKey</key>
1187 <value>$floatingIPKeyValue</value>
1190 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
1191 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
1192 if(!floatingIPV6KeyValue.isEmpty()){
1193 floatingIpV6KeyValueStr = """<entry>
1194 <key>$floatingIPV6Key</key>
1195 <value>$floatingIPV6KeyValue</value>
1198 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
1199 for(int a = 0; a < networkIpsList.getLength(); a++){
1200 Node ipAddress = networkIpsList.item(a)
1201 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
1202 Element eElementIpAddress = (Element) ipAddress
1203 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
1204 if (a != networkIpsList.getLength() - 1) {
1205 ipAddressValues = sb2.append(ipAddressValue + ",")
1208 ipAddressValues = sb2.append(ipAddressValue);
1210 networkPosition = a.toString()
1211 String vmNetworksPositionsXml =
1213 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
1214 <value>${MsoUtils.xmlEscape(ipAddressValue)}</value>
1216 vmNetworksPositions = sbNetworksPositions.append(vmNetworksPositionsXml)
1219 vmNetworksPositions = sbNetworksPositions.append(floatingIpKeyValueStr).append(floatingIpV6KeyValueStr)
1221 String vmNetworksXml =
1223 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ips</key>
1224 <value>${MsoUtils.xmlEscape(ipAddressValues)}</value>
1226 vmNetworks = sbVmNetworks.append(vmNetworksXml)
1228 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
1229 String interfaceRoutePrefixValues = sb3.append("[")
1231 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
1232 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
1233 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
1234 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
1235 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
1236 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
1237 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
1239 if (a != interfaceRoutePrefixesList.getLength() - 1) {
1240 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
1243 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
1247 interfaceRoutePrefixValues = sb3.append("]")
1248 if (interfaceRoutePrefixesList.getLength() > 0) {
1249 String interfaceRoutePrefixesXml =
1251 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_route_prefixes</key>
1252 <value>${MsoUtils.xmlEscape(interfaceRoutePrefixValues)}</value>
1254 interfaceRoutePrefixes = sbInterfaceRoutePrefixes.append(interfaceRoutePrefixesXml)
1257 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
1258 for(int a = 0; a < networkIpsV6List.getLength(); a++){
1259 Node ipV6Address = networkIpsV6List.item(a)
1260 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
1261 Element eElementIpV6Address = (Element) ipV6Address
1262 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
1263 if (a != networkIpsV6List.getLength() - 1) {
1264 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
1267 ipV6AddressValues = sb4.append(ipV6AddressValue);
1269 networkPosition = a.toString()
1270 String vmNetworksPositionsV6Xml =
1272 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
1273 <value>${MsoUtils.xmlEscape(ipV6AddressValue)}</value>
1275 vmNetworksPositionsV6 = sbNetworksPositionsV6.append(vmNetworksPositionsV6Xml)
1278 String vmNetworksV6Xml =
1280 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ips</key>
1281 <value>${MsoUtils.xmlEscape(ipV6AddressValues)}</value>
1283 vmNetworks = sbVmNetworks.append(vmNetworksV6Xml)
1288 <key>${MsoUtils.xmlEscape(key)}_names</key>
1289 <value>${MsoUtils.xmlEscape(values)}</value>
1291 vnfVMS = sb.append(vnfXml)
1294 //SDNC Response Params
1295 String sdncResponseParams = ""
1296 List<String> sdncResponseParamsToSkip = [
1302 String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
1303 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
1306 NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
1307 for (int z = 0; z < paramsList.getLength(); z++) {
1308 Node node = paramsList.item(z)
1309 Element eElement = (Element) node
1310 String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
1311 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
1312 String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
1315 <key>${MsoUtils.xmlEscape(vnfParameterName)}</key>
1316 <value>${MsoUtils.xmlEscape(vnfParameterValue)}</value>
1318 sdncResponseParams = sb.append(paraEntry)
1324 def vfModuleParams = """
1328 ${vnfNetworkNetName}
1329 ${vnfNetworkSubNetId}
1330 ${vnfNetworkV6SubNetId}
1331 ${vnfNetworkNetFqdn}
1332 ${vnfNetworksSriovVlanFilters}
1336 ${vmNetworksPositions}
1337 ${vmNetworksPositionsV6}
1338 ${interfaceRoutePrefixes}
1340 ${sdncResponseParams}"""
1342 return vfModuleParams