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)
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())
449 nbiRequest.setServiceInfo(serviceInfo)
450 nbiRequest.setEsrInfo(esrInfo)
451 nbiRequest.setAllocateAnNssi(allocateAnNssi)
453 execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest)
454 execution.setVariable("anSliceTaskInfo", sliceTaskInfo)
455 execution.setVariable("anSubnetType", SubnetType.AN)
460 * create RAN Slice Profile Instance
463 void createCnSliceProfileInstance(DelegateExecution execution) {
465 String globalSubscriberId = execution.getVariable("globalSubscriberId")
466 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
467 String serviceInstanceId = UUID.randomUUID().toString()
468 execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
470 String oStatus = "deactivated"
472 SliceTaskParamsAdapter sliceParams =
473 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
474 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
475 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
476 String sliceProfileName = "sliceprofile_cn_"+sliceParams.serviceName
478 // create slice profile
479 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
481 //timestamp format YYYY-MM-DD hh:mm:ss
482 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
484 execution.setVariable("communicationServiceInstance", rspi)
486 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
487 .customer(globalSubscriberId)
488 .serviceSubscription(subscriptionServiceType)
489 .serviceInstance(serviceInstanceId))
490 client.create(uri, rspi)
491 execution.setVariable("sliceTaskParams", sliceParams)
495 * create Cn Slice Profile
498 void createCnSliceProfile(DelegateExecution execution) {
500 String globalSubscriberId = execution.getVariable("globalSubscriberId")
501 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
502 //String serviceInstanceId = execution.getVariable("ranSliceProfileInstanceId")
504 SliceTaskParamsAdapter sliceParams =
505 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
507 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
508 SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
510 String profileId = UUID.randomUUID().toString()
511 cnSliceProfile.setSliceProfileId(profileId)
513 SliceProfile sliceProfile = new SliceProfile()
514 sliceProfile.setProfileId(profileId)
515 sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
516 sliceProfile.setMaxNumberOfUEs(cnSliceProfile.maxNumberOfUEs)
517 sliceProfile.setLatency(cnSliceProfile.latency)
518 sliceProfile.setMaxNumberOfPDUSession(cnSliceProfile.maxNumberOfPDUSession)
519 sliceProfile.setExpDataRateDL(cnSliceProfile.expDataRateDL)
520 sliceProfile.setExpDataRateUL(cnSliceProfile.expDataRateUL)
521 sliceProfile.setAreaTrafficCapDL(cnSliceProfile.areaTrafficCapDL)
522 sliceProfile.setAreaTrafficCapUL(cnSliceProfile.areaTrafficCapUL)
523 sliceProfile.setOverallUserDensity(cnSliceProfile.overallUserDensity)
524 sliceProfile.setActivityFactor(cnSliceProfile.activityFactor)
525 sliceProfile.setUeMobilityLevel(cnSliceProfile.ueMobilityLevel)
526 sliceProfile.setResourceSharingLevel(cnSliceProfile.resourceSharingLevel)
527 sliceProfile.setCsAvailabilityTarget(cnSliceProfile.csAvailabilityTarget)
528 sliceProfile.setCsReliabilityMeanTime(cnSliceProfile.csReliabilityMeanTime)
529 sliceProfile.setExpDataRate(cnSliceProfile.expDataRate)
530 sliceProfile.setMsgSizeByte(cnSliceProfile.msgSizeByte)
531 sliceProfile.setTransferIntervalTarget(cnSliceProfile.transferIntervalTarget)
532 sliceProfile.setSurvivalTime(cnSliceProfile.survivalTime)
534 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
535 .customer(globalSubscriberId)
536 .serviceSubscription(subscriptionServiceType)
537 .serviceInstance(sliceTaskInfo.sliceInstanceId)
538 .sliceProfile(profileId))
539 client.create(uri, sliceProfile)
540 execution.setVariable("sliceTaskParams", sliceParams)
544 * prepare AllocateCnNssi
547 void prepareAllocateCnNssi(DelegateExecution execution) {
550 SliceTaskParamsAdapter sliceParams =
551 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
552 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
554 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
556 AllocateCnNssi allocateCnNssi = new AllocateCnNssi()
557 allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
558 allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
559 allocateCnNssi.nssiName = "nssi_cn" + execution.getVariable("sliceServiceInstanceName")
560 allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
561 allocateCnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
562 allocateCnNssi.scriptName = sliceTaskInfo.getScriptName()
564 NsiInfo nsiInfo = new NsiInfo()
565 nsiInfo.nsiId = sliceParams.suggestNsiId
566 nsiInfo.nsiName = sliceParams.suggestNsiName
567 allocateCnNssi.nsiInfo = nsiInfo
569 EndPoint endPoint = new EndPoint()
570 endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
571 endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
572 endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
573 allocateCnNssi.setEndPoint(endPoint)
575 EsrInfo esrInfo = new EsrInfo()
576 //todo: vendor and network
577 esrInfo.setVendor(sliceTaskInfo.getVendor())
578 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
580 String globalSubscriberId = execution.getVariable("globalSubscriberId")
581 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
584 ServiceInfo serviceInfo = new ServiceInfo()
585 serviceInfo.globalSubscriberId = globalSubscriberId
586 serviceInfo.subscriptionServiceType = subscriptionServiceType
587 serviceInfo.nsiId = sliceParams.suggestNsiId
588 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
589 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
590 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId //if shared
591 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
592 serviceInfo.nssiName = allocateCnNssi.nssiName
594 nbiRequest.setServiceInfo(serviceInfo)
595 nbiRequest.setEsrInfo(esrInfo)
596 nbiRequest.setAllocateCnNssi(allocateCnNssi)
598 execution.setVariable("CnAllocateNssiNbiRequest", nbiRequest)
599 execution.setVariable("cnSliceTaskInfo", sliceTaskInfo)
600 execution.setVariable("cnSubnetType", SubnetType.CN)
605 * create TN Slice Profile Instance
608 void createTnBHSliceProfileInstance(DelegateExecution execution) {
609 String globalSubscriberId = execution.getVariable("globalSubscriberId")
610 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
612 String oStatus = "deactivated"
614 SliceTaskParamsAdapter sliceParams =
615 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
617 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
618 String serviceInstanceId = UUID.randomUUID().toString()
620 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
621 String sliceProfileName = "sliceprofile_tn_" + sliceParams.serviceName
622 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
624 // create slice profile
625 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
627 //timestamp format YYYY-MM-DD hh:mm:ss
628 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
630 execution.setVariable("communicationServiceInstance", rspi)
632 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
633 .customer(globalSubscriberId)
634 .serviceSubscription(subscriptionServiceType)
635 .serviceInstance(serviceInstanceId))
636 client.create(uri, rspi)
638 execution.setVariable("sliceTaskParams", sliceParams)
642 * create Tn Slice Profile
645 void createTnBHSliceProfile(DelegateExecution execution) {
647 String globalSubscriberId = execution.getVariable("globalSubscriberId")
648 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
650 SliceTaskParamsAdapter sliceParams =
651 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
653 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
655 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
656 String profileId = UUID.randomUUID().toString()
657 tnSliceProfile.setSliceProfileId(profileId)
659 SliceProfile sliceProfile = new SliceProfile()
660 sliceProfile.setProfileId(profileId)
661 sliceProfile.setLatency(tnSliceProfile.latency)
662 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
663 sliceProfile.setJitter(tnSliceProfile.jitter)
665 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
666 .customer(globalSubscriberId)
667 .serviceSubscription(subscriptionServiceType)
668 .serviceInstance(sliceTaskInfo.sliceInstanceId)
669 .sliceProfile(profileId))
670 client.create(uri, sliceProfile)
672 execution.setVariable("sliceTaskParams", sliceParams)
676 * prepare AllocateCnNssi
679 void prepareAllocateTnBHNssi(DelegateExecution execution) {
682 SliceTaskParamsAdapter sliceParams =
683 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
684 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
686 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
688 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
689 allocateTnNssi.setNssiId(sliceTaskInfo.suggestNssiId)
690 allocateTnNssi.scriptName = sliceTaskInfo.getScriptName()
691 //todo: AllocateTnNssi
692 //todo: endPointId -> set into tn
693 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
694 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
695 List<ConnectionLink> connectionLinks = new ArrayList<>()
696 ConnectionLink connectionLink = new ConnectionLink()
697 connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
698 connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
699 connectionLinks.add(connectionLink)
700 transportSliceNetwork.setConnectionLinks(connectionLinks)
701 transportSliceNetworks.add(transportSliceNetwork)
702 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
704 allocateTnNssi.setNetworkSliceInfos()
705 allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
706 allocateTnNssi.getSliceProfile().setDomainType(sliceTaskInfo.subnetType.subnetType)
707 NsiInfo nsiInfo = new NsiInfo()
708 nsiInfo.setNsiId(sliceParams.suggestNsiId)
709 nsiInfo.setNsiName(sliceParams.suggestNsiName)
710 allocateTnNssi.setNsiInfo(nsiInfo)
712 //allocateTnNssi.networkSliceInfos
714 EsrInfo esrInfo = new EsrInfo()
715 esrInfo.setVendor(sliceTaskInfo.getVendor())
716 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
718 String globalSubscriberId = execution.getVariable("globalSubscriberId")
719 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
721 ServiceInfo serviceInfo = new ServiceInfo()
722 serviceInfo.globalSubscriberId = globalSubscriberId
723 serviceInfo.subscriptionServiceType = subscriptionServiceType
724 serviceInfo.nsiId = sliceParams.suggestNsiId
725 serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
726 serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
727 serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
728 serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
729 serviceInfo.nssiName = "nssi_tn" + execution.getVariable("sliceServiceInstanceName")
731 nbiRequest.setServiceInfo(serviceInfo)
732 nbiRequest.setEsrInfo(esrInfo)
733 nbiRequest.setAllocateTnNssi(allocateTnNssi)
735 execution.setVariable("TnBHAllocateNssiNbiRequest", nbiRequest)
736 execution.setVariable("tnBHSliceTaskInfo", sliceTaskInfo)
737 execution.setVariable("tnBHSubnetType", SubnetType.TN_BH)
741 * Update relationship between
743 * 2. Slice Profile and Service Profile
744 * 3. SliceProfile and NSSI
745 * 4. sliceProfile and endpoint
749 public void updateAnRelationship(DelegateExecution execution) {
751 SliceTaskParamsAdapter sliceParams =
752 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
754 NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse
755 String nssiId = result.getNssiId()
756 String nsiId = sliceParams.getSuggestNsiId()
757 String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
758 String serviceProfileInstanceId = sliceParams.serviceId
759 String epId = sliceParams.anSliceTaskInfo.endPointId
761 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
762 //String endPointId = getEndpointIdFromAAI(execution, nssiId)
763 //execution.setVariable("endPointIdAn", endPointId)
764 updateRelationship(execution, nsiId, nssiId)
766 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
768 updateRelationship(execution, sliceProfileInstanceId, nssiId)
770 updateEPRelationship(execution, nssiId, epId)
772 updateEPRelationship(execution, sliceProfileInstanceId, epId)
774 sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
775 execution.setVariable("sliceTaskParams", sliceParams)
780 * Update relationship between
782 * 2. Slice Profile and Service Profile
783 * 3. SliceProfile and NSSI
787 public void updateCnRelationship(DelegateExecution execution) {
789 SliceTaskParamsAdapter sliceParams =
790 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
792 NssiResponse result = execution.getVariable("cnNssiAllocateResult") as NssiResponse
793 String nssiId = result.getNssiId()
794 String nsiId = sliceParams.getSuggestNsiId()
795 String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
796 String serviceProfileInstanceId = sliceParams.serviceId
797 String epId = sliceParams.cnSliceTaskInfo.endPointId
799 //todo: aai -> nssi -> relationship -> endPointId -> set into tn
800 // String endPointId = getEndpointIdFromAAI(execution, nssiId)
801 // execution.setVariable("endPointIdCn", endPointId)
803 updateRelationship(execution, nsiId, nssiId)
805 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
807 updateRelationship(execution, sliceProfileInstanceId, nssiId)
809 updateEPRelationship(execution, nssiId, epId)
811 updateEPRelationship(execution, sliceProfileInstanceId, epId)
813 sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
814 execution.setVariable("sliceTaskParams", sliceParams)
818 * get endpoint Id from AAI by nssi id
823 private String getEndpointIdFromAAI(DelegateExecution execution, String nssiId) {
824 logger.debug("Enter update relationship in DoAllocateNSIandNSSI()")
825 //todo: allottedResourceId
827 SliceTaskParamsAdapter sliceParams =
828 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
830 //sliceParams.setServiceId(nsiServiceInstanceID)
831 AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
832 .customer(execution.getVariable("globalSubscriberId"))
833 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
834 .serviceInstance(nssiId))
836 String endpointId = null
839 AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
840 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
841 if (!si.isPresent()) {
842 String msg = "NSSI in the option doesn't exist. " + nssiId
844 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
846 ServiceInstance nssiInstance = si.get()
847 //todo: handle relationship and return endPointId
848 if (nssiInstance.relationshipList == null) {
849 String msg = "relationshipList of " + nssiId + " is null"
853 for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) {
854 if (relationship.relationshipLabel){
855 endpointId = relationship //todo
862 }catch(BpmnError e) {
864 }catch (Exception ex){
865 String msg = "Exception: " + ex
867 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
869 logger.debug("Exit update relationship in DoAllocateNSIandNSSI()")
873 * Update relationship between
875 * 2. Slice Profile and Service Profile
876 * 3. SliceProfile and NSSI
880 public void updateTnBHRelationship(DelegateExecution execution) {
881 SliceTaskParamsAdapter sliceParams =
882 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
884 NssiResponse result = execution.getVariable("tnBHNssiAllocateResult") as NssiResponse
885 String nssiId = result.getNssiId()
886 String nsiId = sliceParams.getSuggestNsiId()
887 String sliceProfileInstanceId = sliceParams.tnBHSliceTaskInfo.sliceInstanceId
888 String serviceProfileInstanceId = sliceParams.serviceId
891 updateRelationship(execution, nsiId, nssiId)
893 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
895 updateRelationship(execution,sliceProfileInstanceId, nssiId)
897 sliceParams.tnBHSliceTaskInfo.suggestNssiId = nssiId
898 execution.setVariable("sliceTaskParams", sliceParams)
902 * sourceId -> targetId
907 void updateRelationship(DelegateExecution execution, String sourceId, String targetId) {
909 Relationship relationship = new Relationship()
911 AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
912 .customer(execution.getVariable("globalSubscriberId"))
913 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
914 .serviceInstance(targetId))
916 logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
918 relationship.setRelatedLink(targetInstanceUri.build().toString())
920 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
921 .customer(execution.getVariable("globalSubscriberId"))
922 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
923 .serviceInstance(sourceId))
925 client.create(sourceInstanceUri, relationship)
929 * update endpoint relationship
934 void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
936 Relationship relationship = new Relationship()
938 AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
940 logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
942 relationship.setRelatedLink(endpointUri.build().toString())
944 AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
945 .customer(execution.getVariable("globalSubscriberId"))
946 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
947 .serviceInstance(sourceId))
949 client.create(sourceInstanceUri, relationship)
952 static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String sliceProfileName, String oStatus) {
953 // create slice profile
954 ServiceInstance rspi = new ServiceInstance()
955 rspi.setServiceInstanceName(sliceProfileName)
956 rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
957 rspi.setServiceRole("slice-profile")
958 rspi.setOrchestrationStatus(oStatus)
959 rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
960 rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
961 rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
962 rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
963 rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
964 rspi.setServiceFunction(sliceTaskInfo.sliceProfile.getResourceSharingLevel())
966 //timestamp format YYYY-MM-DD hh:mm:ss
967 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
971 public void createTNEndPoints(DelegateExecution execution) {
972 String type = "endpoint"
973 String function = "transport_EP"
974 int prefixLength = 24
975 String addressFamily = "ipv4"
976 //BH RAN end point update
978 String sliceParams = execution.getVariable("sliceParams")
979 List<String> BH_endPoints = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceParams, "endPoints"))
980 logger.debug("BH end points list : "+BH_endPoints)
981 if(BH_endPoints.empty) {
982 String msg = "End point info is empty"
984 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
986 String bh_routeId = UUID.randomUUID().toString()
987 execution.setVariable("tranportEp_ID_bh", bh_routeId)
989 String CU_IpAddress = jsonUtil.getJsonValue(bh_endpoint, "IpAddress")
990 String LogicalLinkId = jsonUtil.getJsonValue(bh_endpoint, "LogicalLinkId")
991 String nextHopInfo = jsonUtil.getJsonValue(bh_endpoint, "nextHopInfo")
992 NetworkRoute bh_ep = new NetworkRoute()
993 bh_ep.setRouteId(bh_routeId)
994 bh_ep.setFunction(function)
997 bh_ep.setIpAddress(CU_IpAddress)
998 bh_ep.setLogicalInterfaceId(LogicalLinkId)
999 bh_ep.setNextHop(nextHopInfo)
1000 bh_ep.setPrefixLength(prefixLength)
1001 bh_ep.setAddressFamily(addressFamily)
1002 //FH RAN end points update
1004 String RU_routeId = UUID.randomUUID().toString()
1005 execution.setVariable("tranportEp_ID_RU", RU_routeId)
1007 NetworkRoute RU_ep = new NetworkRoute()
1008 RU_ep.setRouteId(RU_routeId)
1009 RU_ep.setFunction(function)
1012 RU_ep.setIpAddress("192.168.100.4")
1013 RU_ep.setLogicalInterfaceId("1234")
1014 RU_ep.setNextHop("Host1")
1015 RU_ep.setPrefixLength(prefixLength)
1016 RU_ep.setAddressFamily(addressFamily)
1018 String DUIN_routeId = UUID.randomUUID().toString()
1019 execution.setVariable("tranportEp_ID_DUIN", DUIN_routeId)
1021 NetworkRoute DU_ep = new NetworkRoute()
1022 DU_ep.setRouteId(DUIN_routeId)
1023 DU_ep.setFunction(function)
1026 DU_ep.setIpAddress("192.168.100.5")
1027 DU_ep.setLogicalInterfaceId("1234")
1028 DU_ep.setNextHop("Host2")
1029 DU_ep.setPrefixLength(prefixLength)
1030 DU_ep.setAddressFamily(addressFamily)
1031 //MH RAN end point update
1033 String DUEG_routeId = UUID.randomUUID().toString()
1034 execution.setVariable("tranportEp_ID_DUEG", DUEG_routeId)
1035 NetworkRoute DUEG_ep = new NetworkRoute()
1036 DUEG_ep.setRouteId(DUEG_routeId)
1037 DUEG_ep.setFunction(function)
1038 DUEG_ep.setRole(role)
1039 DUEG_ep.setType(type)
1040 DUEG_ep.setIpAddress("192.168.100.5")
1041 DUEG_ep.setLogicalInterfaceId("1234")
1042 DUEG_ep.setPrefixLength(prefixLength)
1043 DUEG_ep.setAddressFamily(addressFamily)
1044 DUEG_ep.setNextHop("Host3")
1046 String CUIN_routeId = UUID.randomUUID().toString()
1047 execution.setVariable("tranportEp_ID_CUIN", CUIN_routeId)
1048 NetworkRoute CUIN_ep = new NetworkRoute()
1049 CUIN_ep.setRouteId(CUIN_routeId)
1050 CUIN_ep.setFunction(function)
1051 CUIN_ep.setRole(role)
1052 CUIN_ep.setType(type)
1053 CUIN_ep.setIpAddress("192.168.100.6")
1054 CUIN_ep.setLogicalInterfaceId("1234")
1055 CUIN_ep.setNextHop("Host4")
1056 CUIN_ep.setPrefixLength(prefixLength)
1057 CUIN_ep.setAddressFamily(addressFamily)
1059 AAIResourcesClient client = new AAIResourcesClient()
1060 logger.debug("creating bh endpoint . ID : "+bh_routeId+" node details : "+bh_ep.toString())
1061 AAIResourceUri networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(bh_routeId))
1062 client.create(networkRouteUri, bh_ep)
1063 logger.debug("creating RU endpoint . ID : "+RU_routeId+" node details : "+RU_ep.toString())
1064 networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(RU_routeId))
1065 client.create(networkRouteUri, RU_ep)
1066 logger.debug("creating DUIN endpoint . ID : "+DUIN_routeId+" node details : "+DU_ep.toString())
1067 networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(DUIN_routeId))
1068 client.create(networkRouteUri, DU_ep)
1069 logger.debug("creating DUEG endpoint . ID : "+DUEG_routeId+" node details : "+DUEG_ep.toString())
1070 networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(DUEG_routeId))
1071 client.create(networkRouteUri, DUEG_ep)
1072 logger.debug("creating CUIN endpoint . ID : "+CUIN_routeId+" node details : "+CUIN_ep.toString())
1073 networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(CUIN_routeId))
1074 client.create(networkRouteUri, CUIN_ep)
1075 //relationship b/w bh_ep and RAN NSSI
1076 def AN_NSSI = execution.getVariable("RANServiceInstanceId")
1077 Relationship relationship = new Relationship()
1078 String relatedLink = "aai/v21/network/network-routes/network-route/${bh_routeId}"
1079 relationship.setRelatedLink(relatedLink)
1080 relationship.setRelatedTo("network-route")
1081 relationship.setRelationshipLabel("org.onap.relationships.inventory.ComposedOf")
1082 anNssmfUtils.createRelationShipInAAI(execution, relationship, AN_NSSI)
1083 def ANNF_serviceInstanceId = execution.getVariable("RANNFServiceInstanceId")
1084 relatedLink = "aai/v21/network/network-routes/network-route/${RU_routeId}"
1085 relationship.setRelatedLink(relatedLink)
1086 anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1087 relatedLink = "aai/v21/network/network-routes/network-route/${DUIN_routeId}"
1088 relationship.setRelatedLink(relatedLink)
1089 anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1090 relatedLink = "aai/v21/network/network-routes/network-route/${DUEG_routeId}"
1091 relationship.setRelatedLink(relatedLink)
1092 anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1093 relatedLink = "aai/v21/network/network-routes/network-route/${CUIN_routeId}"
1094 relationship.setRelatedLink(relatedLink)
1095 anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
1096 } catch (BpmnError e) {
1098 } catch (Exception ex) {
1099 String msg = "Exception in createEndPointsInAai " + ex.getMessage()
1101 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
1106 * create TN Slice Profile Instance
1109 void createTnFHSliceProfileInstance(DelegateExecution execution) {
1110 String globalSubscriberId = execution.getVariable("globalSubscriberId")
1111 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1113 String oStatus = "deactivated"
1115 SliceTaskParamsAdapter sliceParams =
1116 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1118 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnFHSliceTaskInfo
1119 String serviceInstanceId = UUID.randomUUID().toString()
1121 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
1122 String sliceProfileName = "tn_fh" + sliceParams.serviceName
1123 //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
1125 // create slice profile
1126 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
1128 //timestamp format YYYY-MM-DD hh:mm:ss
1129 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
1131 execution.setVariable("communicationServiceInstance", rspi)
1133 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1134 .customer(globalSubscriberId)
1135 .serviceSubscription(subscriptionServiceType)
1136 .serviceInstance(serviceInstanceId))
1137 client.create(uri, rspi)
1139 execution.setVariable("sliceTaskParams", sliceParams)
1143 * create Tn Slice Profile
1146 void createTnFHSliceProfile(DelegateExecution execution) {
1148 String globalSubscriberId = execution.getVariable("globalSubscriberId")
1149 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1151 SliceTaskParamsAdapter sliceParams =
1152 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1154 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnFHSliceTaskInfo
1156 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
1157 String profileId = UUID.randomUUID().toString()
1158 tnSliceProfile.setSliceProfileId(profileId)
1160 SliceProfile sliceProfile = new SliceProfile()
1161 sliceProfile.setProfileId(profileId)
1162 sliceProfile.setLatency(tnSliceProfile.latency)
1163 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
1164 sliceProfile.setJitter(tnSliceProfile.jitter)
1166 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1167 .customer(globalSubscriberId)
1168 .serviceSubscription(subscriptionServiceType)
1169 .serviceInstance(sliceTaskInfo.sliceInstanceId)
1170 .sliceProfile(profileId))
1171 client.create(uri, sliceProfile)
1173 execution.setVariable("sliceTaskParams", sliceParams)
1177 * prepare AllocateCnNssi
1180 void prepareAllocateTnFHNssi(DelegateExecution execution) {
1183 SliceTaskParamsAdapter sliceParams =
1184 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1185 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getTnFHSliceTaskInfo()
1187 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
1189 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
1190 allocateTnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
1191 //todo: AllocateTnNssi
1192 //todo: endPointId -> set into tn
1193 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
1194 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
1195 List<ConnectionLink> connectionLinks = new ArrayList<>()
1196 ConnectionLink connectionLink = new ConnectionLink()
1197 connectionLink.setTransportEndpointA(execution.getVariable("tranportEp_ID_RU") as String)
1198 connectionLink.setTransportEndpointB(execution.getVariable("tranportEp_ID_DUIN") as String)
1199 connectionLinks.add(connectionLink)
1200 transportSliceNetwork.setConnectionLinks(connectionLinks)
1201 transportSliceNetworks.add(transportSliceNetwork)
1202 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
1204 allocateTnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2TnProfile())
1205 NsiInfo nsiInfo = new NsiInfo()
1206 nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
1207 nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
1208 allocateTnNssi.setNsiInfo(nsiInfo)
1210 EsrInfo esrInfo = new EsrInfo()
1211 esrInfo.setVendor(sliceTaskInfo.getVendor())
1212 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
1214 String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
1215 String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
1217 ServiceInfo serviceInfo = ServiceInfo.builder()
1218 .globalSubscriberId(globalSubscriberId)
1219 .subscriptionServiceType(subscriptionServiceType)
1220 .nsiId(sliceParams.getSuggestNsiId())
1221 .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
1222 .setServiceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
1223 .nssiId(sliceTaskInfo.getSuggestNssiId())
1224 .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST"))
1225 .nssiName("nssi_tn_fh_" + execution.getVariable("sliceServiceInstanceName") as String)
1228 nbiRequest.setServiceInfo(serviceInfo)
1229 nbiRequest.setEsrInfo(esrInfo)
1230 nbiRequest.setAllocateTnNssi(allocateTnNssi)
1232 execution.setVariable("TnFHAllocateNssiNbiRequest", nbiRequest)
1233 execution.setVariable("tnFHSliceTaskInfo", sliceTaskInfo)
1234 execution.setVariable("tnFHSubnetType", SubnetType.TN_BH)
1238 * Update relationship between
1240 * 2. Slice Profile and Service Profile
1241 * 3. SliceProfile and NSSI
1245 public void updateTnFHRelationship(DelegateExecution execution) {
1246 SliceTaskParamsAdapter sliceParams =
1247 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1249 NssiResponse result = execution.getVariable("tnFHNssiAllocateResult") as NssiResponse
1250 String nssiId = result.getNssiId()
1251 String nsiId = sliceParams.getSuggestNsiId()
1252 String sliceProfileInstanceId = sliceParams.tnFHSliceTaskInfo.sliceInstanceId
1253 String serviceProfileInstanceId = sliceParams.serviceId
1255 updateRelationship(execution, nsiId, nssiId)
1257 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
1259 updateRelationship(execution,sliceProfileInstanceId, nssiId)
1261 sliceParams.tnFHSliceTaskInfo.suggestNssiId = nssiId
1262 execution.setVariable("sliceTaskParams", sliceParams)
1266 * create TN Slice Profile Instance
1269 void createTnMHSliceProfileInstance(DelegateExecution execution) {
1270 String globalSubscriberId = execution.getVariable("globalSubscriberId")
1271 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1273 String oStatus = "deactivated"
1275 SliceTaskParamsAdapter sliceParams =
1276 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1278 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnMHSliceTaskInfo
1279 String serviceInstanceId = UUID.randomUUID().toString()
1281 sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
1282 String sliceProfileName = "tn_mh_" + sliceParams.serviceName
1283 ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
1285 rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
1287 execution.setVariable("communicationServiceInstance", rspi)
1289 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1290 .customer(globalSubscriberId)
1291 .serviceSubscription(subscriptionServiceType)
1292 .serviceInstance(serviceInstanceId))
1293 client.create(uri, rspi)
1295 execution.setVariable("sliceTaskParams", sliceParams)
1299 * create Tn Slice Profile
1302 void createTnMHSliceProfile(DelegateExecution execution) {
1304 String globalSubscriberId = execution.getVariable("globalSubscriberId")
1305 String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
1307 SliceTaskParamsAdapter sliceParams =
1308 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1310 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnMHSliceTaskInfo
1312 SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
1313 String profileId = UUID.randomUUID().toString()
1314 tnSliceProfile.setSliceProfileId(profileId)
1316 SliceProfile sliceProfile = new SliceProfile()
1317 sliceProfile.setProfileId(profileId)
1318 sliceProfile.setLatency(tnSliceProfile.latency)
1319 sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
1320 sliceProfile.setJitter(tnSliceProfile.jitter)
1322 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
1323 .customer(globalSubscriberId)
1324 .serviceSubscription(subscriptionServiceType)
1325 .serviceInstance(sliceTaskInfo.sliceInstanceId)
1326 .sliceProfile(profileId))
1327 client.create(uri, sliceProfile)
1329 execution.setVariable("sliceTaskParams", sliceParams)
1333 * prepare AllocateCnNssi
1336 void prepareAllocateTnMHNssi(DelegateExecution execution) {
1338 SliceTaskParamsAdapter sliceParams =
1339 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1340 SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getTnMHSliceTaskInfo()
1342 NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
1344 AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
1345 allocateTnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
1346 List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
1347 TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
1348 List<ConnectionLink> connectionLinks = new ArrayList<>()
1349 ConnectionLink connectionLink = new ConnectionLink()
1350 connectionLink.setTransportEndpointA(execution.getVariable("tranportEp_ID_DUEG") as String)
1351 connectionLink.setTransportEndpointB(execution.getVariable("tranportEp_ID_CUIN") as String)
1352 connectionLinks.add(connectionLink)
1353 transportSliceNetwork.setConnectionLinks(connectionLinks)
1354 transportSliceNetworks.add(transportSliceNetwork)
1355 allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
1357 allocateTnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2TnProfile())
1358 NsiInfo nsiInfo = new NsiInfo()
1359 nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
1360 nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
1361 allocateTnNssi.setNsiInfo(nsiInfo)
1363 EsrInfo esrInfo = new EsrInfo()
1364 esrInfo.setVendor(sliceTaskInfo.getVendor())
1365 esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
1367 String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
1368 String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
1370 ServiceInfo serviceInfo = ServiceInfo.builder()
1371 .globalSubscriberId(globalSubscriberId)
1372 .subscriptionServiceType(subscriptionServiceType)
1373 .nsiId(sliceParams.getSuggestNsiId())
1374 .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
1375 .serviceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
1376 .nssiId(sliceTaskInfo.getSuggestNssiId())
1377 .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST"))
1378 .nssiName("nssi_tn_bh_" + execution.getVariable("sliceServiceInstanceName") as String)
1381 nbiRequest.setServiceInfo(serviceInfo)
1382 nbiRequest.setEsrInfo(esrInfo)
1383 nbiRequest.setAllocateTnNssi(allocateTnNssi)
1385 execution.setVariable("TnMHAllocateNssiNbiRequest", nbiRequest)
1386 execution.setVariable("tnMHSliceTaskInfo", sliceTaskInfo)
1387 execution.setVariable("tnMHSubnetType", SubnetType.TN_BH)
1391 * Update relationship between
1393 * 2. Slice Profile and Service Profile
1394 * 3. SliceProfile and NSSI
1398 public void updateTnMHRelationship(DelegateExecution execution) {
1399 SliceTaskParamsAdapter sliceParams =
1400 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
1402 NssiResponse result = execution.getVariable("tnMHNssiAllocateResult") as NssiResponse
1403 String nssiId = result.getNssiId()
1404 String nsiId = sliceParams.getSuggestNsiId()
1405 String sliceProfileInstanceId = sliceParams.tnMHSliceTaskInfo.sliceInstanceId
1406 String serviceProfileInstanceId = sliceParams.serviceId
1408 updateRelationship(execution, nsiId, nssiId)
1410 updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
1412 updateRelationship(execution,sliceProfileInstanceId, nssiId)
1414 sliceParams.tnMHSliceTaskInfo.suggestNssiId = nssiId
1415 execution.setVariable("sliceTaskParams", sliceParams)