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.ConnectionLink
24 import org.onap.so.beans.nsmf.EndPoint
25 import org.onap.so.beans.nsmf.NsiInfo
26 import org.onap.so.beans.nsmf.SliceProfileAdapter
27 import org.onap.so.beans.nsmf.TransportSliceNetwork
28 import org.onap.so.beans.nsmf.oof.SubnetType
29 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
30 import javax.ws.rs.NotFoundException
31 import org.camunda.bpm.engine.delegate.BpmnError
32 import org.camunda.bpm.engine.delegate.DelegateExecution
33 import org.onap.aai.domain.yang.Relationship
34 import org.onap.aai.domain.yang.ServiceInstance
35 import org.onap.aai.domain.yang.SliceProfile
36 import org.onap.aaiclient.client.aai.AAIResourcesClient
37 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
38 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
39 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
40 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
41 import org.onap.so.beans.nsmf.AllocateAnNssi
42 import org.onap.so.beans.nsmf.AllocateCnNssi
43 import org.onap.so.beans.nsmf.AllocateTnNssi
44 import org.onap.so.beans.nsmf.EsrInfo
45 import org.onap.so.beans.nsmf.NssiResponse
46 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
47 import org.onap.so.beans.nsmf.ServiceInfo
48 import org.onap.so.beans.nsmf.SliceTaskInfo
49 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
50 import org.onap.so.bpmn.common.scripts.ExceptionUtil
51 import org.onap.so.bpmn.core.json.JsonUtils
52 import org.slf4j.Logger
53 import org.slf4j.LoggerFactory
54 import static org.apache.commons.lang3.StringUtils.isBlank
56 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
58 private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
60 ExceptionUtil exceptionUtil = new ExceptionUtil()
62 JsonUtils jsonUtil = new JsonUtils()
64 AAIResourcesClient client = getAAIClient()
67 * Pre Process the BPMN Flow Request
69 * generate the nsOperationKey
70 * generate the nsParameters
73 void preProcessRequest (DelegateExecution execution) {
75 logger.trace("Enter preProcessRequest()")
76 Map<String, Object> nssiMap = new HashMap<>()
77 execution.setVariable("nssiMap", nssiMap)
78 boolean isMoreNSSTtoProcess = true
79 execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
80 List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
81 execution.setVariable("nsstSequence", nsstSequence)
82 logger.trace("Exit preProcessRequest")
89 void retriveSliceOption(DelegateExecution execution) {
90 logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
92 boolean isNSIOptionAvailable
94 SliceTaskParamsAdapter sliceParams =
95 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
97 if(isBlank(sliceParams.getSuggestNsiId())) {
98 isNSIOptionAvailable = false
101 isNSIOptionAvailable = true
102 execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
103 execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
105 execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
106 logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
111 * create nsi instance in aai
114 void createNSIinAAI(DelegateExecution execution) {
115 logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
117 String sliceInstanceId = UUID.randomUUID().toString()
118 SliceTaskParamsAdapter sliceParams =
119 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
121 //set new nsiId to sliceParams suggestNsiId
122 sliceParams.setSuggestNsiId(sliceInstanceId)
124 ServiceInstance nsi = new ServiceInstance()
127 String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
128 String serviceType = execution.getVariable("serviceType")
129 String serviceStatus = "deactivated"
130 String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
131 String modelUuid = sliceParams.getNSTInfo().UUID
133 String uuiRequest = execution.getVariable("uuiRequest")
134 String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
135 String serviceRole = "nsi"
137 execution.setVariable("sliceInstanceId", sliceInstanceId)
138 nsi.setServiceInstanceId(sliceInstanceId)
139 nsi.setServiceInstanceName(sliceInstanceName)
140 nsi.setServiceType(serviceType)
141 nsi.setOrchestrationStatus(serviceStatus)
142 nsi.setModelInvariantId(modelInvariantUuid)
143 nsi.setModelVersionId(modelUuid)
144 nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
145 nsi.setServiceRole(serviceRole)
149 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
150 .customer(execution.getVariable("globalSubscriberId"))
151 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
152 .serviceInstance(sliceInstanceId))
153 client.create(nsiServiceUri, nsi)
155 execution.setVariable("nsiServiceUri", nsiServiceUri)
157 } catch (BpmnError e) {
159 } catch (Exception ex) {
160 msg = "Exception in DoAllocateNSIandNSSI.createNSIinAAI: " + ex.getMessage()
162 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
164 execution.setVariable("sliceTaskParams", sliceParams)
166 logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
171 * create relationship between nsi and service profile instance
174 void createRelationship(DelegateExecution execution) {
176 logger.debug("Enter createRelationship in DoAllocateNSIandNSSI")
177 //String allottedResourceId = execution.getVariable("allottedResourceId")
178 //SliceTaskParamsAdapter sliceParams =
179 // execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
183 AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
184 logger.debug("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri.toString())
186 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
188 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
189 logger.debug("Creating Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
191 client.connect(allottedResourceUri, nsiServiceUri)
192 } catch (BpmnError e) {
194 } catch (Exception ex) {
195 msg = "Exception in DoAllocateNSIandNSSI.createRelationship. " + ex.getMessage()
197 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
199 logger.debug("Exit createRelationship in DoAllocateNSIandNSSI")
206 void updateRelationship(DelegateExecution execution) {
207 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
208 //todo: allottedResourceId
209 String allottedResourceId = execution.getVariable("allottedResourceId")
210 //Need to check whether nsi exist : Begin
212 SliceTaskParamsAdapter sliceParams =
213 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
215 String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
216 //sliceParams.setServiceId(nsiServiceInstanceID)
218 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
219 .customer(execution.getVariable("globalSubscriberId"))
220 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
221 .serviceInstance(nsiServiceInstanceID))
224 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
225 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
226 if (!si.isPresent()) {
227 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
229 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
232 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
233 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
234 logger.debug("updateRelationship Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
235 client.connect(allottedResourceUri, nsiServiceUri)
237 execution.setVariable("sliceTaskParams", sliceParams)
238 }catch(BpmnError e) {
240 }catch (Exception ex){
241 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
243 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
245 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
249 * create RAN Slice Profile Instance
252 void createAnSliceProfileInstance(DelegateExecution execution) {
254 String globalSubscriberId = execution.getVariable("globalSubscriberId")
255 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
256 String serviceInstanceId = UUID.randomUUID().toString()
257 execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
259 String oStatus = "deactivated"
261 SliceTaskParamsAdapter sliceParams =
262 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
263 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
264 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
266 // create slice profile
267 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
269 //timestamp format YYYY-MM-DD hh:mm:ss
270 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
272 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
273 .customer(globalSubscriberId)
274 .serviceSubscription(subscriptionServiceType)
275 .serviceInstance(serviceInstanceId))
276 client.create(uri, rspi)
278 execution.setVariable("sliceTaskParams", sliceParams)
282 * create An Slice Profile
285 void createAnSliceProfile(DelegateExecution execution) {
287 String globalSubscriberId = execution.getVariable("globalSubscriberId")
288 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
289 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
291 SliceTaskParamsAdapter sliceParams =
292 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
293 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
294 SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
296 String profileId = UUID.randomUUID().toString()
297 anSliceProfile.setSliceProfileId(profileId)
299 SliceProfile sliceProfile = new SliceProfile()
300 sliceProfile.setProfileId(profileId)
301 sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
303 AAIResourceUri uri = AAIUriFactory.createResourceUri(
304 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
305 .serviceSubscription(subscriptionServiceType)
306 .serviceInstance(sliceTaskInfo.sliceInstanceId)
307 .sliceProfile(profileId)
309 client.create(uri, sliceProfile)
310 execution.setVariable("sliceTaskParams", sliceParams)
314 * prepare AllocateAnNssi
317 void prepareAllocateAnNssi(DelegateExecution execution) {
320 SliceTaskParamsAdapter sliceParams =
321 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
322 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
324 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
326 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
327 allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
328 allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
329 allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
330 allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
331 NsiInfo nsiInfo = new NsiInfo()
332 nsiInfo.nsiId = sliceParams.suggestNsiId
333 nsiInfo.nsiName = sliceParams.suggestNsiName
334 allocateAnNssi.nsiInfo = nsiInfo
336 EndPoint endPoint = new EndPoint()
337 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
338 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
339 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
340 allocateAnNssi.setEndPoint(endPoint)
342 EsrInfo esrInfo = new EsrInfo()
343 //todo: vendor and network
344 esrInfo.setVendor(sliceTaskInfo.getVendor())
345 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
347 String globalSubscriberId = execution.getVariable("globalSubscriberId")
348 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
351 ServiceInfo serviceInfo = new ServiceInfo()
352 serviceInfo.globalSubscriberId = globalSubscriberId
353 serviceInfo.subscriptionServiceType = subscriptionServiceType
354 serviceInfo.nsiId = sliceParams.suggestNsiId
355 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
356 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
358 nbiRequest.setServiceInfo(serviceInfo)
359 nbiRequest.setEsrInfo(esrInfo)
360 nbiRequest.setAllocateAnNssi(allocateAnNssi)
362 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
363 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
364 execution.setVariable("anSubnetType", SubnetType.AN)
369 * create RAN Slice Profile Instance
372 void createCnSliceProfileInstance(DelegateExecution execution) {
374 String globalSubscriberId = execution.getVariable("globalSubscriberId")
375 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
376 String serviceInstanceId = UUID.randomUUID().toString()
377 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
379 String oStatus = "deactivated"
381 SliceTaskParamsAdapter sliceParams =
382 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
383 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
384 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
386 // create slice profile
387 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
389 //timestamp format YYYY-MM-DD hh:mm:ss
390 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
392 execution.setVariable("communicationServiceInstance", rspi)
394 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
395 .customer(globalSubscriberId)
396 .serviceSubscription(subscriptionServiceType)
397 .serviceInstance(serviceInstanceId))
398 client.create(uri, rspi)
399 execution.setVariable("sliceTaskParams", sliceParams)
403 * create Cn Slice Profile
406 void createCnSliceProfile(DelegateExecution execution) {
408 String globalSubscriberId = execution.getVariable("globalSubscriberId")
409 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
410 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
412 SliceTaskParamsAdapter sliceParams =
413 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
415 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
416 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
418 String profileId = UUID.randomUUID().toString()
419 cnSliceProfile.setSliceProfileId(profileId)
421 SliceProfile sliceProfile = new SliceProfile()
422 sliceProfile.setProfileId(profileId)
423 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
425 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
426 .customer(globalSubscriberId)
427 .serviceSubscription(subscriptionServiceType)
428 .serviceInstance(sliceTaskInfo.sliceInstanceId)
429 .sliceProfile(profileId))
430 client.create(uri, sliceProfile)
431 execution.setVariable("sliceTaskParams", sliceParams)
435 * prepare AllocateCnNssi
438 void prepareAllocateCnNssi(DelegateExecution execution) {
441 SliceTaskParamsAdapter sliceParams =
442 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
443 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
445 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
447 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
448 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
449 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
450 allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
451 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
452 NsiInfo nsiInfo = new NsiInfo()
453 nsiInfo.nsiId = sliceParams.suggestNsiId
454 nsiInfo.nsiName = sliceParams.suggestNsiName
455 allocateCnNssi.nsiInfo = nsiInfo
457 EndPoint endPoint = new EndPoint()
458 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
459 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
460 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
461 allocateCnNssi.setEndPoint(endPoint)
463 EsrInfo esrInfo = new EsrInfo()
464 //todo: vendor and network
465 esrInfo.setVendor(sliceTaskInfo.getVendor())
466 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
468 String globalSubscriberId = execution.getVariable("globalSubscriberId")
469 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
472 ServiceInfo serviceInfo = new ServiceInfo()
473 serviceInfo.globalSubscriberId = globalSubscriberId
474 serviceInfo.subscriptionServiceType = subscriptionServiceType
475 serviceInfo.nsiId = sliceParams.suggestNsiId
476 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
477 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
478 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
480 nbiRequest.setServiceInfo(serviceInfo)
481 nbiRequest.setEsrInfo(esrInfo)
482 nbiRequest.setAllocateCnNssi(allocateCnNssi)
484 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
485 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
486 execution.setVariable("cnSubnetType", SubnetType.CN)
491 * create TN Slice Profile Instance
494 void createTnBHSliceProfileInstance(DelegateExecution execution) {
495 String globalSubscriberId = execution.getVariable("globalSubscriberId")
496 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
498 String oStatus = "deactivated"
500 SliceTaskParamsAdapter sliceParams =
501 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
503 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
504 String serviceInstanceId = UUID.randomUUID().toString()
506 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
507 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
509 // create slice profile
510 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
512 //timestamp format YYYY-MM-DD hh:mm:ss
513 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
515 execution.setVariable("communicationServiceInstance", rspi)
517 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
518 .customer(globalSubscriberId)
519 .serviceSubscription(subscriptionServiceType)
520 .serviceInstance(serviceInstanceId))
521 client.create(uri, rspi)
523 execution.setVariable("sliceTaskParams", sliceParams)
527 * create Tn Slice Profile
530 void createTnBHSliceProfile(DelegateExecution execution) {
532 String globalSubscriberId = execution.getVariable("globalSubscriberId")
533 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
535 SliceTaskParamsAdapter sliceParams =
536 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
538 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
540 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
541 String profileId = UUID.randomUUID().toString()
542 tnSliceProfile.setSliceProfileId(profileId)
544 SliceProfile sliceProfile = new SliceProfile()
545 sliceProfile.setProfileId(profileId)
547 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
548 .customer(globalSubscriberId)
549 .serviceSubscription(subscriptionServiceType)
550 .serviceInstance(sliceTaskInfo.sliceInstanceId)
551 .sliceProfile(profileId))
552 client.create(uri, sliceProfile)
554 execution.setVariable("sliceTaskParams", sliceParams)
558 * prepare AllocateCnNssi
561 void prepareAllocateTnBHNssi(DelegateExecution execution) {
564 SliceTaskParamsAdapter sliceParams =
565 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
566 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
568 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
570 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
571 //todo: AllocateTnNssi
572 //todo: endPointId -> set into tn
573 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
574 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
575 List<ConnectionLink> connectionLinks = new ArrayList<>()
576 ConnectionLink connectionLink = new ConnectionLink()
577 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
578 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
579 connectionLinks.add(connectionLink)
580 transportSliceNetwork.setConnectionLinks(connectionLinks)
581 transportSliceNetworks.add(transportSliceNetwork)
582 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
584 allocateTnNssi.setNetworkSliceInfos()
585 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
586 NsiInfo nsiInfo = new NsiInfo()
587 nsiInfo.setNsiId(sliceParams.suggestNsiId)
588 nsiInfo.setNsiName(sliceParams.suggestNsiName)
589 allocateTnNssi.setNsiInfo(nsiInfo)
591 //allocateTnNssi.networkSliceInfos
593 EsrInfo esrInfo = new EsrInfo()
594 esrInfo.setVendor(sliceTaskInfo.getVendor())
595 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
597 String globalSubscriberId = execution.getVariable("globalSubscriberId")
598 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
600 ServiceInfo serviceInfo = new ServiceInfo()
601 serviceInfo.globalSubscriberId = globalSubscriberId
602 serviceInfo.subscriptionServiceType = subscriptionServiceType
603 serviceInfo.nsiId = sliceParams.suggestNsiId
604 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
605 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
606 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
608 nbiRequest.setServiceInfo(serviceInfo)
609 nbiRequest.setEsrInfo(esrInfo)
610 nbiRequest.setAllocateTnNssi(allocateTnNssi)
612 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
613 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
614 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
618 * Update relationship between
620 * 2. Slice Profile and Service Profile
621 * 3. SliceProfile and NSSI
622 * 4. sliceProfile and endpoint
626 public void updateAnRelationship(DelegateExecution execution) {
628 SliceTaskParamsAdapter sliceParams =
629 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
631 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
632 String nssiId = result.getNssiId()
633 String nsiId = sliceParams.getSuggestNsiId()
634 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
635 String serviceProfileInstanceId = sliceParams.serviceId
637 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
638 String endPointId = getEndpointIdFromAAI(execution, nssiId)
639 execution.setVariable("endPointIdAn", endPointId)
641 updateRelationship(execution, nsiId, nssiId)
643 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
645 updateRelationship(execution, sliceProfileInstanceId, nssiId)
647 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
648 execution.setVariable("sliceTaskParams", sliceParams)
653 * Update relationship between
655 * 2. Slice Profile and Service Profile
656 * 3. SliceProfile and NSSI
660 public void updateCnRelationship(DelegateExecution execution) {
662 SliceTaskParamsAdapter sliceParams =
663 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
665 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
666 String nssiId = result.getNssiId()
667 String nsiId = sliceParams.getSuggestNsiId()
668 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
669 String serviceProfileInstanceId = sliceParams.serviceId
671 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
672 String endPointId = getEndpointIdFromAAI(execution, nssiId)
673 execution.setVariable("endPointIdCn", endPointId)
675 updateRelationship(execution, nsiId, nssiId)
677 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
679 updateRelationship(execution,sliceProfileInstanceId, nssiId)
681 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
682 execution.setVariable("sliceTaskParams", sliceParams)
686 * get endpoint Id from AAI by nssi id
691 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
692 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
693 //todo: allottedResourceId
695 SliceTaskParamsAdapter sliceParams =
696 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
698 //sliceParams.setServiceId(nsiServiceInstanceID)
699 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
700 .customer(execution.getVariable("globalSubscriberId"))
701 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
702 .serviceInstance(nssiId))
704 String endpointId = null
707 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
708 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
709 if (!si.isPresent()) {
710 String msg = "NSSI in the option doesn't exist. " + nssiId
712 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
714 ServiceInstance nssiInstance = si.get()
715 //todo: handle relationship and return endPointId
716 if (nssiInstance.relationshipList == null) {
717 String msg = "relationshipList of " + nssiId + " is null"
721 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
722 if (relationship.relationshipLabel){
723 endpointId = relationship //todo
730 }catch(BpmnError e) {
732 }catch (Exception ex){
733 String msg = "Exception: " + ex
735 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
737 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
741 * Update relationship between
743 * 2. Slice Profile and Service Profile
744 * 3. SliceProfile and NSSI
748 public void updateTnBHRelationship(DelegateExecution execution) {
749 SliceTaskParamsAdapter sliceParams =
750 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
752 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
753 String nssiId = result.getNssiId()
754 String nsiId = sliceParams.getSuggestNsiId()
755 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
756 String serviceProfileInstanceId = sliceParams.serviceId
759 updateRelationship(execution, nsiId, nssiId)
761 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
763 updateRelationship(execution,sliceProfileInstanceId, nssiId)
765 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
766 execution.setVariable("sliceTaskParams", sliceParams)
770 * sourceId -> targetId
775 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
777 Relationship relationship = new Relationship()
779 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
780 .customer(execution.getVariable("globalSubscriberId"))
781 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
782 .serviceInstance(targetId))
784 logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
786 relationship.setRelatedLink(targetInstanceUri.build().toString())
788 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
789 .customer(execution.getVariable("globalSubscriberId"))
790 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
791 .serviceInstance(sourceId))
793 client.create(sourceInstanceUri, relationship)
796 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
797 // create slice profile
798 ServiceInstance rspi = new ServiceInstance()
799 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
800 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
801 rspi.setServiceRole("slice-profile")
802 rspi.setOrchestrationStatus(oStatus)
803 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
804 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
805 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
806 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
807 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
809 //timestamp format YYYY-MM-DD hh:mm:ss
810 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))