2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
\r
6 * ================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ============LICENSE_END=========================================================
\r
21 package org.openecomp.mso.bpmn.common.scripts;
\r
23 //import groovy.util.Node;
\r
25 import javax.xml.parsers.DocumentBuilder
\r
26 import javax.xml.parsers.DocumentBuilderFactory
\r
28 import org.apache.commons.lang3.*
\r
29 import org.camunda.bpm.engine.runtime.Execution
\r
30 import org.w3c.dom.Document
\r
31 import org.w3c.dom.Element
\r
32 import org.w3c.dom.Node
\r
33 import org.w3c.dom.NodeList
\r
34 import org.xml.sax.InputSource
\r
37 public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
\r
39 protected XmlParser xmlParser = new XmlParser()
\r
42 * Get the XmlParser.
\r
44 * @return the XmlParser.
\r
46 protected XmlParser getXmlParser() {
\r
51 * Find the VF Module with specified ID in the specified Generic VF. If no such
\r
52 * VF Module is found, null is returned.
\r
54 * @param genericVnf The Generic VNF in which to search for the specified VF Moduel.
\r
55 * @param vfModuleId The ID of the VF Module for which to search.
\r
56 * @return a VFModule object for the found VF Module or null if no VF Module is found.
\r
58 protected VfModule findVfModule(String genericVnf, String vfModuleId) {
\r
60 def genericVnfNode = xmlParser.parseText(genericVnf)
\r
61 def vfModulesNode = utils.getChildNode(genericVnfNode, 'vf-modules')
\r
62 if (vfModulesNode == null) {
\r
65 def vfModuleList = utils.getIdenticalChildren(vfModulesNode, 'vf-module')
\r
66 for (vfModuleNode in vfModuleList) {
\r
67 def vfModuleIdNode = utils.getChildNode(vfModuleNode, 'vf-module-id')
\r
68 if ((vfModuleIdNode != null) && (vfModuleIdNode.text().equals(vfModuleId))) {
\r
69 return new VfModule(vfModuleNode, (vfModuleList.size() == 1))
\r
76 * Transform all '*_network' parameter specifications from the incoming '*-params' root
\r
77 * element to a corresponding list of 'vnf-networks' specifications (typically used when
\r
78 * invoking the VNF Rest Adpater). Each element in '*-params' whose name attribute ends
\r
79 * with '_network' is used to create an 'vnf-networks' element.
\r
81 * @param paramsNode A Node representing a '*-params' element.
\r
82 * @return a String of 'vnf-networks' elements, one for each 'param' element whose name
\r
83 * attribute ends with '_network'.
\r
85 protected String transformNetworkParamsToVnfNetworks(String paramsRootXml) {
\r
86 if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
\r
89 def String vnfNetworks = ''
\r
91 paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
\r
92 def paramsNode = xmlParser.parseText(paramsRootXml)
\r
93 def params = utils.getIdenticalChildren(paramsNode, 'param')
\r
94 for (param in params) {
\r
95 def String attrName = (String) param.attribute('name')
\r
96 if (attrName.endsWith('_network')) {
\r
97 def networkRole = attrName.substring(0, (attrName.length()-'_network'.length()))
\r
98 def networkName = param.text()
\r
99 String vnfNetwork = """
\r
101 <network-role>${networkRole}</network-role>
\r
102 <network-name>${networkName}</network-name>
\r
105 vnfNetworks = vnfNetworks + vnfNetwork
\r
108 } catch (Exception e) {
\r
109 logWarn('Exception transforming \'_network\' params to vnfNetworks', e)
\r
115 * Transform the parameter specifications from the incoming '*-params' root element to
\r
116 * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
\r
117 * Each element in '*-params' is used to create an 'entry' element.
\r
119 * @param paramsNode A Node representing a '*-params' element.
\r
120 * @return a String of 'entry' elements, one for each 'param' element.
\r
122 protected String transformParamsToEntries(String paramsRootXml) {
\r
123 if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
\r
126 def String entries = ''
\r
128 paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
\r
129 def paramsNode = xmlParser.parseText(paramsRootXml)
\r
130 def params = utils.getIdenticalChildren(paramsNode, 'param')
\r
131 for (param in params) {
\r
132 def key = (String) param.attribute('name')
\r
136 def value = (String) param.text()
\r
140 <value>${value}</value>
\r
143 entries = entries + entry
\r
145 } catch (Exception e) {
\r
146 logWarn('Exception transforming params to entries', e)
\r
152 * Transform the parameter specifications from the incoming '*-params' root element to
\r
153 * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
\r
154 * Each element in '*-params' is used to create an 'entry' element.
\r
156 * @param paramsNode A Node representing a '*-params' element.
\r
157 * @return a String of 'entry' elements, one for each 'param' element.
\r
159 protected String transformVolumeParamsToEntries(String paramsRootXml) {
\r
160 if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
\r
163 def String entries = ''
\r
165 paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
\r
166 def paramsNode = xmlParser.parseText(paramsRootXml)
\r
167 def params = utils.getIdenticalChildren(paramsNode, 'param')
\r
168 for (param in params) {
\r
169 def key = (String) param.attribute('name')
\r
173 if ( !(key in ['vnf_id', 'vnf_name', 'vf_module_id', 'vf_module_name'])) {
\r
174 def value = (String) param.text()
\r
178 <value>${value}</value>
\r
181 entries = entries + entry
\r
184 } catch (Exception e) {
\r
185 logWarn('Exception transforming params to entries', e)
\r
191 * Extract the Tenant Id from the Volume Group information returned by AAI.
\r
193 * @param volumeGroupXml Volume Group XML returned by AAI.
\r
194 * @return the Tenant Id extracted from the Volume Group information. 'null' is returned if
\r
195 * the Tenant Id is missing or could not otherwise be extracted.
\r
197 protected String getTenantIdFromVolumeGroup(String volumeGroupXml) {
\r
198 def groovy.util.Node volumeGroupNode = xmlParser.parseText(volumeGroupXml)
\r
199 def groovy.util.Node relationshipList = utils.getChildNode(volumeGroupNode, 'relationship-list')
\r
200 if (relationshipList != null) {
\r
201 def groovy.util.NodeList relationships = utils.getIdenticalChildren(relationshipList, 'relationship')
\r
202 for (groovy.util.Node relationship in relationships) {
\r
203 def groovy.util.Node relatedTo = utils.getChildNode(relationship, 'related-to')
\r
204 if ((relatedTo != null) && (relatedTo.text().equals('tenant'))) {
\r
205 def groovy.util.NodeList relationshipDataList = utils.getIdenticalChildren(relationship, 'relationship-data')
\r
206 for (groovy.util.Node relationshipData in relationshipDataList) {
\r
207 def groovy.util.Node relationshipKey = utils.getChildNode(relationshipData, 'relationship-key')
\r
208 if ((relationshipKey != null) && (relationshipKey.text().equals('tenant.tenant-id'))) {
\r
209 def groovy.util.Node relationshipValue = utils.getChildNode(relationshipData, 'relationship-value')
\r
210 if (relationshipValue != null) {
\r
211 return relationshipValue.text()
\r
223 * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
\r
224 * and puts them into the format expected by VNF adapter.
\r
225 * @param vnfParamsMap - map of VNF parameters passed in the request body
\r
226 * @param sdncGetResponse - response string from SDNC GET topology request
\r
229 * @param vfModuleId
\r
230 * @param vfModuleName
\r
231 * @param vfModuleIndex - can be null
\r
232 * @return a String of key/value entries for vfModuleParams
\r
236 protected String buildVfModuleParams(Map<String, String> vnfParamsMap, String sdncGetResponse, String vnfId, String vnfName,
\r
237 String vfModuleId, String vfModuleName, String vfModuleIndex) {
\r
239 //Get SDNC Response Data
\r
241 String data = utils.getNodeXml(sdncGetResponse, "response-data")
\r
242 data = data.replaceAll("<", "<")
\r
243 data = data.replaceAll(">", ">")
\r
245 String serviceData = utils.getNodeXml(data, "service-data")
\r
246 serviceData = utils.removeXmlPreamble(serviceData)
\r
247 serviceData = utils.removeXmlNamespaces(serviceData)
\r
248 String vnfRequestInfo = utils.getNodeXml(serviceData, "vnf-request-information")
\r
249 String oldVnfId = utils.getNodeXml(vnfRequestInfo, "vnf-id")
\r
250 oldVnfId = utils.removeXmlPreamble(oldVnfId)
\r
251 oldVnfId = utils.removeXmlNamespaces(oldVnfId)
\r
252 serviceData = serviceData.replace(oldVnfId, "")
\r
253 def vnfId1 = utils.getNodeText1(serviceData, "vnf-id")
\r
255 Map<String, String> paramsMap = new HashMap<String, String>()
\r
257 if (vfModuleIndex != null) {
\r
258 paramsMap.put("vf_module_index", "${vfModuleIndex}")
\r
262 paramsMap.put("vnf_id", "${vnfId}")
\r
263 paramsMap.put("vnf_name", "${vnfName}")
\r
264 paramsMap.put("vf_module_id", "${vfModuleId}")
\r
265 paramsMap.put("vf_module_name", "${vfModuleName}")
\r
267 InputSource source = new InputSource(new StringReader(data));
\r
268 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
\r
269 docFactory.setNamespaceAware(true)
\r
270 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
\r
271 Document responseXml = docBuilder.parse(source)
\r
274 // Availability Zones Data
\r
276 NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
\r
277 String aZonePosition = "0"
\r
278 for (int z = 0; z < aZonesList.getLength(); z++) {
\r
279 Node node = aZonesList.item(z)
\r
280 if (node.getNodeType() == Node.ELEMENT_NODE) {
\r
281 Element eElement = (Element) node
\r
282 String aZoneValue = utils.getElementText(eElement, "availability-zone")
\r
283 aZonePosition = z.toString()
\r
284 paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
\r
288 // VNF Networks Data
\r
290 StringBuilder sbNet = new StringBuilder()
\r
292 NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
\r
293 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
\r
294 Node node = vnfNetworkList.item(x)
\r
295 if (node.getNodeType() == Node.ELEMENT_NODE) {
\r
296 Element eElement = (Element) node
\r
297 String vnfNetworkKey = utils.getElementText(eElement, "network-role")
\r
298 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
\r
299 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
\r
300 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
\r
301 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
\r
302 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
\r
303 paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
\r
304 paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
\r
305 paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
\r
306 paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
\r
307 paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
\r
309 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
\r
310 StringBuffer sriovFilterBuf = new StringBuffer()
\r
312 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
\r
313 Node node1 = sriovVlanFilterList.item(i)
\r
314 if (node1.getNodeType() == Node.ELEMENT_NODE) {
\r
315 Element eElement1 = (Element) node1
\r
316 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
\r
317 if (i != sriovVlanFilterList.getLength() - 1) {
\r
318 values = sriovFilterBuf.append(value + ",")
\r
321 values = sriovFilterBuf.append(value);
\r
325 if (!values.isEmpty()) {
\r
326 paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
\r
338 def floatingIPKeyValue
\r
339 def floatingIPV6Key
\r
340 def floatingIPV6KeyValue
\r
341 StringBuilder sb = new StringBuilder()
\r
343 NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
\r
344 for (int x = 0; x < vmsList.getLength(); x++) {
\r
345 Node node = vmsList.item(x)
\r
346 if (node.getNodeType() == Node.ELEMENT_NODE) {
\r
347 Element eElement = (Element) node
\r
348 key = utils.getElementText(eElement, "vm-type")
\r
350 String position = "0"
\r
351 StringBuilder sb1 = new StringBuilder()
\r
352 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
\r
353 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
\r
354 for(int i = 0; i < valueList.getLength(); i++){
\r
355 Node node1 = valueList.item(i)
\r
356 if (node1.getNodeType() == Node.ELEMENT_NODE) {
\r
357 Element eElement1 = (Element) node1
\r
358 value = utils.getElementText(eElement1, "vm-name")
\r
359 if (i != valueList.getLength() - 1) {
\r
360 values = sb1.append(value + ",")
\r
363 values = sb1.append(value);
\r
365 position = i.toString()
\r
366 paramsMap.put("${key}_name_${position}", "${value}")
\r
369 for(int n = 0; n < vmNetworksList.getLength(); n++){
\r
370 String floatingIpKeyValueStr = ""
\r
371 String floatingIpV6KeyValueStr = ""
\r
372 Node nodeNetworkKey = vmNetworksList.item(n)
\r
373 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
\r
374 Element eElementNetworkKey = (Element) nodeNetworkKey
\r
375 String ipAddressValues
\r
376 String ipV6AddressValues
\r
377 String networkPosition = "0"
\r
378 StringBuilder sb2 = new StringBuilder()
\r
379 StringBuilder sb3 = new StringBuilder()
\r
380 StringBuilder sb4 = new StringBuilder()
\r
381 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
\r
382 floatingIPKey = key + '_' + networkKey + '_floating_ip'
\r
383 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
\r
384 if(!floatingIPKeyValue.isEmpty()){
\r
385 paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
\r
387 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
\r
388 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
\r
389 if(!floatingIPV6KeyValue.isEmpty()){
\r
390 paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
\r
392 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
\r
393 for(int a = 0; a < networkIpsList.getLength(); a++){
\r
394 Node ipAddress = networkIpsList.item(a)
\r
395 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
\r
396 Element eElementIpAddress = (Element) ipAddress
\r
397 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
\r
398 if (a != networkIpsList.getLength() - 1) {
\r
399 ipAddressValues = sb2.append(ipAddressValue + ",")
\r
402 ipAddressValues = sb2.append(ipAddressValue);
\r
404 networkPosition = a.toString()
\r
405 paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
\r
409 paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
\r
411 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
\r
412 String interfaceRoutePrefixValues = sb3.append("[")
\r
414 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
\r
415 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
\r
416 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
\r
417 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
\r
418 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
\r
419 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
\r
420 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
\r
422 if (a != interfaceRoutePrefixesList.getLength() - 1) {
\r
423 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
\r
426 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
\r
430 interfaceRoutePrefixValues = sb3.append("]")
\r
431 if (interfaceRoutePrefixesList.getLength() > 0) {
\r
432 paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
\r
435 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
\r
436 for(int a = 0; a < networkIpsV6List.getLength(); a++){
\r
437 Node ipV6Address = networkIpsV6List.item(a)
\r
438 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
\r
439 Element eElementIpV6Address = (Element) ipV6Address
\r
440 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
\r
441 if (a != networkIpsV6List.getLength() - 1) {
\r
442 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
\r
445 ipV6AddressValues = sb4.append(ipV6AddressValue);
\r
447 networkPosition = a.toString()
\r
448 paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
\r
451 paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
\r
454 paramsMap.put("${key}_names", "${values}")
\r
457 //SDNC Response Params
\r
458 String sdncResponseParams = ""
\r
459 List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
\r
460 String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
\r
461 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
\r
464 NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
\r
465 for (int z = 0; z < paramsList.getLength(); z++) {
\r
466 Node node = paramsList.item(z)
\r
467 Element eElement = (Element) node
\r
468 String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
\r
469 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
\r
470 String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
\r
471 paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
\r
476 // Parameters received from the request should overwrite any parameters received from SDNC
\r
477 if (vnfParamsMap != null) {
\r
478 for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
\r
479 String vnfKey = entry.getKey()
\r
480 String vnfValue = entry.getValue()
\r
481 paramsMap.put("$vnfKey", "$vnfValue")
\r
485 StringBuilder sbParams = new StringBuilder()
\r
486 def vfModuleParams = ""
\r
487 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
\r
489 String paramName = entry.getKey()
\r
490 String paramValue = entry.getValue()
\r
493 <key>${paramName}</key>
\r
494 <value>${paramValue}</value>
\r
498 vfModuleParams = sbParams.append(paramsXml)
\r
501 return vfModuleParams
\r
507 * VBNG specific method that parses VNF parameters passed in on the
\r
508 * incoming requests and SDNC parameters returned from SDNC get response
\r
509 * and puts them into the format expected by VNF adapter.
\r
510 * @param vnfParamsMap - map of VNF parameters passed in the request body
\r
511 * @param sdncGetResponse - response string from SDNC GET topology request
\r
514 * @param vfModuleId
\r
515 * @param vfModuleName
\r
516 * @return a String of key/value entries for vfModuleParams
\r
519 protected String buildVfModuleParamsVbng(String vnfParams, String sdncGetResponse, String vnfId, String vnfName,
\r
520 String vfModuleId, String vfModuleName) {
\r
522 //Get SDNC Response Data
\r
524 String data = utils.getNodeXml(sdncGetResponse, "response-data")
\r
525 data = data.replaceAll("<", "<")
\r
526 data = data.replaceAll(">", ">")
\r
534 <value>${vnfId}</value>
\r
537 <key>vnf_name</key>
\r
538 <value>${vnfName}</value>
\r
541 <key>vf_module_id</key>
\r
542 <value>${vfModuleId}</value>
\r
545 <key>vf_module_name</key>
\r
546 <value>${vfModuleName}</value>
\r
549 utils.logAudit("vnfInfo: " + vnfInfo)
\r
550 InputSource source = new InputSource(new StringReader(data));
\r
551 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
\r
552 docFactory.setNamespaceAware(true)
\r
553 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
\r
554 Document responseXml = docBuilder.parse(source)
\r
557 // Availability Zones Data
\r
559 StringBuilder sbAZone = new StringBuilder()
\r
560 NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
\r
561 String aZonePosition = "0"
\r
562 for (int z = 0; z < aZonesList.getLength(); z++) {
\r
563 Node node = aZonesList.item(z)
\r
564 if (node.getNodeType() == Node.ELEMENT_NODE) {
\r
565 Element eElement = (Element) node
\r
566 String aZoneValue = utils.getElementText(eElement, "availability-zone")
\r
567 aZonePosition = z.toString()
\r
570 <key>availability_zone_${aZonePosition}</key>
\r
571 <value>${aZoneValue}</value>
\r
573 aZones = sbAZone.append(aZoneXml)
\r
577 // VNF Networks Data
\r
578 String vnfNetworkNetId = ""
\r
579 String vnfNetworkNetName = ""
\r
580 String vnfNetworkSubNetId = ""
\r
581 String vnfNetworkV6SubNetId = ""
\r
582 String vnfNetworkNetFqdn = ""
\r
583 String vnfNetworksSriovVlanFilters = ""
\r
584 StringBuilder sbNet = new StringBuilder()
\r
585 StringBuilder sbNet2 = new StringBuilder()
\r
586 StringBuilder sbNet3 = new StringBuilder()
\r
587 StringBuilder sbNet4 = new StringBuilder()
\r
588 StringBuilder sbNet5 = new StringBuilder()
\r
589 StringBuilder sbNet6 = new StringBuilder()
\r
590 NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
\r
591 for (int x = 0; x < vnfNetworkList.getLength(); x++) {
\r
592 Node node = vnfNetworkList.item(x)
\r
593 if (node.getNodeType() == Node.ELEMENT_NODE) {
\r
594 Element eElement = (Element) node
\r
595 String vnfNetworkKey = utils.getElementText(eElement, "network-role")
\r
596 String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
\r
597 String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
\r
598 String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
\r
599 String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
\r
600 String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
\r
601 String vnfNetworkNetIdXml =
\r
603 <key>${vnfNetworkKey}_net_id</key>
\r
604 <value>${vnfNetworkNeutronIdValue}</value>
\r
606 vnfNetworkNetId = sbNet.append(vnfNetworkNetIdXml)
\r
607 String vnfNetworkNetNameXml =
\r
609 <key>${vnfNetworkKey}_net_name</key>
\r
610 <value>${vnfNetworkNetNameValue}</value>
\r
612 vnfNetworkNetName = sbNet2.append(vnfNetworkNetNameXml)
\r
613 String vnfNetworkSubNetIdXml =
\r
615 <key>${vnfNetworkKey}_subnet_id</key>
\r
616 <value>${vnfNetworkSubNetIdValue}</value>
\r
618 vnfNetworkSubNetId = sbNet3.append(vnfNetworkSubNetIdXml)
\r
619 String vnfNetworkV6SubNetIdXml =
\r
621 <key>${vnfNetworkKey}_v6_subnet_id</key>
\r
622 <value>${vnfNetworkV6SubNetIdValue}</value>
\r
624 vnfNetworkV6SubNetId = sbNet5.append(vnfNetworkV6SubNetIdXml)
\r
625 String vnfNetworkNetFqdnXml =
\r
627 <key>${vnfNetworkKey}_net_fqdn</key>
\r
628 <value>${vnfNetworkNetFqdnValue}</value>
\r
630 vnfNetworkNetFqdn = sbNet4.append(vnfNetworkNetFqdnXml)
\r
632 NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
\r
633 StringBuffer sriovFilterBuf = new StringBuffer()
\r
635 for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
\r
636 Node node1 = sriovVlanFilterList.item(i)
\r
637 if (node1.getNodeType() == Node.ELEMENT_NODE) {
\r
638 Element eElement1 = (Element) node1
\r
639 String value = utils.getElementText(eElement1, "sriov-vlan-filter")
\r
640 if (i != sriovVlanFilterList.getLength() - 1) {
\r
641 values = sriovFilterBuf.append(value + ",")
\r
644 values = sriovFilterBuf.append(value);
\r
648 if (!values.isEmpty()) {
\r
649 String vnfNetworkSriovVlanFilterXml =
\r
651 <key>${vnfNetworkKey}_ATT_VF_VLAN_FILTER</key>
\r
652 <value>${values}</value>
\r
654 vnfNetworksSriovVlanFilters = sbNet6.append(vnfNetworkSriovVlanFilterXml)
\r
661 String vnfVMSPositions = ""
\r
662 String vmNetworks = ""
\r
663 String vmNetworksPositions = ""
\r
664 String vmNetworksPositionsV6 = ""
\r
665 String interfaceRoutePrefixes = ""
\r
671 def floatingIPKeyValue
\r
672 def floatingIPV6Key
\r
673 def floatingIPV6KeyValue
\r
674 StringBuilder sb = new StringBuilder()
\r
675 StringBuilder sbPositions = new StringBuilder()
\r
676 StringBuilder sbVmNetworks = new StringBuilder()
\r
677 StringBuilder sbNetworksPositions = new StringBuilder()
\r
678 StringBuilder sbInterfaceRoutePrefixes = new StringBuilder()
\r
679 StringBuilder sbNetworksPositionsV6 = new StringBuilder()
\r
681 NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
\r
682 for (int x = 0; x < vmsList.getLength(); x++) {
\r
683 Node node = vmsList.item(x)
\r
684 if (node.getNodeType() == Node.ELEMENT_NODE) {
\r
685 Element eElement = (Element) node
\r
686 key = utils.getElementText(eElement, "vm-type")
\r
688 String position = "0"
\r
689 StringBuilder sb1 = new StringBuilder()
\r
690 NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
\r
691 NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
\r
692 for(int i = 0; i < valueList.getLength(); i++){
\r
693 Node node1 = valueList.item(i)
\r
694 if (node1.getNodeType() == Node.ELEMENT_NODE) {
\r
695 Element eElement1 = (Element) node1
\r
696 value = utils.getElementText(eElement1, "vm-name")
\r
697 if (i != valueList.getLength() - 1) {
\r
698 values = sb1.append(value + ",")
\r
701 values = sb1.append(value);
\r
703 position = i.toString()
\r
704 String vnfPositionXml =
\r
706 <key>${key}_name_${position}</key>
\r
707 <value>${value}</value>
\r
709 vnfVMSPositions = sbPositions.append(vnfPositionXml)
\r
712 for(int n = 0; n < vmNetworksList.getLength(); n++){
\r
713 String floatingIpKeyValueStr = ""
\r
714 String floatingIpV6KeyValueStr = ""
\r
715 Node nodeNetworkKey = vmNetworksList.item(n)
\r
716 if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
\r
717 Element eElementNetworkKey = (Element) nodeNetworkKey
\r
718 String ipAddressValues
\r
719 String ipV6AddressValues
\r
720 String networkPosition = "0"
\r
721 StringBuilder sb2 = new StringBuilder()
\r
722 StringBuilder sb3 = new StringBuilder()
\r
723 StringBuilder sb4 = new StringBuilder()
\r
724 networkKey = utils.getElementText(eElementNetworkKey, "network-role")
\r
725 floatingIPKey = key + '_' + networkKey + '_floating_ip'
\r
726 floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
\r
727 if(!floatingIPKeyValue.isEmpty()){
\r
728 floatingIpKeyValueStr = """<entry>
\r
729 <key>$floatingIPKey</key>
\r
730 <value>$floatingIPKeyValue</value>
\r
733 floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
\r
734 floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
\r
735 if(!floatingIPV6KeyValue.isEmpty()){
\r
736 floatingIpV6KeyValueStr = """<entry>
\r
737 <key>$floatingIPV6Key</key>
\r
738 <value>$floatingIPV6KeyValue</value>
\r
741 NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
\r
742 for(int a = 0; a < networkIpsList.getLength(); a++){
\r
743 Node ipAddress = networkIpsList.item(a)
\r
744 if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
\r
745 Element eElementIpAddress = (Element) ipAddress
\r
746 String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
\r
747 if (a != networkIpsList.getLength() - 1) {
\r
748 ipAddressValues = sb2.append(ipAddressValue + ",")
\r
751 ipAddressValues = sb2.append(ipAddressValue);
\r
753 networkPosition = a.toString()
\r
754 String vmNetworksPositionsXml =
\r
756 <key>${key}_${networkKey}_ip_${networkPosition}</key>
\r
757 <value>${ipAddressValue}</value>
\r
759 vmNetworksPositions = sbNetworksPositions.append(vmNetworksPositionsXml)
\r
762 vmNetworksPositions = sbNetworksPositions.append(floatingIpKeyValueStr).append(floatingIpV6KeyValueStr)
\r
764 String vmNetworksXml =
\r
766 <key>${key}_${networkKey}_ips</key>
\r
767 <value>${ipAddressValues}</value>
\r
769 vmNetworks = sbVmNetworks.append(vmNetworksXml)
\r
771 NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
\r
772 String interfaceRoutePrefixValues = sb3.append("[")
\r
774 for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
\r
775 Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
\r
776 if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
\r
777 Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
\r
778 String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
\r
779 if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
\r
780 interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
\r
782 if (a != interfaceRoutePrefixesList.getLength() - 1) {
\r
783 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
\r
786 interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
\r
790 interfaceRoutePrefixValues = sb3.append("]")
\r
791 if (interfaceRoutePrefixesList.getLength() > 0) {
\r
792 String interfaceRoutePrefixesXml =
\r
794 <key>${key}_${networkKey}_route_prefixes</key>
\r
795 <value>${interfaceRoutePrefixValues}</value>
\r
797 interfaceRoutePrefixes = sbInterfaceRoutePrefixes.append(interfaceRoutePrefixesXml)
\r
800 NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
\r
801 for(int a = 0; a < networkIpsV6List.getLength(); a++){
\r
802 Node ipV6Address = networkIpsV6List.item(a)
\r
803 if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
\r
804 Element eElementIpV6Address = (Element) ipV6Address
\r
805 String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
\r
806 if (a != networkIpsV6List.getLength() - 1) {
\r
807 ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
\r
810 ipV6AddressValues = sb4.append(ipV6AddressValue);
\r
812 networkPosition = a.toString()
\r
813 String vmNetworksPositionsV6Xml =
\r
815 <key>${key}_${networkKey}_v6_ip_${networkPosition}</key>
\r
816 <value>${ipV6AddressValue}</value>
\r
818 vmNetworksPositionsV6 = sbNetworksPositionsV6.append(vmNetworksPositionsV6Xml)
\r
821 String vmNetworksV6Xml =
\r
823 <key>${key}_${networkKey}_v6_ips</key>
\r
824 <value>${ipV6AddressValues}</value>
\r
826 vmNetworks = sbVmNetworks.append(vmNetworksV6Xml)
\r
831 <key>${key}_names</key>
\r
832 <value>${values}</value>
\r
834 vnfVMS = sb.append(vnfXml)
\r
837 //SDNC Response Params
\r
838 String sdncResponseParams = ""
\r
839 List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
\r
840 String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
\r
841 if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
\r
844 NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
\r
845 for (int z = 0; z < paramsList.getLength(); z++) {
\r
846 Node node = paramsList.item(z)
\r
847 Element eElement = (Element) node
\r
848 String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
\r
849 if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
\r
850 String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
\r
853 <key>${vnfParameterName}</key>
\r
854 <value>${vnfParameterValue}</value>
\r
856 sdncResponseParams = sb.append(paraEntry)
\r
862 def vfModuleParams = """
\r
866 ${vnfNetworkNetName}
\r
867 ${vnfNetworkSubNetId}
\r
868 ${vnfNetworkV6SubNetId}
\r
869 ${vnfNetworkNetFqdn}
\r
870 ${vnfNetworksSriovVlanFilters}
\r
874 ${vmNetworksPositions}
\r
875 ${vmNetworksPositionsV6}
\r
876 ${interfaceRoutePrefixes}
\r
878 ${sdncResponseParams}"""
\r
880 return vfModuleParams
\r