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')
181 if ( !(key in ['vnf_id', 'vnf_name', 'vf_module_id', 'vf_module_name'])) {
182 def value = (String) param.text()
185 <key>${MsoUtils.xmlEscape(key)}</key>
186 <value>${MsoUtils.xmlEscape(value)}</value>
189 entries = entries + entry
192 } catch (Exception e) {
193 logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
194 'Exception transforming params to entries', "BPMN",
195 ErrorCode.UnknownError.getValue(), 'Exception transforming params to entries' + e);
201 * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
202 * and puts them into the format expected by VNF adapter.
203 * @param vnfParamsMap - map of VNF parameters passed in the request body
204 * @param sdncGetResponse - response string from SDNC GET topology request
208 * @param vfModuleName
209 * @param vfModuleIndex - can be null
210 * @return a String of key/value entries for vfModuleParams
214 protected String buildVfModuleParams(Map<String, String> vnfParamsMap, String sdncGetResponse, String vnfId, String vnfName,
215 String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
217 //Get SDNC Response Data
219 String data = utils.getNodeXml(sdncGetResponse, "response-data")
221 String serviceData = utils.getNodeXml(data, "service-data")
222 serviceData = utils.removeXmlPreamble(serviceData)
223 serviceData = utils.removeXmlNamespaces(serviceData)
224 String vnfRequestInfo = utils.getNodeXml(serviceData, "vnf-request-information")
225 String oldVnfId = utils.getNodeXml(vnfRequestInfo, "vnf-id")
226 oldVnfId = utils.removeXmlPreamble(oldVnfId)
227 oldVnfId = utils.removeXmlNamespaces(oldVnfId)
228 serviceData = serviceData.replace(oldVnfId, "")
229 def vnfId1 = utils.getNodeText(serviceData, "vnf-id")
231 Map<String, String> paramsMap = new HashMap<String, String>()
233 if (vfModuleIndex != null) {
234 paramsMap.put("vf_module_index", "${vfModuleIndex}")
238 paramsMap.put("vnf_id", "${vnfId}")
239 paramsMap.put("vnf_name", "${vnfName}")
240 paramsMap.put("vf_module_id", "${vfModuleId}")
241 paramsMap.put("vf_module_name", "${vfModuleName}")
242 paramsMap.put("environment_context", "${environmentContext}")
243 paramsMap.put("workload_context", "${workloadContext}")
245 InputSource source = new InputSource(new StringReader(data));
246 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
247 docFactory.setNamespaceAware(true)
248 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
249 Document responseXml = docBuilder.parse(source)
252 // Availability Zones Data
254 NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
255 String aZonePosition = "0"
256 for (int z = 0; z < aZonesList.getLength(); z++) {
257 Node node = aZonesList.item(z)
258 if (node.getNodeType() == Node.ELEMENT_NODE) {
259 Element eElement = (Element) node
260 String aZoneValue = utils.getElementText(eElement, "availability-zone")
261 aZonePosition = z.toString()
262 paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
266 // Map of network-roles and network-tags from vm-networks
268 NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
269 Map<String, String> networkRoleMap = new HashMap<String, String>()
270 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
271 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
272 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
273 Element eElementNetworkKey = (Element) nodeNetworkKey
274 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
275 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
276 if (networkRoleValue.isEmpty()) {
277 networkRoleValue = networkRole
279 networkRoleMap.put(networkRole, networkRoleValue)
285 StringBuilder sbNet = new StringBuilder()
287 NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
288 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
289 Node node = vnfNetworkList.item(x)
290 if (node.getNodeType() == Node.ELEMENT_NODE) {
291 Element eElement = (Element) node
292 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
293 String networkRole = utils.getElementText(eElement, "network-role")
294 if (vnfNetworkKey.isEmpty()) {
295 vnfNetworkKey = networkRoleMap.get(networkRole)
296 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
297 vnfNetworkKey = networkRole
300 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
301 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
302 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
303 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
304 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
305 paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
306 paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
307 paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
308 paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
309 paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
311 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
312 StringBuffer sriovFilterBuf = new StringBuffer()
314 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
315 Node node1 = sriovVlanFilterList.item(i)
316 if (node1.getNodeType() == Node.ELEMENT_NODE) {
317 Element eElement1 = (Element) node1
318 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
319 if (i != sriovVlanFilterList.getLength() - 1) {
320 values = sriovFilterBuf.append(value + ",")
323 values = sriovFilterBuf.append(value);
327 if (!values.isEmpty()) {
328 paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
340 def floatingIPKeyValue
342 def floatingIPV6KeyValue
343 StringBuilder sb = new StringBuilder()
345 NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
346 for (int x = 0; x < vmsList.getLength(); x++) {
347 Node node = vmsList.item(x)
348 if (node.getNodeType() == Node.ELEMENT_NODE) {
349 Element eElement = (Element) node
350 key = utils.getElementText(eElement, "vm-type")
352 String position = "0"
353 StringBuilder sb1 = new StringBuilder()
354 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
355 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
356 for(int i = 0; i < valueList.getLength(); i++){
357 Node node1 = valueList.item(i)
358 if (node1.getNodeType() == Node.ELEMENT_NODE) {
359 Element eElement1 = (Element) node1
360 value = utils.getElementText(eElement1, "vm-name")
361 if (i != valueList.getLength() - 1) {
362 values = sb1.append(value + ",")
365 values = sb1.append(value);
367 position = i.toString()
368 paramsMap.put("${key}_name_${position}", "${value}")
371 for(int n = 0; n < vmNetworksList.getLength(); n++){
372 String floatingIpKeyValueStr = ""
373 String floatingIpV6KeyValueStr = ""
374 Node nodeNetworkKey = vmNetworksList.item(n)
375 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
376 Element eElementNetworkKey = (Element) nodeNetworkKey
377 String ipAddressValues
378 String ipV6AddressValues
379 String networkPosition = "0"
380 StringBuilder sb2 = new StringBuilder()
381 StringBuilder sb3 = new StringBuilder()
382 StringBuilder sb4 = new StringBuilder()
383 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
384 if (networkKey.isEmpty()) {
385 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
387 floatingIPKey = key + '_' + networkKey + '_floating_ip'
388 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
389 if(!floatingIPKeyValue.isEmpty()){
390 paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
392 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
393 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
394 if(!floatingIPV6KeyValue.isEmpty()){
395 paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
397 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
398 for(int a = 0; a < networkIpsList.getLength(); a++){
399 Node ipAddress = networkIpsList.item(a)
400 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
401 Element eElementIpAddress = (Element) ipAddress
402 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
403 if (a != networkIpsList.getLength() - 1) {
404 ipAddressValues = sb2.append(ipAddressValue + ",")
407 ipAddressValues = sb2.append(ipAddressValue);
409 networkPosition = a.toString()
410 paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
414 paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
416 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
417 String interfaceRoutePrefixValues = sb3.append("[")
419 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
420 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
421 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
422 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
423 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
424 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
425 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
427 if (a != interfaceRoutePrefixesList.getLength() - 1) {
428 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
431 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
435 interfaceRoutePrefixValues = sb3.append("]")
436 if (interfaceRoutePrefixesList.getLength() > 0) {
437 paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
440 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
441 for(int a = 0; a < networkIpsV6List.getLength(); a++){
442 Node ipV6Address = networkIpsV6List.item(a)
443 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
444 Element eElementIpV6Address = (Element) ipV6Address
445 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
446 if (a != networkIpsV6List.getLength() - 1) {
447 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
450 ipV6AddressValues = sb4.append(ipV6AddressValue);
452 networkPosition = a.toString()
453 paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
456 paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
459 paramsMap.put("${key}_names", "${values}")
462 //SDNC Response Params
463 String sdncResponseParams = ""
464 List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
465 String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
466 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
469 NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
470 for (int z = 0; z < paramsList.getLength(); z++) {
471 Node node = paramsList.item(z)
472 Element eElement = (Element) node
473 String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
474 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
475 String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
476 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
481 // Parameters received from the request should overwrite any parameters received from SDNC
482 if (vnfParamsMap != null) {
483 for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
484 String vnfKey = entry.getKey()
485 String vnfValue = entry.getValue()
486 paramsMap.put("$vnfKey", "$vnfValue")
490 StringBuilder sbParams = new StringBuilder()
491 def vfModuleParams = ""
492 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
494 String paramName = entry.getKey()
495 String paramValue = entry.getValue()
498 <key>${MsoUtils.xmlEscape(paramName)}</key>
499 <value>${MsoUtils.xmlEscape(paramValue)}</value>
503 vfModuleParams = sbParams.append(paramsXml)
506 return vfModuleParams
512 * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
513 * for both VNF and VF Module
514 * and puts them into the format expected by VNF adapter.
515 * @param vnfParamsMap - map of VNF parameters passed in the request body
516 * @param vnfSdncGetResponse - response string from SDNC GET VNF topology request
517 * @param vfmoduleSdncGetResponse - response string from SDNC GET VF Module topology request
521 * @param vfModuleName
522 * @param vfModuleIndex - can be null
523 * @return a String of key/value entries for vfModuleParams
526 protected String buildVfModuleParamsFromCombinedTopologies(Map<String, String> vnfParamsMap, String vnfSdncGetResponse, String vfmoduleSdncGetResponse, String vnfId, String vnfName,
527 String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
529 // Set up initial parameters
531 Map<String, String> paramsMap = new HashMap<String, String>()
533 if (vfModuleIndex != null) {
534 paramsMap.put("vf_module_index", "${vfModuleIndex}")
538 paramsMap.put("vnf_id", "${vnfId}")
539 paramsMap.put("vnf_name", "${vnfName}")
540 paramsMap.put("vf_module_id", "${vfModuleId}")
541 paramsMap.put("vf_module_name", "${vfModuleName}")
542 paramsMap.put("environment_context","${environmentContext}")
543 paramsMap.put("workload_context", "${workloadContext}")
545 //Get SDNC Response Data for VNF
547 String vnfData = utils.getNodeXml(vnfSdncGetResponse, "response-data")
549 String vnfTopology = utils.getNodeXml(vnfData, "vnf-topology")
550 vnfTopology = utils.removeXmlPreamble(vnfTopology)
551 vnfTopology = utils.removeXmlNamespaces(vnfTopology)
553 InputSource sourceVnf = new InputSource(new StringReader(vnfData));
554 DocumentBuilderFactory docFactoryVnf = DocumentBuilderFactory.newInstance();
555 docFactoryVnf.setNamespaceAware(true)
556 DocumentBuilder docBuilderVnf = docFactoryVnf.newDocumentBuilder()
557 Document responseXmlVnf = docBuilderVnf.parse(sourceVnf)
559 // Availability Zones Data
561 NodeList aZonesList = responseXmlVnf.getElementsByTagNameNS("*", "availability-zones")
562 String aZonePosition = "0"
563 for (int z = 0; z < aZonesList.getLength(); z++) {
564 Node node = aZonesList.item(z)
565 if (node.getNodeType() == Node.ELEMENT_NODE) {
566 Element eElement = (Element) node
567 String aZoneValue = utils.getElementText(eElement, "availability-zone")
568 aZonePosition = z.toString()
569 paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
573 //Get SDNC Response Data for VF Module
575 String vfModuleData = utils.getNodeXml(vfmoduleSdncGetResponse, "response-data")
577 String vfModuleTopology = utils.getNodeXml(vfModuleData, "vf-module-topology")
578 vfModuleTopology = utils.removeXmlPreamble(vfModuleTopology)
579 vfModuleTopology = utils.removeXmlNamespaces(vfModuleTopology)
580 String vfModuleTopologyIdentifier = utils.getNodeXml(vfModuleTopology, "vf-module-topology-identifier")
582 InputSource sourceVfModule = new InputSource(new StringReader(vfModuleData));
583 DocumentBuilderFactory docFactoryVfModule = DocumentBuilderFactory.newInstance();
584 docFactoryVfModule.setNamespaceAware(true)
585 DocumentBuilder docBuilderVfModule = docFactoryVfModule.newDocumentBuilder()
586 Document responseXmlVfModule = docBuilderVfModule.parse(sourceVfModule)
588 // Map of network-roles and network-tags from vm-networks
590 NodeList vmNetworksListGlobal = responseXmlVfModule.getElementsByTagNameNS("*", "vm-networks")
591 Map<String, String> networkRoleMap = new HashMap<String, String>()
592 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
593 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
594 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
595 Element eElementNetworkKey = (Element) nodeNetworkKey
596 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
597 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
598 if (networkRoleValue.isEmpty()) {
599 networkRoleValue = networkRole
601 networkRoleMap.put(networkRole, networkRoleValue)
607 StringBuilder sbNet = new StringBuilder()
609 NodeList vnfNetworkList = responseXmlVnf.getElementsByTagNameNS("*", "vnf-networks")
610 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
611 Node node = vnfNetworkList.item(x)
612 if (node.getNodeType() == Node.ELEMENT_NODE) {
613 Element eElement = (Element) node
614 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
615 String networkRole = utils.getElementText(eElement, "network-role")
616 if (vnfNetworkKey.isEmpty()) {
617 vnfNetworkKey = networkRoleMap.get(networkRole)
618 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
619 vnfNetworkKey = networkRole
622 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
623 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
624 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
625 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
626 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
627 paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
628 paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
629 paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
630 paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
631 paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
633 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
634 StringBuffer sriovFilterBuf = new StringBuffer()
636 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
637 Node node1 = sriovVlanFilterList.item(i)
638 if (node1.getNodeType() == Node.ELEMENT_NODE) {
639 Element eElement1 = (Element) node1
640 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
641 if (i != sriovVlanFilterList.getLength() - 1) {
642 values = sriovFilterBuf.append(value + ",")
645 values = sriovFilterBuf.append(value);
649 if (!values.isEmpty()) {
650 paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
664 def floatingIPKeyValue
666 def floatingIPV6KeyValue
667 StringBuilder sb = new StringBuilder()
669 NodeList vmsList = responseXmlVfModule.getElementsByTagNameNS("*","vm")
670 for (int x = 0; x < vmsList.getLength(); x++) {
671 Node node = vmsList.item(x)
672 if (node.getNodeType() == Node.ELEMENT_NODE) {
673 Element eElement = (Element) node
674 key = utils.getElementText(eElement, "vm-type")
676 String position = "0"
677 StringBuilder sb1 = new StringBuilder()
678 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
679 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
680 for(int i = 0; i < valueList.getLength(); i++){
681 Node node1 = valueList.item(i)
682 if (node1.getNodeType() == Node.ELEMENT_NODE) {
683 Element eElement1 = (Element) node1
684 value = utils.getElementText(eElement1, "vm-name")
685 if (i != valueList.getLength() - 1) {
686 values = sb1.append(value + ",")
689 values = sb1.append(value);
691 position = i.toString()
692 paramsMap.put("${key}_name_${position}", "${value}")
695 for(int n = 0; n < vmNetworksList.getLength(); n++){
696 String floatingIpKeyValueStr = ""
697 String floatingIpV6KeyValueStr = ""
698 Node nodeNetworkKey = vmNetworksList.item(n)
699 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
700 Element eElementNetworkKey = (Element) nodeNetworkKey
701 String ipAddressValues
702 String ipV6AddressValues
703 String networkPosition = "0"
704 StringBuilder sb2 = new StringBuilder()
705 StringBuilder sb3 = new StringBuilder()
706 StringBuilder sb4 = new StringBuilder()
707 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
708 if (networkKey.isEmpty()) {
709 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
711 floatingIPKey = key + '_' + networkKey + '_floating_ip'
712 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
713 if(!floatingIPKeyValue.isEmpty()){
714 paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
716 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
717 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
718 if(!floatingIPV6KeyValue.isEmpty()){
719 paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
721 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
722 for(int a = 0; a < networkIpsList.getLength(); a++){
723 Node ipAddress = networkIpsList.item(a)
724 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
725 Element eElementIpAddress = (Element) ipAddress
726 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
727 if (a != networkIpsList.getLength() - 1) {
728 ipAddressValues = sb2.append(ipAddressValue + ",")
731 ipAddressValues = sb2.append(ipAddressValue);
733 networkPosition = a.toString()
734 paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
738 paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
740 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
741 String interfaceRoutePrefixValues = sb3.append("[")
743 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
744 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
745 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
746 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
747 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
748 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
749 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
751 if (a != interfaceRoutePrefixesList.getLength() - 1) {
752 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
755 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
759 interfaceRoutePrefixValues = sb3.append("]")
760 if (interfaceRoutePrefixesList.getLength() > 0) {
761 paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
764 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
765 for(int a = 0; a < networkIpsV6List.getLength(); a++){
766 Node ipV6Address = networkIpsV6List.item(a)
767 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
768 Element eElementIpV6Address = (Element) ipV6Address
769 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
770 if (a != networkIpsV6List.getLength() - 1) {
771 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
774 ipV6AddressValues = sb4.append(ipV6AddressValue);
776 networkPosition = a.toString()
777 paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
780 paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
783 paramsMap.put("${key}_names", "${values}")
786 //SDNC Response Params
787 List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
789 String vnfParamsChildNodes = utils.getChildNodes(vnfData, "param")
790 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
791 // No SDNC params for VNF
793 NodeList paramsList = responseXmlVnf.getElementsByTagNameNS("*", "param")
794 for (int z = 0; z < paramsList.getLength(); z++) {
795 Node node = paramsList.item(z)
796 Element eElement = (Element) node
797 String vnfParameterName = utils.getElementText(eElement, "name")
798 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
799 String vnfParameterValue = utils.getElementText(eElement, "value")
800 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
805 String vfModuleParamsChildNodes = utils.getChildNodes(vfModuleData, "param")
806 if(vfModuleParamsChildNodes == null || vfModuleParamsChildNodes.length() < 1){
807 // No SDNC params for VF Module
809 NodeList paramsList = responseXmlVfModule.getElementsByTagNameNS("*", "param")
810 for (int z = 0; z < paramsList.getLength(); z++) {
811 Node node = paramsList.item(z)
812 Element eElement = (Element) node
813 String vnfParameterName = utils.getElementText(eElement, "name")
814 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
815 String vnfParameterValue = utils.getElementText(eElement, "value")
816 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
821 // Parameters received from the request should overwrite any parameters received from SDNC
822 if (vnfParamsMap != null) {
823 for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
824 String vnfKey = entry.getKey()
825 String vnfValue = entry.getValue()
826 paramsMap.put("$vnfKey", "$vnfValue")
830 StringBuilder sbParams = new StringBuilder()
831 def vfModuleParams = ""
832 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
834 String paramName = entry.getKey()
835 String paramValue = entry.getValue()
838 <key>${MsoUtils.xmlEscape(paramName)}</key>
839 <value>${MsoUtils.xmlEscape(paramValue)}</value>
843 vfModuleParams = sbParams.append(paramsXml)
846 return vfModuleParams
852 * VBNG specific method that parses VNF parameters passed in on the
853 * incoming requests and SDNC parameters returned from SDNC get response
854 * and puts them into the format expected by VNF adapter.
855 * @param vnfParamsMap - map of VNF parameters passed in the request body
856 * @param sdncGetResponse - response string from SDNC GET topology request
860 * @param vfModuleName
861 * @return a String of key/value entries for vfModuleParams
864 protected String buildVfModuleParamsVbng(String vnfParams, String sdncGetResponse, String vnfId, String vnfName,
865 String vfModuleId, String vfModuleName) {
867 //Get SDNC Response Data
869 String data = utils.getNodeXml(sdncGetResponse, "response-data")
877 <value>${MsoUtils.xmlEscape(vnfId)}</value>
881 <value>${MsoUtils.xmlEscape(vnfName)}</value>
884 <key>vf_module_id</key>
885 <value>${MsoUtils.xmlEscape(vfModuleId)}</value>
888 <key>vf_module_name</key>
889 <value>${MsoUtils.xmlEscape(vfModuleName)}</value>
892 logger.debug("vnfInfo: " + vnfInfo)
893 InputSource source = new InputSource(new StringReader(data));
894 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
895 docFactory.setNamespaceAware(true)
896 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
897 Document responseXml = docBuilder.parse(source)
900 // Availability Zones Data
902 StringBuilder sbAZone = new StringBuilder()
903 NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
904 String aZonePosition = "0"
905 for (int z = 0; z < aZonesList.getLength(); z++) {
906 Node node = aZonesList.item(z)
907 if (node.getNodeType() == Node.ELEMENT_NODE) {
908 Element eElement = (Element) node
909 String aZoneValue = utils.getElementText(eElement, "availability-zone")
910 aZonePosition = z.toString()
913 <key>availability_zone_${MsoUtils.xmlEscape(aZonePosition)}</key>
914 <value>${MsoUtils.xmlEscape(aZoneValue)}</value>
916 aZones = sbAZone.append(aZoneXml)
920 // Map of network-roles and network-tags from vm-networks
922 NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
923 Map<String, String> networkRoleMap = new HashMap<String, String>()
924 for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
925 Node nodeNetworkKey = vmNetworksListGlobal.item(n)
926 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
927 Element eElementNetworkKey = (Element) nodeNetworkKey
928 String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
929 String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
930 if (networkRoleValue.isEmpty()) {
931 networkRoleValue = networkRole
933 networkRoleMap.put(networkRole, networkRoleValue)
938 String vnfNetworkNetId = ""
939 String vnfNetworkNetName = ""
940 String vnfNetworkSubNetId = ""
941 String vnfNetworkV6SubNetId = ""
942 String vnfNetworkNetFqdn = ""
943 String vnfNetworksSriovVlanFilters = ""
944 StringBuilder sbNet = new StringBuilder()
945 StringBuilder sbNet2 = new StringBuilder()
946 StringBuilder sbNet3 = new StringBuilder()
947 StringBuilder sbNet4 = new StringBuilder()
948 StringBuilder sbNet5 = new StringBuilder()
949 StringBuilder sbNet6 = new StringBuilder()
950 NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
951 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
952 Node node = vnfNetworkList.item(x)
953 if (node.getNodeType() == Node.ELEMENT_NODE) {
954 Element eElement = (Element) node
955 String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
956 String networkRole = utils.getElementText(eElement, "network-role")
957 if (vnfNetworkKey.isEmpty()) {
958 vnfNetworkKey = networkRoleMap.get(networkRole)
959 if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
960 vnfNetworkKey = networkRole
963 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
964 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
965 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
966 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
967 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
968 String vnfNetworkNetIdXml =
970 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_id</key>
971 <value>${MsoUtils.xmlEscape(vnfNetworkNeutronIdValue)}</value>
973 vnfNetworkNetId = sbNet.append(vnfNetworkNetIdXml)
974 String vnfNetworkNetNameXml =
976 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_name</key>
977 <value>${MsoUtils.xmlEscape(vnfNetworkNetNameValue)}</value>
979 vnfNetworkNetName = sbNet2.append(vnfNetworkNetNameXml)
980 String vnfNetworkSubNetIdXml =
982 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_subnet_id</key>
983 <value>${MsoUtils.xmlEscape(vnfNetworkSubNetIdValue)}</value>
985 vnfNetworkSubNetId = sbNet3.append(vnfNetworkSubNetIdXml)
986 String vnfNetworkV6SubNetIdXml =
988 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_v6_subnet_id</key>
989 <value>${MsoUtils.xmlEscape(vnfNetworkV6SubNetIdValue)}</value>
991 vnfNetworkV6SubNetId = sbNet5.append(vnfNetworkV6SubNetIdXml)
992 String vnfNetworkNetFqdnXml =
994 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_fqdn</key>
995 <value>${MsoUtils.xmlEscape(vnfNetworkNetFqdnValue)}</value>
997 vnfNetworkNetFqdn = sbNet4.append(vnfNetworkNetFqdnXml)
999 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
1000 StringBuffer sriovFilterBuf = new StringBuffer()
1002 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
1003 Node node1 = sriovVlanFilterList.item(i)
1004 if (node1.getNodeType() == Node.ELEMENT_NODE) {
1005 Element eElement1 = (Element) node1
1006 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
1007 if (i != sriovVlanFilterList.getLength() - 1) {
1008 values = sriovFilterBuf.append(value + ",")
1011 values = sriovFilterBuf.append(value);
1015 if (!values.isEmpty()) {
1016 String vnfNetworkSriovVlanFilterXml =
1018 <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_ATT_VF_VLAN_FILTER</key>
1019 <value>${MsoUtils.xmlEscape(values)}</value>
1021 vnfNetworksSriovVlanFilters = sbNet6.append(vnfNetworkSriovVlanFilterXml)
1028 String vnfVMSPositions = ""
1029 String vmNetworks = ""
1030 String vmNetworksPositions = ""
1031 String vmNetworksPositionsV6 = ""
1032 String interfaceRoutePrefixes = ""
1038 def floatingIPKeyValue
1040 def floatingIPV6KeyValue
1041 StringBuilder sb = new StringBuilder()
1042 StringBuilder sbPositions = new StringBuilder()
1043 StringBuilder sbVmNetworks = new StringBuilder()
1044 StringBuilder sbNetworksPositions = new StringBuilder()
1045 StringBuilder sbInterfaceRoutePrefixes = new StringBuilder()
1046 StringBuilder sbNetworksPositionsV6 = new StringBuilder()
1048 NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
1049 for (int x = 0; x < vmsList.getLength(); x++) {
1050 Node node = vmsList.item(x)
1051 if (node.getNodeType() == Node.ELEMENT_NODE) {
1052 Element eElement = (Element) node
1053 key = utils.getElementText(eElement, "vm-type")
1055 String position = "0"
1056 StringBuilder sb1 = new StringBuilder()
1057 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
1058 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
1059 for(int i = 0; i < valueList.getLength(); i++){
1060 Node node1 = valueList.item(i)
1061 if (node1.getNodeType() == Node.ELEMENT_NODE) {
1062 Element eElement1 = (Element) node1
1063 value = utils.getElementText(eElement1, "vm-name")
1064 if (i != valueList.getLength() - 1) {
1065 values = sb1.append(value + ",")
1068 values = sb1.append(value);
1070 position = i.toString()
1071 String vnfPositionXml =
1073 <key>${MsoUtils.xmlEscape(key)}_name_${MsoUtils.xmlEscape(position)}</key>
1074 <value>${MsoUtils.xmlEscape(value)}</value>
1076 nfVMSPositions = sbPositions.append(vnfPositionXml)
1079 for(int n = 0; n < vmNetworksList.getLength(); n++){
1080 String floatingIpKeyValueStr = ""
1081 String floatingIpV6KeyValueStr = ""
1082 Node nodeNetworkKey = vmNetworksList.item(n)
1083 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
1084 Element eElementNetworkKey = (Element) nodeNetworkKey
1085 String ipAddressValues
1086 String ipV6AddressValues
1087 String networkPosition = "0"
1088 StringBuilder sb2 = new StringBuilder()
1089 StringBuilder sb3 = new StringBuilder()
1090 StringBuilder sb4 = new StringBuilder()
1091 networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
1092 if (networkKey.isEmpty()) {
1093 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
1095 floatingIPKey = key + '_' + networkKey + '_floating_ip'
1096 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
1097 if(!floatingIPKeyValue.isEmpty()){
1098 floatingIpKeyValueStr = """<entry>
1099 <key>$floatingIPKey</key>
1100 <value>$floatingIPKeyValue</value>
1103 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
1104 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
1105 if(!floatingIPV6KeyValue.isEmpty()){
1106 floatingIpV6KeyValueStr = """<entry>
1107 <key>$floatingIPV6Key</key>
1108 <value>$floatingIPV6KeyValue</value>
1111 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
1112 for(int a = 0; a < networkIpsList.getLength(); a++){
1113 Node ipAddress = networkIpsList.item(a)
1114 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
1115 Element eElementIpAddress = (Element) ipAddress
1116 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
1117 if (a != networkIpsList.getLength() - 1) {
1118 ipAddressValues = sb2.append(ipAddressValue + ",")
1121 ipAddressValues = sb2.append(ipAddressValue);
1123 networkPosition = a.toString()
1124 String vmNetworksPositionsXml =
1126 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
1127 <value>${MsoUtils.xmlEscape(ipAddressValue)}</value>
1129 vmNetworksPositions = sbNetworksPositions.append(vmNetworksPositionsXml)
1132 vmNetworksPositions = sbNetworksPositions.append(floatingIpKeyValueStr).append(floatingIpV6KeyValueStr)
1134 String vmNetworksXml =
1136 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ips</key>
1137 <value>${MsoUtils.xmlEscape(ipAddressValues)}</value>
1139 vmNetworks = sbVmNetworks.append(vmNetworksXml)
1141 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
1142 String interfaceRoutePrefixValues = sb3.append("[")
1144 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
1145 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
1146 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
1147 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
1148 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
1149 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
1150 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
1152 if (a != interfaceRoutePrefixesList.getLength() - 1) {
1153 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
1156 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
1160 interfaceRoutePrefixValues = sb3.append("]")
1161 if (interfaceRoutePrefixesList.getLength() > 0) {
1162 String interfaceRoutePrefixesXml =
1164 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_route_prefixes</key>
1165 <value>${MsoUtils.xmlEscape(interfaceRoutePrefixValues)}</value>
1167 interfaceRoutePrefixes = sbInterfaceRoutePrefixes.append(interfaceRoutePrefixesXml)
1170 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
1171 for(int a = 0; a < networkIpsV6List.getLength(); a++){
1172 Node ipV6Address = networkIpsV6List.item(a)
1173 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
1174 Element eElementIpV6Address = (Element) ipV6Address
1175 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
1176 if (a != networkIpsV6List.getLength() - 1) {
1177 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
1180 ipV6AddressValues = sb4.append(ipV6AddressValue);
1182 networkPosition = a.toString()
1183 String vmNetworksPositionsV6Xml =
1185 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
1186 <value>${MsoUtils.xmlEscape(ipV6AddressValue)}</value>
1188 vmNetworksPositionsV6 = sbNetworksPositionsV6.append(vmNetworksPositionsV6Xml)
1191 String vmNetworksV6Xml =
1193 <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ips</key>
1194 <value>${MsoUtils.xmlEscape(ipV6AddressValues)}</value>
1196 vmNetworks = sbVmNetworks.append(vmNetworksV6Xml)
1201 <key>${MsoUtils.xmlEscape(key)}_names</key>
1202 <value>${MsoUtils.xmlEscape(values)}</value>
1204 vnfVMS = sb.append(vnfXml)
1207 //SDNC Response Params
1208 String sdncResponseParams = ""
1209 List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
1210 String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
1211 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
1214 NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
1215 for (int z = 0; z < paramsList.getLength(); z++) {
1216 Node node = paramsList.item(z)
1217 Element eElement = (Element) node
1218 String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
1219 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
1220 String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
1223 <key>${MsoUtils.xmlEscape(vnfParameterName)}</key>
1224 <value>${MsoUtils.xmlEscape(vnfParameterValue)}</value>
1226 sdncResponseParams = sb.append(paraEntry)
1232 def vfModuleParams = """
1236 ${vnfNetworkNetName}
1237 ${vnfNetworkSubNetId}
1238 ${vnfNetworkV6SubNetId}
1239 ${vnfNetworkNetFqdn}
1240 ${vnfNetworksSriovVlanFilters}
1244 ${vmNetworksPositions}
1245 ${vmNetworksPositionsV6}
1246 ${interfaceRoutePrefixes}
1248 ${sdncResponseParams}"""
1250 return vfModuleParams