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 allocateAnNssi.nsiInfo = nsiInfo
335 EndPoint endPoint = new EndPoint()
336 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
337 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
338 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
339 allocateAnNssi.setEndPoint(endPoint)
341 EsrInfo esrInfo = new EsrInfo()
342 //todo: vendor and network
343 esrInfo.setVendor(sliceTaskInfo.getVendor())
344 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
346 String globalSubscriberId = execution.getVariable("globalSubscriberId")
347 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
350 ServiceInfo serviceInfo = new ServiceInfo()
351 serviceInfo.globalSubscriberId = globalSubscriberId
352 serviceInfo.subscriptionServiceType = subscriptionServiceType
353 serviceInfo.nsiId = sliceParams.suggestNsiId
354 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
355 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
357 nbiRequest.setServiceInfo(serviceInfo)
358 nbiRequest.setEsrInfo(esrInfo)
359 nbiRequest.setAllocateAnNssi(allocateAnNssi)
361 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
362 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
363 execution.setVariable("anSubnetType", SubnetType.AN)
368 * create RAN Slice Profile Instance
371 void createCnSliceProfileInstance(DelegateExecution execution) {
373 String globalSubscriberId = execution.getVariable("globalSubscriberId")
374 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
375 String serviceInstanceId = UUID.randomUUID().toString()
376 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
378 String oStatus = "deactivated"
380 SliceTaskParamsAdapter sliceParams =
381 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
382 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
383 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
385 // create slice profile
386 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
388 //timestamp format YYYY-MM-DD hh:mm:ss
389 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
391 execution.setVariable("communicationServiceInstance", rspi)
393 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
394 .customer(globalSubscriberId)
395 .serviceSubscription(subscriptionServiceType)
396 .serviceInstance(serviceInstanceId))
397 client.create(uri, rspi)
398 execution.setVariable("sliceTaskParams", sliceParams)
402 * create Cn Slice Profile
405 void createCnSliceProfile(DelegateExecution execution) {
407 String globalSubscriberId = execution.getVariable("globalSubscriberId")
408 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
409 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
411 SliceTaskParamsAdapter sliceParams =
412 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
414 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
415 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
417 String profileId = UUID.randomUUID().toString()
418 cnSliceProfile.setSliceProfileId(profileId)
420 SliceProfile sliceProfile = new SliceProfile()
421 sliceProfile.setProfileId(profileId)
422 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
424 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
425 .customer(globalSubscriberId)
426 .serviceSubscription(subscriptionServiceType)
427 .serviceInstance(sliceTaskInfo.sliceInstanceId)
428 .sliceProfile(profileId))
429 client.create(uri, sliceProfile)
430 execution.setVariable("sliceTaskParams", sliceParams)
434 * prepare AllocateCnNssi
437 void prepareAllocateCnNssi(DelegateExecution execution) {
440 SliceTaskParamsAdapter sliceParams =
441 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
442 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
444 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
446 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
447 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
448 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
449 allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
450 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
451 NsiInfo nsiInfo = new NsiInfo()
452 nsiInfo.nsiId = sliceParams.suggestNsiId
453 allocateCnNssi.nsiInfo = nsiInfo
455 EndPoint endPoint = new EndPoint()
456 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
457 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
458 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
459 allocateCnNssi.setEndPoint(endPoint)
461 EsrInfo esrInfo = new EsrInfo()
462 //todo: vendor and network
463 esrInfo.setVendor(sliceTaskInfo.getVendor())
464 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
466 String globalSubscriberId = execution.getVariable("globalSubscriberId")
467 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
470 ServiceInfo serviceInfo = new ServiceInfo()
471 serviceInfo.globalSubscriberId = globalSubscriberId
472 serviceInfo.subscriptionServiceType = subscriptionServiceType
473 serviceInfo.nsiId = sliceParams.suggestNsiId
474 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
475 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
476 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
478 nbiRequest.setServiceInfo(serviceInfo)
479 nbiRequest.setEsrInfo(esrInfo)
480 nbiRequest.setAllocateCnNssi(allocateCnNssi)
482 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
483 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
484 execution.setVariable("cnSubnetType", SubnetType.CN)
489 * create TN Slice Profile Instance
492 void createTnBHSliceProfileInstance(DelegateExecution execution) {
493 String globalSubscriberId = execution.getVariable("globalSubscriberId")
494 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
496 String oStatus = "deactivated"
498 SliceTaskParamsAdapter sliceParams =
499 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
501 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
502 String serviceInstanceId = UUID.randomUUID().toString()
504 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
505 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
507 // create slice profile
508 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
510 //timestamp format YYYY-MM-DD hh:mm:ss
511 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
513 execution.setVariable("communicationServiceInstance", rspi)
515 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
516 .customer(globalSubscriberId)
517 .serviceSubscription(subscriptionServiceType)
518 .serviceInstance(serviceInstanceId))
519 client.create(uri, rspi)
521 execution.setVariable("sliceTaskParams", sliceParams)
525 * create Tn Slice Profile
528 void createTnBHSliceProfile(DelegateExecution execution) {
530 String globalSubscriberId = execution.getVariable("globalSubscriberId")
531 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
533 SliceTaskParamsAdapter sliceParams =
534 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
536 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
538 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
539 String profileId = UUID.randomUUID().toString()
540 tnSliceProfile.setSliceProfileId(profileId)
542 SliceProfile sliceProfile = new SliceProfile()
543 sliceProfile.setProfileId(profileId)
545 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
546 .customer(globalSubscriberId)
547 .serviceSubscription(subscriptionServiceType)
548 .serviceInstance(sliceTaskInfo.sliceInstanceId)
549 .sliceProfile(profileId))
550 client.create(uri, sliceProfile)
552 execution.setVariable("sliceTaskParams", sliceParams)
556 * prepare AllocateCnNssi
559 void prepareAllocateTnBHNssi(DelegateExecution execution) {
562 SliceTaskParamsAdapter sliceParams =
563 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
564 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
566 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
568 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
569 //todo: AllocateTnNssi
570 //todo: endPointId -> set into tn
571 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
572 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
573 List<ConnectionLink> connectionLinks = new ArrayList<>()
574 ConnectionLink connectionLink = new ConnectionLink()
575 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
576 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
577 connectionLinks.add(connectionLink)
578 transportSliceNetwork.setConnectionLinks(connectionLinks)
579 transportSliceNetworks.add(transportSliceNetwork)
580 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
582 allocateTnNssi.setNetworkSliceInfos()
583 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
584 NsiInfo nsiInfo = new NsiInfo()
585 nsiInfo.setNsiId(sliceParams.suggestNsiId)
586 nsiInfo.setNsiName(sliceParams.suggestNsiName)
587 allocateTnNssi.setNsiInfo(nsiInfo)
589 //allocateTnNssi.networkSliceInfos
591 EsrInfo esrInfo = new EsrInfo()
592 esrInfo.setVendor(sliceTaskInfo.getVendor())
593 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
595 String globalSubscriberId = execution.getVariable("globalSubscriberId")
596 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
598 ServiceInfo serviceInfo = new ServiceInfo()
599 serviceInfo.globalSubscriberId = globalSubscriberId
600 serviceInfo.subscriptionServiceType = subscriptionServiceType
601 serviceInfo.nsiId = sliceParams.suggestNsiId
602 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
603 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
604 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
606 nbiRequest.setServiceInfo(serviceInfo)
607 nbiRequest.setEsrInfo(esrInfo)
608 nbiRequest.setAllocateTnNssi(allocateTnNssi)
610 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
611 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
612 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
616 * Update relationship between
618 * 2. Slice Profile and Service Profile
619 * 3. SliceProfile and NSSI
620 * 4. sliceProfile and endpoint
624 public void updateAnRelationship(DelegateExecution execution) {
626 SliceTaskParamsAdapter sliceParams =
627 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
629 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
630 String nssiId = result.getNssiId()
631 String nsiId = sliceParams.getSuggestNsiId()
632 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
633 String serviceProfileInstanceId = sliceParams.serviceId
635 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
636 String endPointId = getEndpointIdFromAAI(execution, nssiId)
637 execution.setVariable("endPointIdAn", endPointId)
639 updateRelationship(execution, nsiId, nssiId)
641 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
643 updateRelationship(execution, sliceProfileInstanceId, nssiId)
645 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
646 execution.setVariable("sliceTaskParams", sliceParams)
651 * Update relationship between
653 * 2. Slice Profile and Service Profile
654 * 3. SliceProfile and NSSI
658 public void updateCnRelationship(DelegateExecution execution) {
660 SliceTaskParamsAdapter sliceParams =
661 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
663 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
664 String nssiId = result.getNssiId()
665 String nsiId = sliceParams.getSuggestNsiId()
666 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
667 String serviceProfileInstanceId = sliceParams.serviceId
669 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
670 String endPointId = getEndpointIdFromAAI(execution, nssiId)
671 execution.setVariable("endPointIdCn", endPointId)
673 updateRelationship(execution, nsiId, nssiId)
675 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
677 updateRelationship(execution,sliceProfileInstanceId, nssiId)
679 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
680 execution.setVariable("sliceTaskParams", sliceParams)
684 * get endpoint Id from AAI by nssi id
689 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
690 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
691 //todo: allottedResourceId
693 SliceTaskParamsAdapter sliceParams =
694 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
696 //sliceParams.setServiceId(nsiServiceInstanceID)
697 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
698 .customer(execution.getVariable("globalSubscriberId"))
699 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
700 .serviceInstance(nssiId))
702 String endpointId = null
705 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
706 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
707 if (!si.isPresent()) {
708 String msg = "NSSI in the option doesn't exist. " + nssiId
710 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
712 ServiceInstance nssiInstance = si.get()
713 //todo: handle relationship and return endPointId
714 if (nssiInstance.relationshipList == null) {
715 String msg = "relationshipList of " + nssiId + " is null"
719 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
720 if (relationship.relationshipLabel){
721 endpointId = relationship //todo
728 }catch(BpmnError e) {
730 }catch (Exception ex){
731 String msg = "Exception: " + ex
733 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
735 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
739 * Update relationship between
741 * 2. Slice Profile and Service Profile
742 * 3. SliceProfile and NSSI
746 public void updateTnBHRelationship(DelegateExecution execution) {
747 SliceTaskParamsAdapter sliceParams =
748 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
750 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
751 String nssiId = result.getNssiId()
752 String nsiId = sliceParams.getSuggestNsiId()
753 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
754 String serviceProfileInstanceId = sliceParams.serviceId
757 updateRelationship(execution, nsiId, nssiId)
759 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
761 updateRelationship(execution,sliceProfileInstanceId, nssiId)
763 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
764 execution.setVariable("sliceTaskParams", sliceParams)
768 * sourceId -> targetId
773 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
775 Relationship relationship = new Relationship()
777 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
778 .customer(execution.getVariable("globalSubscriberId"))
779 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
780 .serviceInstance(targetId))
782 logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
784 relationship.setRelatedLink(targetInstanceUri.build().toString())
786 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
787 .customer(execution.getVariable("globalSubscriberId"))
788 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
789 .serviceInstance(sourceId))
791 client.create(sourceInstanceUri, relationship)
794 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
795 // create slice profile
796 ServiceInstance rspi = new ServiceInstance()
797 rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
798 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
799 rspi.setServiceRole("slice-profile")
800 rspi.setOrchestrationStatus(oStatus)
801 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
802 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
803 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
804 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
805 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
807 //timestamp format YYYY-MM-DD hh:mm:ss
808 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))