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 NsiInfo nsiInfo = new NsiInfo()
695 nsiInfo.setNsiId(sliceParams.suggestNsiId)
696 nsiInfo.setNsiName(sliceParams.suggestNsiName)
697 allocateTnNssi.setNsiInfo(nsiInfo)
699 //allocateTnNssi.networkSliceInfos
701 EsrInfo esrInfo = new EsrInfo()
702 esrInfo.setVendor(sliceTaskInfo.getVendor())
703 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
705 String globalSubscriberId = execution.getVariable("globalSubscriberId")
706 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
708 ServiceInfo serviceInfo = new ServiceInfo()
709 serviceInfo.globalSubscriberId = globalSubscriberId
710 serviceInfo.subscriptionServiceType = subscriptionServiceType
711 serviceInfo.nsiId = sliceParams.suggestNsiId
712 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
713 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
714 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
715 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
716 serviceInfo.nssiName = "nssi_tn" + execution.getVariable("sliceServiceInstanceName")
718 nbiRequest.setServiceInfo(serviceInfo)
719 nbiRequest.setEsrInfo(esrInfo)
720 nbiRequest.setAllocateTnNssi(allocateTnNssi)
722 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
723 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
724 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
728 * Update relationship between
730 * 2. Slice Profile and Service Profile
731 * 3. SliceProfile and NSSI
732 * 4. sliceProfile and endpoint
736 public void updateAnRelationship(DelegateExecution execution) {
738 SliceTaskParamsAdapter sliceParams =
739 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
741 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
742 String nssiId = result.getNssiId()
743 String nsiId = sliceParams.getSuggestNsiId()
744 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
745 String serviceProfileInstanceId = sliceParams.serviceId
746 String epId = sliceParams.anSliceTaskInfo.endPointId
748 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
749 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
750 //execution.setVariable("endPointIdAn", endPointId)
751 updateRelationship(execution, nsiId, nssiId)
753 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
755 updateRelationship(execution, sliceProfileInstanceId, nssiId)
757 updateEPRelationship(execution, nssiId, epId)
759 updateEPRelationship(execution, sliceProfileInstanceId, epId)
761 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
762 execution.setVariable("sliceTaskParams", sliceParams)
767 * Update relationship between
769 * 2. Slice Profile and Service Profile
770 * 3. SliceProfile and NSSI
774 public void updateCnRelationship(DelegateExecution execution) {
776 SliceTaskParamsAdapter sliceParams =
777 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
779 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
780 String nssiId = result.getNssiId()
781 String nsiId = sliceParams.getSuggestNsiId()
782 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
783 String serviceProfileInstanceId = sliceParams.serviceId
784 String epId = sliceParams.cnSliceTaskInfo.endPointId
786 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
787 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
788 // execution.setVariable("endPointIdCn", endPointId)
790 updateRelationship(execution, nsiId, nssiId)
792 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
794 updateRelationship(execution, sliceProfileInstanceId, nssiId)
796 updateEPRelationship(execution, nssiId, epId)
798 updateEPRelationship(execution, sliceProfileInstanceId, epId)
800 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
801 execution.setVariable("sliceTaskParams", sliceParams)
805 * get endpoint Id from AAI by nssi id
810 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
811 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
812 //todo: allottedResourceId
814 SliceTaskParamsAdapter sliceParams =
815 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
817 //sliceParams.setServiceId(nsiServiceInstanceID)
818 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
819 .customer(execution.getVariable("globalSubscriberId"))
820 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
821 .serviceInstance(nssiId))
823 String endpointId = null
826 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
827 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
828 if (!si.isPresent()) {
829 String msg = "NSSI in the option doesn't exist. " + nssiId
831 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
833 ServiceInstance nssiInstance = si.get()
834 //todo: handle relationship and return endPointId
835 if (nssiInstance.relationshipList == null) {
836 String msg = "relationshipList of " + nssiId + " is null"
840 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
841 if (relationship.relationshipLabel){
842 endpointId = relationship //todo
849 }catch(BpmnError e) {
851 }catch (Exception ex){
852 String msg = "Exception: " + ex
854 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
856 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
860 * Update relationship between
862 * 2. Slice Profile and Service Profile
863 * 3. SliceProfile and NSSI
867 public void updateTnBHRelationship(DelegateExecution execution) {
868 SliceTaskParamsAdapter sliceParams =
869 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
871 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
872 String nssiId = result.getNssiId()
873 String nsiId = sliceParams.getSuggestNsiId()
874 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
875 String serviceProfileInstanceId = sliceParams.serviceId
878 updateRelationship(execution, nsiId, nssiId)
880 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
882 updateRelationship(execution,sliceProfileInstanceId, nssiId)
884 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
885 execution.setVariable("sliceTaskParams", sliceParams)
889 * sourceId -> targetId
894 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
896 Relationship relationship = new Relationship()
898 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
899 .customer(execution.getVariable("globalSubscriberId"))
900 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
901 .serviceInstance(targetId))
903 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
905 relationship.setRelatedLink(targetInstanceUri.build().toString())
907 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
908 .customer(execution.getVariable("globalSubscriberId"))
909 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
910 .serviceInstance(sourceId))
912 client.create(sourceInstanceUri, relationship)
916 * update endpoint relationship
921 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
923 Relationship relationship = new Relationship()
925 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
927 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
929 relationship.setRelatedLink(endpointUri.build().toString())
931 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
932 .customer(execution.getVariable("globalSubscriberId"))
933 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
934 .serviceInstance(sourceId))
936 client.create(sourceInstanceUri, relationship)
939 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String sliceProfileName, String oStatus) {
940 // create slice profile
941 ServiceInstance rspi = new ServiceInstance()
942 rspi.setServiceInstanceName(sliceProfileName)
943 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
944 rspi.setServiceRole("slice-profile")
945 rspi.setOrchestrationStatus(oStatus)
946 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
947 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
948 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
949 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
950 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
951 rspi.setServiceFunction(sliceTaskInfo.sliceProfile.getResourceSharingLevel())
953 //timestamp format YYYY-MM-DD hh:mm:ss
954 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))