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 //todo: AllocateTnNssi
673 //todo: endPointId -> set into tn
674 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
675 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
676 List<ConnectionLink> connectionLinks = new ArrayList<>()
677 ConnectionLink connectionLink = new ConnectionLink()
678 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
679 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
680 connectionLinks.add(connectionLink)
681 transportSliceNetwork.setConnectionLinks(connectionLinks)
682 transportSliceNetworks.add(transportSliceNetwork)
683 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
685 allocateTnNssi.setNetworkSliceInfos()
686 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
687 NsiInfo nsiInfo = new NsiInfo()
688 nsiInfo.setNsiId(sliceParams.suggestNsiId)
689 nsiInfo.setNsiName(sliceParams.suggestNsiName)
690 allocateTnNssi.setNsiInfo(nsiInfo)
692 //allocateTnNssi.networkSliceInfos
694 EsrInfo esrInfo = new EsrInfo()
695 esrInfo.setVendor(sliceTaskInfo.getVendor())
696 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
698 String globalSubscriberId = execution.getVariable("globalSubscriberId")
699 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
701 ServiceInfo serviceInfo = new ServiceInfo()
702 serviceInfo.globalSubscriberId = globalSubscriberId
703 serviceInfo.subscriptionServiceType = subscriptionServiceType
704 serviceInfo.nsiId = sliceParams.suggestNsiId
705 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
706 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
707 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
708 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
709 serviceInfo.nssiName = "nssi_tn" + execution.getVariable("sliceServiceInstanceName")
711 nbiRequest.setServiceInfo(serviceInfo)
712 nbiRequest.setEsrInfo(esrInfo)
713 nbiRequest.setAllocateTnNssi(allocateTnNssi)
715 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
716 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
717 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
721 * Update relationship between
723 * 2. Slice Profile and Service Profile
724 * 3. SliceProfile and NSSI
725 * 4. sliceProfile and endpoint
729 public void updateAnRelationship(DelegateExecution execution) {
731 SliceTaskParamsAdapter sliceParams =
732 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
734 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
735 String nssiId = result.getNssiId()
736 String nsiId = sliceParams.getSuggestNsiId()
737 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
738 String serviceProfileInstanceId = sliceParams.serviceId
739 String epId = sliceParams.anSliceTaskInfo.endPointId
741 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
742 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
743 //execution.setVariable("endPointIdAn", endPointId)
744 updateRelationship(execution, nsiId, nssiId)
746 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
748 updateRelationship(execution, sliceProfileInstanceId, nssiId)
750 updateEPRelationship(execution, nssiId, epId)
752 updateEPRelationship(execution, sliceProfileInstanceId, epId)
754 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
755 execution.setVariable("sliceTaskParams", sliceParams)
760 * Update relationship between
762 * 2. Slice Profile and Service Profile
763 * 3. SliceProfile and NSSI
767 public void updateCnRelationship(DelegateExecution execution) {
769 SliceTaskParamsAdapter sliceParams =
770 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
772 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
773 String nssiId = result.getNssiId()
774 String nsiId = sliceParams.getSuggestNsiId()
775 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
776 String serviceProfileInstanceId = sliceParams.serviceId
777 String epId = sliceParams.cnSliceTaskInfo.endPointId
779 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
780 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
781 // execution.setVariable("endPointIdCn", endPointId)
783 updateRelationship(execution, nsiId, nssiId)
785 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
787 updateRelationship(execution, sliceProfileInstanceId, nssiId)
789 updateEPRelationship(execution, nssiId, epId)
791 updateEPRelationship(execution, sliceProfileInstanceId, epId)
793 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
794 execution.setVariable("sliceTaskParams", sliceParams)
798 * get endpoint Id from AAI by nssi id
803 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
804 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
805 //todo: allottedResourceId
807 SliceTaskParamsAdapter sliceParams =
808 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
810 //sliceParams.setServiceId(nsiServiceInstanceID)
811 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
812 .customer(execution.getVariable("globalSubscriberId"))
813 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
814 .serviceInstance(nssiId))
816 String endpointId = null
819 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
820 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
821 if (!si.isPresent()) {
822 String msg = "NSSI in the option doesn't exist. " + nssiId
824 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
826 ServiceInstance nssiInstance = si.get()
827 //todo: handle relationship and return endPointId
828 if (nssiInstance.relationshipList == null) {
829 String msg = "relationshipList of " + nssiId + " is null"
833 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
834 if (relationship.relationshipLabel){
835 endpointId = relationship //todo
842 }catch(BpmnError e) {
844 }catch (Exception ex){
845 String msg = "Exception: " + ex
847 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
849 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
853 * Update relationship between
855 * 2. Slice Profile and Service Profile
856 * 3. SliceProfile and NSSI
860 public void updateTnBHRelationship(DelegateExecution execution) {
861 SliceTaskParamsAdapter sliceParams =
862 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
864 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
865 String nssiId = result.getNssiId()
866 String nsiId = sliceParams.getSuggestNsiId()
867 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
868 String serviceProfileInstanceId = sliceParams.serviceId
871 updateRelationship(execution, nsiId, nssiId)
873 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
875 updateRelationship(execution,sliceProfileInstanceId, nssiId)
877 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
878 execution.setVariable("sliceTaskParams", sliceParams)
882 * sourceId -> targetId
887 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
889 Relationship relationship = new Relationship()
891 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
892 .customer(execution.getVariable("globalSubscriberId"))
893 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
894 .serviceInstance(targetId))
896 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
898 relationship.setRelatedLink(targetInstanceUri.build().toString())
900 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
901 .customer(execution.getVariable("globalSubscriberId"))
902 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
903 .serviceInstance(sourceId))
905 client.create(sourceInstanceUri, relationship)
909 * update endpoint relationship
914 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
916 Relationship relationship = new Relationship()
918 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
920 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
922 relationship.setRelatedLink(endpointUri.build().toString())
924 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
925 .customer(execution.getVariable("globalSubscriberId"))
926 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
927 .serviceInstance(sourceId))
929 client.create(sourceInstanceUri, relationship)
932 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String sliceProfileName, String oStatus) {
933 // create slice profile
934 ServiceInstance rspi = new ServiceInstance()
935 rspi.setServiceInstanceName(sliceProfileName)
936 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
937 rspi.setServiceRole("slice-profile")
938 rspi.setOrchestrationStatus(oStatus)
939 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
940 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
941 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
942 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
943 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
945 //timestamp format YYYY-MM-DD hh:mm:ss
946 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))