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.aai.domain.yang.NetworkRoute
24 import org.onap.so.beans.nsmf.ConnectionLink
25 import org.onap.so.beans.nsmf.EndPoint
26 import org.onap.so.beans.nsmf.NsiInfo
27 import org.onap.so.beans.nsmf.SliceProfileAdapter
28 import org.onap.so.beans.nsmf.TransportSliceNetwork
29 import org.onap.so.beans.nsmf.oof.SubnetType
30 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
31 import javax.ws.rs.NotFoundException
32 import org.camunda.bpm.engine.delegate.BpmnError
33 import org.camunda.bpm.engine.delegate.DelegateExecution
34 import org.onap.aai.domain.yang.Relationship
35 import org.onap.aai.domain.yang.ServiceInstance
36 import org.onap.aai.domain.yang.SliceProfile
37 import org.onap.aaiclient.client.aai.AAINamespaceConstants
38 import org.onap.aaiclient.client.aai.AAIResourcesClient
39 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
40 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
41 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
42 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
43 import org.onap.so.beans.nsmf.AllocateAnNssi
44 import org.onap.so.beans.nsmf.AllocateCnNssi
45 import org.onap.so.beans.nsmf.AllocateTnNssi
46 import org.onap.so.beans.nsmf.EsrInfo
47 import org.onap.so.beans.nsmf.NssiResponse
48 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
49 import org.onap.so.beans.nsmf.ServiceInfo
50 import org.onap.so.beans.nsmf.SliceTaskInfo
51 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
52 import org.onap.so.bpmn.common.scripts.ExceptionUtil
53 import org.onap.so.bpmn.core.json.JsonUtils
54 import org.slf4j.Logger
55 import org.slf4j.LoggerFactory
56 import static org.apache.commons.lang3.StringUtils.isBlank
57 import org.onap.aaiclient.client.aai.AAIObjectType
59 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
61 private static final Logger logger = LoggerFactory.getLogger(DoAllocateNSIandNSSI.class);
63 ExceptionUtil exceptionUtil = new ExceptionUtil()
65 JsonUtils jsonUtil = new JsonUtils()
67 AnNssmfUtils anNssmfUtils = new AnNssmfUtils()
69 AAIResourcesClient client = getAAIClient()
72 * Pre Process the BPMN Flow Request
74 * generate the nsOperationKey
75 * generate the nsParameters
78 void preProcessRequest (DelegateExecution execution) {
80 logger.trace("Enter preProcessRequest()")
81 Map<String, Object> nssiMap = new HashMap<>()
82 int nsstCount=execution.getVariable("nsstCount") as int
84 execution.setVariable("processFHandMH", true)
87 execution.setVariable("processFHandMH", false)
89 execution.setVariable("nssiMap", nssiMap)
90 boolean isMoreNSSTtoProcess = true
91 execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
92 List<String> nsstSequence = new ArrayList<>(Arrays.asList("cn"))
93 execution.setVariable("nsstSequence", nsstSequence)
94 logger.trace("Exit preProcessRequest")
101 void retriveSliceOption(DelegateExecution execution) {
102 logger.trace("Enter retriveSliceOption() of DoAllocateNSIandNSSI")
104 boolean isNSIOptionAvailable
106 SliceTaskParamsAdapter sliceParams =
107 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
109 if(isBlank(sliceParams.getSuggestNsiId())) {
110 isNSIOptionAvailable = false
113 isNSIOptionAvailable = true
114 execution.setVariable('nsiServiceInstanceId', sliceParams.getSuggestNsiId())
115 execution.setVariable('nsiServiceInstanceName', sliceParams.getSuggestNsiName())
117 execution.setVariable("isNSIOptionAvailable", isNSIOptionAvailable)
118 logger.trace("Exit retriveSliceOption() of DoAllocateNSIandNSSI")
123 * create nsi instance in aai
126 void createNSIinAAI(DelegateExecution execution) {
127 logger.debug("Enter CreateNSIinAAI in DoAllocateNSIandNSSI()")
129 String sliceInstanceId = UUID.randomUUID().toString()
130 SliceTaskParamsAdapter sliceParams =
131 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
133 //set new nsiId to sliceParams suggestNsiId
134 ServiceInstance nsi = new ServiceInstance()
136 String sliceInstanceName = "nsi_"+execution.getVariable("sliceServiceInstanceName")
137 String serviceType = sliceParams.serviceProfile.get("sST")
138 String serviceStatus = "deactivated"
139 String modelInvariantUuid = sliceParams.getNSTInfo().invariantUUID
140 String modelUuid = sliceParams.getNSTInfo().UUID
141 String serviceFunction = sliceParams.serviceProfile.get("resourceSharingLevel")
143 sliceParams.setSuggestNsiId(sliceInstanceId)
144 sliceParams.setSuggestNsiName(sliceInstanceName)
146 String uuiRequest = execution.getVariable("uuiRequest")
147 String serviceInstanceLocationid = jsonUtil.getJsonValue(uuiRequest, "service.parameters.requestInputs.plmnIdList")
148 String serviceRole = "nsi"
150 execution.setVariable("sliceInstanceId", sliceInstanceId)
151 nsi.setServiceInstanceId(sliceInstanceId)
152 nsi.setServiceInstanceName(sliceInstanceName)
153 nsi.setServiceType(serviceType)
154 nsi.setOrchestrationStatus(serviceStatus)
155 nsi.setModelInvariantId(modelInvariantUuid)
156 nsi.setModelVersionId(modelUuid)
157 nsi.setServiceInstanceLocationId(serviceInstanceLocationid)
158 nsi.setServiceRole(serviceRole)
159 nsi.setServiceFunction(serviceFunction)
163 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
164 .customer(execution.getVariable("globalSubscriberId"))
165 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
166 .serviceInstance(sliceInstanceId))
167 client.create(nsiServiceUri, nsi)
169 execution.setVariable("nsiServiceUri", nsiServiceUri)
171 } catch (BpmnError e) {
173 } catch (Exception ex) {
174 msg = "Exception in DoAllocateNSIandNSSI.createNSIinAAI: " + ex.getMessage()
176 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
178 execution.setVariable("sliceTaskParams", sliceParams)
180 logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()")
185 * create relationship between nsi and service profile instance
188 void createRelationship(DelegateExecution execution) {
190 logger.debug("Enter createRelationship in DoAllocateNSIandNSSI")
191 //String allottedResourceId = execution.getVariable("allottedResourceId")
192 //SliceTaskParamsAdapter sliceParams =
193 // execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
197 AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
198 logger.debug("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri.toString())
200 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
202 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
203 logger.debug("Creating Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
205 client.connect(allottedResourceUri, nsiServiceUri)
206 } catch (BpmnError e) {
208 } catch (Exception ex) {
209 msg = "Exception in DoAllocateNSIandNSSI.createRelationship. " + ex.getMessage()
211 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
213 logger.debug("Exit createRelationship in DoAllocateNSIandNSSI")
220 void updateRelationship(DelegateExecution execution) {
221 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
222 //todo: allottedResourceId
223 String allottedResourceId = execution.getVariable("allottedResourceId")
224 //Need to check whether nsi exist : Begin
226 SliceTaskParamsAdapter sliceParams =
227 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
229 String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
230 //sliceParams.setServiceId(nsiServiceInstanceID)
232 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
233 .customer(execution.getVariable("globalSubscriberId"))
234 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
235 .serviceInstance(nsiServiceInstanceID))
238 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
239 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
240 if (!si.isPresent()) {
241 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
243 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
246 //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
247 AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
248 logger.debug("updateRelationship Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
249 client.connect(allottedResourceUri, nsiServiceUri)
251 execution.setVariable("sliceTaskParams", sliceParams)
252 }catch(BpmnError e) {
254 }catch (Exception ex){
255 String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID
257 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
259 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
263 * create RAN Slice Profile Instance
266 void createAnSliceProfileInstance(DelegateExecution execution) {
268 String globalSubscriberId = execution.getVariable("globalSubscriberId")
269 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
270 String serviceInstanceId = UUID.randomUUID().toString()
271 execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
273 String oStatus = "deactivated"
275 SliceTaskParamsAdapter sliceParams =
276 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
277 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
278 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
279 String sliceProfileName = "sliceprofile_an_" + sliceParams.serviceName
281 // create slice profile
282 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
284 //timestamp format YYYY-MM-DD hh:mm:ss
285 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
287 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
288 .customer(globalSubscriberId)
289 .serviceSubscription(subscriptionServiceType)
290 .serviceInstance(serviceInstanceId))
291 client.create(uri, rspi)
293 execution.setVariable("sliceTaskParams", sliceParams)
297 * create An Slice Profile
300 void createAnSliceProfile(DelegateExecution execution) {
302 String globalSubscriberId = execution.getVariable("globalSubscriberId")
303 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
304 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
306 SliceTaskParamsAdapter sliceParams =
307 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
308 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
309 SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
311 String profileId = UUID.randomUUID().toString()
312 anSliceProfile.setSliceProfileId(profileId)
314 SliceProfile sliceProfile = new SliceProfile()
315 sliceProfile.setProfileId(profileId)
316 sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList as String)
317 sliceProfile.setMaxNumberOfUEs(anSliceProfile.maxNumberOfUEs)
318 sliceProfile.setLatency(anSliceProfile.latency)
319 sliceProfile.setMaxNumberOfPDUSession(anSliceProfile.maxNumberOfPDUSession)
320 sliceProfile.setExpDataRateDL(anSliceProfile.expDataRateDL)
321 sliceProfile.setExpDataRateUL(anSliceProfile.expDataRateUL)
322 sliceProfile.setAreaTrafficCapDL(anSliceProfile.areaTrafficCapDL)
323 sliceProfile.setAreaTrafficCapUL(anSliceProfile.areaTrafficCapUL)
324 sliceProfile.setOverallUserDensity(anSliceProfile.overallUserDensity)
325 sliceProfile.setActivityFactor(anSliceProfile.activityFactor)
326 sliceProfile.setUeMobilityLevel(anSliceProfile.ueMobilityLevel)
327 sliceProfile.setResourceSharingLevel(anSliceProfile.resourceSharingLevel)
328 sliceProfile.setCsAvailabilityTarget(anSliceProfile.csAvailabilityTarget)
329 sliceProfile.setCsReliabilityMeanTime(anSliceProfile.csReliabilityMeanTime)
330 sliceProfile.setExpDataRate(anSliceProfile.expDataRate)
331 sliceProfile.setMsgSizeByte(anSliceProfile.msgSizeByte)
332 sliceProfile.setTransferIntervalTarget(anSliceProfile.transferIntervalTarget)
333 sliceProfile.setSurvivalTime(anSliceProfile.survivalTime)
335 AAIResourceUri uri = AAIUriFactory.createResourceUri(
336 AAIFluentTypeBuilder.business().customer(globalSubscriberId)
337 .serviceSubscription(subscriptionServiceType)
338 .serviceInstance(sliceTaskInfo.sliceInstanceId)
339 .sliceProfile(profileId)
341 client.create(uri, sliceProfile)
342 execution.setVariable("sliceTaskParams", sliceParams)
345 void createANEndpoint(DelegateExecution execution){
346 logger.debug("Enter createANEndpoint in DoAllocateNSIandNSSI()")
347 SliceTaskParamsAdapter sliceParams =
348 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
349 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
351 NetworkRoute route = new NetworkRoute()
352 String routeId = UUID.randomUUID().toString()
353 route.setRouteId(routeId)
354 route.setType("endpoint")
356 route.setFunction("3gppTransportEP")
357 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
358 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
359 route.setLogicalInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
360 route.setAddressFamily("ipv4")
361 route.setPrefixLength(24)
362 sliceTaskInfo.setEndPointId(routeId)
364 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
365 client.create(uri, route)
366 execution.setVariable("sliceTaskParams", sliceParams)
367 logger.info("an endpointId:" + sliceParams.anSliceTaskInfo.endPointId)
371 void createCNEndpoint(DelegateExecution execution){
372 logger.debug("Enter createCNNetworkRoute in DoAllocateNSIandNSSI()")
373 SliceTaskParamsAdapter sliceParams =
374 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
375 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
377 NetworkRoute route = new NetworkRoute()
378 String routeId = UUID.randomUUID().toString()
379 route.setRouteId(routeId)
380 route.setType("endpoint")
382 route.setFunction("3gppTransportEP")
383 route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
384 route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
385 route.setLogicalInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
386 route.setAddressFamily("ipv4")
387 route.setPrefixLength(24)
389 sliceTaskInfo.setEndPointId(routeId)
390 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
391 client.create(uri, route)
393 execution.setVariable("cnEndpointId", routeId)
394 execution.setVariable("sliceTaskParams", sliceParams)
395 logger.info("cn endpointId:" + sliceParams.cnSliceTaskInfo.endPointId)
399 * prepare AllocateAnNssi
402 void prepareAllocateAnNssi(DelegateExecution execution) {
405 SliceTaskParamsAdapter sliceParams =
406 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
407 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getAnSliceTaskInfo()
409 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
411 AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
412 allocateAnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2AnProfile())
413 allocateAnNssi.getSliceProfile().setSliceProfileId(sliceTaskInfo.getSliceInstanceId())
414 allocateAnNssi.setNsstId(sliceTaskInfo.getNSSTInfo().getUUID())
415 allocateAnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
416 allocateAnNssi.setNssiName("nssi_an" + execution.getVariable("sliceServiceInstanceName") as String)
417 allocateAnNssi.setScriptName(sliceTaskInfo.getScriptName())
418 NsiInfo nsiInfo = new NsiInfo()
419 nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
420 nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
421 allocateAnNssi.setNsiInfo(nsiInfo)
423 EndPoint endPoint = new EndPoint()
424 endPoint.setIpAddress(sliceTaskInfo.getSliceProfile().getIpAddress())
425 endPoint.setLogicInterfaceId(sliceTaskInfo.getSliceProfile().getLogicInterfaceId())
426 endPoint.setNextHopInfo(sliceTaskInfo.getSliceProfile().getNextHopInfo())
427 allocateAnNssi.setEndPoint(endPoint)
429 EsrInfo esrInfo = new EsrInfo()
430 //todo: vendor and network
431 esrInfo.setVendor(sliceTaskInfo.getVendor())
432 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
434 String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
435 String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
438 ServiceInfo serviceInfo = ServiceInfo.builder()
439 .globalSubscriberId(globalSubscriberId)
440 .subscriptionServiceType(subscriptionServiceType)
441 .nsiId(sliceParams.getSuggestNsiId())
442 .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
443 .serviceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
444 .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST") as String)
445 .nssiName(sliceTaskInfo.getSuggestNssiId() ? sliceTaskInfo.getNSSTInfo().getName() : allocateAnNssi.getNssiName())
446 .nssiId(sliceTaskInfo.getSuggestNssiId())
447 .resourceSharingLevel(sliceParams.serviceProfile.get("resourceSharingLevel") as String)
450 nbiRequest.setServiceInfo(serviceInfo)
451 nbiRequest.setEsrInfo(esrInfo)
452 nbiRequest.setAllocateAnNssi(allocateAnNssi)
454 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
455 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
456 execution.setVariable("anSubnetType", SubnetType.AN)
461 * create RAN Slice Profile Instance
464 void createCnSliceProfileInstance(DelegateExecution execution) {
466 String globalSubscriberId = execution.getVariable("globalSubscriberId")
467 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
468 String serviceInstanceId = UUID.randomUUID().toString()
469 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
471 String oStatus = "deactivated"
473 SliceTaskParamsAdapter sliceParams =
474 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
475 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
476 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
477 String sliceProfileName = "sliceprofile_cn_"+sliceParams.serviceName
479 // create slice profile
480 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
482 //timestamp format YYYY-MM-DD hh:mm:ss
483 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
485 execution.setVariable("communicationServiceInstance", rspi)
487 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
488 .customer(globalSubscriberId)
489 .serviceSubscription(subscriptionServiceType)
490 .serviceInstance(serviceInstanceId))
491 client.create(uri, rspi)
492 execution.setVariable("sliceTaskParams", sliceParams)
496 * create Cn Slice Profile
499 void createCnSliceProfile(DelegateExecution execution) {
501 String globalSubscriberId = execution.getVariable("globalSubscriberId")
502 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
503 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
505 SliceTaskParamsAdapter sliceParams =
506 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
508 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
509 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
511 String profileId = UUID.randomUUID().toString()
512 cnSliceProfile.setSliceProfileId(profileId)
514 SliceProfile sliceProfile = new SliceProfile()
515 sliceProfile.setProfileId(profileId)
516 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
517 sliceProfile.setMaxNumberOfUEs(cnSliceProfile.maxNumberOfUEs)
518 sliceProfile.setLatency(cnSliceProfile.latency)
519 sliceProfile.setMaxNumberOfPDUSession(cnSliceProfile.maxNumberOfPDUSession)
520 sliceProfile.setExpDataRateDL(cnSliceProfile.expDataRateDL)
521 sliceProfile.setExpDataRateUL(cnSliceProfile.expDataRateUL)
522 sliceProfile.setAreaTrafficCapDL(cnSliceProfile.areaTrafficCapDL)
523 sliceProfile.setAreaTrafficCapUL(cnSliceProfile.areaTrafficCapUL)
524 sliceProfile.setOverallUserDensity(cnSliceProfile.overallUserDensity)
525 sliceProfile.setActivityFactor(cnSliceProfile.activityFactor)
526 sliceProfile.setUeMobilityLevel(cnSliceProfile.ueMobilityLevel)
527 sliceProfile.setResourceSharingLevel(cnSliceProfile.resourceSharingLevel)
528 sliceProfile.setCsAvailabilityTarget(cnSliceProfile.csAvailabilityTarget)
529 sliceProfile.setCsReliabilityMeanTime(cnSliceProfile.csReliabilityMeanTime)
530 sliceProfile.setExpDataRate(cnSliceProfile.expDataRate)
531 sliceProfile.setMsgSizeByte(cnSliceProfile.msgSizeByte)
532 sliceProfile.setTransferIntervalTarget(cnSliceProfile.transferIntervalTarget)
533 sliceProfile.setSurvivalTime(cnSliceProfile.survivalTime)
535 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
536 .customer(globalSubscriberId)
537 .serviceSubscription(subscriptionServiceType)
538 .serviceInstance(sliceTaskInfo.sliceInstanceId)
539 .sliceProfile(profileId))
540 client.create(uri, sliceProfile)
541 execution.setVariable("sliceTaskParams", sliceParams)
545 * prepare AllocateCnNssi
548 void prepareAllocateCnNssi(DelegateExecution execution) {
551 SliceTaskParamsAdapter sliceParams =
552 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
553 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
555 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
557 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
558 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
559 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
560 allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
561 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
562 allocateCnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
563 allocateCnNssi.scriptName = sliceTaskInfo.getScriptName()
565 NsiInfo nsiInfo = new NsiInfo()
566 nsiInfo.nsiId = sliceParams.suggestNsiId
567 nsiInfo.nsiName = sliceParams.suggestNsiName
568 allocateCnNssi.nsiInfo = nsiInfo
570 EndPoint endPoint = new EndPoint()
571 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
572 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
573 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
574 allocateCnNssi.setEndPoint(endPoint)
576 EsrInfo esrInfo = new EsrInfo()
577 //todo: vendor and network
578 esrInfo.setVendor(sliceTaskInfo.getVendor())
579 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
581 String globalSubscriberId = execution.getVariable("globalSubscriberId")
582 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
585 ServiceInfo serviceInfo = new ServiceInfo()
586 serviceInfo.globalSubscriberId = globalSubscriberId
587 serviceInfo.subscriptionServiceType = subscriptionServiceType
588 serviceInfo.nsiId = sliceParams.suggestNsiId
589 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
590 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
591 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
592 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
593 serviceInfo.nssiName = allocateCnNssi.nssiName
594 serviceInfo.resourceSharingLevel = sliceParams.serviceProfile.get("resourceSharingLevel")
596 nbiRequest.setServiceInfo(serviceInfo)
597 nbiRequest.setEsrInfo(esrInfo)
598 nbiRequest.setAllocateCnNssi(allocateCnNssi)
600 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
601 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
602 execution.setVariable("cnSubnetType", SubnetType.CN)
607 * create TN Slice Profile Instance
610 void createTnBHSliceProfileInstance(DelegateExecution execution) {
611 String globalSubscriberId = execution.getVariable("globalSubscriberId")
612 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
614 String oStatus = "deactivated"
616 SliceTaskParamsAdapter sliceParams =
617 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
619 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
620 String serviceInstanceId = UUID.randomUUID().toString()
622 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
623 String sliceProfileName = "sliceprofile_tn_" + sliceParams.serviceName
624 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
626 // create slice profile
627 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
629 //timestamp format YYYY-MM-DD hh:mm:ss
630 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
632 execution.setVariable("communicationServiceInstance", rspi)
634 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
635 .customer(globalSubscriberId)
636 .serviceSubscription(subscriptionServiceType)
637 .serviceInstance(serviceInstanceId))
638 client.create(uri, rspi)
640 execution.setVariable("sliceTaskParams", sliceParams)
644 * create Tn Slice Profile
647 void createTnBHSliceProfile(DelegateExecution execution) {
649 String globalSubscriberId = execution.getVariable("globalSubscriberId")
650 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
652 SliceTaskParamsAdapter sliceParams =
653 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
655 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
657 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
658 String profileId = UUID.randomUUID().toString()
659 tnSliceProfile.setSliceProfileId(profileId)
661 SliceProfile sliceProfile = new SliceProfile()
662 sliceProfile.setProfileId(profileId)
663 sliceProfile.setLatency(tnSliceProfile.latency)
664 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
665 sliceProfile.setJitter(tnSliceProfile.jitter)
667 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
668 .customer(globalSubscriberId)
669 .serviceSubscription(subscriptionServiceType)
670 .serviceInstance(sliceTaskInfo.sliceInstanceId)
671 .sliceProfile(profileId))
672 client.create(uri, sliceProfile)
674 execution.setVariable("sliceTaskParams", sliceParams)
678 * prepare AllocateCnNssi
681 void prepareAllocateTnBHNssi(DelegateExecution execution) {
684 SliceTaskParamsAdapter sliceParams =
685 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
686 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
688 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
690 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
691 allocateTnNssi.setNssiId(sliceTaskInfo.suggestNssiId)
692 allocateTnNssi.scriptName = sliceTaskInfo.getScriptName()
693 //todo: AllocateTnNssi
694 //todo: endPointId -> set into tn
695 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
696 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
697 List<ConnectionLink> connectionLinks = new ArrayList<>()
698 ConnectionLink connectionLink = new ConnectionLink()
699 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
700 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
701 connectionLinks.add(connectionLink)
702 transportSliceNetwork.setConnectionLinks(connectionLinks)
703 transportSliceNetworks.add(transportSliceNetwork)
704 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
706 allocateTnNssi.setNetworkSliceInfos()
707 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
708 allocateTnNssi.getSliceProfile().setDomainType(sliceTaskInfo.subnetType.subnetType)
709 NsiInfo nsiInfo = new NsiInfo()
710 nsiInfo.setNsiId(sliceParams.suggestNsiId)
711 nsiInfo.setNsiName(sliceParams.suggestNsiName)
712 allocateTnNssi.setNsiInfo(nsiInfo)
714 //allocateTnNssi.networkSliceInfos
716 EsrInfo esrInfo = new EsrInfo()
717 esrInfo.setVendor(sliceTaskInfo.getVendor())
718 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
720 String globalSubscriberId = execution.getVariable("globalSubscriberId")
721 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
723 ServiceInfo serviceInfo = new ServiceInfo()
724 serviceInfo.globalSubscriberId = globalSubscriberId
725 serviceInfo.subscriptionServiceType = subscriptionServiceType
726 serviceInfo.nsiId = sliceParams.suggestNsiId
727 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
728 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
729 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
730 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
731 serviceInfo.nssiName = "nssi_tn" + execution.getVariable("sliceServiceInstanceName")
732 serviceInfo.resourceSharingLevel = sliceParams.serviceProfile.get("resourceSharingLevel")
734 nbiRequest.setServiceInfo(serviceInfo)
735 nbiRequest.setEsrInfo(esrInfo)
736 nbiRequest.setAllocateTnNssi(allocateTnNssi)
738 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
739 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
740 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
744 * Update relationship between
746 * 2. Slice Profile and Service Profile
747 * 3. SliceProfile and NSSI
748 * 4. sliceProfile and endpoint
752 public void updateAnRelationship(DelegateExecution execution) {
754 SliceTaskParamsAdapter sliceParams =
755 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
757 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
758 String nssiId = result.getNssiId()
759 String nsiId = sliceParams.getSuggestNsiId()
760 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
761 String serviceProfileInstanceId = sliceParams.serviceId
762 String epId = sliceParams.anSliceTaskInfo.endPointId
764 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
765 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
766 //execution.setVariable("endPointIdAn", endPointId)
767 updateRelationship(execution, nsiId, nssiId)
769 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
771 updateRelationship(execution, sliceProfileInstanceId, nssiId)
773 updateEPRelationship(execution, nssiId, epId)
775 updateEPRelationship(execution, sliceProfileInstanceId, epId)
777 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
778 execution.setVariable("sliceTaskParams", sliceParams)
783 * Update relationship between
785 * 2. Slice Profile and Service Profile
786 * 3. SliceProfile and NSSI
790 public void updateCnRelationship(DelegateExecution execution) {
792 SliceTaskParamsAdapter sliceParams =
793 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
795 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
796 String nssiId = result.getNssiId()
797 String nsiId = sliceParams.getSuggestNsiId()
798 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
799 String serviceProfileInstanceId = sliceParams.serviceId
800 String epId = sliceParams.cnSliceTaskInfo.endPointId
802 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
803 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
804 // execution.setVariable("endPointIdCn", endPointId)
806 updateRelationship(execution, nsiId, nssiId)
808 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
810 updateRelationship(execution, sliceProfileInstanceId, nssiId)
812 updateEPRelationship(execution, nssiId, epId)
814 updateEPRelationship(execution, sliceProfileInstanceId, epId)
816 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
817 execution.setVariable("sliceTaskParams", sliceParams)
821 * get endpoint Id from AAI by nssi id
826 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
827 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
828 //todo: allottedResourceId
830 SliceTaskParamsAdapter sliceParams =
831 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
833 //sliceParams.setServiceId(nsiServiceInstanceID)
834 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
835 .customer(execution.getVariable("globalSubscriberId"))
836 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
837 .serviceInstance(nssiId))
839 String endpointId = null
842 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
843 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
844 if (!si.isPresent()) {
845 String msg = "NSSI in the option doesn't exist. " + nssiId
847 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
849 ServiceInstance nssiInstance = si.get()
850 //todo: handle relationship and return endPointId
851 if (nssiInstance.relationshipList == null) {
852 String msg = "relationshipList of " + nssiId + " is null"
856 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
857 if (relationship.relationshipLabel){
858 endpointId = relationship //todo
865 }catch(BpmnError e) {
867 }catch (Exception ex){
868 String msg = "Exception: " + ex
870 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
872 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
876 * Update relationship between
878 * 2. Slice Profile and Service Profile
879 * 3. SliceProfile and NSSI
883 public void updateTnBHRelationship(DelegateExecution execution) {
884 SliceTaskParamsAdapter sliceParams =
885 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
887 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
888 String nssiId = result.getNssiId()
889 String nsiId = sliceParams.getSuggestNsiId()
890 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
891 String serviceProfileInstanceId = sliceParams.serviceId
894 updateRelationship(execution, nsiId, nssiId)
896 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
898 updateRelationship(execution,sliceProfileInstanceId, nssiId)
900 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
901 execution.setVariable("sliceTaskParams", sliceParams)
905 * sourceId -> targetId
910 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
912 Relationship relationship = new Relationship()
914 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
915 .customer(execution.getVariable("globalSubscriberId"))
916 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
917 .serviceInstance(targetId))
919 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
921 relationship.setRelatedLink(targetInstanceUri.build().toString())
923 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
924 .customer(execution.getVariable("globalSubscriberId"))
925 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
926 .serviceInstance(sourceId))
928 client.create(sourceInstanceUri, relationship)
932 * update endpoint relationship
937 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
939 Relationship relationship = new Relationship()
941 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
943 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
945 relationship.setRelatedLink(endpointUri.build().toString())
947 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
948 .customer(execution.getVariable("globalSubscriberId"))
949 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
950 .serviceInstance(sourceId))
952 client.create(sourceInstanceUri, relationship)
955 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String sliceProfileName, String oStatus) {
956 // create slice profile
957 ServiceInstance rspi = new ServiceInstance()
958 rspi.setServiceInstanceName(sliceProfileName)
959 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
960 rspi.setServiceRole("slice-profile")
961 rspi.setOrchestrationStatus(oStatus)
962 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
963 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
964 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
965 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
966 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
967 rspi.setServiceFunction(sliceTaskInfo.sliceProfile.getResourceSharingLevel())
969 //timestamp format YYYY-MM-DD hh:mm:ss
970 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
974 public void createTNEndPoints(DelegateExecution execution) {
975 String type = "endpoint"
976 String function = "transport_EP"
977 int prefixLength = 24
978 String addressFamily = "ipv4"
979 //BH RAN end point update
981 String sliceParams = execution.getVariable("sliceParams")
982 List<String> BH_endPoints = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceParams, "endPoints"))
983 logger.debug("BH end points list : "+BH_endPoints)
984 if(BH_endPoints.empty) {
985 String msg = "End point info is empty"
987 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
989 String bh_routeId = UUID.randomUUID().toString()
990 execution.setVariable("tranportEp_ID_bh", bh_routeId)
992 String CU_IpAddress = jsonUtil.getJsonValue(bh_endpoint, "IpAddress")
993 String LogicalLinkId = jsonUtil.getJsonValue(bh_endpoint, "LogicalLinkId")
994 String nextHopInfo = jsonUtil.getJsonValue(bh_endpoint, "nextHopInfo")
995 NetworkRoute bh_ep = new NetworkRoute()
996 bh_ep.setRouteId(bh_routeId)
997 bh_ep.setFunction(function)
1000 bh_ep.setIpAddress(CU_IpAddress)
1001 bh_ep.setLogicalInterfaceId(LogicalLinkId)
1002 bh_ep.setNextHop(nextHopInfo)
1003 bh_ep.setPrefixLength(prefixLength)
1004 bh_ep.setAddressFamily(addressFamily)
1005 //FH RAN end points update
1007 String RU_routeId = UUID.randomUUID().toString()
1008 execution.setVariable("tranportEp_ID_RU", RU_routeId)
1010 NetworkRoute RU_ep = new NetworkRoute()
1011 RU_ep.setRouteId(RU_routeId)
1012 RU_ep.setFunction(function)
1015 RU_ep.setIpAddress("192.168.100.4")
1016 RU_ep.setLogicalInterfaceId("1234")
1017 RU_ep.setNextHop("Host1")
1018 RU_ep.setPrefixLength(prefixLength)
1019 RU_ep.setAddressFamily(addressFamily)
1021 String DUIN_routeId = UUID.randomUUID().toString()
1022 execution.setVariable("tranportEp_ID_DUIN", DUIN_routeId)
1024 NetworkRoute DU_ep = new NetworkRoute()
1025 DU_ep.setRouteId(DUIN_routeId)
1026 DU_ep.setFunction(function)
1029 DU_ep.setIpAddress("192.168.100.5")
1030 DU_ep.setLogicalInterfaceId("1234")
1031 DU_ep.setNextHop("Host2")
1032 DU_ep.setPrefixLength(prefixLength)
1033 DU_ep.setAddressFamily(addressFamily)
1034 //MH RAN end point update
1036 String DUEG_routeId = UUID.randomUUID().toString()
1037 execution.setVariable("tranportEp_ID_DUEG", DUEG_routeId)
1038 NetworkRoute DUEG_ep = new NetworkRoute()
1039 DUEG_ep.setRouteId(DUEG_routeId)
1040 DUEG_ep.setFunction(function)
1041 DUEG_ep.setRole(role)
1042 DUEG_ep.setType(type)
1043 DUEG_ep.setIpAddress("192.168.100.5")
1044 DUEG_ep.setLogicalInterfaceId("1234")
1045 DUEG_ep.setPrefixLength(prefixLength)
1046 DUEG_ep.setAddressFamily(addressFamily)
1047 DUEG_ep.setNextHop("Host3")
1049 String CUIN_routeId = UUID.randomUUID().toString()
1050 execution.setVariable("tranportEp_ID_CUIN", CUIN_routeId)
1051 NetworkRoute CUIN_ep = new NetworkRoute()
1052 CUIN_ep.setRouteId(CUIN_routeId)
1053 CUIN_ep.setFunction(function)
1054 CUIN_ep.setRole(role)
1055 CUIN_ep.setType(type)
1056 CUIN_ep.setIpAddress("192.168.100.6")
1057 CUIN_ep.setLogicalInterfaceId("1234")
1058 CUIN_ep.setNextHop("Host4")
1059 CUIN_ep.setPrefixLength(prefixLength)
1060 CUIN_ep.setAddressFamily(addressFamily)
1062 AAIResourcesClient client = new AAIResourcesClient()
1063 logger.debug("creating bh endpoint . ID : "+bh_routeId+" node details : "+bh_ep.toString())
1064 AAIResourceUri networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(bh_routeId))
1065 client.create(networkRouteUri, bh_ep)
1066 logger.debug("creating RU endpoint . ID : "+RU_routeId+" node details : "+RU_ep.toString())
1067 networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(RU_routeId))
1068 client.create(networkRouteUri, RU_ep)
1069 logger.debug("creating DUIN endpoint . ID : "+DUIN_routeId+" node details : "+DU_ep.toString())
1070 networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(DUIN_routeId))
1071 client.create(networkRouteUri, DU_ep)
1072 logger.debug("creating DUEG endpoint . ID : "+DUEG_routeId+" node details : "+DUEG_ep.toString())
1073 networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(DUEG_routeId))
1074 client.create(networkRouteUri, DUEG_ep)
1075 logger.debug("creating CUIN endpoint . ID : "+CUIN_routeId+" node details : "+CUIN_ep.toString())
1076 networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(CUIN_routeId))
1077 client.create(networkRouteUri, CUIN_ep)
1078 //relationship b/w bh_ep and RAN NSSI
1079 def AN_NSSI = execution.getVariable("RANServiceInstanceId")
1080 Relationship relationship = new Relationship()
1081 String relatedLink = "aai/v21/network/network-routes/network-route/${bh_routeId}"
1082 relationship.setRelatedLink(relatedLink)
1083 relationship.setRelatedTo("network-route")
1084 relationship.setRelationshipLabel("org.onap.relationships.inventory.ComposedOf")
1085 anNssmfUtils.createRelationShipInAAI(execution, relationship, AN_NSSI)
1086 def ANNF_serviceInstanceId = execution.getVariable("RANNFServiceInstanceId")
1087 relatedLink = "aai/v21/network/network-routes/network-route/${RU_routeId}"
1088 relationship.setRelatedLink(relatedLink)
1089 anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1090 relatedLink = "aai/v21/network/network-routes/network-route/${DUIN_routeId}"
1091 relationship.setRelatedLink(relatedLink)
1092 anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1093 relatedLink = "aai/v21/network/network-routes/network-route/${DUEG_routeId}"
1094 relationship.setRelatedLink(relatedLink)
1095 anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1096 relatedLink = "aai/v21/network/network-routes/network-route/${CUIN_routeId}"
1097 relationship.setRelatedLink(relatedLink)
1098 anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1099 } catch (BpmnError e) {
1101 } catch (Exception ex) {
1102 String msg = "Exception in createEndPointsInAai " + ex.getMessage()
1104 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
1109 * create TN Slice Profile Instance
1112 void createTnFHSliceProfileInstance(DelegateExecution execution) {
1113 String globalSubscriberId = execution.getVariable("globalSubscriberId")
1114 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1116 String oStatus = "deactivated"
1118 SliceTaskParamsAdapter sliceParams =
1119 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1121 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnFHSliceTaskInfo
1122 String serviceInstanceId = UUID.randomUUID().toString()
1124 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
1125 String sliceProfileName = "tn_fh" + sliceParams.serviceName
1126 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
1128 // create slice profile
1129 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
1131 //timestamp format YYYY-MM-DD hh:mm:ss
1132 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
1134 execution.setVariable("communicationServiceInstance", rspi)
1136 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1137 .customer(globalSubscriberId)
1138 .serviceSubscription(subscriptionServiceType)
1139 .serviceInstance(serviceInstanceId))
1140 client.create(uri, rspi)
1142 execution.setVariable("sliceTaskParams", sliceParams)
1146 * create Tn Slice Profile
1149 void createTnFHSliceProfile(DelegateExecution execution) {
1151 String globalSubscriberId = execution.getVariable("globalSubscriberId")
1152 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1154 SliceTaskParamsAdapter sliceParams =
1155 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1157 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnFHSliceTaskInfo
1159 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
1160 String profileId = UUID.randomUUID().toString()
1161 tnSliceProfile.setSliceProfileId(profileId)
1163 SliceProfile sliceProfile = new SliceProfile()
1164 sliceProfile.setProfileId(profileId)
1165 sliceProfile.setLatency(tnSliceProfile.latency)
1166 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
1167 sliceProfile.setJitter(tnSliceProfile.jitter)
1169 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1170 .customer(globalSubscriberId)
1171 .serviceSubscription(subscriptionServiceType)
1172 .serviceInstance(sliceTaskInfo.sliceInstanceId)
1173 .sliceProfile(profileId))
1174 client.create(uri, sliceProfile)
1176 execution.setVariable("sliceTaskParams", sliceParams)
1180 * prepare AllocateCnNssi
1183 void prepareAllocateTnFHNssi(DelegateExecution execution) {
1186 SliceTaskParamsAdapter sliceParams =
1187 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1188 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getTnFHSliceTaskInfo()
1190 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
1192 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
1193 allocateTnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
1194 //todo: AllocateTnNssi
1195 //todo: endPointId -> set into tn
1196 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
1197 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
1198 List<ConnectionLink> connectionLinks = new ArrayList<>()
1199 ConnectionLink connectionLink = new ConnectionLink()
1200 connectionLink.setTransportEndpointA(UUID.randomUUID().toString())
1201 connectionLink.setTransportEndpointB(UUID.randomUUID().toString())
1202 connectionLinks.add(connectionLink)
1203 transportSliceNetwork.setConnectionLinks(connectionLinks)
1204 transportSliceNetworks.add(transportSliceNetwork)
1205 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
1207 allocateTnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2TnProfile())
1208 NsiInfo nsiInfo = new NsiInfo()
1209 nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
1210 nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
1211 allocateTnNssi.setNsiInfo(nsiInfo)
1213 EsrInfo esrInfo = new EsrInfo()
1214 esrInfo.setVendor(sliceTaskInfo.getVendor())
1215 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
1217 String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
1218 String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
1220 ServiceInfo serviceInfo = ServiceInfo.builder()
1221 .globalSubscriberId(globalSubscriberId)
1222 .subscriptionServiceType(subscriptionServiceType)
1223 .nsiId(sliceParams.getSuggestNsiId())
1224 .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
1225 .serviceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
1226 .nssiId(sliceTaskInfo.getSuggestNssiId())
1227 .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST"))
1228 .nssiName("nssi_tn_fh_" + execution.getVariable("sliceServiceInstanceName") as String)
1231 nbiRequest.setServiceInfo(serviceInfo)
1232 nbiRequest.setEsrInfo(esrInfo)
1233 nbiRequest.setAllocateTnNssi(allocateTnNssi)
1235 execution.setVariable("TnFHAllocateNssiNbiRequest", nbiRequest)
1236 execution.setVariable("tnFHSliceTaskInfo", sliceTaskInfo)
1237 execution.setVariable("tnFHSubnetType", SubnetType.TN_FH)
1241 * Update relationship between
1243 * 2. Slice Profile and Service Profile
1244 * 3. SliceProfile and NSSI
1248 public void updateTnFHRelationship(DelegateExecution execution) {
1249 SliceTaskParamsAdapter sliceParams =
1250 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1252 NssiResponse result = execution.getVariable("tnFHNssiAllocateResult") as NssiResponse
1253 String nssiId = result.getNssiId()
1254 String nsiId = sliceParams.getSuggestNsiId()
1255 String sliceProfileInstanceId = sliceParams.tnFHSliceTaskInfo.sliceInstanceId
1256 String serviceProfileInstanceId = sliceParams.serviceId
1258 updateRelationship(execution, nsiId, nssiId)
1260 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
1262 updateRelationship(execution,sliceProfileInstanceId, nssiId)
1264 sliceParams.tnFHSliceTaskInfo.suggestNssiId = nssiId
1265 execution.setVariable("sliceTaskParams", sliceParams)
1269 * create TN Slice Profile Instance
1272 void createTnMHSliceProfileInstance(DelegateExecution execution) {
1273 String globalSubscriberId = execution.getVariable("globalSubscriberId")
1274 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1276 String oStatus = "deactivated"
1278 SliceTaskParamsAdapter sliceParams =
1279 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1281 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnMHSliceTaskInfo
1282 String serviceInstanceId = UUID.randomUUID().toString()
1284 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
1285 String sliceProfileName = "tn_mh_" + sliceParams.serviceName
1286 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
1288 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
1290 execution.setVariable("communicationServiceInstance", rspi)
1292 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1293 .customer(globalSubscriberId)
1294 .serviceSubscription(subscriptionServiceType)
1295 .serviceInstance(serviceInstanceId))
1296 client.create(uri, rspi)
1298 execution.setVariable("sliceTaskParams", sliceParams)
1302 * create Tn Slice Profile
1305 void createTnMHSliceProfile(DelegateExecution execution) {
1307 String globalSubscriberId = execution.getVariable("globalSubscriberId")
1308 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1310 SliceTaskParamsAdapter sliceParams =
1311 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1313 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnMHSliceTaskInfo
1315 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
1316 String profileId = UUID.randomUUID().toString()
1317 tnSliceProfile.setSliceProfileId(profileId)
1319 SliceProfile sliceProfile = new SliceProfile()
1320 sliceProfile.setProfileId(profileId)
1321 sliceProfile.setLatency(tnSliceProfile.latency)
1322 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
1323 sliceProfile.setJitter(tnSliceProfile.jitter)
1325 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1326 .customer(globalSubscriberId)
1327 .serviceSubscription(subscriptionServiceType)
1328 .serviceInstance(sliceTaskInfo.sliceInstanceId)
1329 .sliceProfile(profileId))
1330 client.create(uri, sliceProfile)
1332 execution.setVariable("sliceTaskParams", sliceParams)
1336 * prepare AllocateCnNssi
1339 void prepareAllocateTnMHNssi(DelegateExecution execution) {
1341 SliceTaskParamsAdapter sliceParams =
1342 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1343 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getTnMHSliceTaskInfo()
1345 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
1347 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
1348 allocateTnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
1349 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
1350 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
1351 List<ConnectionLink> connectionLinks = new ArrayList<>()
1352 ConnectionLink connectionLink = new ConnectionLink()
1353 connectionLink.setTransportEndpointA(UUID.randomUUID().toString())
1354 connectionLink.setTransportEndpointB(UUID.randomUUID().toString())
1355 connectionLinks.add(connectionLink)
1356 transportSliceNetwork.setConnectionLinks(connectionLinks)
1357 transportSliceNetworks.add(transportSliceNetwork)
1358 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
1360 allocateTnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2TnProfile())
1361 NsiInfo nsiInfo = new NsiInfo()
1362 nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
1363 nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
1364 allocateTnNssi.setNsiInfo(nsiInfo)
1366 EsrInfo esrInfo = new EsrInfo()
1367 esrInfo.setVendor(sliceTaskInfo.getVendor())
1368 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
1370 String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
1371 String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
1373 ServiceInfo serviceInfo = ServiceInfo.builder()
1374 .globalSubscriberId(globalSubscriberId)
1375 .subscriptionServiceType(subscriptionServiceType)
1376 .nsiId(sliceParams.getSuggestNsiId())
1377 .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
1378 .serviceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
1379 .nssiId(sliceTaskInfo.getSuggestNssiId())
1380 .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST"))
1381 .nssiName("nssi_tn_mh_" + execution.getVariable("sliceServiceInstanceName") as String)
1384 nbiRequest.setServiceInfo(serviceInfo)
1385 nbiRequest.setEsrInfo(esrInfo)
1386 nbiRequest.setAllocateTnNssi(allocateTnNssi)
1388 execution.setVariable("TnMHAllocateNssiNbiRequest", nbiRequest)
1389 execution.setVariable("tnMHSliceTaskInfo", sliceTaskInfo)
1390 execution.setVariable("tnMHSubnetType", SubnetType.TN_MH)
1394 * Update relationship between
1396 * 2. Slice Profile and Service Profile
1397 * 3. SliceProfile and NSSI
1401 public void updateTnMHRelationship(DelegateExecution execution) {
1402 SliceTaskParamsAdapter sliceParams =
1403 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1405 NssiResponse result = execution.getVariable("tnMHNssiAllocateResult") as NssiResponse
1406 String nssiId = result.getNssiId()
1407 String nsiId = sliceParams.getSuggestNsiId()
1408 String sliceProfileInstanceId = sliceParams.tnMHSliceTaskInfo.sliceInstanceId
1409 String serviceProfileInstanceId = sliceParams.serviceId
1411 updateRelationship(execution, nsiId, nssiId)
1413 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
1415 updateRelationship(execution,sliceProfileInstanceId, nssiId)
1417 sliceParams.tnMHSliceTaskInfo.suggestNssiId = nssiId
1418 execution.setVariable("sliceTaskParams", sliceParams)