/*-
* ============LICENSE_START=======================================================
* ONAP - SO
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Modifications Copyright (c) 2019 Samsung
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
package org.onap.so.bpmn.common.scripts;
import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory
import org.w3c.dom.Document
import org.w3c.dom.Element
import org.w3c.dom.Node
import org.w3c.dom.NodeList
import org.xml.sax.InputSource
import org.onap.so.logger.MessageEnum
import org.onap.so.logger.MsoLogger
import org.slf4j.Logger
import org.slf4j.LoggerFactory
public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
private static final Logger logger = LoggerFactory.getLogger( VfModuleBase.class);
protected XmlParser xmlParser = new XmlParser()
/**
* Get the XmlParser.
*
* @return the XmlParser.
*/
protected XmlParser getXmlParser() {
return xmlParser
}
/**
* Find the VF Module with specified ID in the specified Generic VF. If no such
* VF Module is found, null is returned.
*
* @param genericVnf The Generic VNF in which to search for the specified VF Moduel.
* @param vfModuleId The ID of the VF Module for which to search.
* @return a VFModule object for the found VF Module or null if no VF Module is found.
*/
protected VfModule findVfModule(String genericVnf, String vfModuleId) {
def genericVnfNode = xmlParser.parseText(genericVnf)
def vfModulesNode = utils.getChildNode(genericVnfNode, 'vf-modules')
if (vfModulesNode == null) {
return null
}
def vfModuleList = utils.getIdenticalChildren(vfModulesNode, 'vf-module')
for (vfModuleNode in vfModuleList) {
def vfModuleIdNode = utils.getChildNode(vfModuleNode, 'vf-module-id')
if ((vfModuleIdNode != null) && (vfModuleIdNode.text().equals(vfModuleId))) {
return new VfModule(vfModuleNode, (vfModuleList.size() == 1))
}
}
return null
}
/**
* Transform all '*_network' parameter specifications from the incoming '*-params' root
* element to a corresponding list of 'vnf-networks' specifications (typically used when
* invoking the VNF Rest Adpater). Each element in '*-params' whose name attribute ends
* with '_network' is used to create an 'vnf-networks' element.
*
* @param paramsNode A Node representing a '*-params' element.
* @return a String of 'vnf-networks' elements, one for each 'param' element whose name
* attribute ends with '_network'.
*/
protected String transformNetworkParamsToVnfNetworks(String paramsRootXml) {
if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
return ''
}
def String vnfNetworks = ''
try {
paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
def paramsNode = xmlParser.parseText(paramsRootXml)
def params = utils.getIdenticalChildren(paramsNode, 'param')
for (param in params) {
def String attrName = (String) param.attribute('name')
if (attrName.endsWith('_network')) {
def networkRole = attrName.substring(0, (attrName.length()-'_network'.length()))
def networkName = param.text()
String vnfNetwork = """
${MsoUtils.xmlEscape(networkRole)}
${MsoUtils.xmlEscape(networkName)}
"""
vnfNetworks = vnfNetworks + vnfNetwork
}
}
} catch (Exception e) {
logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
'Exception transforming network params to vnfNetworks', "BPMN",
MsoLogger.ErrorCode.UnknownError.getValue(), 'Exception is: \n' + e);
}
return vnfNetworks
}
/**
* Transform the parameter specifications from the incoming '*-params' root element to
* a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
* Each element in '*-params' is used to create an 'entry' element.
*
* @param paramsNode A Node representing a '*-params' element.
* @return a String of 'entry' elements, one for each 'param' element.
*/
protected String transformParamsToEntries(String paramsRootXml) {
if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
return ''
}
def String entries = ''
try {
paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
def paramsNode = xmlParser.parseText(paramsRootXml)
def params = utils.getIdenticalChildren(paramsNode, 'param')
for (param in params) {
def key = (String) param.attribute('name')
if (key == null) {
key = ''
}
def value = (String) param.text()
String entry = """
${MsoUtils.xmlEscape(key)}
${MsoUtils.xmlEscape(value)}
"""
entries = entries + entry
}
} catch (Exception e) {
logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
'Exception transforming params to entries', "BPMN",
MsoLogger.ErrorCode.UnknownError.getValue(), 'Exception transforming params to entries' + e);
}
return entries
}
/**
* Transform the parameter specifications from the incoming '*-params' root element to
* a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
* Each element in '*-params' is used to create an 'entry' element.
*
* @param paramsNode A Node representing a '*-params' element.
* @return a String of 'entry' elements, one for each 'param' element.
*/
protected String transformVolumeParamsToEntries(String paramsRootXml) {
if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
return ''
}
def String entries = ''
try {
paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
def paramsNode = xmlParser.parseText(paramsRootXml)
def params = utils.getIdenticalChildren(paramsNode, 'param')
for (param in params) {
def key = (String) param.attribute('name')
if (key == null) {
key = ''
}
if ( !(key in ['vnf_id', 'vnf_name', 'vf_module_id', 'vf_module_name'])) {
def value = (String) param.text()
String entry = """
${MsoUtils.xmlEscape(key)}
${MsoUtils.xmlEscape(value)}
"""
entries = entries + entry
}
}
} catch (Exception e) {
logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
'Exception transforming params to entries', "BPMN",
MsoLogger.ErrorCode.UnknownError.getValue(), 'Exception transforming params to entries' + e);
}
return entries
}
/*
* Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
* and puts them into the format expected by VNF adapter.
* @param vnfParamsMap - map of VNF parameters passed in the request body
* @param sdncGetResponse - response string from SDNC GET topology request
* @param vnfId
* @param vnfName
* @param vfModuleId
* @param vfModuleName
* @param vfModuleIndex - can be null
* @return a String of key/value entries for vfModuleParams
*/
protected String buildVfModuleParams(Map vnfParamsMap, String sdncGetResponse, String vnfId, String vnfName,
String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
//Get SDNC Response Data
String data = utils.getNodeXml(sdncGetResponse, "response-data")
String serviceData = utils.getNodeXml(data, "service-data")
serviceData = utils.removeXmlPreamble(serviceData)
serviceData = utils.removeXmlNamespaces(serviceData)
String vnfRequestInfo = utils.getNodeXml(serviceData, "vnf-request-information")
String oldVnfId = utils.getNodeXml(vnfRequestInfo, "vnf-id")
oldVnfId = utils.removeXmlPreamble(oldVnfId)
oldVnfId = utils.removeXmlNamespaces(oldVnfId)
serviceData = serviceData.replace(oldVnfId, "")
def vnfId1 = utils.getNodeText(serviceData, "vnf-id")
Map paramsMap = new HashMap()
if (vfModuleIndex != null) {
paramsMap.put("vf_module_index", "${vfModuleIndex}")
}
// Add-on data
paramsMap.put("vnf_id", "${vnfId}")
paramsMap.put("vnf_name", "${vnfName}")
paramsMap.put("vf_module_id", "${vfModuleId}")
paramsMap.put("vf_module_name", "${vfModuleName}")
paramsMap.put("environment_context", "${environmentContext}")
paramsMap.put("workload_context", "${workloadContext}")
InputSource source = new InputSource(new StringReader(data));
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true)
DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
Document responseXml = docBuilder.parse(source)
// Availability Zones Data
NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
String aZonePosition = "0"
for (int z = 0; z < aZonesList.getLength(); z++) {
Node node = aZonesList.item(z)
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node
String aZoneValue = utils.getElementText(eElement, "availability-zone")
aZonePosition = z.toString()
paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
}
}
// Map of network-roles and network-tags from vm-networks
NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
Map networkRoleMap = new HashMap()
for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
Node nodeNetworkKey = vmNetworksListGlobal.item(n)
if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
Element eElementNetworkKey = (Element) nodeNetworkKey
String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
if (networkRoleValue.isEmpty()) {
networkRoleValue = networkRole
}
networkRoleMap.put(networkRole, networkRoleValue)
}
}
// VNF Networks Data
StringBuilder sbNet = new StringBuilder()
NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
for (int x = 0; x < vnfNetworkList.getLength(); x++) {
Node node = vnfNetworkList.item(x)
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node
String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
String networkRole = utils.getElementText(eElement, "network-role")
if (vnfNetworkKey.isEmpty()) {
vnfNetworkKey = networkRoleMap.get(networkRole)
if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
vnfNetworkKey = networkRole
}
}
String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
StringBuffer sriovFilterBuf = new StringBuffer()
String values = ""
for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
Node node1 = sriovVlanFilterList.item(i)
if (node1.getNodeType() == Node.ELEMENT_NODE) {
Element eElement1 = (Element) node1
String value = utils.getElementText(eElement1, "sriov-vlan-filter")
if (i != sriovVlanFilterList.getLength() - 1) {
values = sriovFilterBuf.append(value + ",")
}
else {
values = sriovFilterBuf.append(value);
}
}
}
if (!values.isEmpty()) {
paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
}
}
}
// VNF-VMS Data
def key
def value
def networkKey
def networkValue
def floatingIPKey
def floatingIPKeyValue
def floatingIPV6Key
def floatingIPV6KeyValue
StringBuilder sb = new StringBuilder()
NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
for (int x = 0; x < vmsList.getLength(); x++) {
Node node = vmsList.item(x)
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node
key = utils.getElementText(eElement, "vm-type")
String values
String position = "0"
StringBuilder sb1 = new StringBuilder()
NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
for(int i = 0; i < valueList.getLength(); i++){
Node node1 = valueList.item(i)
if (node1.getNodeType() == Node.ELEMENT_NODE) {
Element eElement1 = (Element) node1
value = utils.getElementText(eElement1, "vm-name")
if (i != valueList.getLength() - 1) {
values = sb1.append(value + ",")
}
else {
values = sb1.append(value);
}
position = i.toString()
paramsMap.put("${key}_name_${position}", "${value}")
}
}
for(int n = 0; n < vmNetworksList.getLength(); n++){
String floatingIpKeyValueStr = ""
String floatingIpV6KeyValueStr = ""
Node nodeNetworkKey = vmNetworksList.item(n)
if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
Element eElementNetworkKey = (Element) nodeNetworkKey
String ipAddressValues
String ipV6AddressValues
String networkPosition = "0"
StringBuilder sb2 = new StringBuilder()
StringBuilder sb3 = new StringBuilder()
StringBuilder sb4 = new StringBuilder()
networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
if (networkKey.isEmpty()) {
networkKey = utils.getElementText(eElementNetworkKey, "network-role")
}
floatingIPKey = key + '_' + networkKey + '_floating_ip'
floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
if(!floatingIPKeyValue.isEmpty()){
paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
}
floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
if(!floatingIPV6KeyValue.isEmpty()){
paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
}
NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
for(int a = 0; a < networkIpsList.getLength(); a++){
Node ipAddress = networkIpsList.item(a)
if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
Element eElementIpAddress = (Element) ipAddress
String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
if (a != networkIpsList.getLength() - 1) {
ipAddressValues = sb2.append(ipAddressValue + ",")
}
else {
ipAddressValues = sb2.append(ipAddressValue);
}
networkPosition = a.toString()
paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
}
}
paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
String interfaceRoutePrefixValues = sb3.append("[")
for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
}
if (a != interfaceRoutePrefixesList.getLength() - 1) {
interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
}
else {
interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
}
}
}
interfaceRoutePrefixValues = sb3.append("]")
if (interfaceRoutePrefixesList.getLength() > 0) {
paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
}
NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
for(int a = 0; a < networkIpsV6List.getLength(); a++){
Node ipV6Address = networkIpsV6List.item(a)
if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
Element eElementIpV6Address = (Element) ipV6Address
String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
if (a != networkIpsV6List.getLength() - 1) {
ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
}
else {
ipV6AddressValues = sb4.append(ipV6AddressValue);
}
networkPosition = a.toString()
paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
}
}
paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
}
}
paramsMap.put("${key}_names", "${values}")
}
}
//SDNC Response Params
String sdncResponseParams = ""
List sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
// No SDNC params
}else{
NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
for (int z = 0; z < paramsList.getLength(); z++) {
Node node = paramsList.item(z)
Element eElement = (Element) node
String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
}
}
}
// Parameters received from the request should overwrite any parameters received from SDNC
if (vnfParamsMap != null) {
for (Map.Entry entry : vnfParamsMap.entrySet()) {
String vnfKey = entry.getKey()
String vnfValue = entry.getValue()
paramsMap.put("$vnfKey", "$vnfValue")
}
}
StringBuilder sbParams = new StringBuilder()
def vfModuleParams = ""
for (Map.Entry entry : paramsMap.entrySet()) {
String paramsXml
String paramName = entry.getKey()
String paramValue = entry.getValue()
paramsXml =
"""
${MsoUtils.xmlEscape(paramName)}
${MsoUtils.xmlEscape(paramValue)}
"""
vfModuleParams = sbParams.append(paramsXml)
}
return vfModuleParams
}
/*
* Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
* for both VNF and VF Module
* and puts them into the format expected by VNF adapter.
* @param vnfParamsMap - map of VNF parameters passed in the request body
* @param vnfSdncGetResponse - response string from SDNC GET VNF topology request
* @param vfmoduleSdncGetResponse - response string from SDNC GET VF Module topology request
* @param vnfId
* @param vnfName
* @param vfModuleId
* @param vfModuleName
* @param vfModuleIndex - can be null
* @return a String of key/value entries for vfModuleParams
*/
protected String buildVfModuleParamsFromCombinedTopologies(Map vnfParamsMap, String vnfSdncGetResponse, String vfmoduleSdncGetResponse, String vnfId, String vnfName,
String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
// Set up initial parameters
Map paramsMap = new HashMap()
if (vfModuleIndex != null) {
paramsMap.put("vf_module_index", "${vfModuleIndex}")
}
// Add-on data
paramsMap.put("vnf_id", "${vnfId}")
paramsMap.put("vnf_name", "${vnfName}")
paramsMap.put("vf_module_id", "${vfModuleId}")
paramsMap.put("vf_module_name", "${vfModuleName}")
paramsMap.put("environment_context","${environmentContext}")
paramsMap.put("workload_context", "${workloadContext}")
//Get SDNC Response Data for VNF
String vnfData = utils.getNodeXml(vnfSdncGetResponse, "response-data")
String vnfTopology = utils.getNodeXml(vnfData, "vnf-topology")
vnfTopology = utils.removeXmlPreamble(vnfTopology)
vnfTopology = utils.removeXmlNamespaces(vnfTopology)
InputSource sourceVnf = new InputSource(new StringReader(vnfData));
DocumentBuilderFactory docFactoryVnf = DocumentBuilderFactory.newInstance();
docFactoryVnf.setNamespaceAware(true)
DocumentBuilder docBuilderVnf = docFactoryVnf.newDocumentBuilder()
Document responseXmlVnf = docBuilderVnf.parse(sourceVnf)
// Availability Zones Data
NodeList aZonesList = responseXmlVnf.getElementsByTagNameNS("*", "availability-zones")
String aZonePosition = "0"
for (int z = 0; z < aZonesList.getLength(); z++) {
Node node = aZonesList.item(z)
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node
String aZoneValue = utils.getElementText(eElement, "availability-zone")
aZonePosition = z.toString()
paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
}
}
//Get SDNC Response Data for VF Module
String vfModuleData = utils.getNodeXml(vfmoduleSdncGetResponse, "response-data")
String vfModuleTopology = utils.getNodeXml(vfModuleData, "vf-module-topology")
vfModuleTopology = utils.removeXmlPreamble(vfModuleTopology)
vfModuleTopology = utils.removeXmlNamespaces(vfModuleTopology)
String vfModuleTopologyIdentifier = utils.getNodeXml(vfModuleTopology, "vf-module-topology-identifier")
InputSource sourceVfModule = new InputSource(new StringReader(vfModuleData));
DocumentBuilderFactory docFactoryVfModule = DocumentBuilderFactory.newInstance();
docFactoryVfModule.setNamespaceAware(true)
DocumentBuilder docBuilderVfModule = docFactoryVfModule.newDocumentBuilder()
Document responseXmlVfModule = docBuilderVfModule.parse(sourceVfModule)
// Map of network-roles and network-tags from vm-networks
NodeList vmNetworksListGlobal = responseXmlVfModule.getElementsByTagNameNS("*", "vm-networks")
Map networkRoleMap = new HashMap()
for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
Node nodeNetworkKey = vmNetworksListGlobal.item(n)
if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
Element eElementNetworkKey = (Element) nodeNetworkKey
String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
if (networkRoleValue.isEmpty()) {
networkRoleValue = networkRole
}
networkRoleMap.put(networkRole, networkRoleValue)
}
}
// VNF Networks Data
StringBuilder sbNet = new StringBuilder()
NodeList vnfNetworkList = responseXmlVnf.getElementsByTagNameNS("*", "vnf-networks")
for (int x = 0; x < vnfNetworkList.getLength(); x++) {
Node node = vnfNetworkList.item(x)
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node
String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
String networkRole = utils.getElementText(eElement, "network-role")
if (vnfNetworkKey.isEmpty()) {
vnfNetworkKey = networkRoleMap.get(networkRole)
if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
vnfNetworkKey = networkRole
}
}
String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
StringBuffer sriovFilterBuf = new StringBuffer()
String values = ""
for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
Node node1 = sriovVlanFilterList.item(i)
if (node1.getNodeType() == Node.ELEMENT_NODE) {
Element eElement1 = (Element) node1
String value = utils.getElementText(eElement1, "sriov-vlan-filter")
if (i != sriovVlanFilterList.getLength() - 1) {
values = sriovFilterBuf.append(value + ",")
}
else {
values = sriovFilterBuf.append(value);
}
}
}
if (!values.isEmpty()) {
paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
}
}
}
// VMS Data
def key
def value
def networkKey
def networkValue
def floatingIPKey
def floatingIPKeyValue
def floatingIPV6Key
def floatingIPV6KeyValue
StringBuilder sb = new StringBuilder()
NodeList vmsList = responseXmlVfModule.getElementsByTagNameNS("*","vm")
for (int x = 0; x < vmsList.getLength(); x++) {
Node node = vmsList.item(x)
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node
key = utils.getElementText(eElement, "vm-type")
String values
String position = "0"
StringBuilder sb1 = new StringBuilder()
NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
for(int i = 0; i < valueList.getLength(); i++){
Node node1 = valueList.item(i)
if (node1.getNodeType() == Node.ELEMENT_NODE) {
Element eElement1 = (Element) node1
value = utils.getElementText(eElement1, "vm-name")
if (i != valueList.getLength() - 1) {
values = sb1.append(value + ",")
}
else {
values = sb1.append(value);
}
position = i.toString()
paramsMap.put("${key}_name_${position}", "${value}")
}
}
for(int n = 0; n < vmNetworksList.getLength(); n++){
String floatingIpKeyValueStr = ""
String floatingIpV6KeyValueStr = ""
Node nodeNetworkKey = vmNetworksList.item(n)
if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
Element eElementNetworkKey = (Element) nodeNetworkKey
String ipAddressValues
String ipV6AddressValues
String networkPosition = "0"
StringBuilder sb2 = new StringBuilder()
StringBuilder sb3 = new StringBuilder()
StringBuilder sb4 = new StringBuilder()
networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
if (networkKey.isEmpty()) {
networkKey = utils.getElementText(eElementNetworkKey, "network-role")
}
floatingIPKey = key + '_' + networkKey + '_floating_ip'
floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
if(!floatingIPKeyValue.isEmpty()){
paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
}
floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
if(!floatingIPV6KeyValue.isEmpty()){
paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
}
NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
for(int a = 0; a < networkIpsList.getLength(); a++){
Node ipAddress = networkIpsList.item(a)
if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
Element eElementIpAddress = (Element) ipAddress
String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
if (a != networkIpsList.getLength() - 1) {
ipAddressValues = sb2.append(ipAddressValue + ",")
}
else {
ipAddressValues = sb2.append(ipAddressValue);
}
networkPosition = a.toString()
paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
}
}
paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
String interfaceRoutePrefixValues = sb3.append("[")
for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
}
if (a != interfaceRoutePrefixesList.getLength() - 1) {
interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
}
else {
interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
}
}
}
interfaceRoutePrefixValues = sb3.append("]")
if (interfaceRoutePrefixesList.getLength() > 0) {
paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
}
NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
for(int a = 0; a < networkIpsV6List.getLength(); a++){
Node ipV6Address = networkIpsV6List.item(a)
if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
Element eElementIpV6Address = (Element) ipV6Address
String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
if (a != networkIpsV6List.getLength() - 1) {
ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
}
else {
ipV6AddressValues = sb4.append(ipV6AddressValue);
}
networkPosition = a.toString()
paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
}
}
paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
}
}
paramsMap.put("${key}_names", "${values}")
}
}
//SDNC Response Params
List sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
String vnfParamsChildNodes = utils.getChildNodes(vnfData, "param")
if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
// No SDNC params for VNF
}else{
NodeList paramsList = responseXmlVnf.getElementsByTagNameNS("*", "param")
for (int z = 0; z < paramsList.getLength(); z++) {
Node node = paramsList.item(z)
Element eElement = (Element) node
String vnfParameterName = utils.getElementText(eElement, "name")
if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
String vnfParameterValue = utils.getElementText(eElement, "value")
paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
}
}
}
String vfModuleParamsChildNodes = utils.getChildNodes(vfModuleData, "param")
if(vfModuleParamsChildNodes == null || vfModuleParamsChildNodes.length() < 1){
// No SDNC params for VF Module
}else{
NodeList paramsList = responseXmlVfModule.getElementsByTagNameNS("*", "param")
for (int z = 0; z < paramsList.getLength(); z++) {
Node node = paramsList.item(z)
Element eElement = (Element) node
String vnfParameterName = utils.getElementText(eElement, "name")
if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
String vnfParameterValue = utils.getElementText(eElement, "value")
paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
}
}
}
// Parameters received from the request should overwrite any parameters received from SDNC
if (vnfParamsMap != null) {
for (Map.Entry entry : vnfParamsMap.entrySet()) {
String vnfKey = entry.getKey()
String vnfValue = entry.getValue()
paramsMap.put("$vnfKey", "$vnfValue")
}
}
StringBuilder sbParams = new StringBuilder()
def vfModuleParams = ""
for (Map.Entry entry : paramsMap.entrySet()) {
String paramsXml
String paramName = entry.getKey()
String paramValue = entry.getValue()
paramsXml =
"""
${MsoUtils.xmlEscape(paramName)}
${MsoUtils.xmlEscape(paramValue)}
"""
vfModuleParams = sbParams.append(paramsXml)
}
return vfModuleParams
}
/*
* VBNG specific method that parses VNF parameters passed in on the
* incoming requests and SDNC parameters returned from SDNC get response
* and puts them into the format expected by VNF adapter.
* @param vnfParamsMap - map of VNF parameters passed in the request body
* @param sdncGetResponse - response string from SDNC GET topology request
* @param vnfId
* @param vnfName
* @param vfModuleId
* @param vfModuleName
* @return a String of key/value entries for vfModuleParams
*/
protected String buildVfModuleParamsVbng(String vnfParams, String sdncGetResponse, String vnfId, String vnfName,
String vfModuleId, String vfModuleName) {
//Get SDNC Response Data
String data = utils.getNodeXml(sdncGetResponse, "response-data")
// Add-on data
String vnfInfo =
"""
vnf_id
${MsoUtils.xmlEscape(vnfId)}
vnf_name
${MsoUtils.xmlEscape(vnfName)}
vf_module_id
${MsoUtils.xmlEscape(vfModuleId)}
vf_module_name
${MsoUtils.xmlEscape(vfModuleName)}
"""
logger.debug("vnfInfo: " + vnfInfo)
InputSource source = new InputSource(new StringReader(data));
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true)
DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
Document responseXml = docBuilder.parse(source)
// Availability Zones Data
String aZones = ""
StringBuilder sbAZone = new StringBuilder()
NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
String aZonePosition = "0"
for (int z = 0; z < aZonesList.getLength(); z++) {
Node node = aZonesList.item(z)
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node
String aZoneValue = utils.getElementText(eElement, "availability-zone")
aZonePosition = z.toString()
String aZoneXml =
"""
availability_zone_${MsoUtils.xmlEscape(aZonePosition)}
${MsoUtils.xmlEscape(aZoneValue)}
"""
aZones = sbAZone.append(aZoneXml)
}
}
// Map of network-roles and network-tags from vm-networks
NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
Map networkRoleMap = new HashMap()
for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
Node nodeNetworkKey = vmNetworksListGlobal.item(n)
if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
Element eElementNetworkKey = (Element) nodeNetworkKey
String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
if (networkRoleValue.isEmpty()) {
networkRoleValue = networkRole
}
networkRoleMap.put(networkRole, networkRoleValue)
}
}
// VNF Networks Data
String vnfNetworkNetId = ""
String vnfNetworkNetName = ""
String vnfNetworkSubNetId = ""
String vnfNetworkV6SubNetId = ""
String vnfNetworkNetFqdn = ""
String vnfNetworksSriovVlanFilters = ""
StringBuilder sbNet = new StringBuilder()
StringBuilder sbNet2 = new StringBuilder()
StringBuilder sbNet3 = new StringBuilder()
StringBuilder sbNet4 = new StringBuilder()
StringBuilder sbNet5 = new StringBuilder()
StringBuilder sbNet6 = new StringBuilder()
NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
for (int x = 0; x < vnfNetworkList.getLength(); x++) {
Node node = vnfNetworkList.item(x)
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node
String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
String networkRole = utils.getElementText(eElement, "network-role")
if (vnfNetworkKey.isEmpty()) {
vnfNetworkKey = networkRoleMap.get(networkRole)
if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
vnfNetworkKey = networkRole
}
}
String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
String vnfNetworkNetIdXml =
"""
${MsoUtils.xmlEscape(vnfNetworkKey)}_net_id
${MsoUtils.xmlEscape(vnfNetworkNeutronIdValue)}
"""
vnfNetworkNetId = sbNet.append(vnfNetworkNetIdXml)
String vnfNetworkNetNameXml =
"""
${MsoUtils.xmlEscape(vnfNetworkKey)}_net_name
${MsoUtils.xmlEscape(vnfNetworkNetNameValue)}
"""
vnfNetworkNetName = sbNet2.append(vnfNetworkNetNameXml)
String vnfNetworkSubNetIdXml =
"""
${MsoUtils.xmlEscape(vnfNetworkKey)}_subnet_id
${MsoUtils.xmlEscape(vnfNetworkSubNetIdValue)}
"""
vnfNetworkSubNetId = sbNet3.append(vnfNetworkSubNetIdXml)
String vnfNetworkV6SubNetIdXml =
"""
${MsoUtils.xmlEscape(vnfNetworkKey)}_v6_subnet_id
${MsoUtils.xmlEscape(vnfNetworkV6SubNetIdValue)}
"""
vnfNetworkV6SubNetId = sbNet5.append(vnfNetworkV6SubNetIdXml)
String vnfNetworkNetFqdnXml =
"""
${MsoUtils.xmlEscape(vnfNetworkKey)}_net_fqdn
${MsoUtils.xmlEscape(vnfNetworkNetFqdnValue)}
"""
vnfNetworkNetFqdn = sbNet4.append(vnfNetworkNetFqdnXml)
NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
StringBuffer sriovFilterBuf = new StringBuffer()
String values = ""
for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
Node node1 = sriovVlanFilterList.item(i)
if (node1.getNodeType() == Node.ELEMENT_NODE) {
Element eElement1 = (Element) node1
String value = utils.getElementText(eElement1, "sriov-vlan-filter")
if (i != sriovVlanFilterList.getLength() - 1) {
values = sriovFilterBuf.append(value + ",")
}
else {
values = sriovFilterBuf.append(value);
}
}
}
if (!values.isEmpty()) {
String vnfNetworkSriovVlanFilterXml =
"""
${MsoUtils.xmlEscape(vnfNetworkKey)}_ATT_VF_VLAN_FILTER
${MsoUtils.xmlEscape(values)}
"""
vnfNetworksSriovVlanFilters = sbNet6.append(vnfNetworkSriovVlanFilterXml)
}
}
}
// VNF-VMS Data
String vnfVMS = ""
String vnfVMSPositions = ""
String vmNetworks = ""
String vmNetworksPositions = ""
String vmNetworksPositionsV6 = ""
String interfaceRoutePrefixes = ""
def key
def value
def networkKey
def networkValue
def floatingIPKey
def floatingIPKeyValue
def floatingIPV6Key
def floatingIPV6KeyValue
StringBuilder sb = new StringBuilder()
StringBuilder sbPositions = new StringBuilder()
StringBuilder sbVmNetworks = new StringBuilder()
StringBuilder sbNetworksPositions = new StringBuilder()
StringBuilder sbInterfaceRoutePrefixes = new StringBuilder()
StringBuilder sbNetworksPositionsV6 = new StringBuilder()
NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
for (int x = 0; x < vmsList.getLength(); x++) {
Node node = vmsList.item(x)
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node
key = utils.getElementText(eElement, "vm-type")
String values
String position = "0"
StringBuilder sb1 = new StringBuilder()
NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
for(int i = 0; i < valueList.getLength(); i++){
Node node1 = valueList.item(i)
if (node1.getNodeType() == Node.ELEMENT_NODE) {
Element eElement1 = (Element) node1
value = utils.getElementText(eElement1, "vm-name")
if (i != valueList.getLength() - 1) {
values = sb1.append(value + ",")
}
else {
values = sb1.append(value);
}
position = i.toString()
String vnfPositionXml =
"""
${MsoUtils.xmlEscape(key)}_name_${MsoUtils.xmlEscape(position)}
${MsoUtils.xmlEscape(value)}
"""
nfVMSPositions = sbPositions.append(vnfPositionXml)
}
}
for(int n = 0; n < vmNetworksList.getLength(); n++){
String floatingIpKeyValueStr = ""
String floatingIpV6KeyValueStr = ""
Node nodeNetworkKey = vmNetworksList.item(n)
if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
Element eElementNetworkKey = (Element) nodeNetworkKey
String ipAddressValues
String ipV6AddressValues
String networkPosition = "0"
StringBuilder sb2 = new StringBuilder()
StringBuilder sb3 = new StringBuilder()
StringBuilder sb4 = new StringBuilder()
networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
if (networkKey.isEmpty()) {
networkKey = utils.getElementText(eElementNetworkKey, "network-role")
}
floatingIPKey = key + '_' + networkKey + '_floating_ip'
floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
if(!floatingIPKeyValue.isEmpty()){
floatingIpKeyValueStr = """
$floatingIPKey
$floatingIPKeyValue
"""
}
floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
if(!floatingIPV6KeyValue.isEmpty()){
floatingIpV6KeyValueStr = """
$floatingIPV6Key
$floatingIPV6KeyValue
"""
}
NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
for(int a = 0; a < networkIpsList.getLength(); a++){
Node ipAddress = networkIpsList.item(a)
if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
Element eElementIpAddress = (Element) ipAddress
String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
if (a != networkIpsList.getLength() - 1) {
ipAddressValues = sb2.append(ipAddressValue + ",")
}
else {
ipAddressValues = sb2.append(ipAddressValue);
}
networkPosition = a.toString()
String vmNetworksPositionsXml =
"""
${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ip_${MsoUtils.xmlEscape(networkPosition)}
${MsoUtils.xmlEscape(ipAddressValue)}
"""
vmNetworksPositions = sbNetworksPositions.append(vmNetworksPositionsXml)
}
}
vmNetworksPositions = sbNetworksPositions.append(floatingIpKeyValueStr).append(floatingIpV6KeyValueStr)
String vmNetworksXml =
"""
${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ips
${MsoUtils.xmlEscape(ipAddressValues)}
"""
vmNetworks = sbVmNetworks.append(vmNetworksXml)
NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
String interfaceRoutePrefixValues = sb3.append("[")
for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
}
if (a != interfaceRoutePrefixesList.getLength() - 1) {
interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
}
else {
interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
}
}
}
interfaceRoutePrefixValues = sb3.append("]")
if (interfaceRoutePrefixesList.getLength() > 0) {
String interfaceRoutePrefixesXml =
"""
${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_route_prefixes
${MsoUtils.xmlEscape(interfaceRoutePrefixValues)}
"""
interfaceRoutePrefixes = sbInterfaceRoutePrefixes.append(interfaceRoutePrefixesXml)
}
NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
for(int a = 0; a < networkIpsV6List.getLength(); a++){
Node ipV6Address = networkIpsV6List.item(a)
if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
Element eElementIpV6Address = (Element) ipV6Address
String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
if (a != networkIpsV6List.getLength() - 1) {
ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
}
else {
ipV6AddressValues = sb4.append(ipV6AddressValue);
}
networkPosition = a.toString()
String vmNetworksPositionsV6Xml =
"""
${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ip_${MsoUtils.xmlEscape(networkPosition)}
${MsoUtils.xmlEscape(ipV6AddressValue)}
"""
vmNetworksPositionsV6 = sbNetworksPositionsV6.append(vmNetworksPositionsV6Xml)
}
}
String vmNetworksV6Xml =
"""
${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ips
${MsoUtils.xmlEscape(ipV6AddressValues)}
"""
vmNetworks = sbVmNetworks.append(vmNetworksV6Xml)
}
}
String vnfXml =
"""
${MsoUtils.xmlEscape(key)}_names
${MsoUtils.xmlEscape(values)}
"""
vnfVMS = sb.append(vnfXml)
}
}
//SDNC Response Params
String sdncResponseParams = ""
List sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
// No SDNC params
}else{
NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
for (int z = 0; z < paramsList.getLength(); z++) {
Node node = paramsList.item(z)
Element eElement = (Element) node
String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
String paraEntry =
"""
${MsoUtils.xmlEscape(vnfParameterName)}
${MsoUtils.xmlEscape(vnfParameterValue)}
"""
sdncResponseParams = sb.append(paraEntry)
}
}
}
def vfModuleParams = """
${vnfInfo}
${aZones}
${vnfNetworkNetId}
${vnfNetworkNetName}
${vnfNetworkSubNetId}
${vnfNetworkV6SubNetId}
${vnfNetworkNetFqdn}
${vnfNetworksSriovVlanFilters}
${vnfVMS}
${vnfVMSPositions}
${vmNetworks}
${vmNetworksPositions}
${vmNetworksPositionsV6}
${interfaceRoutePrefixes}
${vnfParams}
${sdncResponseParams}"""
return vfModuleParams
}
}