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.SliceProfileAdapter
24 import org.onap.so.beans.nsmf.oof.SubnetType
25 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
26 import javax.ws.rs.NotFoundException
27 import org.camunda.bpm.engine.delegate.BpmnError
28 import org.camunda.bpm.engine.delegate.DelegateExecution
29 import org.onap.aai.domain.yang.Relationship
30 import org.onap.aai.domain.yang.ServiceInstance
31 import org.onap.aai.domain.yang.SliceProfile
32 import org.onap.aaiclient.client.aai.AAIResourcesClient
33 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
34 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
35 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
36 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
37 import org.onap.so.beans.nsmf.AllocateAnNssi
38 import org.onap.so.beans.nsmf.AllocateCnNssi
39 import org.onap.so.beans.nsmf.AllocateTnNssi
40 import org.onap.so.beans.nsmf.EsrInfo
41 import org.onap.so.beans.nsmf.NssiResponse
42 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
43 import org.onap.so.beans.nsmf.ServiceInfo
44 import org.onap.so.beans.nsmf.SliceTaskInfo
45 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
46 import org.onap.so.bpmn.common.scripts.ExceptionUtil
47 import org.onap.so.bpmn.core.json.JsonUtils
48 import org.slf4j.Logger
49 import org.slf4j.LoggerFactory
50 import static org.apache.commons.lang3.StringUtils.isBlank
52 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
54 private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
56 ExceptionUtil exceptionUtil = new ExceptionUtil()
58 JsonUtils jsonUtil = new JsonUtils()
60 AAIResourcesClient client = getAAIClient()
63 * Pre Process the BPMN Flow Request
65 * generate the nsOperationKey
66 * generate the nsParameters
69 void preProcessRequest (DelegateExecution execution) {
71 logger.trace("Enter preProcessRequest()")
72 Map<String, Object> nssiMap = new HashMap<>()
73 execution.setVariable("nssiMap", nssiMap)
74 boolean isMoreNSSTtoProcess = true
75 execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
76 List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
77 execution.setVariable("nsstSequence", nsstSequence)
78 logger.trace("Exit preProcessRequest")
85 void retriveSliceOption(DelegateExecution execution) {
86 logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
88 boolean isNSIOptionAvailable
90 SliceTaskParamsAdapter sliceParams =
91 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
93 if(isBlank(sliceParams.getSuggestNsiId())) {
94 isNSIOptionAvailable = false
97 isNSIOptionAvailable = true
98 execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
99 execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
101 execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
102 logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
107 * create nsi instance in aai
110 void createNSIinAAI(DelegateExecution execution) {
111 logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
113 String sliceInstanceId = UUID.randomUUID().toString()
114 SliceTaskParamsAdapter sliceParams =
115 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
117 //set new nsiId to sliceParams suggestNsiId
118 sliceParams.setSuggestNsiId(sliceInstanceId)
120 ServiceInstance nsi = new ServiceInstance()
123 String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
124 String serviceType = execution.getVariable("serviceType")
125 String serviceStatus = "deactivated"
126 String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
127 String modelUuid = sliceParams.getNSTInfo().UUID
129 String uuiRequest = execution.getVariable("uuiRequest")
130 String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
131 String serviceRole = "nsi"
133 execution.setVariable("sliceInstanceId", sliceInstanceId)
134 nsi.setServiceInstanceId(sliceInstanceId)
135 nsi.setServiceInstanceName(sliceInstanceName)
136 nsi.setServiceType(serviceType)
137 nsi.setOrchestrationStatus(serviceStatus)
138 nsi.setModelInvariantId(modelInvariantUuid)
139 nsi.setModelVersionId(modelUuid)
140 nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
141 nsi.setServiceRole(serviceRole)
145 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceInstanceId))
146 client.create(nsiServiceUri, nsi)
148 execution.setVariable("nsiServiceUri", nsiServiceUri)
150 } catch (BpmnError e) {
152 } catch (Exception ex) {
153 msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
155 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
157 execution.setVariable("sliceTaskParams", sliceParams)
159 logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
164 * create relationship between nsi and service profile instance
167 void createRelationship(DelegateExecution execution) {
169 String allottedResourceId = execution.getVariable("allottedResourceId")
170 SliceTaskParamsAdapter sliceParams =
171 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
173 AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
174 logger.info("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri)
176 AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
178 client.connect(allottedResourceUri, nsiServiceUri)
185 void updateRelationship(DelegateExecution execution) {
186 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
187 //todo: allottedResourceId
188 String allottedResourceId = execution.getVariable("allottedResourceId")
189 //Need to check whether nsi exist : Begin
191 SliceTaskParamsAdapter sliceParams =
192 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
194 String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
195 //sliceParams.setServiceId(nsiServiceInstanceID)
197 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nsiServiceInstanceID))
200 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
201 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
202 if (!si.isPresent()) {
203 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
205 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
208 AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
210 client.connect(allottedResourceUri, nsiServiceUri)
212 execution.setVariable("sliceTaskParams", sliceParams)
213 }catch(BpmnError e) {
215 }catch (Exception ex){
216 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
218 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
220 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
224 * create RAN Slice Profile Instance
227 void createAnSliceProfileInstance(DelegateExecution execution) {
229 String globalSubscriberId = execution.getVariable("globalSubscriberId")
230 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
231 String serviceInstanceId = UUID.randomUUID().toString()
232 execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
234 String serviceType = ""
235 String serviceRole = "slice-profile"
236 String oStatus = "deactivated"
238 SliceTaskParamsAdapter sliceParams =
239 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
240 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
241 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
243 // create slice profile
244 ServiceInstance rspi = new ServiceInstance()
245 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
246 rspi.setServiceType(serviceType)
247 rspi.setServiceRole(serviceRole)
248 rspi.setOrchestrationStatus(oStatus)
249 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
250 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
251 rspi.setInputParameters(execution.getVariable("uuiRequest"))
252 rspi.setWorkloadContext(execution.getVariable("useInterval"))
253 rspi.setEnvironmentContext(execution.getVariable("sNSSAI_id"))
255 //timestamp format YYYY-MM-DD hh:mm:ss
256 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
258 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
259 client.create(uri, rspi)
261 execution.setVariable("sliceTaskParams", sliceParams)
265 * create An Slice Profile
268 void createAnSliceProfile(DelegateExecution execution) {
270 String globalSubscriberId = execution.getVariable("globalSubscriberId")
271 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
272 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
274 SliceTaskParamsAdapter sliceParams =
275 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
276 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
277 SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
279 String profileId = UUID.randomUUID().toString()
280 anSliceProfile.setSliceProfileId(profileId)
282 SliceProfile sliceProfile = new SliceProfile()
283 sliceProfile.setProfileId(profileId)
284 sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
286 AAIResourceUri uri = AAIUriFactory.createResourceUri(
287 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
288 .serviceSubscription(subscriptionServiceType)
289 .serviceInstance(sliceTaskInfo.sliceInstanceId)
290 .sliceProfile(profileId)
292 client.create(uri, sliceProfile)
293 execution.setVariable("sliceTaskParams", sliceParams)
297 * prepare AllocateAnNssi
300 void prepareAllocateAnNssi(DelegateExecution execution) {
303 SliceTaskParamsAdapter sliceParams =
304 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
305 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
307 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
309 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
310 allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
311 allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
312 allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
313 allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
314 allocateAnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId
316 EsrInfo esrInfo = new EsrInfo()
317 //todo: vendor and network
318 esrInfo.setVendor(sliceTaskInfo.getVendor())
319 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
321 String globalSubscriberId = execution.getVariable("globalSubscriberId")
322 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
325 ServiceInfo serviceInfo = new ServiceInfo()
326 serviceInfo.globalSubscriberId = globalSubscriberId
327 serviceInfo.subscriptionServiceType = subscriptionServiceType
328 serviceInfo.nsiId = sliceParams.suggestNsiId
329 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
330 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
332 nbiRequest.setServiceInfo(serviceInfo)
333 nbiRequest.setEsrInfo(esrInfo)
334 nbiRequest.setAllocateAnNssi(allocateAnNssi)
336 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
337 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
338 execution.setVariable("anSubnetType", SubnetType.AN)
343 * create RAN Slice Profile Instance
346 void createCnSliceProfileInstance(DelegateExecution execution) {
348 String globalSubscriberId = execution.getVariable("globalSubscriberId")
349 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
350 String serviceInstanceId = UUID.randomUUID().toString()
351 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
353 String serviceType = ""
354 String serviceRole = "slice-profile"
355 String oStatus = "deactivated"
357 SliceTaskParamsAdapter sliceParams =
358 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
359 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
360 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
362 // create slice profile
363 ServiceInstance rspi = new ServiceInstance()
364 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
365 rspi.setServiceType(serviceType)
366 rspi.setServiceRole(serviceRole)
367 rspi.setOrchestrationStatus(oStatus)
368 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
369 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
370 rspi.setInputParameters(uuiRequest)
371 rspi.setWorkloadContext(useInterval)
372 rspi.setEnvironmentContext(sNSSAI_id)
374 //timestamp format YYYY-MM-DD hh:mm:ss
375 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
377 execution.setVariable("communicationServiceInstance", rspi)
379 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
380 client.create(uri, rspi)
381 execution.setVariable("sliceTaskParams", sliceParams)
385 * create Cn Slice Profile
388 void createCnSliceProfile(DelegateExecution execution) {
390 String globalSubscriberId = execution.getVariable("globalSubscriberId")
391 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
392 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
394 SliceTaskParamsAdapter sliceParams =
395 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
397 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
398 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
400 String profileId = UUID.randomUUID().toString()
401 cnSliceProfile.setSliceProfileId(profileId)
403 SliceProfile sliceProfile = new SliceProfile()
404 sliceProfile.setProfileId(profileId)
405 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
407 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
408 client.create(uri, sliceProfile)
409 execution.setVariable("sliceTaskParams", sliceParams)
413 * prepare AllocateCnNssi
416 void prepareAllocateCnNssi(DelegateExecution execution) {
419 SliceTaskParamsAdapter sliceParams =
420 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
421 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
423 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
425 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
426 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
427 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
428 allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
429 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
430 allocateCnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId
432 EsrInfo esrInfo = new EsrInfo()
433 //todo: vendor and network
434 esrInfo.setVendor(sliceTaskInfo.getVendor())
435 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
437 String globalSubscriberId = execution.getVariable("globalSubscriberId")
438 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
441 ServiceInfo serviceInfo = new ServiceInfo()
442 serviceInfo.globalSubscriberId = globalSubscriberId
443 serviceInfo.subscriptionServiceType = subscriptionServiceType
444 serviceInfo.nsiId = sliceParams.suggestNsiId
445 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
446 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
447 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
449 nbiRequest.setServiceInfo(serviceInfo)
450 nbiRequest.setEsrInfo(esrInfo)
451 nbiRequest.setAllocateCnNssi(allocateCnNssi)
453 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
454 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
455 execution.setVariable("cnSubnetType", SubnetType.CN)
460 * create TN Slice Profile Instance
463 void createTnBHSliceProfileInstance(DelegateExecution execution) {
464 String globalSubscriberId = execution.getVariable("globalSubscriberId")
465 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
467 String serviceType = ""
468 String serviceRole = "slice-profile"
469 String oStatus = "deactivated"
471 SliceTaskParamsAdapter sliceParams =
472 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
474 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
475 String serviceInstanceId = UUID.randomUUID().toString()
477 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
478 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
480 // create slice profile
481 ServiceInstance rspi = new ServiceInstance()
482 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
483 rspi.setServiceType(serviceType)
484 rspi.setServiceRole(serviceRole)
485 rspi.setOrchestrationStatus(oStatus)
486 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
487 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
488 rspi.setInputParameters(uuiRequest)
489 rspi.setWorkloadContext(useInterval)
490 rspi.setEnvironmentContext(sNSSAI_id)
492 //timestamp format YYYY-MM-DD hh:mm:ss
493 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
495 execution.setVariable("communicationServiceInstance", rspi)
497 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
498 client.create(uri, rspi)
500 execution.setVariable("sliceTaskParams", sliceParams)
504 * create Tn Slice Profile
507 void createTnBHSliceProfile(DelegateExecution execution) {
509 String globalSubscriberId = execution.getVariable("globalSubscriberId")
510 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
512 SliceTaskParamsAdapter sliceParams =
513 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
515 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
517 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
518 String profileId = UUID.randomUUID().toString()
519 tnSliceProfile.setSliceProfileId(profileId)
521 SliceProfile sliceProfile = new SliceProfile()
522 sliceProfile.setProfileId(profileId)
524 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
525 client.create(uri, sliceProfile)
527 execution.setVariable("sliceTaskParams", sliceParams)
531 * prepare AllocateCnNssi
534 void prepareAllocateTnBHNssi(DelegateExecution execution) {
537 SliceTaskParamsAdapter sliceParams =
538 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
539 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
541 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
543 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
544 //todo: AllocateTnNssi
545 //todo: endpointId -> set into tn
546 allocateTnNssi.setTransportSliceNetworks()
547 allocateTnNssi.setNetworkSliceInfos()
551 //allocateTnNssi.networkSliceInfos
553 EsrInfo esrInfo = new EsrInfo()
554 esrInfo.setVendor(sliceTaskInfo.getVendor())
555 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
557 String globalSubscriberId = execution.getVariable("globalSubscriberId")
558 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
560 ServiceInfo serviceInfo = new ServiceInfo()
561 serviceInfo.globalSubscriberId = globalSubscriberId
562 serviceInfo.subscriptionServiceType = subscriptionServiceType
563 serviceInfo.nsiId = sliceParams.suggestNsiId
564 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
565 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
566 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
568 nbiRequest.setServiceInfo(serviceInfo)
569 nbiRequest.setEsrInfo(esrInfo)
570 nbiRequest.setAllocateTnNssi(allocateTnNssi)
572 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
573 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
574 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
578 * Update relationship between
580 * 2. Slice Profile and Service Profile
581 * 3. SliceProfile and NSSI
582 * 4. sliceProfile and endpoint
586 public void updateAnRelationship(DelegateExecution execution) {
588 SliceTaskParamsAdapter sliceParams =
589 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
591 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
592 String nssiId = result.getNssiId()
593 String nsiId = sliceParams.getSuggestNsiId()
594 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
595 String serviceProfileInstanceId = sliceParams.serviceId
597 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
598 String endPointId = getEndpointIdFromAAI(execution, nssiId)
599 execution.setVariable("endPointIdAn", endPointId)
601 updateRelationship(execution, nsiId, nssiId)
603 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
605 updateRelationship(execution, sliceProfileInstanceId, nssiId)
607 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
608 execution.setVariable("sliceTaskParams", sliceParams)
613 * Update relationship between
615 * 2. Slice Profile and Service Profile
616 * 3. SliceProfile and NSSI
620 public void updateCnRelationship(DelegateExecution execution) {
622 SliceTaskParamsAdapter sliceParams =
623 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
625 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
626 String nssiId = result.getNssiId()
627 String nsiId = sliceParams.getSuggestNsiId()
628 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
629 String serviceProfileInstanceId = sliceParams.serviceId
631 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
632 String endPointId = getEndpointIdFromAAI(execution, nssiId)
633 execution.setVariable("endPointIdCn", endPointId)
635 updateRelationship(execution, nsiId, nssiId)
637 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
639 updateRelationship(execution,sliceProfileInstanceId, nssiId)
641 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
642 execution.setVariable("sliceTaskParams", sliceParams)
646 * get endpoint Id from AAI by nssi id
651 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
652 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
653 //todo: allottedResourceId
655 SliceTaskParamsAdapter sliceParams =
656 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
658 //sliceParams.setServiceId(nsiServiceInstanceID)
659 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nssiId))
661 String endpointId = null
664 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
665 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
666 if (!si.isPresent()) {
667 String msg = "NSSI in the option doesn't exist. " + nssiId
669 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
671 ServiceInstance nssiInstance = si.get()
672 //todo: handle relationship and return endpointId
673 if (nssiInstance.relationshipList == null) {
674 String msg = "relationshipList of " + nssiId + " is null"
678 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
679 if (relationship.relationshipLabel){
680 endpointId = relationship //todo
687 }catch(BpmnError e) {
689 }catch (Exception ex){
690 String msg = "Exception: " + ex
692 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
694 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
698 * Update relationship between
700 * 2. Slice Profile and Service Profile
701 * 3. SliceProfile and NSSI
705 public void updateTnBHRelationship(DelegateExecution execution) {
706 SliceTaskParamsAdapter sliceParams =
707 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
709 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
710 String nssiId = result.getNssiId()
711 String nsiId = sliceParams.getSuggestNsiId()
712 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
713 String serviceProfileInstanceId = sliceParams.serviceId
716 updateRelationship(execution, nsiId, nssiId)
718 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
720 updateRelationship(execution,sliceProfileInstanceId, nssiId)
722 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
723 execution.setVariable("sliceTaskParams", sliceParams)
727 * sourceId -> targetId
732 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
734 Relationship relationship = new Relationship()
736 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(targetId))
738 logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
740 relationship.setRelatedLink(targetInstanceUri.build().toString())
742 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sourceId)).relationshipAPI()
743 client.create(sourceInstanceUri, relationship)