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.so.beans.nsmf.NsiInfo
24 import org.onap.so.beans.nsmf.SliceProfileAdapter
25 import org.onap.so.beans.nsmf.oof.SubnetType
26 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
27 import javax.ws.rs.NotFoundException
28 import org.camunda.bpm.engine.delegate.BpmnError
29 import org.camunda.bpm.engine.delegate.DelegateExecution
30 import org.onap.aai.domain.yang.Relationship
31 import org.onap.aai.domain.yang.ServiceInstance
32 import org.onap.aai.domain.yang.SliceProfile
33 import org.onap.aaiclient.client.aai.AAIResourcesClient
34 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
35 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
36 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
37 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
38 import org.onap.so.beans.nsmf.AllocateAnNssi
39 import org.onap.so.beans.nsmf.AllocateCnNssi
40 import org.onap.so.beans.nsmf.AllocateTnNssi
41 import org.onap.so.beans.nsmf.EsrInfo
42 import org.onap.so.beans.nsmf.NssiResponse
43 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
44 import org.onap.so.beans.nsmf.ServiceInfo
45 import org.onap.so.beans.nsmf.SliceTaskInfo
46 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
47 import org.onap.so.bpmn.common.scripts.ExceptionUtil
48 import org.onap.so.bpmn.core.json.JsonUtils
49 import org.slf4j.Logger
50 import org.slf4j.LoggerFactory
51 import static org.apache.commons.lang3.StringUtils.isBlank
53 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
55 private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
57 ExceptionUtil exceptionUtil = new ExceptionUtil()
59 JsonUtils jsonUtil = new JsonUtils()
61 AAIResourcesClient client = getAAIClient()
64 * Pre Process the BPMN Flow Request
66 * generate the nsOperationKey
67 * generate the nsParameters
70 void preProcessRequest (DelegateExecution execution) {
72 logger.trace("Enter preProcessRequest()")
73 Map<String, Object> nssiMap = new HashMap<>()
74 execution.setVariable("nssiMap", nssiMap)
75 boolean isMoreNSSTtoProcess = true
76 execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
77 List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
78 execution.setVariable("nsstSequence", nsstSequence)
79 logger.trace("Exit preProcessRequest")
86 void retriveSliceOption(DelegateExecution execution) {
87 logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
89 boolean isNSIOptionAvailable
91 SliceTaskParamsAdapter sliceParams =
92 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
94 if(isBlank(sliceParams.getSuggestNsiId())) {
95 isNSIOptionAvailable = false
98 isNSIOptionAvailable = true
99 execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
100 execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
102 execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
103 logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
108 * create nsi instance in aai
111 void createNSIinAAI(DelegateExecution execution) {
112 logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
114 String sliceInstanceId = UUID.randomUUID().toString()
115 SliceTaskParamsAdapter sliceParams =
116 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
118 //set new nsiId to sliceParams suggestNsiId
119 sliceParams.setSuggestNsiId(sliceInstanceId)
121 ServiceInstance nsi = new ServiceInstance()
124 String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
125 String serviceType = execution.getVariable("serviceType")
126 String serviceStatus = "deactivated"
127 String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
128 String modelUuid = sliceParams.getNSTInfo().UUID
130 String uuiRequest = execution.getVariable("uuiRequest")
131 String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
132 String serviceRole = "nsi"
134 execution.setVariable("sliceInstanceId", sliceInstanceId)
135 nsi.setServiceInstanceId(sliceInstanceId)
136 nsi.setServiceInstanceName(sliceInstanceName)
137 nsi.setServiceType(serviceType)
138 nsi.setOrchestrationStatus(serviceStatus)
139 nsi.setModelInvariantId(modelInvariantUuid)
140 nsi.setModelVersionId(modelUuid)
141 nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
142 nsi.setServiceRole(serviceRole)
146 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
147 .customer(execution.getVariable("globalSubscriberId"))
148 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
149 .serviceInstance(sliceInstanceId))
150 client.create(nsiServiceUri, nsi)
152 execution.setVariable("nsiServiceUri", nsiServiceUri)
154 } catch (BpmnError e) {
156 } catch (Exception ex) {
157 msg = "Exception in DoAllocateNSIandNSSI.createNSIinAAI: " + ex.getMessage()
159 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
161 execution.setVariable("sliceTaskParams", sliceParams)
163 logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
168 * create relationship between nsi and service profile instance
171 void createRelationship(DelegateExecution execution) {
173 logger.debug("Enter createRelationship in DoAllocateNSIandNSSI")
174 //String allottedResourceId = execution.getVariable("allottedResourceId")
175 //SliceTaskParamsAdapter sliceParams =
176 // execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
180 AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
181 logger.debug("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri.toString())
183 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
185 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
186 logger.debug("Creating Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
188 client.connect(allottedResourceUri, nsiServiceUri)
189 } catch (BpmnError e) {
191 } catch (Exception ex) {
192 msg = "Exception in DoAllocateNSIandNSSI.createRelationship. " + ex.getMessage()
194 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
196 logger.debug("Exit createRelationship in DoAllocateNSIandNSSI")
203 void updateRelationship(DelegateExecution execution) {
204 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
205 //todo: allottedResourceId
206 String allottedResourceId = execution.getVariable("allottedResourceId")
207 //Need to check whether nsi exist : Begin
209 SliceTaskParamsAdapter sliceParams =
210 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
212 String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
213 //sliceParams.setServiceId(nsiServiceInstanceID)
215 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
216 .customer(execution.getVariable("globalSubscriberId"))
217 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
218 .serviceInstance(nsiServiceInstanceID))
221 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
222 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
223 if (!si.isPresent()) {
224 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
226 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
229 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
230 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
231 logger.debug("updateRelationship Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
232 client.connect(allottedResourceUri, nsiServiceUri)
234 execution.setVariable("sliceTaskParams", sliceParams)
235 }catch(BpmnError e) {
237 }catch (Exception ex){
238 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
240 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
242 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
246 * create RAN Slice Profile Instance
249 void createAnSliceProfileInstance(DelegateExecution execution) {
251 String globalSubscriberId = execution.getVariable("globalSubscriberId")
252 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
253 String serviceInstanceId = UUID.randomUUID().toString()
254 execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
256 String oStatus = "deactivated"
258 SliceTaskParamsAdapter sliceParams =
259 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
260 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
261 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
263 // create slice profile
264 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
266 //timestamp format YYYY-MM-DD hh:mm:ss
267 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
269 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
270 .customer(globalSubscriberId)
271 .serviceSubscription(subscriptionServiceType)
272 .serviceInstance(serviceInstanceId))
273 client.create(uri, rspi)
275 execution.setVariable("sliceTaskParams", sliceParams)
279 * create An Slice Profile
282 void createAnSliceProfile(DelegateExecution execution) {
284 String globalSubscriberId = execution.getVariable("globalSubscriberId")
285 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
286 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
288 SliceTaskParamsAdapter sliceParams =
289 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
290 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
291 SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
293 String profileId = UUID.randomUUID().toString()
294 anSliceProfile.setSliceProfileId(profileId)
296 SliceProfile sliceProfile = new SliceProfile()
297 sliceProfile.setProfileId(profileId)
298 sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
300 AAIResourceUri uri = AAIUriFactory.createResourceUri(
301 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
302 .serviceSubscription(subscriptionServiceType)
303 .serviceInstance(sliceTaskInfo.sliceInstanceId)
304 .sliceProfile(profileId)
306 client.create(uri, sliceProfile)
307 execution.setVariable("sliceTaskParams", sliceParams)
311 * prepare AllocateAnNssi
314 void prepareAllocateAnNssi(DelegateExecution execution) {
317 SliceTaskParamsAdapter sliceParams =
318 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
319 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
321 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
323 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
324 allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
325 allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
326 allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
327 allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
328 NsiInfo nsiInfo = new NsiInfo()
329 nsiInfo.nsiId = sliceParams.suggestNsiId
330 allocateAnNssi.nsiInfo = nsiInfo
332 EsrInfo esrInfo = new EsrInfo()
333 //todo: vendor and network
334 esrInfo.setVendor(sliceTaskInfo.getVendor())
335 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
337 String globalSubscriberId = execution.getVariable("globalSubscriberId")
338 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
341 ServiceInfo serviceInfo = new ServiceInfo()
342 serviceInfo.globalSubscriberId = globalSubscriberId
343 serviceInfo.subscriptionServiceType = subscriptionServiceType
344 serviceInfo.nsiId = sliceParams.suggestNsiId
345 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
346 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
348 nbiRequest.setServiceInfo(serviceInfo)
349 nbiRequest.setEsrInfo(esrInfo)
350 nbiRequest.setAllocateAnNssi(allocateAnNssi)
352 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
353 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
354 execution.setVariable("anSubnetType", SubnetType.AN)
359 * create RAN Slice Profile Instance
362 void createCnSliceProfileInstance(DelegateExecution execution) {
364 String globalSubscriberId = execution.getVariable("globalSubscriberId")
365 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
366 String serviceInstanceId = UUID.randomUUID().toString()
367 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
369 String oStatus = "deactivated"
371 SliceTaskParamsAdapter sliceParams =
372 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
373 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
374 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
376 // create slice profile
377 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
379 //timestamp format YYYY-MM-DD hh:mm:ss
380 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
382 execution.setVariable("communicationServiceInstance", rspi)
384 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
385 .customer(globalSubscriberId)
386 .serviceSubscription(subscriptionServiceType)
387 .serviceInstance(serviceInstanceId))
388 client.create(uri, rspi)
389 execution.setVariable("sliceTaskParams", sliceParams)
393 * create Cn Slice Profile
396 void createCnSliceProfile(DelegateExecution execution) {
398 String globalSubscriberId = execution.getVariable("globalSubscriberId")
399 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
400 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
402 SliceTaskParamsAdapter sliceParams =
403 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
405 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
406 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
408 String profileId = UUID.randomUUID().toString()
409 cnSliceProfile.setSliceProfileId(profileId)
411 SliceProfile sliceProfile = new SliceProfile()
412 sliceProfile.setProfileId(profileId)
413 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
415 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
416 .customer(globalSubscriberId)
417 .serviceSubscription(subscriptionServiceType)
418 .serviceInstance(sliceTaskInfo.sliceInstanceId)
419 .sliceProfile(profileId))
420 client.create(uri, sliceProfile)
421 execution.setVariable("sliceTaskParams", sliceParams)
425 * prepare AllocateCnNssi
428 void prepareAllocateCnNssi(DelegateExecution execution) {
431 SliceTaskParamsAdapter sliceParams =
432 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
433 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
435 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
437 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
438 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
439 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
440 allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
441 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
442 NsiInfo nsiInfo = new NsiInfo()
443 nsiInfo.nsiId = sliceParams.suggestNsiId
444 allocateCnNssi.nsiInfo = nsiInfo
446 EsrInfo esrInfo = new EsrInfo()
447 //todo: vendor and network
448 esrInfo.setVendor(sliceTaskInfo.getVendor())
449 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
451 String globalSubscriberId = execution.getVariable("globalSubscriberId")
452 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
455 ServiceInfo serviceInfo = new ServiceInfo()
456 serviceInfo.globalSubscriberId = globalSubscriberId
457 serviceInfo.subscriptionServiceType = subscriptionServiceType
458 serviceInfo.nsiId = sliceParams.suggestNsiId
459 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
460 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
461 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
463 nbiRequest.setServiceInfo(serviceInfo)
464 nbiRequest.setEsrInfo(esrInfo)
465 nbiRequest.setAllocateCnNssi(allocateCnNssi)
467 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
468 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
469 execution.setVariable("cnSubnetType", SubnetType.CN)
474 * create TN Slice Profile Instance
477 void createTnBHSliceProfileInstance(DelegateExecution execution) {
478 String globalSubscriberId = execution.getVariable("globalSubscriberId")
479 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
481 String oStatus = "deactivated"
483 SliceTaskParamsAdapter sliceParams =
484 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
486 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
487 String serviceInstanceId = UUID.randomUUID().toString()
489 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
490 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
492 // create slice profile
493 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
495 //timestamp format YYYY-MM-DD hh:mm:ss
496 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
498 execution.setVariable("communicationServiceInstance", rspi)
500 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
501 .customer(globalSubscriberId)
502 .serviceSubscription(subscriptionServiceType)
503 .serviceInstance(serviceInstanceId))
504 client.create(uri, rspi)
506 execution.setVariable("sliceTaskParams", sliceParams)
510 * create Tn Slice Profile
513 void createTnBHSliceProfile(DelegateExecution execution) {
515 String globalSubscriberId = execution.getVariable("globalSubscriberId")
516 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
518 SliceTaskParamsAdapter sliceParams =
519 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
521 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
523 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
524 String profileId = UUID.randomUUID().toString()
525 tnSliceProfile.setSliceProfileId(profileId)
527 SliceProfile sliceProfile = new SliceProfile()
528 sliceProfile.setProfileId(profileId)
530 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
531 .customer(globalSubscriberId)
532 .serviceSubscription(subscriptionServiceType)
533 .serviceInstance(sliceTaskInfo.sliceInstanceId)
534 .sliceProfile(profileId))
535 client.create(uri, sliceProfile)
537 execution.setVariable("sliceTaskParams", sliceParams)
541 * prepare AllocateCnNssi
544 void prepareAllocateTnBHNssi(DelegateExecution execution) {
547 SliceTaskParamsAdapter sliceParams =
548 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
549 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
551 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
553 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
554 //todo: AllocateTnNssi
555 //todo: endpointId -> set into tn
556 allocateTnNssi.setTransportSliceNetworks()
557 allocateTnNssi.setNetworkSliceInfos()
561 //allocateTnNssi.networkSliceInfos
563 EsrInfo esrInfo = new EsrInfo()
564 esrInfo.setVendor(sliceTaskInfo.getVendor())
565 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
567 String globalSubscriberId = execution.getVariable("globalSubscriberId")
568 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
570 ServiceInfo serviceInfo = new ServiceInfo()
571 serviceInfo.globalSubscriberId = globalSubscriberId
572 serviceInfo.subscriptionServiceType = subscriptionServiceType
573 serviceInfo.nsiId = sliceParams.suggestNsiId
574 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
575 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
576 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
578 nbiRequest.setServiceInfo(serviceInfo)
579 nbiRequest.setEsrInfo(esrInfo)
580 nbiRequest.setAllocateTnNssi(allocateTnNssi)
582 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
583 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
584 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
588 * Update relationship between
590 * 2. Slice Profile and Service Profile
591 * 3. SliceProfile and NSSI
592 * 4. sliceProfile and endpoint
596 public void updateAnRelationship(DelegateExecution execution) {
598 SliceTaskParamsAdapter sliceParams =
599 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
601 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
602 String nssiId = result.getNssiId()
603 String nsiId = sliceParams.getSuggestNsiId()
604 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
605 String serviceProfileInstanceId = sliceParams.serviceId
607 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
608 String endPointId = getEndpointIdFromAAI(execution, nssiId)
609 execution.setVariable("endPointIdAn", endPointId)
611 updateRelationship(execution, nsiId, nssiId)
613 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
615 updateRelationship(execution, sliceProfileInstanceId, nssiId)
617 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
618 execution.setVariable("sliceTaskParams", sliceParams)
623 * Update relationship between
625 * 2. Slice Profile and Service Profile
626 * 3. SliceProfile and NSSI
630 public void updateCnRelationship(DelegateExecution execution) {
632 SliceTaskParamsAdapter sliceParams =
633 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
635 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
636 String nssiId = result.getNssiId()
637 String nsiId = sliceParams.getSuggestNsiId()
638 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
639 String serviceProfileInstanceId = sliceParams.serviceId
641 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
642 String endPointId = getEndpointIdFromAAI(execution, nssiId)
643 execution.setVariable("endPointIdCn", endPointId)
645 updateRelationship(execution, nsiId, nssiId)
647 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
649 updateRelationship(execution,sliceProfileInstanceId, nssiId)
651 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
652 execution.setVariable("sliceTaskParams", sliceParams)
656 * get endpoint Id from AAI by nssi id
661 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
662 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
663 //todo: allottedResourceId
665 SliceTaskParamsAdapter sliceParams =
666 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
668 //sliceParams.setServiceId(nsiServiceInstanceID)
669 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
670 .customer(execution.getVariable("globalSubscriberId"))
671 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
672 .serviceInstance(nssiId))
674 String endpointId = null
677 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
678 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
679 if (!si.isPresent()) {
680 String msg = "NSSI in the option doesn't exist. " + nssiId
682 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
684 ServiceInstance nssiInstance = si.get()
685 //todo: handle relationship and return endpointId
686 if (nssiInstance.relationshipList == null) {
687 String msg = "relationshipList of " + nssiId + " is null"
691 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
692 if (relationship.relationshipLabel){
693 endpointId = relationship //todo
700 }catch(BpmnError e) {
702 }catch (Exception ex){
703 String msg = "Exception: " + ex
705 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
707 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
711 * Update relationship between
713 * 2. Slice Profile and Service Profile
714 * 3. SliceProfile and NSSI
718 public void updateTnBHRelationship(DelegateExecution execution) {
719 SliceTaskParamsAdapter sliceParams =
720 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
722 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
723 String nssiId = result.getNssiId()
724 String nsiId = sliceParams.getSuggestNsiId()
725 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
726 String serviceProfileInstanceId = sliceParams.serviceId
729 updateRelationship(execution, nsiId, nssiId)
731 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
733 updateRelationship(execution,sliceProfileInstanceId, nssiId)
735 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
736 execution.setVariable("sliceTaskParams", sliceParams)
740 * sourceId -> targetId
745 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
747 Relationship relationship = new Relationship()
749 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
750 .customer(execution.getVariable("globalSubscriberId"))
751 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
752 .serviceInstance(targetId))
754 logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
756 relationship.setRelatedLink(targetInstanceUri.build().toString())
758 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
759 .customer(execution.getVariable("globalSubscriberId"))
760 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
761 .serviceInstance(sourceId))
763 client.create(sourceInstanceUri, relationship)
766 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
767 // create slice profile
768 ServiceInstance rspi = new ServiceInstance()
769 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
770 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
771 rspi.setServiceRole("slice-profile-instance")
772 rspi.setOrchestrationStatus(oStatus)
773 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
774 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
775 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
776 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
777 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
779 //timestamp format YYYY-MM-DD hh:mm:ss
780 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))