aboutsummaryrefslogtreecommitdiffstats
path: root/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/ConfirmVolumeGroupName.groovy
blob: 0a6f251653e5d95dc9e567898bb8d1eb54547a83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*-
 * ============LICENSE_START=======================================================
 * OPENECOMP - MSO
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * 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.openecomp.mso.bpmn.common.scripts
import org.camunda.bpm.engine.runtime.Execution
import org.openecomp.mso.rest.APIResponse


public class ConfirmVolumeGroupName extends AbstractServiceTaskProcessor{
	
	def Prefix="CVGN_"
	
	public void initProcessVariables(Execution execution) {
		execution.setVariable("prefix",Prefix)
		execution.setVariable("CVGN_volumeGroupId",null)
		execution.setVariable("CVGN_volumeGroupName",null)
		execution.setVariable("CVGN_aicCloudRegion", null)
		execution.setVariable("CVGN_volumeGroupGetEndpoint",null)
						
		// ConfirmVolumeGroupName workflow response variable placeholders
		execution.setVariable("CVGN_volumeGroupNameMatches", false)
		execution.setVariable("CVGN_queryVolumeGroupResponseCode",null)
		execution.setVariable("CVGN_queryVolumeGroupResponse","")
		execution.setVariable("CVGN_ResponseCode",null)
//		execution.setVariable("CVGN_ErrorResponse","")
		execution.setVariable("RollbackData", null)
	}	
	
	// store the incoming data in the flow Execution
	public void preProcessRequest(Execution execution) {
		def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
		def volumeGroupId = execution.getVariable("ConfirmVolumeGroupName_volumeGroupId")
		def volumeGroupName= execution.getVariable("ConfirmVolumeGroupName_volumeGroupName")
		def aicCloudRegion = execution.getVariable("ConfirmVolumeGroupName_aicCloudRegion")
		
		initProcessVariables(execution)
		execution.setVariable("CVGN_volumeGroupId", volumeGroupId)
		execution.setVariable("CVGN_volumeGroupName", volumeGroupName)
		execution.setVariable("CVGN_aicCloudRegion", aicCloudRegion)
		
		AaiUtil aaiUriUtil = new AaiUtil(this)
		def aai_uri = aaiUriUtil.getCloudInfrastructureCloudRegionUri(execution)
		logDebug('AAI URI is: ' + aai_uri, isDebugLogEnabled)
		utils.logAudit("AAI URI: " + aai_uri)
		execution.setVariable("CVGN_volumeGroupGetEndpoint","${aai_uri}/${aicCloudRegion}/volume-groups/volume-group/" +
				volumeGroupId)		
	}
	
	// send a GET request to AA&I to retrieve the Volume information based on volume-group-id
	// expect a 200 response with the information in the response body or a 404 if the volume group id does not exist
	public void queryAAIForVolumeGroupId(Execution execution) {
		def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
		def endPoint = execution.getVariable("URN_aai_endpoint") + execution.getVariable("CVGN_volumeGroupGetEndpoint")
		
		try {
			logDebug("invoking GET call to AAI endpoint :"+System.lineSeparator()+endPoint,isDebugLogEnabled)
			utils.log("DEBUG","queryAAIForVolumeGroupId() endpoint-" + endPoint, isDebugLogEnabled)
			utils.logAudit("ConfirmVolumeGroup sending GET call to AAI Endpoint: " + endPoint)
			
			AaiUtil aaiUtil = new AaiUtil(this)
			APIResponse response = aaiUtil.executeAAIGetCall(execution, endPoint)
			def responseData = response.getResponseBodyAsString()
			def responseStatusCode = response.getStatusCode()
			execution.setVariable("CVGN_queryVolumeGroupResponseCode", responseStatusCode)
			execution.setVariable("CVGN_queryVolumeGroupResponse", responseData)
			
			utils.logAudit("Response code:" + responseStatusCode)
			utils.logAudit("Response:" + responseData)
			logDebug("Response code:" + responseStatusCode, isDebugLogEnabled)
			logDebug("Response:" + System.lineSeparator()+responseData,isDebugLogEnabled)
		} catch (Exception ex) {
			ex.printStackTrace()
			logDebug("Exception occurred while executing AAI GET:" + ex.getMessage(),isDebugLogEnabled)
			execution.setVariable("CVGN_queryVolumeGroupResponseCode", 500)
			execution.setVariable("CVGN_queryVolumeGroupResponse", "AAI GET Failed:" + ex.getMessage())
		}
	}
	
	// process the result from queryAAIVolumeGroupId()
	
	public void checkAAIQueryResult(Execution execution) {
		def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
		def result = execution.getVariable("CVGN_queryVolumeGroupResponse")
		
		if (execution.getVariable("CVGN_queryVolumeGroupResponseCode") == 404) {
			logDebug('volumeGroupId does not exist in AAI', isDebugLogEnabled)
		}
		else if (execution.getVariable("CVGN_queryVolumeGroupResponseCode") == 200) {
			logDebug("volumeGroupId exists in AAI", isDebugLogEnabled)	
		}
		def xml = execution.getVariable("CVGN_queryVolumeGroupResponse")
		def actualVolumeGroupName = ""
		if (utils.nodeExists(xml, "volume-group-name")) {
			actualVolumeGroupName = utils.getNodeText(xml, "volume-group-name")
		}
		execution.setVariable("CVGN_volumeGroupNameMatches", false)
		def volumeGroupName = execution.getVariable("CVGN_volumeGroupName")
				
		if (volumeGroupName.equals(actualVolumeGroupName)) {
			logDebug('Volume Group Name Matches AAI records', isDebugLogEnabled)				
			execution.setVariable("CVGN_volumeGroupNameMatches", true)
		}				
	}
	
	
	// generates a WorkflowException if the A&AI query returns a response code other than 200/404
	public void handleAAIQueryFailure(Execution execution) {
		def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
		
		logError("Error occurred attempting to query AAI, Response Code " +
			execution.getVariable("CVGN_queryVolumeGroupResponseCode") + ", Error Response " +
			execution.getVariable("CVGN_queryVolumeGroupResponse"))
		//String processKey = getProcessKey(execution);
		//WorkflowException exception = new WorkflowException(processKey, 5000,
			//execution.getVariable("CVGN_queryVolumeGroupResponse"))
		//execution.setVariable("WorkflowException", exception)
	}
	
	// generates a WorkflowException if the volume group name does not match AAI record for this volume group
	public void handleVolumeGroupNameNoMatch(Execution execution) {
		def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
		
		def errorNotAssociated = "Error occurred - volume group id " + execution.getVariable("CVGN_volumeGroupId") +
			" is not associated with  " + execution.getVariable("CVGN_volumeGroupName")
		logError(errorNotAssociated)
		createWorkflowException(execution, 1002, errorNotAssociated)
		//String processKey = getProcessKey(execution);
		//WorkflowException exception = new WorkflowException(processKey, 1002,
		//	errorNotAssociated)
		//execution.setVariable("WorkflowException", exception)
	}
	
	// sends a successful WorkflowResponse
	public void reportSuccess(Execution execution) {
		def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
		logDebug("Sending 200 back to the caller", isDebugLogEnabled)
		def responseXML = ""
		execution.setVariable("WorkflowResponse", responseXML)
	}
}