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 ServiceInstance nsi = new ServiceInstance()
125 String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
126 String serviceType = sliceParams.serviceProfile.get("sST")
127 String serviceStatus = "deactivated"
128 String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
129 String modelUuid = sliceParams.getNSTInfo().UUID
130 String serviceFunction = sliceParams.serviceProfile.get("resourceSharingLevel")
132 sliceParams.setSuggestNsiId(sliceInstanceId)
133 sliceParams.setSuggestNsiName(sliceInstanceName)
135 String uuiRequest = execution.getVariable("uuiRequest")
136 String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
137 String serviceRole = "nsi"
139 execution.setVariable("sliceInstanceId", sliceInstanceId)
140 nsi.setServiceInstanceId(sliceInstanceId)
141 nsi.setServiceInstanceName(sliceInstanceName)
142 nsi.setServiceType(serviceType)
143 nsi.setOrchestrationStatus(serviceStatus)
144 nsi.setModelInvariantId(modelInvariantUuid)
145 nsi.setModelVersionId(modelUuid)
146 nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
147 nsi.setServiceRole(serviceRole)
148 nsi.setServiceFunction(serviceFunction)
152 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
153 .customer(execution.getVariable("globalSubscriberId"))
154 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
155 .serviceInstance(sliceInstanceId))
156 client.create(nsiServiceUri, nsi)
158 execution.setVariable("nsiServiceUri", nsiServiceUri)
160 } catch (BpmnError e) {
162 } catch (Exception ex) {
163 msg = "Exception in DoAllocateNSIandNSSI.createNSIinAAI: " + ex.getMessage()
165 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
167 execution.setVariable("sliceTaskParams", sliceParams)
169 logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
174 * create relationship between nsi and service profile instance
177 void createRelationship(DelegateExecution execution) {
179 logger.debug("Enter createRelationship in DoAllocateNSIandNSSI")
180 //String allottedResourceId = execution.getVariable("allottedResourceId")
181 //SliceTaskParamsAdapter sliceParams =
182 // execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
186 AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
187 logger.debug("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri.toString())
189 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
191 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
192 logger.debug("Creating Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
194 client.connect(allottedResourceUri, nsiServiceUri)
195 } catch (BpmnError e) {
197 } catch (Exception ex) {
198 msg = "Exception in DoAllocateNSIandNSSI.createRelationship. " + ex.getMessage()
200 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
202 logger.debug("Exit createRelationship in DoAllocateNSIandNSSI")
209 void updateRelationship(DelegateExecution execution) {
210 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
211 //todo: allottedResourceId
212 String allottedResourceId = execution.getVariable("allottedResourceId")
213 //Need to check whether nsi exist : Begin
215 SliceTaskParamsAdapter sliceParams =
216 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
218 String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
219 //sliceParams.setServiceId(nsiServiceInstanceID)
221 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
222 .customer(execution.getVariable("globalSubscriberId"))
223 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
224 .serviceInstance(nsiServiceInstanceID))
227 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
228 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
229 if (!si.isPresent()) {
230 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
232 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
235 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
236 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
237 logger.debug("updateRelationship Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
238 client.connect(allottedResourceUri, nsiServiceUri)
240 execution.setVariable("sliceTaskParams", sliceParams)
241 }catch(BpmnError e) {
243 }catch (Exception ex){
244 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
246 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
248 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
252 * create RAN Slice Profile Instance
255 void createAnSliceProfileInstance(DelegateExecution execution) {
257 String globalSubscriberId = execution.getVariable("globalSubscriberId")
258 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
259 String serviceInstanceId = UUID.randomUUID().toString()
260 execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
262 String oStatus = "deactivated"
264 SliceTaskParamsAdapter sliceParams =
265 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
266 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
267 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
268 String sliceProfileName = "sliceprofile_an_" + sliceParams.serviceName
270 // create slice profile
271 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
273 //timestamp format YYYY-MM-DD hh:mm:ss
274 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
276 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
277 .customer(globalSubscriberId)
278 .serviceSubscription(subscriptionServiceType)
279 .serviceInstance(serviceInstanceId))
280 client.create(uri, rspi)
282 execution.setVariable("sliceTaskParams", sliceParams)
286 * create An Slice Profile
289 void createAnSliceProfile(DelegateExecution execution) {
291 String globalSubscriberId = execution.getVariable("globalSubscriberId")
292 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
293 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
295 SliceTaskParamsAdapter sliceParams =
296 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
297 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
298 SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
300 String profileId = UUID.randomUUID().toString()
301 anSliceProfile.setSliceProfileId(profileId)
303 SliceProfile sliceProfile = new SliceProfile()
304 sliceProfile.setProfileId(profileId)
305 sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
306 sliceProfile.setMaxNumberOfUEs(anSliceProfile.maxNumberOfUEs)
307 sliceProfile.setLatency(anSliceProfile.latency)
308 sliceProfile.setMaxNumberOfPDUSession(anSliceProfile.maxNumberOfPDUSession)
309 sliceProfile.setExpDataRateDL(anSliceProfile.expDataRateDL)
310 sliceProfile.setExpDataRateUL(anSliceProfile.expDataRateUL)
311 sliceProfile.setAreaTrafficCapDL(anSliceProfile.areaTrafficCapDL)
312 sliceProfile.setAreaTrafficCapUL(anSliceProfile.areaTrafficCapUL)
313 sliceProfile.setOverallUserDensity(anSliceProfile.overallUserDensity)
314 sliceProfile.setActivityFactor(anSliceProfile.activityFactor)
315 sliceProfile.setUeMobilityLevel(anSliceProfile.ueMobilityLevel)
316 sliceProfile.setResourceSharingLevel(anSliceProfile.resourceSharingLevel)
317 sliceProfile.setCsAvailabilityTarget(anSliceProfile.csAvailabilityTarget)
318 sliceProfile.setCsReliabilityMeanTime(anSliceProfile.csReliabilityMeanTime)
319 sliceProfile.setExpDataRate(anSliceProfile.expDataRate)
320 sliceProfile.setMsgSizeByte(anSliceProfile.msgSizeByte)
321 sliceProfile.setTransferIntervalTarget(anSliceProfile.transferIntervalTarget)
322 sliceProfile.setSurvivalTime(anSliceProfile.survivalTime)
324 AAIResourceUri uri = AAIUriFactory.createResourceUri(
325 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
326 .serviceSubscription(subscriptionServiceType)
327 .serviceInstance(sliceTaskInfo.sliceInstanceId)
328 .sliceProfile(profileId)
330 client.create(uri, sliceProfile)
331 execution.setVariable("sliceTaskParams", sliceParams)
334 void createANEndpoint(DelegateExecution execution){
335 logger.debug("Enter createANEndpoint in DoAllocateNSIandNSSI()")
336 SliceTaskParamsAdapter sliceParams =
337 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
338 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
340 NetworkRoute route = new NetworkRoute()
341 String routeId = UUID.randomUUID().toString()
342 route.setRouteId(routeId)
343 route.setType("endpoint")
345 route.setFunction("3gppTransportEP")
346 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
347 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
348 route.setLogicalInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
349 route.setAddressFamily("ipv4")
350 route.setPrefixLength(24)
351 sliceTaskInfo.setEndPointId(routeId)
353 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
354 client.create(uri, route)
355 execution.setVariable("sliceTaskParams", sliceParams)
356 logger.info("an endpointId:" + sliceParams.anSliceTaskInfo.endPointId)
360 void createCNEndpoint(DelegateExecution execution){
361 logger.debug("Enter createCNNetworkRoute in DoAllocateNSIandNSSI()")
362 SliceTaskParamsAdapter sliceParams =
363 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
364 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
366 NetworkRoute route = new NetworkRoute()
367 String routeId = UUID.randomUUID().toString()
368 route.setRouteId(routeId)
369 route.setType("endpoint")
371 route.setFunction("3gppTransportEP")
372 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
373 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
374 route.setLogicalInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
375 route.setAddressFamily("ipv4")
376 route.setPrefixLength(24)
378 sliceTaskInfo.setEndPointId(routeId)
379 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
380 client.create(uri, route)
382 execution.setVariable("cnEndpointId", routeId)
383 execution.setVariable("sliceTaskParams", sliceParams)
384 logger.info("cn endpointId:" + sliceParams.cnSliceTaskInfo.endPointId)
388 * prepare AllocateAnNssi
391 void prepareAllocateAnNssi(DelegateExecution execution) {
394 SliceTaskParamsAdapter sliceParams =
395 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
396 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
398 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
400 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
401 allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
402 allocateAnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
403 allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
404 allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
405 allocateAnNssi.nssiName = "nssi_an" + execution.getVariable("sliceServiceInstanceName")
406 allocateAnNssi.scriptName = sliceTaskInfo.getScriptName()
407 NsiInfo nsiInfo = new NsiInfo()
408 nsiInfo.nsiId = sliceParams.suggestNsiId
409 nsiInfo.nsiName = sliceParams.suggestNsiName
410 allocateAnNssi.nsiInfo = nsiInfo
412 EndPoint endPoint = new EndPoint()
413 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
414 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
415 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
416 allocateAnNssi.setEndPoint(endPoint)
418 EsrInfo esrInfo = new EsrInfo()
419 //todo: vendor and network
420 esrInfo.setVendor(sliceTaskInfo.getVendor())
421 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
423 String globalSubscriberId = execution.getVariable("globalSubscriberId")
424 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
427 ServiceInfo serviceInfo = new ServiceInfo()
428 serviceInfo.globalSubscriberId = globalSubscriberId
429 serviceInfo.subscriptionServiceType = subscriptionServiceType
430 serviceInfo.nsiId = sliceParams.suggestNsiId
431 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
432 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
433 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
434 serviceInfo.nssiName = sliceTaskInfo.suggestNssiId ? sliceTaskInfo.NSSTInfo.name : allocateAnNssi.nssiName
435 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
437 nbiRequest.setServiceInfo(serviceInfo)
438 nbiRequest.setEsrInfo(esrInfo)
439 nbiRequest.setAllocateAnNssi(allocateAnNssi)
441 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
442 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
443 execution.setVariable("anSubnetType", SubnetType.AN)
448 * create RAN Slice Profile Instance
451 void createCnSliceProfileInstance(DelegateExecution execution) {
453 String globalSubscriberId = execution.getVariable("globalSubscriberId")
454 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
455 String serviceInstanceId = UUID.randomUUID().toString()
456 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
458 String oStatus = "deactivated"
460 SliceTaskParamsAdapter sliceParams =
461 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
462 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
463 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
464 String sliceProfileName = "sliceprofile_cn_"+sliceParams.serviceName
466 // create slice profile
467 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
469 //timestamp format YYYY-MM-DD hh:mm:ss
470 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
472 execution.setVariable("communicationServiceInstance", rspi)
474 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
475 .customer(globalSubscriberId)
476 .serviceSubscription(subscriptionServiceType)
477 .serviceInstance(serviceInstanceId))
478 client.create(uri, rspi)
479 execution.setVariable("sliceTaskParams", sliceParams)
483 * create Cn Slice Profile
486 void createCnSliceProfile(DelegateExecution execution) {
488 String globalSubscriberId = execution.getVariable("globalSubscriberId")
489 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
490 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
492 SliceTaskParamsAdapter sliceParams =
493 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
495 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
496 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
498 String profileId = UUID.randomUUID().toString()
499 cnSliceProfile.setSliceProfileId(profileId)
501 SliceProfile sliceProfile = new SliceProfile()
502 sliceProfile.setProfileId(profileId)
503 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
504 sliceProfile.setMaxNumberOfUEs(cnSliceProfile.maxNumberOfUEs)
505 sliceProfile.setLatency(cnSliceProfile.latency)
506 sliceProfile.setMaxNumberOfPDUSession(cnSliceProfile.maxNumberOfPDUSession)
507 sliceProfile.setExpDataRateDL(cnSliceProfile.expDataRateDL)
508 sliceProfile.setExpDataRateUL(cnSliceProfile.expDataRateUL)
509 sliceProfile.setAreaTrafficCapDL(cnSliceProfile.areaTrafficCapDL)
510 sliceProfile.setAreaTrafficCapUL(cnSliceProfile.areaTrafficCapUL)
511 sliceProfile.setOverallUserDensity(cnSliceProfile.overallUserDensity)
512 sliceProfile.setActivityFactor(cnSliceProfile.activityFactor)
513 sliceProfile.setUeMobilityLevel(cnSliceProfile.ueMobilityLevel)
514 sliceProfile.setResourceSharingLevel(cnSliceProfile.resourceSharingLevel)
515 sliceProfile.setCsAvailabilityTarget(cnSliceProfile.csAvailabilityTarget)
516 sliceProfile.setCsReliabilityMeanTime(cnSliceProfile.csReliabilityMeanTime)
517 sliceProfile.setExpDataRate(cnSliceProfile.expDataRate)
518 sliceProfile.setMsgSizeByte(cnSliceProfile.msgSizeByte)
519 sliceProfile.setTransferIntervalTarget(cnSliceProfile.transferIntervalTarget)
520 sliceProfile.setSurvivalTime(cnSliceProfile.survivalTime)
522 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
523 .customer(globalSubscriberId)
524 .serviceSubscription(subscriptionServiceType)
525 .serviceInstance(sliceTaskInfo.sliceInstanceId)
526 .sliceProfile(profileId))
527 client.create(uri, sliceProfile)
528 execution.setVariable("sliceTaskParams", sliceParams)
532 * prepare AllocateCnNssi
535 void prepareAllocateCnNssi(DelegateExecution execution) {
538 SliceTaskParamsAdapter sliceParams =
539 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
540 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
542 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
544 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
545 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
546 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
547 allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
548 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
549 allocateCnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
550 allocateCnNssi.scriptName = sliceTaskInfo.getScriptName()
552 NsiInfo nsiInfo = new NsiInfo()
553 nsiInfo.nsiId = sliceParams.suggestNsiId
554 nsiInfo.nsiName = sliceParams.suggestNsiName
555 allocateCnNssi.nsiInfo = nsiInfo
557 EndPoint endPoint = new EndPoint()
558 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
559 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
560 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
561 allocateCnNssi.setEndPoint(endPoint)
563 EsrInfo esrInfo = new EsrInfo()
564 //todo: vendor and network
565 esrInfo.setVendor(sliceTaskInfo.getVendor())
566 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
568 String globalSubscriberId = execution.getVariable("globalSubscriberId")
569 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
572 ServiceInfo serviceInfo = new ServiceInfo()
573 serviceInfo.globalSubscriberId = globalSubscriberId
574 serviceInfo.subscriptionServiceType = subscriptionServiceType
575 serviceInfo.nsiId = sliceParams.suggestNsiId
576 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
577 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
578 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
579 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
580 serviceInfo.nssiName = allocateCnNssi.nssiName
582 nbiRequest.setServiceInfo(serviceInfo)
583 nbiRequest.setEsrInfo(esrInfo)
584 nbiRequest.setAllocateCnNssi(allocateCnNssi)
586 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
587 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
588 execution.setVariable("cnSubnetType", SubnetType.CN)
593 * create TN Slice Profile Instance
596 void createTnBHSliceProfileInstance(DelegateExecution execution) {
597 String globalSubscriberId = execution.getVariable("globalSubscriberId")
598 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
600 String oStatus = "deactivated"
602 SliceTaskParamsAdapter sliceParams =
603 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
605 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
606 String serviceInstanceId = UUID.randomUUID().toString()
608 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
609 String sliceProfileName = "sliceprofile_tn_" + sliceParams.serviceName
610 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
612 // create slice profile
613 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
615 //timestamp format YYYY-MM-DD hh:mm:ss
616 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
618 execution.setVariable("communicationServiceInstance", rspi)
620 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
621 .customer(globalSubscriberId)
622 .serviceSubscription(subscriptionServiceType)
623 .serviceInstance(serviceInstanceId))
624 client.create(uri, rspi)
626 execution.setVariable("sliceTaskParams", sliceParams)
630 * create Tn Slice Profile
633 void createTnBHSliceProfile(DelegateExecution execution) {
635 String globalSubscriberId = execution.getVariable("globalSubscriberId")
636 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
638 SliceTaskParamsAdapter sliceParams =
639 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
641 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
643 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
644 String profileId = UUID.randomUUID().toString()
645 tnSliceProfile.setSliceProfileId(profileId)
647 SliceProfile sliceProfile = new SliceProfile()
648 sliceProfile.setProfileId(profileId)
649 sliceProfile.setLatency(tnSliceProfile.latency)
650 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
651 sliceProfile.setJitter(tnSliceProfile.jitter)
653 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
654 .customer(globalSubscriberId)
655 .serviceSubscription(subscriptionServiceType)
656 .serviceInstance(sliceTaskInfo.sliceInstanceId)
657 .sliceProfile(profileId))
658 client.create(uri, sliceProfile)
660 execution.setVariable("sliceTaskParams", sliceParams)
664 * prepare AllocateCnNssi
667 void prepareAllocateTnBHNssi(DelegateExecution execution) {
670 SliceTaskParamsAdapter sliceParams =
671 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
672 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
674 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
676 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
677 allocateTnNssi.setNssiId(sliceTaskInfo.suggestNssiId)
678 allocateTnNssi.scriptName = sliceTaskInfo.getScriptName()
679 //todo: AllocateTnNssi
680 //todo: endPointId -> set into tn
681 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
682 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
683 List<ConnectionLink> connectionLinks = new ArrayList<>()
684 ConnectionLink connectionLink = new ConnectionLink()
685 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
686 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
687 connectionLinks.add(connectionLink)
688 transportSliceNetwork.setConnectionLinks(connectionLinks)
689 transportSliceNetworks.add(transportSliceNetwork)
690 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
692 allocateTnNssi.setNetworkSliceInfos()
693 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
694 allocateTnNssi.getSliceProfile().setDomainType(sliceTaskInfo.subnetType.subnetType)
695 NsiInfo nsiInfo = new NsiInfo()
696 nsiInfo.setNsiId(sliceParams.suggestNsiId)
697 nsiInfo.setNsiName(sliceParams.suggestNsiName)
698 allocateTnNssi.setNsiInfo(nsiInfo)
700 //allocateTnNssi.networkSliceInfos
702 EsrInfo esrInfo = new EsrInfo()
703 esrInfo.setVendor(sliceTaskInfo.getVendor())
704 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
706 String globalSubscriberId = execution.getVariable("globalSubscriberId")
707 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
709 ServiceInfo serviceInfo = new ServiceInfo()
710 serviceInfo.globalSubscriberId = globalSubscriberId
711 serviceInfo.subscriptionServiceType = subscriptionServiceType
712 serviceInfo.nsiId = sliceParams.suggestNsiId
713 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
714 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
715 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
716 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
717 serviceInfo.nssiName = "nssi_tn" + execution.getVariable("sliceServiceInstanceName")
719 nbiRequest.setServiceInfo(serviceInfo)
720 nbiRequest.setEsrInfo(esrInfo)
721 nbiRequest.setAllocateTnNssi(allocateTnNssi)
723 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
724 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
725 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
729 * Update relationship between
731 * 2. Slice Profile and Service Profile
732 * 3. SliceProfile and NSSI
733 * 4. sliceProfile and endpoint
737 public void updateAnRelationship(DelegateExecution execution) {
739 SliceTaskParamsAdapter sliceParams =
740 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
742 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
743 String nssiId = result.getNssiId()
744 String nsiId = sliceParams.getSuggestNsiId()
745 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
746 String serviceProfileInstanceId = sliceParams.serviceId
747 String epId = sliceParams.anSliceTaskInfo.endPointId
749 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
750 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
751 //execution.setVariable("endPointIdAn", endPointId)
752 updateRelationship(execution, nsiId, nssiId)
754 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
756 updateRelationship(execution, sliceProfileInstanceId, nssiId)
758 updateEPRelationship(execution, nssiId, epId)
760 updateEPRelationship(execution, sliceProfileInstanceId, epId)
762 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
763 execution.setVariable("sliceTaskParams", sliceParams)
768 * Update relationship between
770 * 2. Slice Profile and Service Profile
771 * 3. SliceProfile and NSSI
775 public void updateCnRelationship(DelegateExecution execution) {
777 SliceTaskParamsAdapter sliceParams =
778 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
780 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
781 String nssiId = result.getNssiId()
782 String nsiId = sliceParams.getSuggestNsiId()
783 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
784 String serviceProfileInstanceId = sliceParams.serviceId
785 String epId = sliceParams.cnSliceTaskInfo.endPointId
787 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
788 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
789 // execution.setVariable("endPointIdCn", endPointId)
791 updateRelationship(execution, nsiId, nssiId)
793 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
795 updateRelationship(execution, sliceProfileInstanceId, nssiId)
797 updateEPRelationship(execution, nssiId, epId)
799 updateEPRelationship(execution, sliceProfileInstanceId, epId)
801 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
802 execution.setVariable("sliceTaskParams", sliceParams)
806 * get endpoint Id from AAI by nssi id
811 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
812 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
813 //todo: allottedResourceId
815 SliceTaskParamsAdapter sliceParams =
816 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
818 //sliceParams.setServiceId(nsiServiceInstanceID)
819 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
820 .customer(execution.getVariable("globalSubscriberId"))
821 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
822 .serviceInstance(nssiId))
824 String endpointId = null
827 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
828 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
829 if (!si.isPresent()) {
830 String msg = "NSSI in the option doesn't exist. " + nssiId
832 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
834 ServiceInstance nssiInstance = si.get()
835 //todo: handle relationship and return endPointId
836 if (nssiInstance.relationshipList == null) {
837 String msg = "relationshipList of " + nssiId + " is null"
841 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
842 if (relationship.relationshipLabel){
843 endpointId = relationship //todo
850 }catch(BpmnError e) {
852 }catch (Exception ex){
853 String msg = "Exception: " + ex
855 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
857 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
861 * Update relationship between
863 * 2. Slice Profile and Service Profile
864 * 3. SliceProfile and NSSI
868 public void updateTnBHRelationship(DelegateExecution execution) {
869 SliceTaskParamsAdapter sliceParams =
870 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
872 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
873 String nssiId = result.getNssiId()
874 String nsiId = sliceParams.getSuggestNsiId()
875 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
876 String serviceProfileInstanceId = sliceParams.serviceId
879 updateRelationship(execution, nsiId, nssiId)
881 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
883 updateRelationship(execution,sliceProfileInstanceId, nssiId)
885 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
886 execution.setVariable("sliceTaskParams", sliceParams)
890 * sourceId -> targetId
895 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
897 Relationship relationship = new Relationship()
899 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
900 .customer(execution.getVariable("globalSubscriberId"))
901 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
902 .serviceInstance(targetId))
904 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
906 relationship.setRelatedLink(targetInstanceUri.build().toString())
908 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
909 .customer(execution.getVariable("globalSubscriberId"))
910 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
911 .serviceInstance(sourceId))
913 client.create(sourceInstanceUri, relationship)
917 * update endpoint relationship
922 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
924 Relationship relationship = new Relationship()
926 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
928 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
930 relationship.setRelatedLink(endpointUri.build().toString())
932 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
933 .customer(execution.getVariable("globalSubscriberId"))
934 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
935 .serviceInstance(sourceId))
937 client.create(sourceInstanceUri, relationship)
940 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String sliceProfileName, String oStatus) {
941 // create slice profile
942 ServiceInstance rspi = new ServiceInstance()
943 rspi.setServiceInstanceName(sliceProfileName)
944 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
945 rspi.setServiceRole("slice-profile")
946 rspi.setOrchestrationStatus(oStatus)
947 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
948 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
949 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
950 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
951 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
952 rspi.setServiceFunction(sliceTaskInfo.sliceProfile.getResourceSharingLevel())
954 //timestamp format YYYY-MM-DD hh:mm:ss
955 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))