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")
523 userDirectivesBuilder.append(",")
526 userDirectivesBuilder.append("{\"attribute_name\":\"${vnfKey}\",")
527 userDirectivesBuilder.append("\"attribute_value\":\"${vnfValue}\"}")
530 userDirectives = userDirectivesBuilder.append("]}").toString()
533 paramsMap.put("user_directives", "${userDirectives}")
535 StringBuilder sbParams = new StringBuilder()
536 def vfModuleParams = ""
537 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
539 String paramName = entry.getKey()
540 String paramValue = entry.getValue()
543 <key>${MsoUtils.xmlEscape(paramName)}</key>
544 <value>${MsoUtils.xmlEscape(paramValue)}</value>
548 vfModuleParams = sbParams.append(paramsXml)
551 return vfModuleParams
557 * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
558 * for both VNF and VF Module
559 * and puts them into the format expected by VNF adapter.
560 * @param vnfParamsMap - map of VNF parameters passed in the request body
561 * @param vnfSdncGetResponse - response string from SDNC GET VNF topology request
562 * @param vfmoduleSdncGetResponse - response string from SDNC GET VF Module topology request
566 * @param vfModuleName
567 * @param vfModuleIndex - can be null
568 * @return a String of key/value entries for vfModuleParams
571 protected String buildVfModuleParamsFromCombinedTopologies(Map<String, String> vnfParamsMap, String vnfSdncGetResponse, String vfmoduleSdncGetResponse, String vnfId, String vnfName,
572 String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
574 // Set up initial parameters
576 Map<String, String> paramsMap = new HashMap<String, String>()
578 if (vfModuleIndex != null) {
579 paramsMap.put("vf_module_index", "${vfModuleIndex}")
583 paramsMap.put("vnf_id", "${vnfId}")
584 paramsMap.put("vnf_name", "${vnfName}")
585 paramsMap.put("vf_module_id", "${vfModuleId}")
586 paramsMap.put("vf_module_name", "${vfModuleName}")
587 paramsMap.put("environment_context","${environmentContext}")
588 paramsMap.put("workload_context", "${workloadContext}")
590 //Get SDNC Response Data for VNF
592 String vnfData = utils.getNodeXml(vnfSdncGetResponse, "response-data")
594 String vnfTopology = utils.getNodeXml(vnfData, "vnf-topology")
595 vnfTopology = utils.removeXmlPreamble(vnfTopology)
596 vnfTopology = utils.removeXmlNamespaces(vnfTopology)
598 InputSource sourceVnf = new InputSource(new StringReader(vnfData));
599 DocumentBuilderFactory docFactoryVnf = DocumentBuilderFactory.newInstance();
600 docFactoryVnf.setNamespaceAware(true)
601 DocumentBuilder docBuilderVnf = docFactoryVnf.newDocumentBuilder()
602 Document responseXmlVnf = docBuilderVnf.parse(sourceVnf)
604 // Availability Zones Data
606 NodeList aZonesList = responseXmlVnf.getElementsByTagNameNS("*", "availability-zones")
607 String aZonePosition = "0"
608 for (int z = 0; z < aZonesList.getLength(); z++) {
609 Node node = aZonesList.item(z)
610 if (node.getNodeType() == Node.ELEMENT_NODE) {
611 Element eElement = (Element) node
612 String aZoneValue = utils.getElementText(eElement, "availability-zone")
613 aZonePosition = z.toString()
614 paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
618 //Get SDNC Response Data for VF Module
620 String vfModuleData = utils.getNodeXml(vfmoduleSdncGetResponse, "response-data")
622 String vfModuleTopology = utils.getNodeXml(vfModuleData, "vf-module-topology")
623 vfModuleTopology = utils.removeXmlPreamble(vfModuleTopology)
624 vfModuleTopology = utils.removeXmlNamespaces(vfModuleTopology)
625 String vfModuleTopologyIdentifier = utils.getNodeXml(vfModuleTopology, "vf-module-topology-identifier")
627 InputSource sourceVfModule = new InputSource(new StringReader(vfModuleData));
628 DocumentBuilderFactory docFactoryVfModule = DocumentBuilderFactory.newInstance();
629 docFactoryVfModule.setNamespaceAware(true)
630 DocumentBuilder docBuilderVfModule = docFactoryVfModule.newDocumentBuilder()
631 Document responseXmlVfModule = docBuilderVfModule.parse(sourceVfModule)
633 // Map of network-roles and network-tags from vm-networks
635 NodeList vmNetworksListGlobal = responseXmlVfModule.getElementsByTagNameNS("*", "vm-networks")
636 Map<String, String> networkRoleMap = new HashMap<String, String>()
637 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
638 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
639 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
640 Element eElementNetworkKey = (Element) nodeNetworkKey
641 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
642 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
643 if (networkRoleValue.isEmpty()) {
644 networkRoleValue = networkRole
646 networkRoleMap.put(networkRole, networkRoleValue)
652 StringBuilder sbNet = new StringBuilder()
654 NodeList vnfNetworkList = responseXmlVnf.getElementsByTagNameNS("*", "vnf-networks")
655 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
656 Node node = vnfNetworkList.item(x)
657 if (node.getNodeType() == Node.ELEMENT_NODE) {
658 Element eElement = (Element) node
659 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
660 String networkRole = utils.getElementText(eElement, "network-role")
661 if (vnfNetworkKey.isEmpty()) {
662 vnfNetworkKey = networkRoleMap.get(networkRole)
663 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
664 vnfNetworkKey = networkRole
667 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
668 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
669 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
670 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
671 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
672 paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
673 paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
674 paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
675 paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
676 paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
678 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
679 StringBuffer sriovFilterBuf = new StringBuffer()
681 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
682 Node node1 = sriovVlanFilterList.item(i)
683 if (node1.getNodeType() == Node.ELEMENT_NODE) {
684 Element eElement1 = (Element) node1
685 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
686 if (i != sriovVlanFilterList.getLength() - 1) {
687 values = sriovFilterBuf.append(value + ",")
690 values = sriovFilterBuf.append(value);
694 if (!values.isEmpty()) {
695 paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
709 def floatingIPKeyValue
711 def floatingIPV6KeyValue
712 StringBuilder sb = new StringBuilder()
714 NodeList vmsList = responseXmlVfModule.getElementsByTagNameNS("*","vm")
715 for (int x = 0; x < vmsList.getLength(); x++) {
716 Node node = vmsList.item(x)
717 if (node.getNodeType() == Node.ELEMENT_NODE) {
718 Element eElement = (Element) node
719 key = utils.getElementText(eElement, "vm-type")
721 String position = "0"
722 StringBuilder sb1 = new StringBuilder()
723 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
724 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
725 for(int i = 0; i < valueList.getLength(); i++){
726 Node node1 = valueList.item(i)
727 if (node1.getNodeType() == Node.ELEMENT_NODE) {
728 Element eElement1 = (Element) node1
729 value = utils.getElementText(eElement1, "vm-name")
730 if (i != valueList.getLength() - 1) {
731 values = sb1.append(value + ",")
734 values = sb1.append(value);
736 position = i.toString()
737 paramsMap.put("${key}_name_${position}", "${value}")
740 for(int n = 0; n < vmNetworksList.getLength(); n++){
741 String floatingIpKeyValueStr = ""
742 String floatingIpV6KeyValueStr = ""
743 Node nodeNetworkKey = vmNetworksList.item(n)
744 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
745 Element eElementNetworkKey = (Element) nodeNetworkKey
746 String ipAddressValues
747 String ipV6AddressValues
748 String networkPosition = "0"
749 StringBuilder sb2 = new StringBuilder()
750 StringBuilder sb3 = new StringBuilder()
751 StringBuilder sb4 = new StringBuilder()
752 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
753 if (networkKey.isEmpty()) {
754 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
756 floatingIPKey = key + '_' + networkKey + '_floating_ip'
757 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
758 if(!floatingIPKeyValue.isEmpty()){
759 paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
761 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
762 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
763 if(!floatingIPV6KeyValue.isEmpty()){
764 paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
766 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
767 for(int a = 0; a < networkIpsList.getLength(); a++){
768 Node ipAddress = networkIpsList.item(a)
769 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
770 Element eElementIpAddress = (Element) ipAddress
771 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
772 if (a != networkIpsList.getLength() - 1) {
773 ipAddressValues = sb2.append(ipAddressValue + ",")
776 ipAddressValues = sb2.append(ipAddressValue);
778 networkPosition = a.toString()
779 paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
783 paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
785 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
786 String interfaceRoutePrefixValues = sb3.append("[")
788 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
789 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
790 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
791 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
792 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
793 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
794 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
796 if (a != interfaceRoutePrefixesList.getLength() - 1) {
797 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
800 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
804 interfaceRoutePrefixValues = sb3.append("]")
805 if (interfaceRoutePrefixesList.getLength() > 0) {
806 paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
809 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
810 for(int a = 0; a < networkIpsV6List.getLength(); a++){
811 Node ipV6Address = networkIpsV6List.item(a)
812 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
813 Element eElementIpV6Address = (Element) ipV6Address
814 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
815 if (a != networkIpsV6List.getLength() - 1) {
816 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
819 ipV6AddressValues = sb4.append(ipV6AddressValue);
821 networkPosition = a.toString()
822 paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
825 paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
828 paramsMap.put("${key}_names", "${values}")
831 //SDNC Response Params
832 List<String> sdncResponseParamsToSkip = [
839 String vnfParamsChildNodes = utils.getChildNodes(vnfData, "param")
840 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
841 // No SDNC params for VNF
843 NodeList paramsList = responseXmlVnf.getElementsByTagNameNS("*", "param")
844 for (int z = 0; z < paramsList.getLength(); z++) {
845 Node node = paramsList.item(z)
846 Element eElement = (Element) node
847 String vnfParameterName = utils.getElementText(eElement, "name")
848 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
849 String vnfParameterValue = utils.getElementText(eElement, "value")
850 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
855 String vfModuleParamsChildNodes = utils.getChildNodes(vfModuleData, "param")
856 if(vfModuleParamsChildNodes == null || vfModuleParamsChildNodes.length() < 1){
857 // No SDNC params for VF Module
859 NodeList paramsList = responseXmlVfModule.getElementsByTagNameNS("*", "param")
860 for (int z = 0; z < paramsList.getLength(); z++) {
861 Node node = paramsList.item(z)
862 Element eElement = (Element) node
863 String vnfParameterName = utils.getElementText(eElement, "name")
864 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
865 String vnfParameterValue = utils.getElementText(eElement, "value")
866 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
871 // make the sdnc_directives parameter
872 String sdncDirectives = "{}"
873 StringBuilder sdncDirectivesBuilder = new StringBuilder()
874 sdncDirectivesBuilder.append("{ \"attributes\": [")
876 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
877 String attributeName = entry.getKey()
878 String attributeValue = entry.getValue()
880 sdncDirectivesBuilder.append(",")
883 sdncDirectivesBuilder.append("{\"attribute_name\":\"${attributeName}\",")
884 sdncDirectivesBuilder.append("\"attribute_value\":\"${attributeValue}\"}")
887 sdncDirectives = sdncDirectivesBuilder.append("]}").toString()
889 paramsMap.put("sdnc_directives", "${sdncDirectives}")
892 // Parameters received from the request should overwrite any parameters received from SDNC
893 String userDirectives = "{}"
894 if (vnfParamsMap != null) {
895 StringBuilder userDirectivesBuilder = new StringBuilder()
896 userDirectivesBuilder.append("{ \"attributes\": [")
898 for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
899 String vnfKey = entry.getKey()
900 String vnfValue = entry.getValue()
901 paramsMap.put("$vnfKey", "$vnfValue")
903 userDirectivesBuilder.append(",")
906 userDirectivesBuilder.append("{\"attribute_name\":\"${vnfKey}\",")
907 userDirectivesBuilder.append("\"attribute_value\":\"${vnfValue}\"}")
910 userDirectives = userDirectivesBuilder.append("]}").toString()
913 paramsMap.put("user_directives", "${userDirectives}")
915 StringBuilder sbParams = new StringBuilder()
916 def vfModuleParams = ""
917 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
919 String paramName = entry.getKey()
920 String paramValue = entry.getValue()
923 <key>${MsoUtils.xmlEscape(paramName)}</key>
924 <value>${MsoUtils.xmlEscape(paramValue)}</value>
928 vfModuleParams = sbParams.append(paramsXml)
931 return vfModuleParams
937 * VBNG specific method that parses VNF parameters passed in on the
938 * incoming requests and SDNC parameters returned from SDNC get response
939 * and puts them into the format expected by VNF adapter.
940 * @param vnfParamsMap - map of VNF parameters passed in the request body
941 * @param sdncGetResponse - response string from SDNC GET topology request
945 * @param vfModuleName
946 * @return a String of key/value entries for vfModuleParams
949 protected String buildVfModuleParamsVbng(String vnfParams, String sdncGetResponse, String vnfId, String vnfName,
950 String vfModuleId, String vfModuleName) {
952 //Get SDNC Response Data
954 String data = utils.getNodeXml(sdncGetResponse, "response-data")
962 <value>${MsoUtils.xmlEscape(vnfId)}</value>
966 <value>${MsoUtils.xmlEscape(vnfName)}</value>
969 <key>vf_module_id</key>
970 <value>${MsoUtils.xmlEscape(vfModuleId)}</value>
973 <key>vf_module_name</key>
974 <value>${MsoUtils.xmlEscape(vfModuleName)}</value>
977 logger.debug("vnfInfo: " + vnfInfo)
978 InputSource source = new InputSource(new StringReader(data));
979 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
980 docFactory.setNamespaceAware(true)
981 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
982 Document responseXml = docBuilder.parse(source)
985 // Availability Zones Data
987 StringBuilder sbAZone = new StringBuilder()
988 NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
989 String aZonePosition = "0"
990 for (int z = 0; z < aZonesList.getLength(); z++) {
991 Node node = aZonesList.item(z)
992 if (node.getNodeType() == Node.ELEMENT_NODE) {
993 Element eElement = (Element) node
994 String aZoneValue = utils.getElementText(eElement, "availability-zone")
995 aZonePosition = z.toString()
998 <key>availability_zone_${MsoUtils.xmlEscape(aZonePosition)}</key>
999 <value>${MsoUtils.xmlEscape(aZoneValue)}</value>
1001 aZones = sbAZone.append(aZoneXml)
1005 // Map of network-roles and network-tags from vm-networks
1007 NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
1008 Map<String, String> networkRoleMap = new HashMap<String, String>()
1009 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
1010 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
1011 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
1012 Element eElementNetworkKey = (Element) nodeNetworkKey
1013 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
1014 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
1015 if (networkRoleValue.isEmpty()) {
1016 networkRoleValue = networkRole
1018 networkRoleMap.put(networkRole, networkRoleValue)
1022 // VNF Networks Data
1023 String vnfNetworkNetId = ""
1024 String vnfNetworkNetName = ""
1025 String vnfNetworkSubNetId = ""
1026 String vnfNetworkV6SubNetId = ""
1027 String vnfNetworkNetFqdn = ""
1028 String vnfNetworksSriovVlanFilters = ""
1029 StringBuilder sbNet = new StringBuilder()
1030 StringBuilder sbNet2 = new StringBuilder()
1031 StringBuilder sbNet3 = new StringBuilder()
1032 StringBuilder sbNet4 = new StringBuilder()
1033 StringBuilder sbNet5 = new StringBuilder()
1034 StringBuilder sbNet6 = new StringBuilder()
1035 NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
1036 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
1037 Node node = vnfNetworkList.item(x)
1038 if (node.getNodeType() == Node.ELEMENT_NODE) {
1039 Element eElement = (Element) node
1040 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
1041 String networkRole = utils.getElementText(eElement, "network-role")
1042 if (vnfNetworkKey.isEmpty()) {
1043 vnfNetworkKey = networkRoleMap.get(networkRole)
1044 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
1045 vnfNetworkKey = networkRole
1048 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
1049 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
1050 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
1051 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
1052 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
1053 String vnfNetworkNetIdXml =
1055 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_id</key>
1056 <value>${MsoUtils.xmlEscape(vnfNetworkNeutronIdValue)}</value>
1058 vnfNetworkNetId = sbNet.append(vnfNetworkNetIdXml)
1059 String vnfNetworkNetNameXml =
1061 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_name</key>
1062 <value>${MsoUtils.xmlEscape(vnfNetworkNetNameValue)}</value>
1064 vnfNetworkNetName = sbNet2.append(vnfNetworkNetNameXml)
1065 String vnfNetworkSubNetIdXml =
1067 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_subnet_id</key>
1068 <value>${MsoUtils.xmlEscape(vnfNetworkSubNetIdValue)}</value>
1070 vnfNetworkSubNetId = sbNet3.append(vnfNetworkSubNetIdXml)
1071 String vnfNetworkV6SubNetIdXml =
1073 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_v6_subnet_id</key>
1074 <value>${MsoUtils.xmlEscape(vnfNetworkV6SubNetIdValue)}</value>
1076 vnfNetworkV6SubNetId = sbNet5.append(vnfNetworkV6SubNetIdXml)
1077 String vnfNetworkNetFqdnXml =
1079 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_fqdn</key>
1080 <value>${MsoUtils.xmlEscape(vnfNetworkNetFqdnValue)}</value>
1082 vnfNetworkNetFqdn = sbNet4.append(vnfNetworkNetFqdnXml)
1084 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
1085 StringBuffer sriovFilterBuf = new StringBuffer()
1087 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
1088 Node node1 = sriovVlanFilterList.item(i)
1089 if (node1.getNodeType() == Node.ELEMENT_NODE) {
1090 Element eElement1 = (Element) node1
1091 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
1092 if (i != sriovVlanFilterList.getLength() - 1) {
1093 values = sriovFilterBuf.append(value + ",")
1096 values = sriovFilterBuf.append(value);
1100 if (!values.isEmpty()) {
1101 String vnfNetworkSriovVlanFilterXml =
1103 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_ATT_VF_VLAN_FILTER</key>
1104 <value>${MsoUtils.xmlEscape(values)}</value>
1106 vnfNetworksSriovVlanFilters = sbNet6.append(vnfNetworkSriovVlanFilterXml)
1113 String vnfVMSPositions = ""
1114 String vmNetworks = ""
1115 String vmNetworksPositions = ""
1116 String vmNetworksPositionsV6 = ""
1117 String interfaceRoutePrefixes = ""
1123 def floatingIPKeyValue
1125 def floatingIPV6KeyValue
1126 StringBuilder sb = new StringBuilder()
1127 StringBuilder sbPositions = new StringBuilder()
1128 StringBuilder sbVmNetworks = new StringBuilder()
1129 StringBuilder sbNetworksPositions = new StringBuilder()
1130 StringBuilder sbInterfaceRoutePrefixes = new StringBuilder()
1131 StringBuilder sbNetworksPositionsV6 = new StringBuilder()
1133 NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
1134 for (int x = 0; x < vmsList.getLength(); x++) {
1135 Node node = vmsList.item(x)
1136 if (node.getNodeType() == Node.ELEMENT_NODE) {
1137 Element eElement = (Element) node
1138 key = utils.getElementText(eElement, "vm-type")
1140 String position = "0"
1141 StringBuilder sb1 = new StringBuilder()
1142 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
1143 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
1144 for(int i = 0; i < valueList.getLength(); i++){
1145 Node node1 = valueList.item(i)
1146 if (node1.getNodeType() == Node.ELEMENT_NODE) {
1147 Element eElement1 = (Element) node1
1148 value = utils.getElementText(eElement1, "vm-name")
1149 if (i != valueList.getLength() - 1) {
1150 values = sb1.append(value + ",")
1153 values = sb1.append(value);
1155 position = i.toString()
1156 String vnfPositionXml =
1158 <key>${MsoUtils.xmlEscape(key)}_name_${MsoUtils.xmlEscape(position)}</key>
1159 <value>${MsoUtils.xmlEscape(value)}</value>
1161 nfVMSPositions = sbPositions.append(vnfPositionXml)
1164 for(int n = 0; n < vmNetworksList.getLength(); n++){
1165 String floatingIpKeyValueStr = ""
1166 String floatingIpV6KeyValueStr = ""
1167 Node nodeNetworkKey = vmNetworksList.item(n)
1168 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
1169 Element eElementNetworkKey = (Element) nodeNetworkKey
1170 String ipAddressValues
1171 String ipV6AddressValues
1172 String networkPosition = "0"
1173 StringBuilder sb2 = new StringBuilder()
1174 StringBuilder sb3 = new StringBuilder()
1175 StringBuilder sb4 = new StringBuilder()
1176 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
1177 if (networkKey.isEmpty()) {
1178 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
1180 floatingIPKey = key + '_' + networkKey + '_floating_ip'
1181 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
1182 if(!floatingIPKeyValue.isEmpty()){
1183 floatingIpKeyValueStr = """<entry>
1184 <key>$floatingIPKey</key>
1185 <value>$floatingIPKeyValue</value>
1188 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
1189 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
1190 if(!floatingIPV6KeyValue.isEmpty()){
1191 floatingIpV6KeyValueStr = """<entry>
1192 <key>$floatingIPV6Key</key>
1193 <value>$floatingIPV6KeyValue</value>
1196 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
1197 for(int a = 0; a < networkIpsList.getLength(); a++){
1198 Node ipAddress = networkIpsList.item(a)
1199 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
1200 Element eElementIpAddress = (Element) ipAddress
1201 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
1202 if (a != networkIpsList.getLength() - 1) {
1203 ipAddressValues = sb2.append(ipAddressValue + ",")
1206 ipAddressValues = sb2.append(ipAddressValue);
1208 networkPosition = a.toString()
1209 String vmNetworksPositionsXml =
1211 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
1212 <value>${MsoUtils.xmlEscape(ipAddressValue)}</value>
1214 vmNetworksPositions = sbNetworksPositions.append(vmNetworksPositionsXml)
1217 vmNetworksPositions = sbNetworksPositions.append(floatingIpKeyValueStr).append(floatingIpV6KeyValueStr)
1219 String vmNetworksXml =
1221 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ips</key>
1222 <value>${MsoUtils.xmlEscape(ipAddressValues)}</value>
1224 vmNetworks = sbVmNetworks.append(vmNetworksXml)
1226 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
1227 String interfaceRoutePrefixValues = sb3.append("[")
1229 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
1230 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
1231 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
1232 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
1233 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
1234 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
1235 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
1237 if (a != interfaceRoutePrefixesList.getLength() - 1) {
1238 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
1241 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
1245 interfaceRoutePrefixValues = sb3.append("]")
1246 if (interfaceRoutePrefixesList.getLength() > 0) {
1247 String interfaceRoutePrefixesXml =
1249 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_route_prefixes</key>
1250 <value>${MsoUtils.xmlEscape(interfaceRoutePrefixValues)}</value>
1252 interfaceRoutePrefixes = sbInterfaceRoutePrefixes.append(interfaceRoutePrefixesXml)
1255 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
1256 for(int a = 0; a < networkIpsV6List.getLength(); a++){
1257 Node ipV6Address = networkIpsV6List.item(a)
1258 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
1259 Element eElementIpV6Address = (Element) ipV6Address
1260 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
1261 if (a != networkIpsV6List.getLength() - 1) {
1262 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
1265 ipV6AddressValues = sb4.append(ipV6AddressValue);
1267 networkPosition = a.toString()
1268 String vmNetworksPositionsV6Xml =
1270 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
1271 <value>${MsoUtils.xmlEscape(ipV6AddressValue)}</value>
1273 vmNetworksPositionsV6 = sbNetworksPositionsV6.append(vmNetworksPositionsV6Xml)
1276 String vmNetworksV6Xml =
1278 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ips</key>
1279 <value>${MsoUtils.xmlEscape(ipV6AddressValues)}</value>
1281 vmNetworks = sbVmNetworks.append(vmNetworksV6Xml)
1286 <key>${MsoUtils.xmlEscape(key)}_names</key>
1287 <value>${MsoUtils.xmlEscape(values)}</value>
1289 vnfVMS = sb.append(vnfXml)
1292 //SDNC Response Params
1293 String sdncResponseParams = ""
1294 List<String> sdncResponseParamsToSkip = [
1300 String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
1301 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
1304 NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
1305 for (int z = 0; z < paramsList.getLength(); z++) {
1306 Node node = paramsList.item(z)
1307 Element eElement = (Element) node
1308 String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
1309 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
1310 String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
1313 <key>${MsoUtils.xmlEscape(vnfParameterName)}</key>
1314 <value>${MsoUtils.xmlEscape(vnfParameterValue)}</value>
1316 sdncResponseParams = sb.append(paraEntry)
1322 def vfModuleParams = """
1326 ${vnfNetworkNetName}
1327 ${vnfNetworkSubNetId}
1328 ${vnfNetworkV6SubNetId}
1329 ${vnfNetworkNetFqdn}
1330 ${vnfNetworksSriovVlanFilters}
1334 ${vmNetworksPositions}
1335 ${vmNetworksPositionsV6}
1336 ${interfaceRoutePrefixes}
1338 ${sdncResponseParams}"""
1340 return vfModuleParams