2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 Huawei Technologies Co., Ltd. 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.onap.so.bpmn.infrastructure.scripts
23 import org.onap.so.bpmn.common.scripts.CatalogDbUtilsFactory
24 import org.onap.so.bpmn.infrastructure.properties.BPMNProperties
25 import org.apache.commons.lang3.StringUtils
26 import org.apache.http.HttpResponse
27 import org.camunda.bpm.engine.delegate.BpmnError
28 import org.camunda.bpm.engine.delegate.DelegateExecution
29 import org.json.JSONObject
30 import org.onap.so.bpmn.common.recipe.BpmnRestClient
31 import org.onap.so.bpmn.common.recipe.ResourceInput
32 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
33 import org.onap.so.bpmn.common.scripts.CatalogDbUtils
34 import org.onap.so.bpmn.common.scripts.ExceptionUtil
35 import org.onap.so.bpmn.core.domain.AllottedResource
36 import org.onap.so.bpmn.core.domain.NetworkResource
37 import org.onap.so.bpmn.core.domain.Resource
38 import org.onap.so.bpmn.core.domain.ServiceDecomposition
39 import org.onap.so.bpmn.core.domain.VnfResource
40 import org.onap.so.bpmn.core.json.JsonUtils
41 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
42 import org.onap.so.logger.MsoLogger
47 * This groovy class supports the <class>DoCreateResources.bpmn</class> process.
50 * @param - msoRequestId
51 * @param - globalSubscriberId - O
52 * @param - subscriptionServiceType - O
53 * @param - serviceInstanceId
54 * @param - serviceInstanceName - O
55 * @param - serviceInputParams (should contain aic_zone for serviceTypes TRANSPORT,ATM)
56 * @param - sdncVersion
58 * @param - addResourceList
61 * @param - WorkflowException
63 public class DoCreateResources extends AbstractServiceTaskProcessor{
64 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoCreateResources.class);
66 ExceptionUtil exceptionUtil = new ExceptionUtil()
67 JsonUtils jsonUtil = new JsonUtils()
68 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
70 public void preProcessRequest(DelegateExecution execution) {
71 msoLogger.trace("preProcessRequest ")
74 List addResourceList = execution.getVariable("addResourceList")
75 if (addResourceList == null) {
76 msg = "Input addResourceList is null"
78 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
80 else if (addResourceList.size() == 0) {
81 msg = "No resource in addResourceList"
84 msoLogger.trace("Exit preProcessRequest ")
87 public void sequenceResoure(DelegateExecution execution) {
88 msoLogger.trace("Start sequenceResoure Process ")
90 String incomingRequest = execution.getVariable("uuiRequest")
91 String serviceModelUuid = jsonUtil.getJsonValue(incomingRequest,"service.serviceUuid")
93 List<Resource> addResourceList = execution.getVariable("addResourceList")
95 List<NetworkResource> networkResourceList = new ArrayList<NetworkResource>()
97 List<Resource> sequencedResourceList = new ArrayList<Resource>()
99 String serviceDecompose = execution.getVariable("serviceDecomposition")
100 String serviceModelName = jsonUtil.getJsonValue(serviceDecompose, "serviceResources.modelInfo.modelName")
102 // get Sequence from properties
103 def resourceSequence = BPMNProperties.getResourceSequenceProp(serviceModelName)
105 // get Sequence from csar(model)
106 if(resourceSequence == null) {
107 resourceSequence = ResourceRequestBuilder.getResourceSequence(serviceModelUuid)
108 msoLogger.info("Get Sequence from csar : " + resourceSequence)
111 if(resourceSequence != null) {
112 for (resourceType in resourceSequence) {
113 for (resource in addResourceList) {
114 if (StringUtils.containsIgnoreCase(resource.getModelInfo().getModelName(), resourceType)) {
115 sequencedResourceList.add(resource)
117 if (resource instanceof NetworkResource) {
118 networkResourceList.add(resource)
125 //define sequenced resource list, we deploy vf first and then network and then ar
126 //this is defaule sequence
127 List<VnfResource> vnfResourceList = new ArrayList<VnfResource>()
128 List<AllottedResource> arResourceList = new ArrayList<AllottedResource>()
130 for (Resource rc : addResourceList){
131 if (rc instanceof VnfResource) {
132 vnfResourceList.add(rc)
133 } else if (rc instanceof NetworkResource) {
134 networkResourceList.add(rc)
135 } else if (rc instanceof AllottedResource) {
136 arResourceList.add(rc)
139 sequencedResourceList.addAll(vnfResourceList)
140 sequencedResourceList.addAll(networkResourceList)
141 sequencedResourceList.addAll(arResourceList)
144 String isContainsWanResource = networkResourceList.isEmpty() ? "false" : "true"
145 //if no networkResource, get SDNC config from properties file
146 if( "false".equals(isContainsWanResource)) {
147 String serviceNeedSDNC = "mso.workflow.custom." + serviceModelName + ".sdnc.need";
148 isContainsWanResource = BPMNProperties.getProperty(serviceNeedSDNC, isContainsWanResource)
151 execution.setVariable("isContainsWanResource", isContainsWanResource)
152 execution.setVariable("currentResourceIndex", 0)
153 execution.setVariable("sequencedResourceList", sequencedResourceList)
154 msoLogger.info("sequencedResourceList: " + sequencedResourceList)
155 msoLogger.trace("COMPLETED sequenceResoure Process ")
158 public prepareServiceTopologyRequest(DelegateExecution execution) {
160 msoLogger.trace("======== Start prepareServiceTopologyRequest Process ======== ")
162 String serviceDecompose = execution.getVariable("serviceDecomposition")
164 execution.setVariable("operationType", "create")
165 execution.setVariable("resourceType", "")
167 String serviceInvariantUuid = jsonUtil.getJsonValue(serviceDecompose, "serviceResources.modelInfo.modelInvariantUuid")
168 String serviceUuid = jsonUtil.getJsonValue(serviceDecompose, "serviceResources.modelInfo.modelUuid")
169 String serviceModelName = jsonUtil.getJsonValue(serviceDecompose, "serviceResources.modelInfo.modelName")
171 execution.setVariable("modelInvariantUuid", serviceInvariantUuid)
172 execution.setVariable("modelUuid", serviceUuid)
173 execution.setVariable("serviceModelName", serviceModelName)
175 msoLogger.trace("======== End prepareServiceTopologyRequest Process ======== ")
178 public void getCurrentResoure(DelegateExecution execution){
179 msoLogger.trace("Start getCurrentResoure Process ")
180 def currentIndex = execution.getVariable("currentResourceIndex")
181 List<Resource> sequencedResourceList = execution.getVariable("sequencedResourceList")
182 Resource currentResource = sequencedResourceList.get(currentIndex)
183 execution.setVariable("resourceType", currentResource.getModelInfo().getModelName())
184 msoLogger.info("Now we deal with resouce:" + currentResource.getModelInfo().getModelName())
185 msoLogger.trace("COMPLETED getCurrentResoure Process ")
188 public void parseNextResource(DelegateExecution execution){
189 msoLogger.trace("Start parseNextResource Process ")
190 def currentIndex = execution.getVariable("currentResourceIndex")
191 def nextIndex = currentIndex + 1
192 execution.setVariable("currentResourceIndex", nextIndex)
193 List<String> sequencedResourceList = execution.getVariable("sequencedResourceList")
194 if(nextIndex >= sequencedResourceList.size()){
195 execution.setVariable("allResourceFinished", "true")
197 execution.setVariable("allResourceFinished", "false")
199 msoLogger.trace("COMPLETED parseNextResource Process ")
202 public void prepareResourceRecipeRequest(DelegateExecution execution){
203 msoLogger.trace("Start prepareResourceRecipeRequest Process ")
204 ResourceInput resourceInput = new ResourceInput()
205 String serviceInstanceName = execution.getVariable("serviceInstanceName")
206 String resourceType = execution.getVariable("resourceType")
207 String resourceInstanceName = resourceType + "_" + serviceInstanceName
208 resourceInput.setResourceInstanceName(resourceInstanceName)
209 msoLogger.info("Prepare Resource Request resourceInstanceName:" + resourceInstanceName)
210 String globalSubscriberId = execution.getVariable("globalSubscriberId")
211 String serviceType = execution.getVariable("serviceType")
212 String serviceInstanceId = execution.getVariable("serviceInstanceId")
213 String operationId = execution.getVariable("operationId")
214 String operationType = "createInstance"
215 resourceInput.setGlobalSubscriberId(globalSubscriberId)
216 resourceInput.setServiceType(serviceType)
217 resourceInput.setServiceInstanceId(serviceInstanceId)
218 resourceInput.setOperationId(operationId)
219 resourceInput.setOperationType(operationType);
220 def currentIndex = execution.getVariable("currentResourceIndex")
221 List<Resource> sequencedResourceList = execution.getVariable("sequencedResourceList")
222 Resource currentResource = sequencedResourceList.get(currentIndex)
223 resourceInput.setResourceModelInfo(currentResource.getModelInfo());
224 ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
225 resourceInput.setServiceModelInfo(serviceDecomposition.getModelInfo());
226 def String resourceCustomizationUuid = currentResource.getModelInfo().getModelCustomizationUuid();
228 String incomingRequest = execution.getVariable("uuiRequest")
229 //set the requestInputs from tempalte To Be Done
230 String serviceModelUuid = jsonUtil.getJsonValue(incomingRequest,"service.serviceUuid")
231 String serviceParameters = jsonUtil.getJsonValue(incomingRequest, "service.parameters")
232 String resourceParameters = ResourceRequestBuilder.buildResourceRequestParameters(execution, serviceModelUuid, resourceCustomizationUuid, serviceParameters)
233 resourceInput.setResourceParameters(resourceParameters)
234 resourceInput.setRequestsInputs(incomingRequest)
235 execution.setVariable("resourceInput", resourceInput.toString())
236 execution.setVariable("resourceModelUUID", resourceInput.getResourceModelInfo().getModelUuid())
237 msoLogger.trace("COMPLETED prepareResourceRecipeRequest Process ")
240 public void executeResourceRecipe(DelegateExecution execution){
241 msoLogger.trace("Start executeResourceRecipe Process ")
244 String requestId = execution.getVariable("msoRequestId")
245 String serviceInstanceId = execution.getVariable("serviceInstanceId")
246 String serviceType = execution.getVariable("serviceType")
247 String resourceInput = execution.getVariable("resourceInput")
248 String resourceModelUUID = execution.getVariable("resourceModelUUID")
250 // requestAction is action, not opertiontype
251 //String requestAction = resourceInput.getOperationType()
252 String requestAction = "createInstance"
253 JSONObject resourceRecipe = catalogDbUtils.getResourceRecipe(execution, resourceModelUUID, requestAction)
255 if (resourceRecipe != null) {
256 String recipeURL = BPMNProperties.getProperty("bpelURL", "http://so-bpmn-infra.onap:8081") + resourceRecipe.getString("orchestrationUri")
257 int recipeTimeOut = resourceRecipe.getInt("recipeTimeout")
258 String recipeParamXsd = resourceRecipe.get("paramXSD")
260 BpmnRestClient bpmnRestClient = new BpmnRestClient()
261 HttpResponse resp = bpmnRestClient.post(recipeURL, requestId, recipeTimeOut, requestAction, serviceInstanceId, serviceType, resourceInput, recipeParamXsd)
263 String exceptionMessage = "Resource receipe is not found for resource modeluuid: " + resourceModelUUID
264 msoLogger.trace(exceptionMessage)
265 exceptionUtil.buildAndThrowWorkflowException(execution, 500, exceptionMessage)
268 msoLogger.trace("======== end executeResourceRecipe Process ======== ")
270 msoLogger.debug("Rethrowing MSOWorkflowException")
273 msoLogger.debug("Error occured within DoCreateResources executeResourceRecipe method: " + e)
274 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured during DoCreateResources executeResourceRecipe Catalog")
278 public void postConfigRequest(DelegateExecution execution){