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)
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 = "nssi_An" + execution.getVariable("sliceServiceInstanceName")
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
409 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
410 serviceInfo.nssiName = allocateAnNssi.nssiName
412 nbiRequest.setServiceInfo(serviceInfo)
413 nbiRequest.setEsrInfo(esrInfo)
414 nbiRequest.setAllocateAnNssi(allocateAnNssi)
416 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
417 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
418 execution.setVariable("anSubnetType", SubnetType.AN)
423 * create RAN Slice Profile Instance
426 void createCnSliceProfileInstance(DelegateExecution execution) {
428 String globalSubscriberId = execution.getVariable("globalSubscriberId")
429 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
430 String serviceInstanceId = UUID.randomUUID().toString()
431 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
433 String oStatus = "deactivated"
435 SliceTaskParamsAdapter sliceParams =
436 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
437 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
438 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
440 // create slice profile
441 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
443 //timestamp format YYYY-MM-DD hh:mm:ss
444 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
446 execution.setVariable("communicationServiceInstance", rspi)
448 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
449 .customer(globalSubscriberId)
450 .serviceSubscription(subscriptionServiceType)
451 .serviceInstance(serviceInstanceId))
452 client.create(uri, rspi)
453 execution.setVariable("sliceTaskParams", sliceParams)
457 * create Cn Slice Profile
460 void createCnSliceProfile(DelegateExecution execution) {
462 String globalSubscriberId = execution.getVariable("globalSubscriberId")
463 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
464 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
466 SliceTaskParamsAdapter sliceParams =
467 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
469 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
470 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
472 String profileId = UUID.randomUUID().toString()
473 cnSliceProfile.setSliceProfileId(profileId)
475 SliceProfile sliceProfile = new SliceProfile()
476 sliceProfile.setProfileId(profileId)
477 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
479 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
480 .customer(globalSubscriberId)
481 .serviceSubscription(subscriptionServiceType)
482 .serviceInstance(sliceTaskInfo.sliceInstanceId)
483 .sliceProfile(profileId))
484 client.create(uri, sliceProfile)
485 execution.setVariable("sliceTaskParams", sliceParams)
489 * prepare AllocateCnNssi
492 void prepareAllocateCnNssi(DelegateExecution execution) {
495 SliceTaskParamsAdapter sliceParams =
496 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
497 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
499 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
501 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
502 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
503 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
504 allocateCnNssi.nssiName = "nssi_Cn" + execution.getVariable("sliceServiceInstanceName")
505 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
506 NsiInfo nsiInfo = new NsiInfo()
507 nsiInfo.nsiId = sliceParams.suggestNsiId
508 nsiInfo.nsiName = sliceParams.suggestNsiName
509 allocateCnNssi.nsiInfo = nsiInfo
511 EndPoint endPoint = new EndPoint()
512 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
513 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
514 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
515 allocateCnNssi.setEndPoint(endPoint)
517 EsrInfo esrInfo = new EsrInfo()
518 //todo: vendor and network
519 esrInfo.setVendor(sliceTaskInfo.getVendor())
520 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
522 String globalSubscriberId = execution.getVariable("globalSubscriberId")
523 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
526 ServiceInfo serviceInfo = new ServiceInfo()
527 serviceInfo.globalSubscriberId = globalSubscriberId
528 serviceInfo.subscriptionServiceType = subscriptionServiceType
529 serviceInfo.nsiId = sliceParams.suggestNsiId
530 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
531 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
532 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
533 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
534 serviceInfo.nssiName = allocateCnNssi.nssiName
536 nbiRequest.setServiceInfo(serviceInfo)
537 nbiRequest.setEsrInfo(esrInfo)
538 nbiRequest.setAllocateCnNssi(allocateCnNssi)
540 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
541 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
542 execution.setVariable("cnSubnetType", SubnetType.CN)
547 * create TN Slice Profile Instance
550 void createTnBHSliceProfileInstance(DelegateExecution execution) {
551 String globalSubscriberId = execution.getVariable("globalSubscriberId")
552 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
554 String oStatus = "deactivated"
556 SliceTaskParamsAdapter sliceParams =
557 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
559 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
560 String serviceInstanceId = UUID.randomUUID().toString()
562 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
563 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
565 // create slice profile
566 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
568 //timestamp format YYYY-MM-DD hh:mm:ss
569 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
571 execution.setVariable("communicationServiceInstance", rspi)
573 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
574 .customer(globalSubscriberId)
575 .serviceSubscription(subscriptionServiceType)
576 .serviceInstance(serviceInstanceId))
577 client.create(uri, rspi)
579 execution.setVariable("sliceTaskParams", sliceParams)
583 * create Tn Slice Profile
586 void createTnBHSliceProfile(DelegateExecution execution) {
588 String globalSubscriberId = execution.getVariable("globalSubscriberId")
589 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
591 SliceTaskParamsAdapter sliceParams =
592 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
594 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
596 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
597 String profileId = UUID.randomUUID().toString()
598 tnSliceProfile.setSliceProfileId(profileId)
600 SliceProfile sliceProfile = new SliceProfile()
601 sliceProfile.setProfileId(profileId)
603 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
604 .customer(globalSubscriberId)
605 .serviceSubscription(subscriptionServiceType)
606 .serviceInstance(sliceTaskInfo.sliceInstanceId)
607 .sliceProfile(profileId))
608 client.create(uri, sliceProfile)
610 execution.setVariable("sliceTaskParams", sliceParams)
614 * prepare AllocateCnNssi
617 void prepareAllocateTnBHNssi(DelegateExecution execution) {
620 SliceTaskParamsAdapter sliceParams =
621 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
622 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
624 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
626 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
627 //todo: AllocateTnNssi
628 //todo: endPointId -> set into tn
629 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
630 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
631 List<ConnectionLink> connectionLinks = new ArrayList<>()
632 ConnectionLink connectionLink = new ConnectionLink()
633 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
634 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
635 connectionLinks.add(connectionLink)
636 transportSliceNetwork.setConnectionLinks(connectionLinks)
637 transportSliceNetworks.add(transportSliceNetwork)
638 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
640 allocateTnNssi.setNetworkSliceInfos()
641 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
642 NsiInfo nsiInfo = new NsiInfo()
643 nsiInfo.setNsiId(sliceParams.suggestNsiId)
644 nsiInfo.setNsiName(sliceParams.suggestNsiName)
645 allocateTnNssi.setNsiInfo(nsiInfo)
647 //allocateTnNssi.networkSliceInfos
649 EsrInfo esrInfo = new EsrInfo()
650 esrInfo.setVendor(sliceTaskInfo.getVendor())
651 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
653 String globalSubscriberId = execution.getVariable("globalSubscriberId")
654 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
656 ServiceInfo serviceInfo = new ServiceInfo()
657 serviceInfo.globalSubscriberId = globalSubscriberId
658 serviceInfo.subscriptionServiceType = subscriptionServiceType
659 serviceInfo.nsiId = sliceParams.suggestNsiId
660 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
661 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
662 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
663 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
665 nbiRequest.setServiceInfo(serviceInfo)
666 nbiRequest.setEsrInfo(esrInfo)
667 nbiRequest.setAllocateTnNssi(allocateTnNssi)
669 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
670 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
671 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
675 * Update relationship between
677 * 2. Slice Profile and Service Profile
678 * 3. SliceProfile and NSSI
679 * 4. sliceProfile and endpoint
683 public void updateAnRelationship(DelegateExecution execution) {
685 SliceTaskParamsAdapter sliceParams =
686 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
688 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
689 String nssiId = result.getNssiId()
690 String nsiId = sliceParams.getSuggestNsiId()
691 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
692 String serviceProfileInstanceId = sliceParams.serviceId
693 String epId = sliceParams.anSliceTaskInfo.endPointId
695 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
696 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
697 //execution.setVariable("endPointIdAn", endPointId)
698 updateRelationship(execution, nsiId, nssiId)
700 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
702 updateRelationship(execution, sliceProfileInstanceId, nssiId)
704 updateEPRelationship(execution, nssiId, epId)
706 updateEPRelationship(execution, sliceProfileInstanceId, epId)
708 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
709 execution.setVariable("sliceTaskParams", sliceParams)
714 * Update relationship between
716 * 2. Slice Profile and Service Profile
717 * 3. SliceProfile and NSSI
721 public void updateCnRelationship(DelegateExecution execution) {
723 SliceTaskParamsAdapter sliceParams =
724 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
726 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
727 String nssiId = result.getNssiId()
728 String nsiId = sliceParams.getSuggestNsiId()
729 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
730 String serviceProfileInstanceId = sliceParams.serviceId
731 String epId = sliceParams.cnSliceTaskInfo.endPointId
733 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
734 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
735 // execution.setVariable("endPointIdCn", endPointId)
737 updateRelationship(execution, nsiId, nssiId)
739 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
741 updateRelationship(execution, sliceProfileInstanceId, nssiId)
743 updateEPRelationship(execution, nssiId, epId)
745 updateEPRelationship(execution, sliceProfileInstanceId, epId)
747 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
748 execution.setVariable("sliceTaskParams", sliceParams)
752 * get endpoint Id from AAI by nssi id
757 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
758 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
759 //todo: allottedResourceId
761 SliceTaskParamsAdapter sliceParams =
762 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
764 //sliceParams.setServiceId(nsiServiceInstanceID)
765 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
766 .customer(execution.getVariable("globalSubscriberId"))
767 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
768 .serviceInstance(nssiId))
770 String endpointId = null
773 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
774 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
775 if (!si.isPresent()) {
776 String msg = "NSSI in the option doesn't exist. " + nssiId
778 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
780 ServiceInstance nssiInstance = si.get()
781 //todo: handle relationship and return endPointId
782 if (nssiInstance.relationshipList == null) {
783 String msg = "relationshipList of " + nssiId + " is null"
787 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
788 if (relationship.relationshipLabel){
789 endpointId = relationship //todo
796 }catch(BpmnError e) {
798 }catch (Exception ex){
799 String msg = "Exception: " + ex
801 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
803 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
807 * Update relationship between
809 * 2. Slice Profile and Service Profile
810 * 3. SliceProfile and NSSI
814 public void updateTnBHRelationship(DelegateExecution execution) {
815 SliceTaskParamsAdapter sliceParams =
816 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
818 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
819 String nssiId = result.getNssiId()
820 String nsiId = sliceParams.getSuggestNsiId()
821 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
822 String serviceProfileInstanceId = sliceParams.serviceId
825 updateRelationship(execution, nsiId, nssiId)
827 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
829 updateRelationship(execution,sliceProfileInstanceId, nssiId)
831 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
832 execution.setVariable("sliceTaskParams", sliceParams)
836 * sourceId -> targetId
841 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
843 Relationship relationship = new Relationship()
845 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
846 .customer(execution.getVariable("globalSubscriberId"))
847 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
848 .serviceInstance(targetId))
850 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
852 relationship.setRelatedLink(targetInstanceUri.build().toString())
854 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
855 .customer(execution.getVariable("globalSubscriberId"))
856 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
857 .serviceInstance(sourceId))
859 client.create(sourceInstanceUri, relationship)
863 * update endpoint relationship
868 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
870 Relationship relationship = new Relationship()
872 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
874 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
876 relationship.setRelatedLink(endpointUri.build().toString())
878 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
879 .customer(execution.getVariable("globalSubscriberId"))
880 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
881 .serviceInstance(sourceId))
883 client.create(sourceInstanceUri, relationship)
886 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
887 // create slice profile
888 ServiceInstance rspi = new ServiceInstance()
889 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
890 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
891 rspi.setServiceRole("slice-profile")
892 rspi.setOrchestrationStatus(oStatus)
893 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
894 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
895 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
896 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
897 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
899 //timestamp format YYYY-MM-DD hh:mm:ss
900 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))