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
131 sliceParams.setSuggestNsiId(sliceInstanceId)
132 sliceParams.setSuggestNsiName(sliceInstanceName)
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 = sliceTaskInfo.suggestNssiId ? sliceTaskInfo.NSSTInfo.name : allocateAnNssi.nssiName
432 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
434 nbiRequest.setServiceInfo(serviceInfo)
435 nbiRequest.setEsrInfo(esrInfo)
436 nbiRequest.setAllocateAnNssi(allocateAnNssi)
438 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
439 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
440 execution.setVariable("anSubnetType", SubnetType.AN)
445 * create RAN Slice Profile Instance
448 void createCnSliceProfileInstance(DelegateExecution execution) {
450 String globalSubscriberId = execution.getVariable("globalSubscriberId")
451 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
452 String serviceInstanceId = UUID.randomUUID().toString()
453 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
455 String oStatus = "deactivated"
457 SliceTaskParamsAdapter sliceParams =
458 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
459 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
460 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
461 String sliceProfileName = "cn_"+sliceParams.serviceName
463 // create slice profile
464 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
466 //timestamp format YYYY-MM-DD hh:mm:ss
467 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
469 execution.setVariable("communicationServiceInstance", rspi)
471 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
472 .customer(globalSubscriberId)
473 .serviceSubscription(subscriptionServiceType)
474 .serviceInstance(serviceInstanceId))
475 client.create(uri, rspi)
476 execution.setVariable("sliceTaskParams", sliceParams)
480 * create Cn Slice Profile
483 void createCnSliceProfile(DelegateExecution execution) {
485 String globalSubscriberId = execution.getVariable("globalSubscriberId")
486 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
487 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
489 SliceTaskParamsAdapter sliceParams =
490 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
492 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
493 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
495 String profileId = UUID.randomUUID().toString()
496 cnSliceProfile.setSliceProfileId(profileId)
498 SliceProfile sliceProfile = new SliceProfile()
499 sliceProfile.setProfileId(profileId)
500 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
501 sliceProfile.setMaxNumberOfUEs(cnSliceProfile.maxNumberOfUEs)
502 sliceProfile.setLatency(cnSliceProfile.latency)
503 sliceProfile.setMaxNumberOfPDUSession(cnSliceProfile.maxNumberOfPDUSession)
504 sliceProfile.setExpDataRateDL(cnSliceProfile.expDataRateDL)
505 sliceProfile.setExpDataRateUL(cnSliceProfile.expDataRateUL)
506 sliceProfile.setAreaTrafficCapDL(cnSliceProfile.areaTrafficCapDL)
507 sliceProfile.setAreaTrafficCapUL(cnSliceProfile.areaTrafficCapUL)
508 sliceProfile.setOverallUserDensity(cnSliceProfile.overallUserDensity)
509 sliceProfile.setActivityFactor(cnSliceProfile.activityFactor)
510 sliceProfile.setUeMobilityLevel(cnSliceProfile.ueMobilityLevel)
511 sliceProfile.setResourceSharingLevel(cnSliceProfile.resourceSharingLevel)
512 sliceProfile.setCsAvailabilityTarget(cnSliceProfile.csAvailabilityTarget)
513 sliceProfile.setCsReliabilityMeanTime(cnSliceProfile.csReliabilityMeanTime)
514 sliceProfile.setExpDataRate(cnSliceProfile.expDataRate)
515 sliceProfile.setMsgSizeByte(cnSliceProfile.msgSizeByte)
516 sliceProfile.setTransferIntervalTarget(cnSliceProfile.transferIntervalTarget)
517 sliceProfile.setSurvivalTime(cnSliceProfile.survivalTime)
519 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
520 .customer(globalSubscriberId)
521 .serviceSubscription(subscriptionServiceType)
522 .serviceInstance(sliceTaskInfo.sliceInstanceId)
523 .sliceProfile(profileId))
524 client.create(uri, sliceProfile)
525 execution.setVariable("sliceTaskParams", sliceParams)
529 * prepare AllocateCnNssi
532 void prepareAllocateCnNssi(DelegateExecution execution) {
535 SliceTaskParamsAdapter sliceParams =
536 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
537 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
539 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
541 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
542 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
543 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
544 allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
545 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
546 allocateCnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
548 NsiInfo nsiInfo = new NsiInfo()
549 nsiInfo.nsiId = sliceParams.suggestNsiId
550 nsiInfo.nsiName = sliceParams.suggestNsiName
551 allocateCnNssi.nsiInfo = nsiInfo
553 EndPoint endPoint = new EndPoint()
554 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
555 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
556 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
557 allocateCnNssi.setEndPoint(endPoint)
559 EsrInfo esrInfo = new EsrInfo()
560 //todo: vendor and network
561 esrInfo.setVendor(sliceTaskInfo.getVendor())
562 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
564 String globalSubscriberId = execution.getVariable("globalSubscriberId")
565 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
568 ServiceInfo serviceInfo = new ServiceInfo()
569 serviceInfo.globalSubscriberId = globalSubscriberId
570 serviceInfo.subscriptionServiceType = subscriptionServiceType
571 serviceInfo.nsiId = sliceParams.suggestNsiId
572 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
573 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
574 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
575 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
576 serviceInfo.nssiName = allocateCnNssi.nssiName
578 nbiRequest.setServiceInfo(serviceInfo)
579 nbiRequest.setEsrInfo(esrInfo)
580 nbiRequest.setAllocateCnNssi(allocateCnNssi)
582 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
583 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
584 execution.setVariable("cnSubnetType", SubnetType.CN)
589 * create TN Slice Profile Instance
592 void createTnBHSliceProfileInstance(DelegateExecution execution) {
593 String globalSubscriberId = execution.getVariable("globalSubscriberId")
594 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
596 String oStatus = "deactivated"
598 SliceTaskParamsAdapter sliceParams =
599 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
601 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
602 String serviceInstanceId = UUID.randomUUID().toString()
604 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
605 String sliceProfileName = "tn_" + sliceParams.serviceName
606 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
608 // create slice profile
609 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
611 //timestamp format YYYY-MM-DD hh:mm:ss
612 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
614 execution.setVariable("communicationServiceInstance", rspi)
616 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
617 .customer(globalSubscriberId)
618 .serviceSubscription(subscriptionServiceType)
619 .serviceInstance(serviceInstanceId))
620 client.create(uri, rspi)
622 execution.setVariable("sliceTaskParams", sliceParams)
626 * create Tn Slice Profile
629 void createTnBHSliceProfile(DelegateExecution execution) {
631 String globalSubscriberId = execution.getVariable("globalSubscriberId")
632 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
634 SliceTaskParamsAdapter sliceParams =
635 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
637 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
639 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
640 String profileId = UUID.randomUUID().toString()
641 tnSliceProfile.setSliceProfileId(profileId)
643 SliceProfile sliceProfile = new SliceProfile()
644 sliceProfile.setProfileId(profileId)
645 sliceProfile.setLatency(tnSliceProfile.latency)
646 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
647 sliceProfile.setJitter(tnSliceProfile.jitter)
649 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
650 .customer(globalSubscriberId)
651 .serviceSubscription(subscriptionServiceType)
652 .serviceInstance(sliceTaskInfo.sliceInstanceId)
653 .sliceProfile(profileId))
654 client.create(uri, sliceProfile)
656 execution.setVariable("sliceTaskParams", sliceParams)
660 * prepare AllocateCnNssi
663 void prepareAllocateTnBHNssi(DelegateExecution execution) {
666 SliceTaskParamsAdapter sliceParams =
667 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
668 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
670 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
672 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
673 allocateTnNssi.setNssiId(sliceTaskInfo.suggestNssiId)
674 //todo: AllocateTnNssi
675 //todo: endPointId -> set into tn
676 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
677 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
678 List<ConnectionLink> connectionLinks = new ArrayList<>()
679 ConnectionLink connectionLink = new ConnectionLink()
680 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
681 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
682 connectionLinks.add(connectionLink)
683 transportSliceNetwork.setConnectionLinks(connectionLinks)
684 transportSliceNetworks.add(transportSliceNetwork)
685 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
687 allocateTnNssi.setNetworkSliceInfos()
688 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
689 NsiInfo nsiInfo = new NsiInfo()
690 nsiInfo.setNsiId(sliceParams.suggestNsiId)
691 nsiInfo.setNsiName(sliceParams.suggestNsiName)
692 allocateTnNssi.setNsiInfo(nsiInfo)
694 //allocateTnNssi.networkSliceInfos
696 EsrInfo esrInfo = new EsrInfo()
697 esrInfo.setVendor(sliceTaskInfo.getVendor())
698 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
700 String globalSubscriberId = execution.getVariable("globalSubscriberId")
701 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
703 ServiceInfo serviceInfo = new ServiceInfo()
704 serviceInfo.globalSubscriberId = globalSubscriberId
705 serviceInfo.subscriptionServiceType = subscriptionServiceType
706 serviceInfo.nsiId = sliceParams.suggestNsiId
707 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
708 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
709 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
710 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
711 serviceInfo.nssiName = "nssi_tn" + execution.getVariable("sliceServiceInstanceName")
713 nbiRequest.setServiceInfo(serviceInfo)
714 nbiRequest.setEsrInfo(esrInfo)
715 nbiRequest.setAllocateTnNssi(allocateTnNssi)
717 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
718 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
719 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
723 * Update relationship between
725 * 2. Slice Profile and Service Profile
726 * 3. SliceProfile and NSSI
727 * 4. sliceProfile and endpoint
731 public void updateAnRelationship(DelegateExecution execution) {
733 SliceTaskParamsAdapter sliceParams =
734 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
736 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
737 String nssiId = result.getNssiId()
738 String nsiId = sliceParams.getSuggestNsiId()
739 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
740 String serviceProfileInstanceId = sliceParams.serviceId
741 String epId = sliceParams.anSliceTaskInfo.endPointId
743 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
744 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
745 //execution.setVariable("endPointIdAn", endPointId)
746 updateRelationship(execution, nsiId, nssiId)
748 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
750 updateRelationship(execution, sliceProfileInstanceId, nssiId)
752 updateEPRelationship(execution, nssiId, epId)
754 updateEPRelationship(execution, sliceProfileInstanceId, epId)
756 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
757 execution.setVariable("sliceTaskParams", sliceParams)
762 * Update relationship between
764 * 2. Slice Profile and Service Profile
765 * 3. SliceProfile and NSSI
769 public void updateCnRelationship(DelegateExecution execution) {
771 SliceTaskParamsAdapter sliceParams =
772 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
774 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
775 String nssiId = result.getNssiId()
776 String nsiId = sliceParams.getSuggestNsiId()
777 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
778 String serviceProfileInstanceId = sliceParams.serviceId
779 String epId = sliceParams.cnSliceTaskInfo.endPointId
781 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
782 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
783 // execution.setVariable("endPointIdCn", endPointId)
785 updateRelationship(execution, nsiId, nssiId)
787 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
789 updateRelationship(execution, sliceProfileInstanceId, nssiId)
791 updateEPRelationship(execution, nssiId, epId)
793 updateEPRelationship(execution, sliceProfileInstanceId, epId)
795 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
796 execution.setVariable("sliceTaskParams", sliceParams)
800 * get endpoint Id from AAI by nssi id
805 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
806 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
807 //todo: allottedResourceId
809 SliceTaskParamsAdapter sliceParams =
810 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
812 //sliceParams.setServiceId(nsiServiceInstanceID)
813 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
814 .customer(execution.getVariable("globalSubscriberId"))
815 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
816 .serviceInstance(nssiId))
818 String endpointId = null
821 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
822 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
823 if (!si.isPresent()) {
824 String msg = "NSSI in the option doesn't exist. " + nssiId
826 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
828 ServiceInstance nssiInstance = si.get()
829 //todo: handle relationship and return endPointId
830 if (nssiInstance.relationshipList == null) {
831 String msg = "relationshipList of " + nssiId + " is null"
835 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
836 if (relationship.relationshipLabel){
837 endpointId = relationship //todo
844 }catch(BpmnError e) {
846 }catch (Exception ex){
847 String msg = "Exception: " + ex
849 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
851 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
855 * Update relationship between
857 * 2. Slice Profile and Service Profile
858 * 3. SliceProfile and NSSI
862 public void updateTnBHRelationship(DelegateExecution execution) {
863 SliceTaskParamsAdapter sliceParams =
864 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
866 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
867 String nssiId = result.getNssiId()
868 String nsiId = sliceParams.getSuggestNsiId()
869 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
870 String serviceProfileInstanceId = sliceParams.serviceId
873 updateRelationship(execution, nsiId, nssiId)
875 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
877 updateRelationship(execution,sliceProfileInstanceId, nssiId)
879 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
880 execution.setVariable("sliceTaskParams", sliceParams)
884 * sourceId -> targetId
889 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
891 Relationship relationship = new Relationship()
893 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
894 .customer(execution.getVariable("globalSubscriberId"))
895 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
896 .serviceInstance(targetId))
898 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
900 relationship.setRelatedLink(targetInstanceUri.build().toString())
902 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
903 .customer(execution.getVariable("globalSubscriberId"))
904 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
905 .serviceInstance(sourceId))
907 client.create(sourceInstanceUri, relationship)
911 * update endpoint relationship
916 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
918 Relationship relationship = new Relationship()
920 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
922 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
924 relationship.setRelatedLink(endpointUri.build().toString())
926 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
927 .customer(execution.getVariable("globalSubscriberId"))
928 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
929 .serviceInstance(sourceId))
931 client.create(sourceInstanceUri, relationship)
934 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String sliceProfileName, String oStatus) {
935 // create slice profile
936 ServiceInstance rspi = new ServiceInstance()
937 rspi.setServiceInstanceName(sliceProfileName)
938 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
939 rspi.setServiceRole("slice-profile")
940 rspi.setOrchestrationStatus(oStatus)
941 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
942 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
943 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
944 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
945 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
947 //timestamp format YYYY-MM-DD hh:mm:ss
948 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))