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 = execution.getVariable("serviceType")
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)
304 AAIResourceUri uri = AAIUriFactory.createResourceUri(
305 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
306 .serviceSubscription(subscriptionServiceType)
307 .serviceInstance(sliceTaskInfo.sliceInstanceId)
308 .sliceProfile(profileId)
310 client.create(uri, sliceProfile)
311 execution.setVariable("sliceTaskParams", sliceParams)
314 void createANEndpoint(DelegateExecution execution){
315 logger.debug("Enter createANEndpoint in DoAllocateNSIandNSSI()")
316 SliceTaskParamsAdapter sliceParams =
317 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
318 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
320 NetworkRoute route = new NetworkRoute()
321 String routeId = UUID.randomUUID().toString()
322 route.setRouteId(routeId)
323 route.setType("endpoint")
325 route.setFunction("3gppTransportEP")
326 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
327 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
328 route.setAddressFamily("ipv4")
329 route.setPrefixLength(24)
330 sliceTaskInfo.setEndPointId(routeId)
332 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
333 client.create(uri, route)
334 execution.setVariable("sliceTaskParams", sliceParams)
335 logger.info("an endpointId:" + sliceParams.anSliceTaskInfo.endPointId)
339 void createCNEndpoint(DelegateExecution execution){
340 logger.debug("Enter createCNNetworkRoute in DoAllocateNSIandNSSI()")
341 SliceTaskParamsAdapter sliceParams =
342 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
343 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
345 NetworkRoute route = new NetworkRoute()
346 String routeId = UUID.randomUUID().toString()
347 route.setRouteId(routeId)
348 route.setType("endpoint")
350 route.setFunction("3gppTransportEP")
351 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
352 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
353 route.setAddressFamily("ipv4")
354 route.setPrefixLength(24)
356 sliceTaskInfo.setEndPointId(routeId)
357 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
358 client.create(uri, route)
360 execution.setVariable("cnEndpointId", routeId)
361 execution.setVariable("sliceTaskParams", sliceParams)
362 logger.info("cn endpointId:" + sliceParams.cnSliceTaskInfo.endPointId)
366 * prepare AllocateAnNssi
369 void prepareAllocateAnNssi(DelegateExecution execution) {
372 SliceTaskParamsAdapter sliceParams =
373 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
374 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
376 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
378 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
379 allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
380 allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
381 allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
382 allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
383 NsiInfo nsiInfo = new NsiInfo()
384 nsiInfo.nsiId = sliceParams.suggestNsiId
385 nsiInfo.nsiName = sliceParams.suggestNsiName
386 allocateAnNssi.nsiInfo = nsiInfo
388 EndPoint endPoint = new EndPoint()
389 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
390 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
391 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
392 allocateAnNssi.setEndPoint(endPoint)
394 EsrInfo esrInfo = new EsrInfo()
395 //todo: vendor and network
396 esrInfo.setVendor(sliceTaskInfo.getVendor())
397 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
399 String globalSubscriberId = execution.getVariable("globalSubscriberId")
400 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
403 ServiceInfo serviceInfo = new ServiceInfo()
404 serviceInfo.globalSubscriberId = globalSubscriberId
405 serviceInfo.subscriptionServiceType = subscriptionServiceType
406 serviceInfo.nsiId = sliceParams.suggestNsiId
407 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
408 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
410 nbiRequest.setServiceInfo(serviceInfo)
411 nbiRequest.setEsrInfo(esrInfo)
412 nbiRequest.setAllocateAnNssi(allocateAnNssi)
414 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
415 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
416 execution.setVariable("anSubnetType", SubnetType.AN)
421 * create RAN Slice Profile Instance
424 void createCnSliceProfileInstance(DelegateExecution execution) {
426 String globalSubscriberId = execution.getVariable("globalSubscriberId")
427 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
428 String serviceInstanceId = UUID.randomUUID().toString()
429 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
431 String oStatus = "deactivated"
433 SliceTaskParamsAdapter sliceParams =
434 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
435 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
436 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
438 // create slice profile
439 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
441 //timestamp format YYYY-MM-DD hh:mm:ss
442 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
444 execution.setVariable("communicationServiceInstance", rspi)
446 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
447 .customer(globalSubscriberId)
448 .serviceSubscription(subscriptionServiceType)
449 .serviceInstance(serviceInstanceId))
450 client.create(uri, rspi)
451 execution.setVariable("sliceTaskParams", sliceParams)
455 * create Cn Slice Profile
458 void createCnSliceProfile(DelegateExecution execution) {
460 String globalSubscriberId = execution.getVariable("globalSubscriberId")
461 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
462 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
464 SliceTaskParamsAdapter sliceParams =
465 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
467 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
468 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
470 String profileId = UUID.randomUUID().toString()
471 cnSliceProfile.setSliceProfileId(profileId)
473 SliceProfile sliceProfile = new SliceProfile()
474 sliceProfile.setProfileId(profileId)
475 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
477 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
478 .customer(globalSubscriberId)
479 .serviceSubscription(subscriptionServiceType)
480 .serviceInstance(sliceTaskInfo.sliceInstanceId)
481 .sliceProfile(profileId))
482 client.create(uri, sliceProfile)
483 execution.setVariable("sliceTaskParams", sliceParams)
487 * prepare AllocateCnNssi
490 void prepareAllocateCnNssi(DelegateExecution execution) {
493 SliceTaskParamsAdapter sliceParams =
494 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
495 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
497 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
499 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
500 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
501 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
502 allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
503 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
504 NsiInfo nsiInfo = new NsiInfo()
505 nsiInfo.nsiId = sliceParams.suggestNsiId
506 nsiInfo.nsiName = sliceParams.suggestNsiName
507 allocateCnNssi.nsiInfo = nsiInfo
509 EndPoint endPoint = new EndPoint()
510 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
511 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
512 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
513 allocateCnNssi.setEndPoint(endPoint)
515 EsrInfo esrInfo = new EsrInfo()
516 //todo: vendor and network
517 esrInfo.setVendor(sliceTaskInfo.getVendor())
518 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
520 String globalSubscriberId = execution.getVariable("globalSubscriberId")
521 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
524 ServiceInfo serviceInfo = new ServiceInfo()
525 serviceInfo.globalSubscriberId = globalSubscriberId
526 serviceInfo.subscriptionServiceType = subscriptionServiceType
527 serviceInfo.nsiId = sliceParams.suggestNsiId
528 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
529 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
530 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
532 nbiRequest.setServiceInfo(serviceInfo)
533 nbiRequest.setEsrInfo(esrInfo)
534 nbiRequest.setAllocateCnNssi(allocateCnNssi)
536 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
537 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
538 execution.setVariable("cnSubnetType", SubnetType.CN)
543 * create TN Slice Profile Instance
546 void createTnBHSliceProfileInstance(DelegateExecution execution) {
547 String globalSubscriberId = execution.getVariable("globalSubscriberId")
548 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
550 String oStatus = "deactivated"
552 SliceTaskParamsAdapter sliceParams =
553 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
555 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
556 String serviceInstanceId = UUID.randomUUID().toString()
558 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
559 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
561 // create slice profile
562 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
564 //timestamp format YYYY-MM-DD hh:mm:ss
565 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
567 execution.setVariable("communicationServiceInstance", rspi)
569 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
570 .customer(globalSubscriberId)
571 .serviceSubscription(subscriptionServiceType)
572 .serviceInstance(serviceInstanceId))
573 client.create(uri, rspi)
575 execution.setVariable("sliceTaskParams", sliceParams)
579 * create Tn Slice Profile
582 void createTnBHSliceProfile(DelegateExecution execution) {
584 String globalSubscriberId = execution.getVariable("globalSubscriberId")
585 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
587 SliceTaskParamsAdapter sliceParams =
588 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
590 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
592 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
593 String profileId = UUID.randomUUID().toString()
594 tnSliceProfile.setSliceProfileId(profileId)
596 SliceProfile sliceProfile = new SliceProfile()
597 sliceProfile.setProfileId(profileId)
599 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
600 .customer(globalSubscriberId)
601 .serviceSubscription(subscriptionServiceType)
602 .serviceInstance(sliceTaskInfo.sliceInstanceId)
603 .sliceProfile(profileId))
604 client.create(uri, sliceProfile)
606 execution.setVariable("sliceTaskParams", sliceParams)
610 * prepare AllocateCnNssi
613 void prepareAllocateTnBHNssi(DelegateExecution execution) {
616 SliceTaskParamsAdapter sliceParams =
617 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
618 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
620 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
622 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
623 //todo: AllocateTnNssi
624 //todo: endPointId -> set into tn
625 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
626 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
627 List<ConnectionLink> connectionLinks = new ArrayList<>()
628 ConnectionLink connectionLink = new ConnectionLink()
629 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
630 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
631 connectionLinks.add(connectionLink)
632 transportSliceNetwork.setConnectionLinks(connectionLinks)
633 transportSliceNetworks.add(transportSliceNetwork)
634 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
636 allocateTnNssi.setNetworkSliceInfos()
637 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
638 NsiInfo nsiInfo = new NsiInfo()
639 nsiInfo.setNsiId(sliceParams.suggestNsiId)
640 nsiInfo.setNsiName(sliceParams.suggestNsiName)
641 allocateTnNssi.setNsiInfo(nsiInfo)
643 //allocateTnNssi.networkSliceInfos
645 EsrInfo esrInfo = new EsrInfo()
646 esrInfo.setVendor(sliceTaskInfo.getVendor())
647 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
649 String globalSubscriberId = execution.getVariable("globalSubscriberId")
650 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
652 ServiceInfo serviceInfo = new ServiceInfo()
653 serviceInfo.globalSubscriberId = globalSubscriberId
654 serviceInfo.subscriptionServiceType = subscriptionServiceType
655 serviceInfo.nsiId = sliceParams.suggestNsiId
656 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
657 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
658 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
660 nbiRequest.setServiceInfo(serviceInfo)
661 nbiRequest.setEsrInfo(esrInfo)
662 nbiRequest.setAllocateTnNssi(allocateTnNssi)
664 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
665 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
666 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
670 * Update relationship between
672 * 2. Slice Profile and Service Profile
673 * 3. SliceProfile and NSSI
674 * 4. sliceProfile and endpoint
678 public void updateAnRelationship(DelegateExecution execution) {
680 SliceTaskParamsAdapter sliceParams =
681 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
683 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
684 String nssiId = result.getNssiId()
685 String nsiId = sliceParams.getSuggestNsiId()
686 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
687 String serviceProfileInstanceId = sliceParams.serviceId
688 String epId = sliceParams.anSliceTaskInfo.endPointId
690 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
691 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
692 //execution.setVariable("endPointIdAn", endPointId)
693 updateRelationship(execution, nsiId, nssiId)
695 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
697 updateRelationship(execution, sliceProfileInstanceId, nssiId)
699 updateEPRelationship(execution, nssiId, epId)
701 updateEPRelationship(execution, sliceProfileInstanceId, epId)
703 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
704 execution.setVariable("sliceTaskParams", sliceParams)
709 * Update relationship between
711 * 2. Slice Profile and Service Profile
712 * 3. SliceProfile and NSSI
716 public void updateCnRelationship(DelegateExecution execution) {
718 SliceTaskParamsAdapter sliceParams =
719 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
721 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
722 String nssiId = result.getNssiId()
723 String nsiId = sliceParams.getSuggestNsiId()
724 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
725 String serviceProfileInstanceId = sliceParams.serviceId
726 String epId = sliceParams.cnSliceTaskInfo.endPointId
728 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
729 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
730 // execution.setVariable("endPointIdCn", endPointId)
732 updateRelationship(execution, nsiId, nssiId)
734 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
736 updateRelationship(execution, sliceProfileInstanceId, nssiId)
738 updateEPRelationship(execution, nssiId, epId)
740 updateEPRelationship(execution, sliceProfileInstanceId, epId)
742 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
743 execution.setVariable("sliceTaskParams", sliceParams)
747 * get endpoint Id from AAI by nssi id
752 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
753 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
754 //todo: allottedResourceId
756 SliceTaskParamsAdapter sliceParams =
757 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
759 //sliceParams.setServiceId(nsiServiceInstanceID)
760 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
761 .customer(execution.getVariable("globalSubscriberId"))
762 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
763 .serviceInstance(nssiId))
765 String endpointId = null
768 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
769 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
770 if (!si.isPresent()) {
771 String msg = "NSSI in the option doesn't exist. " + nssiId
773 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
775 ServiceInstance nssiInstance = si.get()
776 //todo: handle relationship and return endPointId
777 if (nssiInstance.relationshipList == null) {
778 String msg = "relationshipList of " + nssiId + " is null"
782 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
783 if (relationship.relationshipLabel){
784 endpointId = relationship //todo
791 }catch(BpmnError e) {
793 }catch (Exception ex){
794 String msg = "Exception: " + ex
796 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
798 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
802 * Update relationship between
804 * 2. Slice Profile and Service Profile
805 * 3. SliceProfile and NSSI
809 public void updateTnBHRelationship(DelegateExecution execution) {
810 SliceTaskParamsAdapter sliceParams =
811 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
813 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
814 String nssiId = result.getNssiId()
815 String nsiId = sliceParams.getSuggestNsiId()
816 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
817 String serviceProfileInstanceId = sliceParams.serviceId
820 updateRelationship(execution, nsiId, nssiId)
822 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
824 updateRelationship(execution,sliceProfileInstanceId, nssiId)
826 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
827 execution.setVariable("sliceTaskParams", sliceParams)
831 * sourceId -> targetId
836 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
838 Relationship relationship = new Relationship()
840 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
841 .customer(execution.getVariable("globalSubscriberId"))
842 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
843 .serviceInstance(targetId))
845 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
847 relationship.setRelatedLink(targetInstanceUri.build().toString())
849 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
850 .customer(execution.getVariable("globalSubscriberId"))
851 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
852 .serviceInstance(sourceId))
854 client.create(sourceInstanceUri, relationship)
858 * update endpoint relationship
863 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
865 Relationship relationship = new Relationship()
867 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
869 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
871 relationship.setRelatedLink(endpointUri.build().toString())
873 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
874 .customer(execution.getVariable("globalSubscriberId"))
875 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
876 .serviceInstance(sourceId))
878 client.create(sourceInstanceUri, relationship)
881 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
882 // create slice profile
883 ServiceInstance rspi = new ServiceInstance()
884 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
885 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
886 rspi.setServiceRole("slice-profile")
887 rspi.setOrchestrationStatus(oStatus)
888 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
889 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
890 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
891 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
892 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
894 //timestamp format YYYY-MM-DD hh:mm:ss
895 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))