2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.mso.bpmn.infrastructure.scripts
22 import javax.xml.parsers.DocumentBuilder
23 import javax.xml.parsers.DocumentBuilderFactory
25 import org.camunda.bpm.engine.delegate.BpmnError
26 import org.camunda.bpm.engine.runtime.Execution
27 import org.openecomp.mso.bpmn.common.scripts.AaiUtil
28 import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
29 import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
30 import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils
31 import org.openecomp.mso.bpmn.common.scripts.VfModule
32 import org.openecomp.mso.bpmn.core.WorkflowException
33 import org.openecomp.mso.bpmn.core.json.JsonUtils
34 import org.openecomp.mso.rest.APIResponse
35 import org.springframework.web.util.UriUtils
36 import org.w3c.dom.Document
37 import org.w3c.dom.Element
38 import org.xml.sax.InputSource
41 /* Subflow for Delete VF Module. When no DoDeleteVfModuleRequest is specified on input,
42 * functions as a building block subflow
44 * Inputs for building block interface:
46 * @param - isDebugLogEnabled
49 * @param - serviceInstanceId
50 * @param - vfModuleName O
51 * @param - vfModuleModelInfo
52 * @param - cloudConfiguration*
53 * @param - sdncVersion ("1610")
56 * @param - WorkflowException
59 public class DoDeleteVfModule extends AbstractServiceTaskProcessor{
61 def Prefix="DoDVfMod_"
63 ExceptionUtil exceptionUtil = new ExceptionUtil()
64 JsonUtils jsonUtil = new JsonUtils()
66 public void initProcessVariables(Execution execution) {
67 execution.setVariable("prefix",Prefix)
68 execution.setVariable("DoDVfMod_contrailNetworkPolicyFqdnList", null)
69 execution.setVariable("DoDVfMod_oamManagementV4Address", null)
70 execution.setVariable("DoDVfMod_oamManagementV6Address", null)
74 // parse the incoming DELETE_VF_MODULE request for the Generic Vnf and Vf Module Ids
75 // and formulate the outgoing request for PrepareUpdateAAIVfModuleRequest
76 public void preProcessRequest(Execution execution) {
77 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
78 initProcessVariables(execution)
81 def xml = execution.getVariable("DoDeleteVfModuleRequest")
83 String vfModuleId = ""
85 if (xml == null || xml.isEmpty()) {
86 // Building Block-type request
88 // Set mso-request-id to request-id for VNF Adapter interface
89 String requestId = execution.getVariable("requestId")
90 execution.setVariable("mso-request-id", requestId)
92 String cloudConfiguration = execution.getVariable("cloudConfiguration")
93 String vfModuleModelInfo = execution.getVariable("vfModuleModelInfo")
94 String tenantId = jsonUtil.getJsonValue(cloudConfiguration, "tenantId")
95 execution.setVariable("tenantId", tenantId)
96 String cloudSiteId = jsonUtil.getJsonValue(cloudConfiguration, "lcpCloudRegionId")
97 execution.setVariable("cloudSiteId", cloudSiteId)
98 // Source is HARDCODED
100 execution.setVariable("source", source)
101 // SrvInstId is hardcoded to empty
102 execution.setVariable("srvInstId", "")
103 // ServiceId is hardcoded to empty
104 execution.setVariable("serviceId", "")
105 String serviceInstanceId = execution.getVariable("serviceInstanceId")
106 vnfId = execution.getVariable("vnfId")
107 vfModuleId = execution.getVariable("vfModuleId")
108 if (serviceInstanceId == null || serviceInstanceId.isEmpty()) {
109 execution.setVariable(Prefix + "serviceInstanceIdToSdnc", vfModuleId)
112 execution.setVariable(Prefix + "serviceInstanceIdToSdnc", serviceInstanceId)
115 def vfModuleModelName = jsonUtil.getJsonValue(vfModuleModelInfo, "modelName")
116 execution.setVariable("vfModuleModelName", vfModuleModelName)
121 utils.logAudit("DoDeleteVfModule Request: " + xml)
123 utils.log("DEBUG", "input request xml: " + xml, isDebugEnabled)
125 vnfId = utils.getNodeText1(xml,"vnf-id")
126 execution.setVariable("vnfId", vnfId)
127 vfModuleId = utils.getNodeText1(xml,"vf-module-id")
128 execution.setVariable("vfModuleId", vfModuleId)
129 def srvInstId = execution.getVariable("mso-service-instance-id")
130 execution.setVariable("srvInstId", srvInstId)
131 String requestId = ""
133 requestId = execution.getVariable("mso-request-id")
134 } catch (Exception ex) {
135 requestId = utils.getNodeText1(xml, "request-id")
137 execution.setVariable("requestId", requestId)
138 String source = utils.getNodeText1(xml, "source")
139 execution.setVariable("source", source)
140 String serviceId = utils.getNodeText1(xml, "service-id")
141 execution.setVariable("serviceId", serviceId)
142 String tenantId = utils.getNodeText1(xml, "tenant-id")
143 execution.setVariable("tenantId", tenantId)
145 String serviceInstanceIdToSdnc = ""
146 if (xml.contains("service-instance-id")) {
147 serviceInstanceIdToSdnc = utils.getNodeText1(xml, "service-instance-id")
149 serviceInstanceIdToSdnc = vfModuleId
151 execution.setVariable(Prefix + "serviceInstanceIdToSdnc", serviceInstanceIdToSdnc)
152 String vfModuleName = utils.getNodeText1(xml, "vf-module-name")
153 execution.setVariable("vfModuleName", vfModuleName)
154 String vfModuleModelName = utils.getNodeText1(xml, "vf-module-model-name")
155 execution.setVariable("vfModuleModelName", vfModuleModelName)
156 String cloudSiteId = utils.getNodeText1(xml, "aic-cloud-region")
157 execution.setVariable("cloudSiteId", cloudSiteId)
160 // formulate the request for PrepareUpdateAAIVfModule
161 String request = """<PrepareUpdateAAIVfModuleRequest>
162 <vnf-id>${vnfId}</vnf-id>
163 <vf-module-id>${vfModuleId}</vf-module-id>
164 <orchestration-status>pending-delete</orchestration-status>
165 </PrepareUpdateAAIVfModuleRequest>""" as String
166 utils.log("DEBUG", "PrepareUpdateAAIVfModuleRequest :" + request, isDebugEnabled)
167 utils.logAudit("UpdateAAIVfModule Request: " + request)
168 execution.setVariable("PrepareUpdateAAIVfModuleRequest", request)
169 execution.setVariable("vfModuleFromAAI", null)
173 exceptionUtil.buildAndThrowWorkflowException(execution, 2000, "Internal Error encountered in PreProcess method!")
177 // build a SDNC vnf-topology-operation request for the specified action
178 // (note: the action passed is expected to be 'changedelete' or 'delete')
179 public void prepSDNCAdapterRequest(Execution execution, String action) {
180 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
182 def srvInstId = execution.getVariable("srvInstId")
183 def callbackUrl = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
184 String requestId = execution.getVariable("requestId")
185 String source = execution.getVariable("source")
186 String serviceId = execution.getVariable("serviceId")
187 String vnfId = execution.getVariable("vnfId")
188 String tenantId = execution.getVariable("tenantId")
189 String vfModuleId = execution.getVariable("vfModuleId")
190 String serviceInstanceIdToSdnc = execution.getVariable(Prefix + "serviceInstanceIdToSdnc")
191 String vfModuleName = execution.getVariable("vfModuleName")
192 // Get vfModuleName from AAI response if it was not specified on the request
193 if (vfModuleName == null || vfModuleName.isEmpty()) {
194 if (execution.getVariable("vfModuleFromAAI") != null) {
195 VfModule vfModuleFromAAI = execution.getVariable("vfModuleFromAAI")
196 vfModuleName = vfModuleFromAAI.getElementText("vf-module-name")
199 String vfModuleModelName = execution.getVariable("vfModuleModelName")
200 String cloudSiteId = execution.getVariable("cloudSiteId")
201 String request = """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1"
202 xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
203 xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
204 <sdncadapter:RequestHeader>
205 <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId>
206 <sdncadapter:SvcInstanceId>${vfModuleId}</sdncadapter:SvcInstanceId>
207 <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction>
208 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
209 <sdncadapter:CallbackUrl>${callbackUrl}</sdncadapter:CallbackUrl>
210 </sdncadapter:RequestHeader>
211 <sdncadapterworkflow:SDNCRequestData>
212 <request-information>
213 <request-id>${requestId}</request-id>
214 <request-action>DisconnectVNFRequest</request-action>
215 <source>${source}</source>
219 </request-information>
220 <service-information>
221 <service-id>${serviceId}</service-id>
222 <service-type>${serviceId}</service-type>
223 <service-instance-id>${serviceInstanceIdToSdnc}</service-instance-id>
224 <subscriber-name>notsurewecare</subscriber-name>
225 </service-information>
226 <vnf-request-information>
227 <vnf-id>${vfModuleId}</vnf-id>
228 <vnf-type>${vfModuleModelName}</vnf-type>
229 <vnf-name>${vfModuleName}</vnf-name>
230 <generic-vnf-id>${vnfId}</generic-vnf-id>
231 <generic-vnf-name></generic-vnf-name>
232 <generic-vnf-type></generic-vnf-type>
233 <aic-cloud-region>${cloudSiteId}</aic-cloud-region>
234 <tenant>${tenantId}</tenant>
235 </vnf-request-information>
236 </sdncadapterworkflow:SDNCRequestData>
237 </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
239 utils.log("DEBUG", "sdncAdapterWorkflowRequest: " + request, isDebugEnabled)
240 utils.logAudit("DoDeleteVfModule - SDNCAdapterWorkflowRequest: " + request)
241 execution.setVariable("sdncAdapterWorkflowRequest", request)
244 // parse the incoming DELETE_VF_MODULE request
245 // and formulate the outgoing VnfAdapterDeleteV1 request
246 public void prepVNFAdapterRequest(Execution execution) {
247 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
248 def requestId = UUID.randomUUID().toString()
249 def origRequestId = execution.getVariable('requestId')
250 def srvInstId = execution.getVariable("serviceInstanceId")
251 def aicCloudRegion = execution.getVariable("cloudSiteId")
252 def vnfId = execution.getVariable("vnfId")
253 def vfModuleId = execution.getVariable("vfModuleId")
254 def vfModuleStackId = execution.getVariable('DoDVfMod_heatStackId')
255 def tenantId = execution.getVariable("tenantId")
256 def messageId = execution.getVariable('requestId') + '-' +
257 System.currentTimeMillis()
258 def notificationUrl = createCallbackURL(execution, "VNFAResponse", messageId)
259 def useQualifiedHostName = execution.getVariable("URN_mso_use_qualified_host")
260 if ('true'.equals(useQualifiedHostName)) {
261 notificationUrl = utils.getQualifiedHostNameForCallback(notificationUrl)
265 <deleteVfModuleRequest>
266 <cloudSiteId>${aicCloudRegion}</cloudSiteId>
267 <tenantId>${tenantId}</tenantId>
268 <vnfId>${vnfId}</vnfId>
269 <vfModuleId>${vfModuleId}</vfModuleId>
270 <vfModuleStackId>${vfModuleStackId}</vfModuleStackId>
271 <skipAAI>true</skipAAI>
273 <requestId>${origRequestId}</requestId>
274 <serviceInstanceId>${srvInstId}</serviceInstanceId>
276 <messageId>${messageId}</messageId>
277 <notificationUrl>${notificationUrl}</notificationUrl>
278 </deleteVfModuleRequest>
281 utils.log("DEBUG", "vnfAdapterRestV1Request: " + request, isDebugEnabled)
282 utils.logAudit("deleteVfModuleRequest: " + request)
283 execution.setVariable("vnfAdapterRestV1Request", request)
286 // parse the incoming DELETE_VF_MODULE request
287 // and formulate the outgoing UpdateAAIVfModuleRequest request
288 public void prepUpdateAAIVfModule(Execution execution) {
289 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
290 def vnfId = execution.getVariable("vnfId")
291 def vfModuleId = execution.getVariable("vfModuleId")
292 // formulate the request for UpdateAAIVfModule
293 String request = """<UpdateAAIVfModuleRequest>
294 <vnf-id>${vnfId}</vnf-id>
295 <vf-module-id>${vfModuleId}</vf-module-id>
296 <heat-stack-id>DELETE</heat-stack-id>
297 <orchestration-status>deleted</orchestration-status>
298 </UpdateAAIVfModuleRequest>""" as String
299 utils.log("DEBUG", "UpdateAAIVfModuleRequest :" + request, isDebugEnabled)
300 utils.logAudit("UpdateAAIVfModuleRequest: " + request)
301 execution.setVariable("UpdateAAIVfModuleRequest", request)
304 // parse the incoming DELETE_VF_MODULE request
305 // and formulate the outgoing DeleteAAIVfModuleRequest request
306 public void prepDeleteAAIVfModule(Execution execution) {
307 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
309 def vnfId = execution.getVariable("vnfId")
310 def vfModuleId = execution.getVariable("vfModuleId")
311 // formulate the request for UpdateAAIVfModule
312 String request = """<DeleteAAIVfModuleRequest>
313 <vnf-id>${vnfId}</vnf-id>
314 <vf-module-id>${vfModuleId}</vf-module-id>
315 </DeleteAAIVfModuleRequest>""" as String
316 utils.log("DEBUG", "DeleteAAIVfModuleRequest :" + request, isDebugEnabled)
317 utils.logAudit("DeleteAAIVfModuleRequest: " + request)
318 execution.setVariable("DeleteAAIVfModuleRequest", request)
321 // generates a WorkflowException if
323 public void handleDoDeleteVfModuleFailure(Execution execution) {
324 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
325 utils.log("ERROR", "AAI error occurred deleting the Generic Vnf: "
326 + execution.getVariable("DoDVfMod_deleteGenericVnfResponse"), isDebugEnabled)
327 String processKey = getProcessKey(execution);
328 WorkflowException exception = new WorkflowException(processKey, 5000,
329 execution.getVariable("DoDVfMod_deleteGenericVnfResponse"))
330 execution.setVariable("WorkflowException", exception)
333 public void sdncValidateResponse(Execution execution, String response){
334 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
335 execution.setVariable("prefix",Prefix)
337 WorkflowException workflowException = execution.getVariable("WorkflowException")
338 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
340 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
341 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
343 if(execution.getVariable(Prefix + 'sdncResponseSuccess') == true){
344 utils.log("DEBUG", "Successfully Validated SDNC Response", isDebugEnabled)
346 throw new BpmnError("MSOWorkflowException")
350 public void postProcessVNFAdapterRequest(Execution execution) {
351 def method = getClass().getSimpleName() + '.postProcessVNFAdapterRequest(' +
352 'execution=' + execution.getId() +
354 def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
355 logDebug('Entered ' + method, isDebugLogEnabled)
356 execution.setVariable("prefix",Prefix)
358 logDebug(" *** STARTED postProcessVNFAdapterRequest Process*** ", isDebugLogEnabled)
360 String vnfResponse = execution.getVariable("DoDVfMod_doDeleteVfModuleResponse")
361 logDebug("VNF Adapter Response is: " + vnfResponse, isDebugLogEnabled)
362 utils.logAudit("deleteVnfAResponse is: \n" + vnfResponse)
364 if(vnfResponse != null){
366 if(vnfResponse.contains("deleteVfModuleResponse")){
367 logDebug("Received a Good Response from VNF Adapter for DELETE_VF_MODULE Call.", isDebugLogEnabled)
368 execution.setVariable("DoDVfMod_vnfVfModuleDeleteCompleted", true)
370 // Parse vnfOutputs for contrail network polcy FQDNs
371 if (vnfResponse.contains("vfModuleOutputs")) {
372 def vfModuleOutputsXml = utils.getNodeXml(vnfResponse, "vfModuleOutputs")
373 InputSource source = new InputSource(new StringReader(vfModuleOutputsXml));
374 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
375 docFactory.setNamespaceAware(true)
376 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
377 Document outputsXml = docBuilder.parse(source)
379 NodeList entries = outputsXml.getElementsByTagNameNS("*", "entry")
380 List contrailNetworkPolicyFqdnList = []
381 for (int i = 0; i< entries.getLength(); i++) {
382 Node node = entries.item(i)
383 if (node.getNodeType() == Node.ELEMENT_NODE) {
384 Element element = (Element) node
385 String key = element.getElementsByTagNameNS("*", "key").item(0).getTextContent()
386 if (key.endsWith("contrail_network_policy_fqdn")) {
387 String contrailNetworkPolicyFqdn = element.getElementsByTagNameNS("*", "value").item(0).getTextContent()
388 logDebug("Obtained contrailNetworkPolicyFqdn: " + contrailNetworkPolicyFqdn, isDebugLogEnabled)
389 contrailNetworkPolicyFqdnList.add(contrailNetworkPolicyFqdn)
391 else if (key.equals("oam_management_v4_address")) {
392 String oamManagementV4Address = element.getElementsByTagNameNS("*", "value").item(0).getTextContent()
393 logDebug("Obtained oamManagementV4Address: " + oamManagementV4Address, isDebugLogEnabled)
394 execution.setVariable(Prefix + "oamManagementV4Address", oamManagementV4Address)
396 else if (key.equals("oam_management_v6_address")) {
397 String oamManagementV6Address = element.getElementsByTagNameNS("*", "value").item(0).getTextContent()
398 logDebug("Obtained oamManagementV6Address: " + oamManagementV6Address, isDebugLogEnabled)
399 execution.setVariable(Prefix + "oamManagementV6Address", oamManagementV6Address)
404 if (!contrailNetworkPolicyFqdnList.isEmpty()) {
405 logDebug("Setting the fqdn list", isDebugLogEnabled)
406 execution.setVariable("DoDVfMod_contrailNetworkPolicyFqdnList", contrailNetworkPolicyFqdnList)
410 logDebug("Received a BAD Response from VNF Adapter for DELETE_VF_MODULE Call.", isDebugLogEnabled)
411 exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "VNF Adapter Error")
414 logDebug("Response from VNF Adapter is Null for DELETE_VF_MODULE Call.", isDebugLogEnabled)
415 exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Empty response from VNF Adapter")
421 logDebug("Internal Error Occured in PostProcess Method", isDebugLogEnabled)
422 exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Internal Error Occured in PostProcess Method")
424 logDebug(" *** COMPLETED postProcessVnfAdapterResponse Process*** ", isDebugLogEnabled)
427 public void deleteNetworkPoliciesFromAAI(Execution execution) {
428 def method = getClass().getSimpleName() + '.deleteNetworkPoliciesFromAAI(' +
429 'execution=' + execution.getId() +
431 def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
432 logDebug('Entered ' + method, isDebugLogEnabled)
433 execution.setVariable("prefix", Prefix)
434 logDebug(" ======== STARTED deleteNetworkPoliciesFromAAI ======== ", isDebugLogEnabled)
438 List fqdnList = execution.getVariable("DoDVfMod_contrailNetworkPolicyFqdnList")
439 if (fqdnList == null) {
440 logDebug("No network policies to delete", isDebugLogEnabled)
443 int fqdnCount = fqdnList.size()
445 execution.setVariable("DoDVfMod_networkPolicyFqdnCount", fqdnCount)
446 logDebug("DoDVfMod_networkPolicyFqdnCount - " + fqdnCount, isDebugLogEnabled)
448 String aai_endpoint = execution.getVariable("URN_aai_endpoint")
449 AaiUtil aaiUriUtil = new AaiUtil(this)
450 String aai_uri = aaiUriUtil.getNetworkPolicyUri(execution)
453 // AII loop call over contrail network policy fqdn list
454 for (i in 0..fqdnCount-1) {
457 String fqdn = fqdnList[i]
459 // Query AAI for this network policy FQDN
461 String queryNetworkPolicyByFqdnAAIRequest = "${aai_endpoint}${aai_uri}?network-policy-fqdn=" + UriUtils.encode(fqdn, "UTF-8")
462 utils.logAudit("AAI request endpoint: " + queryNetworkPolicyByFqdnAAIRequest)
463 logDebug("AAI request endpoint: " + queryNetworkPolicyByFqdnAAIRequest, isDebugLogEnabled)
465 APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryNetworkPolicyByFqdnAAIRequest)
466 int returnCode = response.getStatusCode()
467 execution.setVariable("DCVFM_aaiQueryNetworkPolicyByFqdnReturnCode", returnCode)
468 logDebug(" ***** AAI query network policy Response Code, NetworkPolicy #" + counting + " : " + returnCode, isDebugLogEnabled)
470 String aaiResponseAsString = response.getResponseBodyAsString()
472 if (isOneOf(returnCode, 200, 201)) {
473 logDebug("The return code is: " + returnCode, isDebugLogEnabled)
474 // This network policy FQDN exists in AAI - need to delete it now
475 utils.logAudit(aaiResponseAsString)
476 execution.setVariable("DoDVfMod_queryNetworkPolicyByFqdnAAIResponse", aaiResponseAsString)
477 logDebug("QueryAAINetworkPolicyByFQDN Success REST Response, , NetworkPolicy #" + counting + " : " + "\n" + aaiResponseAsString, isDebugLogEnabled)
478 // Retrieve the network policy id for this FQDN
479 def networkPolicyId = utils.getNodeText1(aaiResponseAsString, "network-policy-id")
480 logDebug("Deleting network-policy with network-policy-id " + networkPolicyId, isDebugLogEnabled)
482 // Retrieve the resource version for this network policy
483 def resourceVersion = utils.getNodeText1(aaiResponseAsString, "resource-version")
484 logDebug("Deleting network-policy with resource-version " + resourceVersion, isDebugLogEnabled)
486 String delNetworkPolicyAAIRequest = "${aai_endpoint}${aai_uri}/" + UriUtils.encode(networkPolicyId, "UTF-8") +
487 "?resource-version=" + UriUtils.encode(resourceVersion, "UTF-8")
488 utils.logAudit("AAI request endpoint: " + delNetworkPolicyAAIRequest)
489 logDebug("AAI request endpoint: " + delNetworkPolicyAAIRequest, isDebugLogEnabled)
491 logDebug("invoking DELETE call to AAI", isDebugLogEnabled)
492 utils.logAudit("Sending DELETE call to AAI with Endpoint /n" + delNetworkPolicyAAIRequest)
493 APIResponse responseDel = aaiUriUtil.executeAAIDeleteCall(execution, delNetworkPolicyAAIRequest)
494 int returnCodeDel = responseDel.getStatusCode()
495 execution.setVariable("DoDVfMod_aaiDeleteNetworkPolicyReturnCode", returnCodeDel)
496 logDebug(" ***** AAI delete network policy Response Code, NetworkPolicy #" + counting + " : " + returnCodeDel, isDebugLogEnabled)
498 if (isOneOf(returnCodeDel, 200, 201, 204)) {
499 logDebug("The return code from deleting network policy is: " + returnCodeDel, isDebugLogEnabled)
500 // This network policy was deleted from AAI successfully
501 logDebug(" DelAAINetworkPolicy Success REST Response, , NetworkPolicy #" + counting + " : ", isDebugLogEnabled)
505 String delErrorMessage = "Unable to delete network-policy to AAI deleteNetworkPoliciesFromAAI - " + returnCodeDel
506 logDebug(delErrorMessage, isDebugLogEnabled)
507 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, delErrorMessage)
509 } else if (returnCode == 404) {
510 // This network policy FQDN is not in AAI. No need to delete.
511 logDebug("The return code is: " + returnCode, isDebugLogEnabled)
512 logDebug("This network policy FQDN is not in AAI: " + fqdn, isDebugLogEnabled)
513 utils.logAudit("Network policy FQDN is not in AAI")
515 if (aaiResponseAsString.contains("RESTFault")) {
516 WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
517 execution.setVariable("WorkflowException", exceptionObject)
518 throw new BpmnError("MSOWorkflowException")
522 String dataErrorMessage = "Unexpected Response from deleteNetworkPoliciesFromAAI - " + returnCode
523 logDebug(dataErrorMessage, isDebugLogEnabled)
524 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
535 logDebug("No contrail network policies to query/create", isDebugLogEnabled)
539 } catch (BpmnError e) {
542 } catch (Exception ex) {
543 String exceptionMessage = "Bpmn error encountered in DoDeletVfModule flow. deleteNetworkPoliciesFromAAI() - " + ex.getMessage()
544 logDebug(exceptionMessage, isDebugLogEnabled)
545 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
551 * Prepare a Request for invoking the UpdateAAIGenericVnf subflow.
553 * @param execution The flow's execution instance.
555 public void prepUpdateAAIGenericVnf(Execution execution) {
556 def method = getClass().getSimpleName() + '.prepUpdateAAIGenericVnf(' +
557 'execution=' + execution.getId() +
559 def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
560 logDebug('Entered ' + method, isDebugLogEnabled)
563 def vnfId = execution.getVariable('vnfId')
564 def oamManagementV4Address = execution.getVariable(Prefix + 'oamManagementV4Address')
565 def oamManagementV6Address = execution.getVariable(Prefix + 'oamManagementV6Address')
566 def ipv4OamAddressElement = ''
567 def managementV6AddressElement = ''
569 if (oamManagementV4Address != null) {
570 ipv4OamAddressElement = '<ipv4-oam-address>' + 'DELETE' + '</ipv4-oam-address>'
573 if (oamManagementV6Address != null) {
574 managementV6AddressElement = '<management-v6-address>' + 'DELETE' + '</management-v6-address>'
578 String updateAAIGenericVnfRequest = """
579 <UpdateAAIGenericVnfRequest>
580 <vnf-id>${vnfId}</vnf-id>
581 ${ipv4OamAddressElement}
582 ${managementV6AddressElement}
583 </UpdateAAIGenericVnfRequest>
585 updateAAIGenericVnfRequest = utils.formatXml(updateAAIGenericVnfRequest)
586 execution.setVariable(Prefix + 'updateAAIGenericVnfRequest', updateAAIGenericVnfRequest)
587 utils.logAudit("updateAAIGenericVnfRequest : " + updateAAIGenericVnfRequest)
588 logDebug('Request for UpdateAAIGenericVnf:\n' + updateAAIGenericVnfRequest, isDebugLogEnabled)
591 logDebug('Exited ' + method, isDebugLogEnabled)
592 } catch (BpmnError e) {
594 } catch (Exception e) {
595 logError('Caught exception in ' + method, e)
596 createWorkflowException(execution, 1002, 'Error in prepUpdateAAIGenericVnf(): ' + e.getMessage())