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.nsstId = sliceTaskInfo.NSSTInfo.UUID
398 allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
399 allocateAnNssi.nssiName = "nssi_an" + execution.getVariable("sliceServiceInstanceName")
400 NsiInfo nsiInfo = new NsiInfo()
401 nsiInfo.nsiId = sliceParams.suggestNsiId
402 nsiInfo.nsiName = sliceParams.suggestNsiName
403 allocateAnNssi.nsiInfo = nsiInfo
405 EndPoint endPoint = new EndPoint()
406 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
407 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
408 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
409 allocateAnNssi.setEndPoint(endPoint)
411 EsrInfo esrInfo = new EsrInfo()
412 //todo: vendor and network
413 esrInfo.setVendor(sliceTaskInfo.getVendor())
414 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
416 String globalSubscriberId = execution.getVariable("globalSubscriberId")
417 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
420 ServiceInfo serviceInfo = new ServiceInfo()
421 serviceInfo.globalSubscriberId = globalSubscriberId
422 serviceInfo.subscriptionServiceType = subscriptionServiceType
423 serviceInfo.nsiId = sliceParams.suggestNsiId
424 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
425 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
426 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
427 serviceInfo.nssiName = allocateAnNssi.nssiName
429 nbiRequest.setServiceInfo(serviceInfo)
430 nbiRequest.setEsrInfo(esrInfo)
431 nbiRequest.setAllocateAnNssi(allocateAnNssi)
433 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
434 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
435 execution.setVariable("anSubnetType", SubnetType.AN)
440 * create RAN Slice Profile Instance
443 void createCnSliceProfileInstance(DelegateExecution execution) {
445 String globalSubscriberId = execution.getVariable("globalSubscriberId")
446 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
447 String serviceInstanceId = UUID.randomUUID().toString()
448 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
450 String oStatus = "deactivated"
452 SliceTaskParamsAdapter sliceParams =
453 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
454 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
455 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
457 // create slice profile
458 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
460 //timestamp format YYYY-MM-DD hh:mm:ss
461 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
463 execution.setVariable("communicationServiceInstance", rspi)
465 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
466 .customer(globalSubscriberId)
467 .serviceSubscription(subscriptionServiceType)
468 .serviceInstance(serviceInstanceId))
469 client.create(uri, rspi)
470 execution.setVariable("sliceTaskParams", sliceParams)
474 * create Cn Slice Profile
477 void createCnSliceProfile(DelegateExecution execution) {
479 String globalSubscriberId = execution.getVariable("globalSubscriberId")
480 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
481 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
483 SliceTaskParamsAdapter sliceParams =
484 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
486 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
487 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
489 String profileId = UUID.randomUUID().toString()
490 cnSliceProfile.setSliceProfileId(profileId)
492 SliceProfile sliceProfile = new SliceProfile()
493 sliceProfile.setProfileId(profileId)
494 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
495 sliceProfile.setMaxNumberOfUEs(cnSliceProfile.maxNumberOfUEs)
496 sliceProfile.setLatency(cnSliceProfile.latency)
497 sliceProfile.setMaxNumberOfPDUSession(cnSliceProfile.maxNumberOfPDUSession)
498 sliceProfile.setExpDataRateDL(cnSliceProfile.expDataRateDL)
499 sliceProfile.setExpDataRateUL(cnSliceProfile.expDataRateUL)
500 sliceProfile.setAreaTrafficCapDL(cnSliceProfile.areaTrafficCapDL)
501 sliceProfile.setAreaTrafficCapUL(cnSliceProfile.areaTrafficCapUL)
502 sliceProfile.setOverallUserDensity(cnSliceProfile.overallUserDensity)
503 sliceProfile.setActivityFactor(cnSliceProfile.activityFactor)
504 sliceProfile.setUeMobilityLevel(cnSliceProfile.ueMobilityLevel)
505 sliceProfile.setResourceSharingLevel(cnSliceProfile.resourceSharingLevel)
506 sliceProfile.setCsAvailabilityTarget(cnSliceProfile.csAvailabilityTarget)
507 sliceProfile.setCsReliabilityMeanTime(cnSliceProfile.csReliabilityMeanTime)
508 sliceProfile.setExpDataRate(cnSliceProfile.expDataRate)
509 sliceProfile.setMsgSizeByte(cnSliceProfile.msgSizeByte)
510 sliceProfile.setTransferIntervalTarget(cnSliceProfile.transferIntervalTarget)
511 sliceProfile.setSurvivalTime(cnSliceProfile.survivalTime)
513 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
514 .customer(globalSubscriberId)
515 .serviceSubscription(subscriptionServiceType)
516 .serviceInstance(sliceTaskInfo.sliceInstanceId)
517 .sliceProfile(profileId))
518 client.create(uri, sliceProfile)
519 execution.setVariable("sliceTaskParams", sliceParams)
523 * prepare AllocateCnNssi
526 void prepareAllocateCnNssi(DelegateExecution execution) {
529 SliceTaskParamsAdapter sliceParams =
530 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
531 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
533 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
535 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
536 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
537 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
538 allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
539 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
540 NsiInfo nsiInfo = new NsiInfo()
541 nsiInfo.nsiId = sliceParams.suggestNsiId
542 nsiInfo.nsiName = sliceParams.suggestNsiName
543 allocateCnNssi.nsiInfo = nsiInfo
545 EndPoint endPoint = new EndPoint()
546 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
547 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
548 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
549 allocateCnNssi.setEndPoint(endPoint)
551 EsrInfo esrInfo = new EsrInfo()
552 //todo: vendor and network
553 esrInfo.setVendor(sliceTaskInfo.getVendor())
554 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
556 String globalSubscriberId = execution.getVariable("globalSubscriberId")
557 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
560 ServiceInfo serviceInfo = new ServiceInfo()
561 serviceInfo.globalSubscriberId = globalSubscriberId
562 serviceInfo.subscriptionServiceType = subscriptionServiceType
563 serviceInfo.nsiId = sliceParams.suggestNsiId
564 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
565 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
566 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
567 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
568 serviceInfo.nssiName = allocateCnNssi.nssiName
570 nbiRequest.setServiceInfo(serviceInfo)
571 nbiRequest.setEsrInfo(esrInfo)
572 nbiRequest.setAllocateCnNssi(allocateCnNssi)
574 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
575 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
576 execution.setVariable("cnSubnetType", SubnetType.CN)
581 * create TN Slice Profile Instance
584 void createTnBHSliceProfileInstance(DelegateExecution execution) {
585 String globalSubscriberId = execution.getVariable("globalSubscriberId")
586 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
588 String oStatus = "deactivated"
590 SliceTaskParamsAdapter sliceParams =
591 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
593 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
594 String serviceInstanceId = UUID.randomUUID().toString()
596 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
597 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
599 // create slice profile
600 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
602 //timestamp format YYYY-MM-DD hh:mm:ss
603 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
605 execution.setVariable("communicationServiceInstance", rspi)
607 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
608 .customer(globalSubscriberId)
609 .serviceSubscription(subscriptionServiceType)
610 .serviceInstance(serviceInstanceId))
611 client.create(uri, rspi)
613 execution.setVariable("sliceTaskParams", sliceParams)
617 * create Tn Slice Profile
620 void createTnBHSliceProfile(DelegateExecution execution) {
622 String globalSubscriberId = execution.getVariable("globalSubscriberId")
623 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
625 SliceTaskParamsAdapter sliceParams =
626 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
628 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
630 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
631 String profileId = UUID.randomUUID().toString()
632 tnSliceProfile.setSliceProfileId(profileId)
634 SliceProfile sliceProfile = new SliceProfile()
635 sliceProfile.setProfileId(profileId)
636 sliceProfile.setLatency(tnSliceProfile.latency)
637 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
638 sliceProfile.setJitter(tnSliceProfile.jitter)
640 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
641 .customer(globalSubscriberId)
642 .serviceSubscription(subscriptionServiceType)
643 .serviceInstance(sliceTaskInfo.sliceInstanceId)
644 .sliceProfile(profileId))
645 client.create(uri, sliceProfile)
647 execution.setVariable("sliceTaskParams", sliceParams)
651 * prepare AllocateCnNssi
654 void prepareAllocateTnBHNssi(DelegateExecution execution) {
657 SliceTaskParamsAdapter sliceParams =
658 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
659 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
661 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
663 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
664 //todo: AllocateTnNssi
665 //todo: endPointId -> set into tn
666 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
667 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
668 List<ConnectionLink> connectionLinks = new ArrayList<>()
669 ConnectionLink connectionLink = new ConnectionLink()
670 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
671 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
672 connectionLinks.add(connectionLink)
673 transportSliceNetwork.setConnectionLinks(connectionLinks)
674 transportSliceNetworks.add(transportSliceNetwork)
675 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
677 allocateTnNssi.setNetworkSliceInfos()
678 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
679 NsiInfo nsiInfo = new NsiInfo()
680 nsiInfo.setNsiId(sliceParams.suggestNsiId)
681 nsiInfo.setNsiName(sliceParams.suggestNsiName)
682 allocateTnNssi.setNsiInfo(nsiInfo)
684 //allocateTnNssi.networkSliceInfos
686 EsrInfo esrInfo = new EsrInfo()
687 esrInfo.setVendor(sliceTaskInfo.getVendor())
688 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
690 String globalSubscriberId = execution.getVariable("globalSubscriberId")
691 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
693 ServiceInfo serviceInfo = new ServiceInfo()
694 serviceInfo.globalSubscriberId = globalSubscriberId
695 serviceInfo.subscriptionServiceType = subscriptionServiceType
696 serviceInfo.nsiId = sliceParams.suggestNsiId
697 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
698 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
699 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
700 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
702 nbiRequest.setServiceInfo(serviceInfo)
703 nbiRequest.setEsrInfo(esrInfo)
704 nbiRequest.setAllocateTnNssi(allocateTnNssi)
706 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
707 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
708 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
712 * Update relationship between
714 * 2. Slice Profile and Service Profile
715 * 3. SliceProfile and NSSI
716 * 4. sliceProfile and endpoint
720 public void updateAnRelationship(DelegateExecution execution) {
722 SliceTaskParamsAdapter sliceParams =
723 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
725 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
726 String nssiId = result.getNssiId()
727 String nsiId = sliceParams.getSuggestNsiId()
728 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
729 String serviceProfileInstanceId = sliceParams.serviceId
730 String epId = sliceParams.anSliceTaskInfo.endPointId
732 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
733 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
734 //execution.setVariable("endPointIdAn", endPointId)
735 updateRelationship(execution, nsiId, nssiId)
737 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
739 updateRelationship(execution, sliceProfileInstanceId, nssiId)
741 updateEPRelationship(execution, nssiId, epId)
743 updateEPRelationship(execution, sliceProfileInstanceId, epId)
745 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
746 execution.setVariable("sliceTaskParams", sliceParams)
751 * Update relationship between
753 * 2. Slice Profile and Service Profile
754 * 3. SliceProfile and NSSI
758 public void updateCnRelationship(DelegateExecution execution) {
760 SliceTaskParamsAdapter sliceParams =
761 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
763 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
764 String nssiId = result.getNssiId()
765 String nsiId = sliceParams.getSuggestNsiId()
766 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
767 String serviceProfileInstanceId = sliceParams.serviceId
768 String epId = sliceParams.cnSliceTaskInfo.endPointId
770 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
771 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
772 // execution.setVariable("endPointIdCn", endPointId)
774 updateRelationship(execution, nsiId, nssiId)
776 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
778 updateRelationship(execution, sliceProfileInstanceId, nssiId)
780 updateEPRelationship(execution, nssiId, epId)
782 updateEPRelationship(execution, sliceProfileInstanceId, epId)
784 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
785 execution.setVariable("sliceTaskParams", sliceParams)
789 * get endpoint Id from AAI by nssi id
794 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
795 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
796 //todo: allottedResourceId
798 SliceTaskParamsAdapter sliceParams =
799 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
801 //sliceParams.setServiceId(nsiServiceInstanceID)
802 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
803 .customer(execution.getVariable("globalSubscriberId"))
804 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
805 .serviceInstance(nssiId))
807 String endpointId = null
810 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
811 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
812 if (!si.isPresent()) {
813 String msg = "NSSI in the option doesn't exist. " + nssiId
815 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
817 ServiceInstance nssiInstance = si.get()
818 //todo: handle relationship and return endPointId
819 if (nssiInstance.relationshipList == null) {
820 String msg = "relationshipList of " + nssiId + " is null"
824 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
825 if (relationship.relationshipLabel){
826 endpointId = relationship //todo
833 }catch(BpmnError e) {
835 }catch (Exception ex){
836 String msg = "Exception: " + ex
838 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
840 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
844 * Update relationship between
846 * 2. Slice Profile and Service Profile
847 * 3. SliceProfile and NSSI
851 public void updateTnBHRelationship(DelegateExecution execution) {
852 SliceTaskParamsAdapter sliceParams =
853 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
855 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
856 String nssiId = result.getNssiId()
857 String nsiId = sliceParams.getSuggestNsiId()
858 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
859 String serviceProfileInstanceId = sliceParams.serviceId
862 updateRelationship(execution, nsiId, nssiId)
864 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
866 updateRelationship(execution,sliceProfileInstanceId, nssiId)
868 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
869 execution.setVariable("sliceTaskParams", sliceParams)
873 * sourceId -> targetId
878 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
880 Relationship relationship = new Relationship()
882 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
883 .customer(execution.getVariable("globalSubscriberId"))
884 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
885 .serviceInstance(targetId))
887 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
889 relationship.setRelatedLink(targetInstanceUri.build().toString())
891 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
892 .customer(execution.getVariable("globalSubscriberId"))
893 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
894 .serviceInstance(sourceId))
896 client.create(sourceInstanceUri, relationship)
900 * update endpoint relationship
905 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
907 Relationship relationship = new Relationship()
909 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
911 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
913 relationship.setRelatedLink(endpointUri.build().toString())
915 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
916 .customer(execution.getVariable("globalSubscriberId"))
917 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
918 .serviceInstance(sourceId))
920 client.create(sourceInstanceUri, relationship)
923 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
924 // create slice profile
925 ServiceInstance rspi = new ServiceInstance()
926 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
927 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
928 rspi.setServiceRole("slice-profile")
929 rspi.setOrchestrationStatus(oStatus)
930 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
931 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
932 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
933 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
934 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
936 //timestamp format YYYY-MM-DD hh:mm:ss
937 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))