181e9d062aab60cd32db18adc2528a1ee4d3c26f
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  # Copyright (c) 2020, CMCC Technologies Co., Ltd.
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
10  #
11  #       http://www.apache.org/licenses/LICENSE-2.0
12  #
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=========================================================
19  */
20 package org.onap.so.bpmn.infrastructure.scripts
21
22
23 import org.onap.aai.domain.yang.AllottedResource
24 import org.onap.aai.domain.yang.ServiceInstance
25 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
26 import org.camunda.bpm.engine.delegate.BpmnError
27 import org.camunda.bpm.engine.delegate.DelegateExecution
28 import org.onap.aai.domain.yang.ServiceProfile
29 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
30 import org.onap.so.bpmn.common.scripts.ExceptionUtil
31 import org.onap.so.bpmn.core.RollbackData
32 import org.onap.so.bpmn.core.domain.ModelInfo
33 import org.onap.so.bpmn.core.domain.ServiceDecomposition
34 import org.onap.so.bpmn.core.json.JsonUtils
35 import org.onap.aaiclient.client.aai.AAIObjectType
36 import org.onap.aaiclient.client.aai.AAIResourcesClient
37 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
38 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
39 import org.slf4j.Logger
40 import org.slf4j.LoggerFactory
41
42
43
44 class DoCreateSliceServiceInstance extends AbstractServiceTaskProcessor{
45
46     private static final Logger logger = LoggerFactory.getLogger( DoCreateSliceServiceInstance.class)
47
48     JsonUtils jsonUtil = new JsonUtils()
49
50     ExceptionUtil exceptionUtil = new ExceptionUtil()
51
52     AAIResourcesClient client = getAAIClient()
53     /**
54      * Pre Process the BPMN Flow Request
55      * Inclouds:
56      * generate the nsOperationKey
57      * generate the nsParameters
58      */
59     void preProcessRequest (DelegateExecution execution) {
60         logger.trace("Enter preProcessRequest()")
61         //here modelVersion is not set, we use modelUuid to decompose the service.
62         def isDebugLogEnabled = true
63         execution.setVariable("isDebugLogEnabled", isDebugLogEnabled)
64
65         logger.trace("Exit preProcessRequest")
66     }
67
68     /**
69      * prepare decompose service profile instance template
70      * @param execution
71      */
72     public void prepareDecomposeService(DelegateExecution execution) {
73
74         String uuiRequest = execution.getVariable("uuiRequest")
75         String modelInvariantUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceInvariantUuid")
76         String modelUuid = jsonUtil.getJsonValue(uuiRequest, "service.serviceUuid")
77         String serviceModelInfo = """{
78             "modelInvariantUuid":"${modelInvariantUuid}",
79             "modelUuid":"${modelUuid}",
80             "modelVersion":""
81              }"""
82         execution.setVariable("serviceModelInfo", serviceModelInfo)
83     }
84
85     /**
86      * create service-profile instance in aai
87      * @param execution
88      */
89     void createServiceProfileInstance(DelegateExecution execution) {
90
91         SliceTaskParamsAdapter sliceParams =
92                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
93
94         ServiceDecomposition serviceDecomposition =
95                 execution.getVariable("serviceProfileDecomposition") as ServiceDecomposition
96         ModelInfo modelInfo = serviceDecomposition.getModelInfo()
97         //String serviceRole = "e2eslice-service"
98         /**
99          * todo: ServiceProfile params changed
100          * todo: role
101          */
102         String serviceRole = "service-profile"
103         String serviceType = execution.getVariable("serviceType")
104         Map<String, Object> serviceProfile = sliceParams.getServiceProfile()
105         String ssInstanceId = execution.getVariable("serviceInstanceId")
106         try {
107             ServiceInstance ss = new ServiceInstance()
108             ss.setServiceInstanceId(ssInstanceId)
109             String sliceInstanceName = execution.getVariable("serviceInstanceName")
110             ss.setServiceInstanceName(sliceInstanceName)
111             ss.setServiceType(serviceType)
112             String serviceStatus = "deactivated"
113             ss.setOrchestrationStatus(serviceStatus)
114             String modelInvariantUuid = modelInfo.getModelInvariantUuid()
115             String modelUuid = modelInfo.getModelUuid()
116             ss.setModelInvariantId(modelInvariantUuid)
117             ss.setModelVersionId(modelUuid)
118             String serviceInstanceLocationid = serviceProfile.get("plmnIdList")
119             ss.setServiceInstanceLocationId(serviceInstanceLocationid)
120             String snssai = serviceProfile.get("sNSSAI")
121             ss.setEnvironmentContext(snssai)
122             ss.setServiceRole(serviceRole)
123
124             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
125                     execution.getVariable("globalSubscriberId"),
126                     execution.getVariable("subscriptionServiceType"),
127                     ssInstanceId)
128             client.create(uri, ss)
129         } catch (BpmnError e) {
130             throw e
131         } catch (Exception ex) {
132             String msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
133             logger.info(msg)
134             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
135         }
136
137
138         def rollbackData = execution.getVariable("RollbackData")
139         if (rollbackData == null) {
140             rollbackData = new RollbackData()
141         }
142         //rollbackData.put("SERVICEINSTANCE", "disableRollback", disableRollback.toString())
143         rollbackData.put("SERVICEINSTANCE", "rollbackAAI", "true")
144         rollbackData.put("SERVICEINSTANCE", "serviceInstanceId", ssInstanceId)
145         rollbackData.put("SERVICEINSTANCE", "subscriptionServiceType", execution.getVariable("subscriptionServiceType"))
146         rollbackData.put("SERVICEINSTANCE", "globalSubscriberId", execution.getVariable("globalSubscriberId"))
147         execution.setVariable("rollbackData", rollbackData)
148         execution.setVariable("RollbackData", rollbackData)
149         logger.debug("RollbackData:" + rollbackData)
150
151     }
152
153     /**
154      * create service profile in aai
155      * @param execution
156      */
157     void createServiceProfile(DelegateExecution execution) {
158
159         /**
160          * todo: ServiceProfile params changed
161          */
162         SliceTaskParamsAdapter sliceParams =
163                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
164         Map<String, Object> serviceProfileMap = sliceParams.getServiceProfile()
165
166         String serviceProfileInstanceId = execution.getVariable("serviceInstanceId")
167         String serviceProfileId = UUID.randomUUID().toString()
168         sliceParams.serviceProfile.put("profileId", serviceProfileId)
169
170         ServiceProfile serviceProfile = new ServiceProfile()
171         serviceProfile.setProfileId(serviceProfileId)
172         serviceProfile.setLatency(Integer.parseInt(serviceProfileMap.get("latency").toString()))
173         serviceProfile.setMaxNumberOfUEs(Integer.parseInt(serviceProfileMap.get("maxNumberofUEs").toString()))
174         serviceProfile.setCoverageAreaTAList(serviceProfileMap.get("coverageAreaTAList").toString())
175         serviceProfile.setUeMobilityLevel(serviceProfileMap.get("uEMobilityLevel").toString())
176         serviceProfile.setResourceSharingLevel(serviceProfileMap.get("resourceSharingLevel").toString())
177         serviceProfile.setExpDataRateUL(Integer.parseInt(serviceProfileMap.get("expDataRateUL").toString()))
178         serviceProfile.setExpDataRateDL(Integer.parseInt(serviceProfileMap.get("expDataRateDL").toString()))
179         serviceProfile.setAreaTrafficCapUL(Integer.parseInt(serviceProfileMap.get("areaTrafficCapUL").toString()))
180         serviceProfile.setAreaTrafficCapDL(Integer.parseInt(serviceProfileMap.get("areaTrafficCapDL").toString()))
181         serviceProfile.setActivityFactor(Integer.parseInt(serviceProfileMap.get("activityFactor").toString()))
182
183         serviceProfile.setJitter(0)
184         serviceProfile.setSurvivalTime("0")
185         serviceProfile.setCsAvailability(new Object())
186         serviceProfile.setReliability("")
187         serviceProfile.setExpDataRate(0)
188         serviceProfile.setTrafficDensity(0)
189         serviceProfile.setConnDensity(0)
190         try {
191             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_PROFILE,
192                     execution.getVariable("globalSubscriberId"),
193                     execution.getVariable("subscriptionServiceType"),
194                     serviceProfileInstanceId,
195                     serviceProfileId)
196             client.create(uri, serviceProfile)
197             execution.setVariable("sliceTaskParams", sliceParams)
198
199         } catch (BpmnError e) {
200             throw e
201         } catch (Exception ex) {
202             String msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
203             logger.info(msg)
204             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
205         }
206     }
207
208     /**
209      * create allotted resource
210      * todo: unfinished
211      * @param execution
212      */
213     public void createAllottedResource(DelegateExecution execution) {
214
215         try {
216
217             ServiceDecomposition serviceDecomposition =
218                     execution.getVariable("serviceProfileDecomposition") as ServiceDecomposition
219
220             List<org.onap.so.bpmn.core.domain.AllottedResource> allottedResourceList = serviceDecomposition.getAllottedResources()
221             for(org.onap.so.bpmn.core.domain.AllottedResource allottedResource : allottedResourceList) {
222                 String allottedResourceId = UUID.randomUUID().toString()
223
224                 AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIObjectType.ALLOTTED_RESOURCE,
225                         execution.getVariable("globalSubscriberId"),
226                         execution.getVariable("subscriptionServiceType"),
227                         execution.getVariable("serviceInstanceId"),
228                         allottedResourceId)
229
230                 execution.setVariable("allottedResourceUri", allottedResourceUri)
231                 String arType = allottedResource.getAllottedResourceType()
232                 String arRole = allottedResource.getAllottedResourceRole()
233                 String modelInvariantId = allottedResource.getModelInfo().getModelInvariantUuid()
234                 String modelVersionId = allottedResource.getModelInfo().getModelUuid()
235
236                 AllottedResource resource = new AllottedResource()
237                 resource.setId(allottedResourceId)
238                 resource.setType(arType)
239                 resource.setAllottedResourceName("Allotted_"+ execution.getVariable("serviceInstanceName"))
240                 resource.setRole(arRole)
241                 resource.setModelInvariantId(modelInvariantId)
242                 resource.setModelVersionId(modelVersionId)
243
244                 client.create(allottedResourceUri, resource)
245
246             }
247
248         }catch (Exception ex) {
249             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Exception in createAaiAR " + ex.getMessage())
250         }
251     }
252
253 }