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)
267 // create slice profile
268 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
270 //timestamp format YYYY-MM-DD hh:mm:ss
271 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
273 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
274 .customer(globalSubscriberId)
275 .serviceSubscription(subscriptionServiceType)
276 .serviceInstance(serviceInstanceId))
277 client.create(uri, rspi)
279 execution.setVariable("sliceTaskParams", sliceParams)
283 * create An Slice Profile
286 void createAnSliceProfile(DelegateExecution execution) {
288 String globalSubscriberId = execution.getVariable("globalSubscriberId")
289 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
290 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
292 SliceTaskParamsAdapter sliceParams =
293 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
294 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
295 SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
297 String profileId = UUID.randomUUID().toString()
298 anSliceProfile.setSliceProfileId(profileId)
300 SliceProfile sliceProfile = new SliceProfile()
301 sliceProfile.setProfileId(profileId)
302 sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
303 sliceProfile.setMaxNumberOfUEs(anSliceProfile.maxNumberOfUEs)
304 sliceProfile.setLatency(anSliceProfile.latency)
305 sliceProfile.setMaxNumberOfPDUSession(anSliceProfile.maxNumberOfPDUSession)
306 sliceProfile.setExpDataRateDL(anSliceProfile.expDataRateDL)
307 sliceProfile.setExpDataRateUL(anSliceProfile.expDataRateUL)
308 sliceProfile.setAreaTrafficCapDL(anSliceProfile.areaTrafficCapDL)
309 sliceProfile.setAreaTrafficCapUL(anSliceProfile.areaTrafficCapUL)
310 sliceProfile.setOverallUserDensity(anSliceProfile.overallUserDensity)
311 sliceProfile.setActivityFactor(anSliceProfile.activityFactor)
312 sliceProfile.setUeMobilityLevel(anSliceProfile.ueMobilityLevel)
313 sliceProfile.setResourceSharingLevel(anSliceProfile.resourceSharingLevel)
314 sliceProfile.setCsAvailabilityTarget(anSliceProfile.csAvailabilityTarget)
315 sliceProfile.setCsReliabilityMeanTime(anSliceProfile.csReliabilityMeanTime)
316 sliceProfile.setExpDataRate(anSliceProfile.expDataRate)
317 sliceProfile.setMsgSizeByte(anSliceProfile.msgSizeByte)
318 sliceProfile.setTransferIntervalTarget(anSliceProfile.transferIntervalTarget)
319 sliceProfile.setSurvivalTime(anSliceProfile.survivalTime)
321 AAIResourceUri uri = AAIUriFactory.createResourceUri(
322 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
323 .serviceSubscription(subscriptionServiceType)
324 .serviceInstance(sliceTaskInfo.sliceInstanceId)
325 .sliceProfile(profileId)
327 client.create(uri, sliceProfile)
328 execution.setVariable("sliceTaskParams", sliceParams)
331 void createANEndpoint(DelegateExecution execution){
332 logger.debug("Enter createANEndpoint in DoAllocateNSIandNSSI()")
333 SliceTaskParamsAdapter sliceParams =
334 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
335 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
337 NetworkRoute route = new NetworkRoute()
338 String routeId = UUID.randomUUID().toString()
339 route.setRouteId(routeId)
340 route.setType("endpoint")
342 route.setFunction("3gppTransportEP")
343 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
344 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
345 route.setAddressFamily("ipv4")
346 route.setPrefixLength(24)
347 sliceTaskInfo.setEndPointId(routeId)
349 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
350 client.create(uri, route)
351 execution.setVariable("sliceTaskParams", sliceParams)
352 logger.info("an endpointId:" + sliceParams.anSliceTaskInfo.endPointId)
356 void createCNEndpoint(DelegateExecution execution){
357 logger.debug("Enter createCNNetworkRoute in DoAllocateNSIandNSSI()")
358 SliceTaskParamsAdapter sliceParams =
359 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
360 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
362 NetworkRoute route = new NetworkRoute()
363 String routeId = UUID.randomUUID().toString()
364 route.setRouteId(routeId)
365 route.setType("endpoint")
367 route.setFunction("3gppTransportEP")
368 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
369 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
370 route.setAddressFamily("ipv4")
371 route.setPrefixLength(24)
373 sliceTaskInfo.setEndPointId(routeId)
374 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
375 client.create(uri, route)
377 execution.setVariable("cnEndpointId", routeId)
378 execution.setVariable("sliceTaskParams", sliceParams)
379 logger.info("cn endpointId:" + sliceParams.cnSliceTaskInfo.endPointId)
383 * prepare AllocateAnNssi
386 void prepareAllocateAnNssi(DelegateExecution execution) {
389 SliceTaskParamsAdapter sliceParams =
390 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
391 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
393 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
395 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
396 allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
397 allocateAnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
398 allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
399 allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
400 allocateAnNssi.nssiName = "nssi_an" + execution.getVariable("sliceServiceInstanceName")
401 NsiInfo nsiInfo = new NsiInfo()
402 nsiInfo.nsiId = sliceParams.suggestNsiId
403 nsiInfo.nsiName = sliceParams.suggestNsiName
404 allocateAnNssi.nsiInfo = nsiInfo
406 EndPoint endPoint = new EndPoint()
407 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
408 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
409 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
410 allocateAnNssi.setEndPoint(endPoint)
412 EsrInfo esrInfo = new EsrInfo()
413 //todo: vendor and network
414 esrInfo.setVendor(sliceTaskInfo.getVendor())
415 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
417 String globalSubscriberId = execution.getVariable("globalSubscriberId")
418 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
421 ServiceInfo serviceInfo = new ServiceInfo()
422 serviceInfo.globalSubscriberId = globalSubscriberId
423 serviceInfo.subscriptionServiceType = subscriptionServiceType
424 serviceInfo.nsiId = sliceParams.suggestNsiId
425 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
426 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
427 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
428 serviceInfo.nssiName = allocateAnNssi.nssiName
430 nbiRequest.setServiceInfo(serviceInfo)
431 nbiRequest.setEsrInfo(esrInfo)
432 nbiRequest.setAllocateAnNssi(allocateAnNssi)
434 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
435 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
436 execution.setVariable("anSubnetType", SubnetType.AN)
441 * create RAN Slice Profile Instance
444 void createCnSliceProfileInstance(DelegateExecution execution) {
446 String globalSubscriberId = execution.getVariable("globalSubscriberId")
447 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
448 String serviceInstanceId = UUID.randomUUID().toString()
449 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
451 String oStatus = "deactivated"
453 SliceTaskParamsAdapter sliceParams =
454 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
455 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
456 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
458 // create slice profile
459 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
461 //timestamp format YYYY-MM-DD hh:mm:ss
462 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
464 execution.setVariable("communicationServiceInstance", rspi)
466 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
467 .customer(globalSubscriberId)
468 .serviceSubscription(subscriptionServiceType)
469 .serviceInstance(serviceInstanceId))
470 client.create(uri, rspi)
471 execution.setVariable("sliceTaskParams", sliceParams)
475 * create Cn Slice Profile
478 void createCnSliceProfile(DelegateExecution execution) {
480 String globalSubscriberId = execution.getVariable("globalSubscriberId")
481 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
482 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
484 SliceTaskParamsAdapter sliceParams =
485 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
487 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
488 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
490 String profileId = UUID.randomUUID().toString()
491 cnSliceProfile.setSliceProfileId(profileId)
493 SliceProfile sliceProfile = new SliceProfile()
494 sliceProfile.setProfileId(profileId)
495 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
496 sliceProfile.setMaxNumberOfUEs(cnSliceProfile.maxNumberOfUEs)
497 sliceProfile.setLatency(cnSliceProfile.latency)
498 sliceProfile.setMaxNumberOfPDUSession(cnSliceProfile.maxNumberOfPDUSession)
499 sliceProfile.setExpDataRateDL(cnSliceProfile.expDataRateDL)
500 sliceProfile.setExpDataRateUL(cnSliceProfile.expDataRateUL)
501 sliceProfile.setAreaTrafficCapDL(cnSliceProfile.areaTrafficCapDL)
502 sliceProfile.setAreaTrafficCapUL(cnSliceProfile.areaTrafficCapUL)
503 sliceProfile.setOverallUserDensity(cnSliceProfile.overallUserDensity)
504 sliceProfile.setActivityFactor(cnSliceProfile.activityFactor)
505 sliceProfile.setUeMobilityLevel(cnSliceProfile.ueMobilityLevel)
506 sliceProfile.setResourceSharingLevel(cnSliceProfile.resourceSharingLevel)
507 sliceProfile.setCsAvailabilityTarget(cnSliceProfile.csAvailabilityTarget)
508 sliceProfile.setCsReliabilityMeanTime(cnSliceProfile.csReliabilityMeanTime)
509 sliceProfile.setExpDataRate(cnSliceProfile.expDataRate)
510 sliceProfile.setMsgSizeByte(cnSliceProfile.msgSizeByte)
511 sliceProfile.setTransferIntervalTarget(cnSliceProfile.transferIntervalTarget)
512 sliceProfile.setSurvivalTime(cnSliceProfile.survivalTime)
514 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
515 .customer(globalSubscriberId)
516 .serviceSubscription(subscriptionServiceType)
517 .serviceInstance(sliceTaskInfo.sliceInstanceId)
518 .sliceProfile(profileId))
519 client.create(uri, sliceProfile)
520 execution.setVariable("sliceTaskParams", sliceParams)
524 * prepare AllocateCnNssi
527 void prepareAllocateCnNssi(DelegateExecution execution) {
530 SliceTaskParamsAdapter sliceParams =
531 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
532 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
534 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
536 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
537 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
538 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
539 allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
540 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
541 allocateCnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
543 NsiInfo nsiInfo = new NsiInfo()
544 nsiInfo.nsiId = sliceParams.suggestNsiId
545 nsiInfo.nsiName = sliceParams.suggestNsiName
546 allocateCnNssi.nsiInfo = nsiInfo
548 EndPoint endPoint = new EndPoint()
549 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
550 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
551 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
552 allocateCnNssi.setEndPoint(endPoint)
554 EsrInfo esrInfo = new EsrInfo()
555 //todo: vendor and network
556 esrInfo.setVendor(sliceTaskInfo.getVendor())
557 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
559 String globalSubscriberId = execution.getVariable("globalSubscriberId")
560 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
563 ServiceInfo serviceInfo = new ServiceInfo()
564 serviceInfo.globalSubscriberId = globalSubscriberId
565 serviceInfo.subscriptionServiceType = subscriptionServiceType
566 serviceInfo.nsiId = sliceParams.suggestNsiId
567 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
568 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
569 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
570 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
571 serviceInfo.nssiName = allocateCnNssi.nssiName
573 nbiRequest.setServiceInfo(serviceInfo)
574 nbiRequest.setEsrInfo(esrInfo)
575 nbiRequest.setAllocateCnNssi(allocateCnNssi)
577 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
578 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
579 execution.setVariable("cnSubnetType", SubnetType.CN)
584 * create TN Slice Profile Instance
587 void createTnBHSliceProfileInstance(DelegateExecution execution) {
588 String globalSubscriberId = execution.getVariable("globalSubscriberId")
589 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
591 String oStatus = "deactivated"
593 SliceTaskParamsAdapter sliceParams =
594 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
596 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
597 String serviceInstanceId = UUID.randomUUID().toString()
599 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
600 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
602 // create slice profile
603 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
605 //timestamp format YYYY-MM-DD hh:mm:ss
606 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
608 execution.setVariable("communicationServiceInstance", rspi)
610 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
611 .customer(globalSubscriberId)
612 .serviceSubscription(subscriptionServiceType)
613 .serviceInstance(serviceInstanceId))
614 client.create(uri, rspi)
616 execution.setVariable("sliceTaskParams", sliceParams)
620 * create Tn Slice Profile
623 void createTnBHSliceProfile(DelegateExecution execution) {
625 String globalSubscriberId = execution.getVariable("globalSubscriberId")
626 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
628 SliceTaskParamsAdapter sliceParams =
629 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
631 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
633 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
634 String profileId = UUID.randomUUID().toString()
635 tnSliceProfile.setSliceProfileId(profileId)
637 SliceProfile sliceProfile = new SliceProfile()
638 sliceProfile.setProfileId(profileId)
639 sliceProfile.setLatency(tnSliceProfile.latency)
640 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
641 sliceProfile.setJitter(tnSliceProfile.jitter)
643 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
644 .customer(globalSubscriberId)
645 .serviceSubscription(subscriptionServiceType)
646 .serviceInstance(sliceTaskInfo.sliceInstanceId)
647 .sliceProfile(profileId))
648 client.create(uri, sliceProfile)
650 execution.setVariable("sliceTaskParams", sliceParams)
654 * prepare AllocateCnNssi
657 void prepareAllocateTnBHNssi(DelegateExecution execution) {
660 SliceTaskParamsAdapter sliceParams =
661 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
662 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
664 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
666 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
667 //todo: AllocateTnNssi
668 //todo: endPointId -> set into tn
669 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
670 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
671 List<ConnectionLink> connectionLinks = new ArrayList<>()
672 ConnectionLink connectionLink = new ConnectionLink()
673 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
674 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
675 connectionLinks.add(connectionLink)
676 transportSliceNetwork.setConnectionLinks(connectionLinks)
677 transportSliceNetworks.add(transportSliceNetwork)
678 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
680 allocateTnNssi.setNetworkSliceInfos()
681 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
682 NsiInfo nsiInfo = new NsiInfo()
683 nsiInfo.setNsiId(sliceParams.suggestNsiId)
684 nsiInfo.setNsiName(sliceParams.suggestNsiName)
685 allocateTnNssi.setNsiInfo(nsiInfo)
687 //allocateTnNssi.networkSliceInfos
689 EsrInfo esrInfo = new EsrInfo()
690 esrInfo.setVendor(sliceTaskInfo.getVendor())
691 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
693 String globalSubscriberId = execution.getVariable("globalSubscriberId")
694 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
696 ServiceInfo serviceInfo = new ServiceInfo()
697 serviceInfo.globalSubscriberId = globalSubscriberId
698 serviceInfo.subscriptionServiceType = subscriptionServiceType
699 serviceInfo.nsiId = sliceParams.suggestNsiId
700 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
701 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
702 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
703 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
705 nbiRequest.setServiceInfo(serviceInfo)
706 nbiRequest.setEsrInfo(esrInfo)
707 nbiRequest.setAllocateTnNssi(allocateTnNssi)
709 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
710 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
711 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
715 * Update relationship between
717 * 2. Slice Profile and Service Profile
718 * 3. SliceProfile and NSSI
719 * 4. sliceProfile and endpoint
723 public void updateAnRelationship(DelegateExecution execution) {
725 SliceTaskParamsAdapter sliceParams =
726 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
728 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
729 String nssiId = result.getNssiId()
730 String nsiId = sliceParams.getSuggestNsiId()
731 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
732 String serviceProfileInstanceId = sliceParams.serviceId
733 String epId = sliceParams.anSliceTaskInfo.endPointId
735 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
736 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
737 //execution.setVariable("endPointIdAn", endPointId)
738 updateRelationship(execution, nsiId, nssiId)
740 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
742 updateRelationship(execution, sliceProfileInstanceId, nssiId)
744 updateEPRelationship(execution, nssiId, epId)
746 updateEPRelationship(execution, sliceProfileInstanceId, epId)
748 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
749 execution.setVariable("sliceTaskParams", sliceParams)
754 * Update relationship between
756 * 2. Slice Profile and Service Profile
757 * 3. SliceProfile and NSSI
761 public void updateCnRelationship(DelegateExecution execution) {
763 SliceTaskParamsAdapter sliceParams =
764 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
766 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
767 String nssiId = result.getNssiId()
768 String nsiId = sliceParams.getSuggestNsiId()
769 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
770 String serviceProfileInstanceId = sliceParams.serviceId
771 String epId = sliceParams.cnSliceTaskInfo.endPointId
773 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
774 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
775 // execution.setVariable("endPointIdCn", endPointId)
777 updateRelationship(execution, nsiId, nssiId)
779 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
781 updateRelationship(execution, sliceProfileInstanceId, nssiId)
783 updateEPRelationship(execution, nssiId, epId)
785 updateEPRelationship(execution, sliceProfileInstanceId, epId)
787 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
788 execution.setVariable("sliceTaskParams", sliceParams)
792 * get endpoint Id from AAI by nssi id
797 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
798 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
799 //todo: allottedResourceId
801 SliceTaskParamsAdapter sliceParams =
802 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
804 //sliceParams.setServiceId(nsiServiceInstanceID)
805 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
806 .customer(execution.getVariable("globalSubscriberId"))
807 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
808 .serviceInstance(nssiId))
810 String endpointId = null
813 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
814 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
815 if (!si.isPresent()) {
816 String msg = "NSSI in the option doesn't exist. " + nssiId
818 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
820 ServiceInstance nssiInstance = si.get()
821 //todo: handle relationship and return endPointId
822 if (nssiInstance.relationshipList == null) {
823 String msg = "relationshipList of " + nssiId + " is null"
827 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
828 if (relationship.relationshipLabel){
829 endpointId = relationship //todo
836 }catch(BpmnError e) {
838 }catch (Exception ex){
839 String msg = "Exception: " + ex
841 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
843 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
847 * Update relationship between
849 * 2. Slice Profile and Service Profile
850 * 3. SliceProfile and NSSI
854 public void updateTnBHRelationship(DelegateExecution execution) {
855 SliceTaskParamsAdapter sliceParams =
856 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
858 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
859 String nssiId = result.getNssiId()
860 String nsiId = sliceParams.getSuggestNsiId()
861 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
862 String serviceProfileInstanceId = sliceParams.serviceId
865 updateRelationship(execution, nsiId, nssiId)
867 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
869 updateRelationship(execution,sliceProfileInstanceId, nssiId)
871 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
872 execution.setVariable("sliceTaskParams", sliceParams)
876 * sourceId -> targetId
881 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
883 Relationship relationship = new Relationship()
885 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
886 .customer(execution.getVariable("globalSubscriberId"))
887 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
888 .serviceInstance(targetId))
890 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
892 relationship.setRelatedLink(targetInstanceUri.build().toString())
894 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
895 .customer(execution.getVariable("globalSubscriberId"))
896 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
897 .serviceInstance(sourceId))
899 client.create(sourceInstanceUri, relationship)
903 * update endpoint relationship
908 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
910 Relationship relationship = new Relationship()
912 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
914 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
916 relationship.setRelatedLink(endpointUri.build().toString())
918 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
919 .customer(execution.getVariable("globalSubscriberId"))
920 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
921 .serviceInstance(sourceId))
923 client.create(sourceInstanceUri, relationship)
926 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
927 // create slice profile
928 ServiceInstance rspi = new ServiceInstance()
929 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
930 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
931 rspi.setServiceRole("slice-profile")
932 rspi.setOrchestrationStatus(oStatus)
933 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
934 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
935 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
936 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
937 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
939 //timestamp format YYYY-MM-DD hh:mm:ss
940 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))