2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 # Copyright (c) 2020, CMCC Technologies Co., Ltd.
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.aai.domain.yang.NetworkRoute
24 import org.onap.so.beans.nsmf.ConnectionLink
25 import org.onap.so.beans.nsmf.EndPoint
26 import org.onap.so.beans.nsmf.NsiInfo
27 import org.onap.so.beans.nsmf.SliceProfileAdapter
28 import org.onap.so.beans.nsmf.TransportSliceNetwork
29 import org.onap.so.beans.nsmf.oof.SubnetType
30 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
31 import javax.ws.rs.NotFoundException
32 import org.camunda.bpm.engine.delegate.BpmnError
33 import org.camunda.bpm.engine.delegate.DelegateExecution
34 import org.onap.aai.domain.yang.Relationship
35 import org.onap.aai.domain.yang.ServiceInstance
36 import org.onap.aai.domain.yang.SliceProfile
37 import org.onap.aaiclient.client.aai.AAIResourcesClient
38 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
39 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
40 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
41 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
42 import org.onap.so.beans.nsmf.AllocateAnNssi
43 import org.onap.so.beans.nsmf.AllocateCnNssi
44 import org.onap.so.beans.nsmf.AllocateTnNssi
45 import org.onap.so.beans.nsmf.EsrInfo
46 import org.onap.so.beans.nsmf.NssiResponse
47 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
48 import org.onap.so.beans.nsmf.ServiceInfo
49 import org.onap.so.beans.nsmf.SliceTaskInfo
50 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
51 import org.onap.so.bpmn.common.scripts.ExceptionUtil
52 import org.onap.so.bpmn.core.json.JsonUtils
53 import org.slf4j.Logger
54 import org.slf4j.LoggerFactory
55 import static org.apache.commons.lang3.StringUtils.isBlank
57 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
59 private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
61 ExceptionUtil exceptionUtil = new ExceptionUtil()
63 JsonUtils jsonUtil = new JsonUtils()
65 AAIResourcesClient client = getAAIClient()
68 * Pre Process the BPMN Flow Request
70 * generate the nsOperationKey
71 * generate the nsParameters
74 void preProcessRequest (DelegateExecution execution) {
76 logger.trace("Enter preProcessRequest()")
77 Map<String, Object> nssiMap = new HashMap<>()
78 execution.setVariable("nssiMap", nssiMap)
79 boolean isMoreNSSTtoProcess = true
80 execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
81 List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
82 execution.setVariable("nsstSequence", nsstSequence)
83 logger.trace("Exit preProcessRequest")
90 void retriveSliceOption(DelegateExecution execution) {
91 logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
93 boolean isNSIOptionAvailable
95 SliceTaskParamsAdapter sliceParams =
96 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
98 if(isBlank(sliceParams.getSuggestNsiId())) {
99 isNSIOptionAvailable = false
102 isNSIOptionAvailable = true
103 execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
104 execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
106 execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
107 logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
112 * create nsi instance in aai
115 void createNSIinAAI(DelegateExecution execution) {
116 logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
118 String sliceInstanceId = UUID.randomUUID().toString()
119 SliceTaskParamsAdapter sliceParams =
120 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
122 //set new nsiId to sliceParams suggestNsiId
123 sliceParams.setSuggestNsiId(sliceInstanceId)
125 ServiceInstance nsi = new ServiceInstance()
128 String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
129 String serviceType = sliceParams.serviceProfile.get("sST")
130 String serviceStatus = "deactivated"
131 String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
132 String modelUuid = sliceParams.getNSTInfo().UUID
134 String uuiRequest = execution.getVariable("uuiRequest")
135 String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
136 String serviceRole = "nsi"
138 execution.setVariable("sliceInstanceId", sliceInstanceId)
139 nsi.setServiceInstanceId(sliceInstanceId)
140 nsi.setServiceInstanceName(sliceInstanceName)
141 nsi.setServiceType(serviceType)
142 nsi.setOrchestrationStatus(serviceStatus)
143 nsi.setModelInvariantId(modelInvariantUuid)
144 nsi.setModelVersionId(modelUuid)
145 nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
146 nsi.setServiceRole(serviceRole)
150 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
151 .customer(execution.getVariable("globalSubscriberId"))
152 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
153 .serviceInstance(sliceInstanceId))
154 client.create(nsiServiceUri, nsi)
156 execution.setVariable("nsiServiceUri", nsiServiceUri)
158 } catch (BpmnError e) {
160 } catch (Exception ex) {
161 msg = "Exception in DoAllocateNSIandNSSI.createNSIinAAI: " + ex.getMessage()
163 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
165 execution.setVariable("sliceTaskParams", sliceParams)
167 logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
172 * create relationship between nsi and service profile instance
175 void createRelationship(DelegateExecution execution) {
177 logger.debug("Enter createRelationship in DoAllocateNSIandNSSI")
178 //String allottedResourceId = execution.getVariable("allottedResourceId")
179 //SliceTaskParamsAdapter sliceParams =
180 // execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
184 AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
185 logger.debug("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri.toString())
187 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
189 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
190 logger.debug("Creating Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
192 client.connect(allottedResourceUri, nsiServiceUri)
193 } catch (BpmnError e) {
195 } catch (Exception ex) {
196 msg = "Exception in DoAllocateNSIandNSSI.createRelationship. " + ex.getMessage()
198 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
200 logger.debug("Exit createRelationship in DoAllocateNSIandNSSI")
207 void updateRelationship(DelegateExecution execution) {
208 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
209 //todo: allottedResourceId
210 String allottedResourceId = execution.getVariable("allottedResourceId")
211 //Need to check whether nsi exist : Begin
213 SliceTaskParamsAdapter sliceParams =
214 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
216 String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
217 //sliceParams.setServiceId(nsiServiceInstanceID)
219 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
220 .customer(execution.getVariable("globalSubscriberId"))
221 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
222 .serviceInstance(nsiServiceInstanceID))
225 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
226 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
227 if (!si.isPresent()) {
228 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
230 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
233 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
234 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
235 logger.debug("updateRelationship Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
236 client.connect(allottedResourceUri, nsiServiceUri)
238 execution.setVariable("sliceTaskParams", sliceParams)
239 }catch(BpmnError e) {
241 }catch (Exception ex){
242 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
244 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
246 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
250 * create RAN Slice Profile Instance
253 void createAnSliceProfileInstance(DelegateExecution execution) {
255 String globalSubscriberId = execution.getVariable("globalSubscriberId")
256 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
257 String serviceInstanceId = UUID.randomUUID().toString()
258 execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
260 String oStatus = "deactivated"
262 SliceTaskParamsAdapter sliceParams =
263 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
264 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
265 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
266 String sliceProfileName = "an_" + sliceParams.serviceName
268 // create slice profile
269 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
271 //timestamp format YYYY-MM-DD hh:mm:ss
272 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
274 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
275 .customer(globalSubscriberId)
276 .serviceSubscription(subscriptionServiceType)
277 .serviceInstance(serviceInstanceId))
278 client.create(uri, rspi)
280 execution.setVariable("sliceTaskParams", sliceParams)
284 * create An Slice Profile
287 void createAnSliceProfile(DelegateExecution execution) {
289 String globalSubscriberId = execution.getVariable("globalSubscriberId")
290 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
291 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
293 SliceTaskParamsAdapter sliceParams =
294 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
295 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
296 SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
298 String profileId = UUID.randomUUID().toString()
299 anSliceProfile.setSliceProfileId(profileId)
301 SliceProfile sliceProfile = new SliceProfile()
302 sliceProfile.setProfileId(profileId)
303 sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
304 sliceProfile.setMaxNumberOfUEs(anSliceProfile.maxNumberOfUEs)
305 sliceProfile.setLatency(anSliceProfile.latency)
306 sliceProfile.setMaxNumberOfPDUSession(anSliceProfile.maxNumberOfPDUSession)
307 sliceProfile.setExpDataRateDL(anSliceProfile.expDataRateDL)
308 sliceProfile.setExpDataRateUL(anSliceProfile.expDataRateUL)
309 sliceProfile.setAreaTrafficCapDL(anSliceProfile.areaTrafficCapDL)
310 sliceProfile.setAreaTrafficCapUL(anSliceProfile.areaTrafficCapUL)
311 sliceProfile.setOverallUserDensity(anSliceProfile.overallUserDensity)
312 sliceProfile.setActivityFactor(anSliceProfile.activityFactor)
313 sliceProfile.setUeMobilityLevel(anSliceProfile.ueMobilityLevel)
314 sliceProfile.setResourceSharingLevel(anSliceProfile.resourceSharingLevel)
315 sliceProfile.setCsAvailabilityTarget(anSliceProfile.csAvailabilityTarget)
316 sliceProfile.setCsReliabilityMeanTime(anSliceProfile.csReliabilityMeanTime)
317 sliceProfile.setExpDataRate(anSliceProfile.expDataRate)
318 sliceProfile.setMsgSizeByte(anSliceProfile.msgSizeByte)
319 sliceProfile.setTransferIntervalTarget(anSliceProfile.transferIntervalTarget)
320 sliceProfile.setSurvivalTime(anSliceProfile.survivalTime)
322 AAIResourceUri uri = AAIUriFactory.createResourceUri(
323 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
324 .serviceSubscription(subscriptionServiceType)
325 .serviceInstance(sliceTaskInfo.sliceInstanceId)
326 .sliceProfile(profileId)
328 client.create(uri, sliceProfile)
329 execution.setVariable("sliceTaskParams", sliceParams)
332 void createANEndpoint(DelegateExecution execution){
333 logger.debug("Enter createANEndpoint in DoAllocateNSIandNSSI()")
334 SliceTaskParamsAdapter sliceParams =
335 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
336 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
338 NetworkRoute route = new NetworkRoute()
339 String routeId = UUID.randomUUID().toString()
340 route.setRouteId(routeId)
341 route.setType("endpoint")
343 route.setFunction("3gppTransportEP")
344 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
345 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
346 route.setLogicalInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
347 route.setAddressFamily("ipv4")
348 route.setPrefixLength(24)
349 sliceTaskInfo.setEndPointId(routeId)
351 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
352 client.create(uri, route)
353 execution.setVariable("sliceTaskParams", sliceParams)
354 logger.info("an endpointId:" + sliceParams.anSliceTaskInfo.endPointId)
358 void createCNEndpoint(DelegateExecution execution){
359 logger.debug("Enter createCNNetworkRoute in DoAllocateNSIandNSSI()")
360 SliceTaskParamsAdapter sliceParams =
361 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
362 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
364 NetworkRoute route = new NetworkRoute()
365 String routeId = UUID.randomUUID().toString()
366 route.setRouteId(routeId)
367 route.setType("endpoint")
369 route.setFunction("3gppTransportEP")
370 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
371 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
372 route.setLogicalInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
373 route.setAddressFamily("ipv4")
374 route.setPrefixLength(24)
376 sliceTaskInfo.setEndPointId(routeId)
377 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
378 client.create(uri, route)
380 execution.setVariable("cnEndpointId", routeId)
381 execution.setVariable("sliceTaskParams", sliceParams)
382 logger.info("cn endpointId:" + sliceParams.cnSliceTaskInfo.endPointId)
386 * prepare AllocateAnNssi
389 void prepareAllocateAnNssi(DelegateExecution execution) {
392 SliceTaskParamsAdapter sliceParams =
393 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
394 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
396 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
398 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
399 allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
400 allocateAnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
401 allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
402 allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
403 allocateAnNssi.nssiName = "nssi_an" + execution.getVariable("sliceServiceInstanceName")
404 NsiInfo nsiInfo = new NsiInfo()
405 nsiInfo.nsiId = sliceParams.suggestNsiId
406 nsiInfo.nsiName = sliceParams.suggestNsiName
407 allocateAnNssi.nsiInfo = nsiInfo
409 EndPoint endPoint = new EndPoint()
410 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
411 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
412 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
413 allocateAnNssi.setEndPoint(endPoint)
415 EsrInfo esrInfo = new EsrInfo()
416 //todo: vendor and network
417 esrInfo.setVendor(sliceTaskInfo.getVendor())
418 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
420 String globalSubscriberId = execution.getVariable("globalSubscriberId")
421 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
424 ServiceInfo serviceInfo = new ServiceInfo()
425 serviceInfo.globalSubscriberId = globalSubscriberId
426 serviceInfo.subscriptionServiceType = subscriptionServiceType
427 serviceInfo.nsiId = sliceParams.suggestNsiId
428 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
429 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
430 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
431 serviceInfo.nssiName = allocateAnNssi.nssiName
433 nbiRequest.setServiceInfo(serviceInfo)
434 nbiRequest.setEsrInfo(esrInfo)
435 nbiRequest.setAllocateAnNssi(allocateAnNssi)
437 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
438 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
439 execution.setVariable("anSubnetType", SubnetType.AN)
444 * create RAN Slice Profile Instance
447 void createCnSliceProfileInstance(DelegateExecution execution) {
449 String globalSubscriberId = execution.getVariable("globalSubscriberId")
450 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
451 String serviceInstanceId = UUID.randomUUID().toString()
452 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
454 String oStatus = "deactivated"
456 SliceTaskParamsAdapter sliceParams =
457 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
458 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
459 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
460 String sliceProfileName = "cn_"+sliceParams.serviceName
462 // create slice profile
463 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
465 //timestamp format YYYY-MM-DD hh:mm:ss
466 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
468 execution.setVariable("communicationServiceInstance", rspi)
470 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
471 .customer(globalSubscriberId)
472 .serviceSubscription(subscriptionServiceType)
473 .serviceInstance(serviceInstanceId))
474 client.create(uri, rspi)
475 execution.setVariable("sliceTaskParams", sliceParams)
479 * create Cn Slice Profile
482 void createCnSliceProfile(DelegateExecution execution) {
484 String globalSubscriberId = execution.getVariable("globalSubscriberId")
485 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
486 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
488 SliceTaskParamsAdapter sliceParams =
489 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
491 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
492 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
494 String profileId = UUID.randomUUID().toString()
495 cnSliceProfile.setSliceProfileId(profileId)
497 SliceProfile sliceProfile = new SliceProfile()
498 sliceProfile.setProfileId(profileId)
499 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
500 sliceProfile.setMaxNumberOfUEs(cnSliceProfile.maxNumberOfUEs)
501 sliceProfile.setLatency(cnSliceProfile.latency)
502 sliceProfile.setMaxNumberOfPDUSession(cnSliceProfile.maxNumberOfPDUSession)
503 sliceProfile.setExpDataRateDL(cnSliceProfile.expDataRateDL)
504 sliceProfile.setExpDataRateUL(cnSliceProfile.expDataRateUL)
505 sliceProfile.setAreaTrafficCapDL(cnSliceProfile.areaTrafficCapDL)
506 sliceProfile.setAreaTrafficCapUL(cnSliceProfile.areaTrafficCapUL)
507 sliceProfile.setOverallUserDensity(cnSliceProfile.overallUserDensity)
508 sliceProfile.setActivityFactor(cnSliceProfile.activityFactor)
509 sliceProfile.setUeMobilityLevel(cnSliceProfile.ueMobilityLevel)
510 sliceProfile.setResourceSharingLevel(cnSliceProfile.resourceSharingLevel)
511 sliceProfile.setCsAvailabilityTarget(cnSliceProfile.csAvailabilityTarget)
512 sliceProfile.setCsReliabilityMeanTime(cnSliceProfile.csReliabilityMeanTime)
513 sliceProfile.setExpDataRate(cnSliceProfile.expDataRate)
514 sliceProfile.setMsgSizeByte(cnSliceProfile.msgSizeByte)
515 sliceProfile.setTransferIntervalTarget(cnSliceProfile.transferIntervalTarget)
516 sliceProfile.setSurvivalTime(cnSliceProfile.survivalTime)
518 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
519 .customer(globalSubscriberId)
520 .serviceSubscription(subscriptionServiceType)
521 .serviceInstance(sliceTaskInfo.sliceInstanceId)
522 .sliceProfile(profileId))
523 client.create(uri, sliceProfile)
524 execution.setVariable("sliceTaskParams", sliceParams)
528 * prepare AllocateCnNssi
531 void prepareAllocateCnNssi(DelegateExecution execution) {
534 SliceTaskParamsAdapter sliceParams =
535 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
536 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
538 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
540 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
541 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
542 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
543 allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
544 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
545 allocateCnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
547 NsiInfo nsiInfo = new NsiInfo()
548 nsiInfo.nsiId = sliceParams.suggestNsiId
549 nsiInfo.nsiName = sliceParams.suggestNsiName
550 allocateCnNssi.nsiInfo = nsiInfo
552 EndPoint endPoint = new EndPoint()
553 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
554 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
555 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
556 allocateCnNssi.setEndPoint(endPoint)
558 EsrInfo esrInfo = new EsrInfo()
559 //todo: vendor and network
560 esrInfo.setVendor(sliceTaskInfo.getVendor())
561 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
563 String globalSubscriberId = execution.getVariable("globalSubscriberId")
564 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
567 ServiceInfo serviceInfo = new ServiceInfo()
568 serviceInfo.globalSubscriberId = globalSubscriberId
569 serviceInfo.subscriptionServiceType = subscriptionServiceType
570 serviceInfo.nsiId = sliceParams.suggestNsiId
571 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
572 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
573 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
574 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
575 serviceInfo.nssiName = allocateCnNssi.nssiName
577 nbiRequest.setServiceInfo(serviceInfo)
578 nbiRequest.setEsrInfo(esrInfo)
579 nbiRequest.setAllocateCnNssi(allocateCnNssi)
581 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
582 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
583 execution.setVariable("cnSubnetType", SubnetType.CN)
588 * create TN Slice Profile Instance
591 void createTnBHSliceProfileInstance(DelegateExecution execution) {
592 String globalSubscriberId = execution.getVariable("globalSubscriberId")
593 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
595 String oStatus = "deactivated"
597 SliceTaskParamsAdapter sliceParams =
598 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
600 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
601 String serviceInstanceId = UUID.randomUUID().toString()
603 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
604 String sliceProfileName = "tn_" + sliceParams.serviceName
605 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
607 // create slice profile
608 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
610 //timestamp format YYYY-MM-DD hh:mm:ss
611 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
613 execution.setVariable("communicationServiceInstance", rspi)
615 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
616 .customer(globalSubscriberId)
617 .serviceSubscription(subscriptionServiceType)
618 .serviceInstance(serviceInstanceId))
619 client.create(uri, rspi)
621 execution.setVariable("sliceTaskParams", sliceParams)
625 * create Tn Slice Profile
628 void createTnBHSliceProfile(DelegateExecution execution) {
630 String globalSubscriberId = execution.getVariable("globalSubscriberId")
631 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
633 SliceTaskParamsAdapter sliceParams =
634 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
636 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
638 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
639 String profileId = UUID.randomUUID().toString()
640 tnSliceProfile.setSliceProfileId(profileId)
642 SliceProfile sliceProfile = new SliceProfile()
643 sliceProfile.setProfileId(profileId)
644 sliceProfile.setLatency(tnSliceProfile.latency)
645 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
646 sliceProfile.setJitter(tnSliceProfile.jitter)
648 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
649 .customer(globalSubscriberId)
650 .serviceSubscription(subscriptionServiceType)
651 .serviceInstance(sliceTaskInfo.sliceInstanceId)
652 .sliceProfile(profileId))
653 client.create(uri, sliceProfile)
655 execution.setVariable("sliceTaskParams", sliceParams)
659 * prepare AllocateCnNssi
662 void prepareAllocateTnBHNssi(DelegateExecution execution) {
665 SliceTaskParamsAdapter sliceParams =
666 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
667 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
669 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
671 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
672 allocateTnNssi.setNssiId(sliceTaskInfo.suggestNssiId)
673 //todo: AllocateTnNssi
674 //todo: endPointId -> set into tn
675 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
676 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
677 List<ConnectionLink> connectionLinks = new ArrayList<>()
678 ConnectionLink connectionLink = new ConnectionLink()
679 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
680 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
681 connectionLinks.add(connectionLink)
682 transportSliceNetwork.setConnectionLinks(connectionLinks)
683 transportSliceNetworks.add(transportSliceNetwork)
684 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
686 allocateTnNssi.setNetworkSliceInfos()
687 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
688 NsiInfo nsiInfo = new NsiInfo()
689 nsiInfo.setNsiId(sliceParams.suggestNsiId)
690 nsiInfo.setNsiName(sliceParams.suggestNsiName)
691 allocateTnNssi.setNsiInfo(nsiInfo)
693 //allocateTnNssi.networkSliceInfos
695 EsrInfo esrInfo = new EsrInfo()
696 esrInfo.setVendor(sliceTaskInfo.getVendor())
697 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
699 String globalSubscriberId = execution.getVariable("globalSubscriberId")
700 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
702 ServiceInfo serviceInfo = new ServiceInfo()
703 serviceInfo.globalSubscriberId = globalSubscriberId
704 serviceInfo.subscriptionServiceType = subscriptionServiceType
705 serviceInfo.nsiId = sliceParams.suggestNsiId
706 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
707 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
708 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
709 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
710 serviceInfo.nssiName = "nssi_tn" + execution.getVariable("sliceServiceInstanceName")
712 nbiRequest.setServiceInfo(serviceInfo)
713 nbiRequest.setEsrInfo(esrInfo)
714 nbiRequest.setAllocateTnNssi(allocateTnNssi)
716 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
717 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
718 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
722 * Update relationship between
724 * 2. Slice Profile and Service Profile
725 * 3. SliceProfile and NSSI
726 * 4. sliceProfile and endpoint
730 public void updateAnRelationship(DelegateExecution execution) {
732 SliceTaskParamsAdapter sliceParams =
733 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
735 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
736 String nssiId = result.getNssiId()
737 String nsiId = sliceParams.getSuggestNsiId()
738 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
739 String serviceProfileInstanceId = sliceParams.serviceId
740 String epId = sliceParams.anSliceTaskInfo.endPointId
742 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
743 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
744 //execution.setVariable("endPointIdAn", endPointId)
745 updateRelationship(execution, nsiId, nssiId)
747 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
749 updateRelationship(execution, sliceProfileInstanceId, nssiId)
751 updateEPRelationship(execution, nssiId, epId)
753 updateEPRelationship(execution, sliceProfileInstanceId, epId)
755 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
756 execution.setVariable("sliceTaskParams", sliceParams)
761 * Update relationship between
763 * 2. Slice Profile and Service Profile
764 * 3. SliceProfile and NSSI
768 public void updateCnRelationship(DelegateExecution execution) {
770 SliceTaskParamsAdapter sliceParams =
771 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
773 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
774 String nssiId = result.getNssiId()
775 String nsiId = sliceParams.getSuggestNsiId()
776 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
777 String serviceProfileInstanceId = sliceParams.serviceId
778 String epId = sliceParams.cnSliceTaskInfo.endPointId
780 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
781 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
782 // execution.setVariable("endPointIdCn", endPointId)
784 updateRelationship(execution, nsiId, nssiId)
786 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
788 updateRelationship(execution, sliceProfileInstanceId, nssiId)
790 updateEPRelationship(execution, nssiId, epId)
792 updateEPRelationship(execution, sliceProfileInstanceId, epId)
794 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
795 execution.setVariable("sliceTaskParams", sliceParams)
799 * get endpoint Id from AAI by nssi id
804 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
805 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
806 //todo: allottedResourceId
808 SliceTaskParamsAdapter sliceParams =
809 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
811 //sliceParams.setServiceId(nsiServiceInstanceID)
812 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
813 .customer(execution.getVariable("globalSubscriberId"))
814 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
815 .serviceInstance(nssiId))
817 String endpointId = null
820 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
821 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
822 if (!si.isPresent()) {
823 String msg = "NSSI in the option doesn't exist. " + nssiId
825 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
827 ServiceInstance nssiInstance = si.get()
828 //todo: handle relationship and return endPointId
829 if (nssiInstance.relationshipList == null) {
830 String msg = "relationshipList of " + nssiId + " is null"
834 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
835 if (relationship.relationshipLabel){
836 endpointId = relationship //todo
843 }catch(BpmnError e) {
845 }catch (Exception ex){
846 String msg = "Exception: " + ex
848 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
850 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
854 * Update relationship between
856 * 2. Slice Profile and Service Profile
857 * 3. SliceProfile and NSSI
861 public void updateTnBHRelationship(DelegateExecution execution) {
862 SliceTaskParamsAdapter sliceParams =
863 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
865 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
866 String nssiId = result.getNssiId()
867 String nsiId = sliceParams.getSuggestNsiId()
868 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
869 String serviceProfileInstanceId = sliceParams.serviceId
872 updateRelationship(execution, nsiId, nssiId)
874 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
876 updateRelationship(execution,sliceProfileInstanceId, nssiId)
878 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
879 execution.setVariable("sliceTaskParams", sliceParams)
883 * sourceId -> targetId
888 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
890 Relationship relationship = new Relationship()
892 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
893 .customer(execution.getVariable("globalSubscriberId"))
894 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
895 .serviceInstance(targetId))
897 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
899 relationship.setRelatedLink(targetInstanceUri.build().toString())
901 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
902 .customer(execution.getVariable("globalSubscriberId"))
903 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
904 .serviceInstance(sourceId))
906 client.create(sourceInstanceUri, relationship)
910 * update endpoint relationship
915 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
917 Relationship relationship = new Relationship()
919 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
921 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
923 relationship.setRelatedLink(endpointUri.build().toString())
925 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
926 .customer(execution.getVariable("globalSubscriberId"))
927 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
928 .serviceInstance(sourceId))
930 client.create(sourceInstanceUri, relationship)
933 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String sliceProfileName, String oStatus) {
934 // create slice profile
935 ServiceInstance rspi = new ServiceInstance()
936 rspi.setServiceInstanceName(sliceProfileName)
937 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
938 rspi.setServiceRole("slice-profile")
939 rspi.setOrchestrationStatus(oStatus)
940 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
941 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
942 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
943 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
944 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
946 //timestamp format YYYY-MM-DD hh:mm:ss
947 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))