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()
558 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
559 NsiInfo nsiInfo = new NsiInfo()
560 nsiInfo.setNsiId(sliceParams.suggestNsiId)
561 nsiInfo.setNsiName(sliceParams.suggestNsiName)
562 allocateTnNssi.setNsiInfo(nsiInfo)
564 //allocateTnNssi.networkSliceInfos
566 EsrInfo esrInfo = new EsrInfo()
567 esrInfo.setVendor(sliceTaskInfo.getVendor())
568 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
570 String globalSubscriberId = execution.getVariable("globalSubscriberId")
571 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
573 ServiceInfo serviceInfo = new ServiceInfo()
574 serviceInfo.globalSubscriberId = globalSubscriberId
575 serviceInfo.subscriptionServiceType = subscriptionServiceType
576 serviceInfo.nsiId = sliceParams.suggestNsiId
577 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
578 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
579 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
581 nbiRequest.setServiceInfo(serviceInfo)
582 nbiRequest.setEsrInfo(esrInfo)
583 nbiRequest.setAllocateTnNssi(allocateTnNssi)
585 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
586 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
587 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
591 * Update relationship between
593 * 2. Slice Profile and Service Profile
594 * 3. SliceProfile and NSSI
595 * 4. sliceProfile and endpoint
599 public void updateAnRelationship(DelegateExecution execution) {
601 SliceTaskParamsAdapter sliceParams =
602 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
604 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
605 String nssiId = result.getNssiId()
606 String nsiId = sliceParams.getSuggestNsiId()
607 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
608 String serviceProfileInstanceId = sliceParams.serviceId
610 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
611 String endPointId = getEndpointIdFromAAI(execution, nssiId)
612 execution.setVariable("endPointIdAn", endPointId)
614 updateRelationship(execution, nsiId, nssiId)
616 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
618 updateRelationship(execution, sliceProfileInstanceId, nssiId)
620 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
621 execution.setVariable("sliceTaskParams", sliceParams)
626 * Update relationship between
628 * 2. Slice Profile and Service Profile
629 * 3. SliceProfile and NSSI
633 public void updateCnRelationship(DelegateExecution execution) {
635 SliceTaskParamsAdapter sliceParams =
636 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
638 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
639 String nssiId = result.getNssiId()
640 String nsiId = sliceParams.getSuggestNsiId()
641 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
642 String serviceProfileInstanceId = sliceParams.serviceId
644 //todo: aai -> nssi -> relationship -> endpointId -> set into tn
645 String endPointId = getEndpointIdFromAAI(execution, nssiId)
646 execution.setVariable("endPointIdCn", endPointId)
648 updateRelationship(execution, nsiId, nssiId)
650 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
652 updateRelationship(execution,sliceProfileInstanceId, nssiId)
654 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
655 execution.setVariable("sliceTaskParams", sliceParams)
659 * get endpoint Id from AAI by nssi id
664 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
665 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
666 //todo: allottedResourceId
668 SliceTaskParamsAdapter sliceParams =
669 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
671 //sliceParams.setServiceId(nsiServiceInstanceID)
672 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
673 .customer(execution.getVariable("globalSubscriberId"))
674 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
675 .serviceInstance(nssiId))
677 String endpointId = null
680 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
681 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
682 if (!si.isPresent()) {
683 String msg = "NSSI in the option doesn't exist. " + nssiId
685 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
687 ServiceInstance nssiInstance = si.get()
688 //todo: handle relationship and return endpointId
689 if (nssiInstance.relationshipList == null) {
690 String msg = "relationshipList of " + nssiId + " is null"
694 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
695 if (relationship.relationshipLabel){
696 endpointId = relationship //todo
703 }catch(BpmnError e) {
705 }catch (Exception ex){
706 String msg = "Exception: " + ex
708 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
710 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
714 * Update relationship between
716 * 2. Slice Profile and Service Profile
717 * 3. SliceProfile and NSSI
721 public void updateTnBHRelationship(DelegateExecution execution) {
722 SliceTaskParamsAdapter sliceParams =
723 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
725 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
726 String nssiId = result.getNssiId()
727 String nsiId = sliceParams.getSuggestNsiId()
728 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
729 String serviceProfileInstanceId = sliceParams.serviceId
732 updateRelationship(execution, nsiId, nssiId)
734 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
736 updateRelationship(execution,sliceProfileInstanceId, nssiId)
738 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
739 execution.setVariable("sliceTaskParams", sliceParams)
743 * sourceId -> targetId
748 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
750 Relationship relationship = new Relationship()
752 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
753 .customer(execution.getVariable("globalSubscriberId"))
754 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
755 .serviceInstance(targetId))
757 logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
759 relationship.setRelatedLink(targetInstanceUri.build().toString())
761 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
762 .customer(execution.getVariable("globalSubscriberId"))
763 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
764 .serviceInstance(sourceId))
766 client.create(sourceInstanceUri, relationship)
769 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
770 // create slice profile
771 ServiceInstance rspi = new ServiceInstance()
772 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
773 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
774 rspi.setServiceRole("slice-profile")
775 rspi.setOrchestrationStatus(oStatus)
776 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
777 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
778 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
779 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
780 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
782 //timestamp format YYYY-MM-DD hh:mm:ss
783 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))