X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=bpmn%2Fso-bpmn-moi%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fso%2Fbpmn%2Fmoi%2Ftasks%2FAssignRANNssiBBTasks.java;fp=bpmn%2Fso-bpmn-moi%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fso%2Fbpmn%2Fmoi%2Ftasks%2FAssignRANNssiBBTasks.java;h=1ef073ca68b993c63ed06f7765371fbc8ea3a836;hb=09e2242fd1b3258d299018e501c10f124e5b3104;hp=0000000000000000000000000000000000000000;hpb=6624366c1485f352220216e45666d6083da04d6c;p=so.git diff --git a/bpmn/so-bpmn-moi/src/main/java/org/onap/so/bpmn/moi/tasks/AssignRANNssiBBTasks.java b/bpmn/so-bpmn-moi/src/main/java/org/onap/so/bpmn/moi/tasks/AssignRANNssiBBTasks.java new file mode 100644 index 0000000000..1ef073ca68 --- /dev/null +++ b/bpmn/so-bpmn-moi/src/main/java/org/onap/so/bpmn/moi/tasks/AssignRANNssiBBTasks.java @@ -0,0 +1,335 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (c) 2022 Deutsche telekom + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + + +package org.onap.so.bpmn.moi.tasks; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.onap.aai.domain.yang.*; +import org.onap.aaiclient.client.aai.AAIRestClientImpl; +import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri; +import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory; +import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.common.InjectionHelper; +import org.onap.so.bpmn.moi.util.AAISliceProfileUtil; +import org.onap.so.bpmn.moi.util.SliceProfileAaiToMoiMapperUtil; +import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock; +import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoServiceInstance; +import org.onap.so.moi.Attributes; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.*; +import java.util.stream.Collectors; + +@Component +public class AssignRANNssiBBTasks { + + private static final Logger LOGGER = LoggerFactory.getLogger(AssignRANNssiBBTasks.class); + + @Autowired + private InjectionHelper injectionHelper; + + private ObjectMapper mapper = new ObjectMapper(); + + private AAIRestClientImpl aaiRestClient = new AAIRestClientImpl(); + + @Autowired + AAISliceProfileUtil aaiSliceProfileUtil; + + @Autowired + private SliceProfileAaiToMoiMapperUtil mapperUtil; + + public void createNssi(BuildingBlockExecution execution) throws Exception { + + + GeneralBuildingBlock gBB = execution.getGeneralBuildingBlock(); + + String serviceInstanceId = gBB.getServiceInstance().getServiceInstanceId(); + + ModelInfoServiceInstance modelInfoServiceInstance = gBB.getServiceInstance().getModelInfoServiceInstance(); + + // for NON-SHARED check if its Already present + if (checkNSSI(execution)) { + if (aaiSliceProfileUtil.getServiceInstance(execution).isPresent()) { + throw new RuntimeException("Invalid NSSI, Slice subnet already exists"); + } + } + ServiceInstance serviceInstance = new ServiceInstance(); + serviceInstance.setServiceInstanceId(serviceInstanceId); + serviceInstance.setServiceInstanceName("ran_" + serviceInstanceId); + serviceInstance.setOrchestrationStatus("Assigned"); + serviceInstance.setServiceType("nssi"); + serviceInstance.setModelInvariantId(modelInfoServiceInstance.getModelInvariantUuid()); + serviceInstance.setModelVersionId(modelInfoServiceInstance.getModelUuid()); + serviceInstance.setOperationalStatus("LOCKED"); + + Customer customer = getCustomer(execution); + + AAIResourceUri serviceInstanceURI = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(customer.getGlobalCustomerId()) + .serviceSubscription( + customer.getServiceSubscriptions().getServiceSubscription().get(0).getServiceType()) + .serviceInstance(serviceInstance.getServiceInstanceId())); + + injectionHelper.getAaiClient().createIfNotExists(serviceInstanceURI, Optional.of(serviceInstance)); + + } + + private boolean checkNSSI(BuildingBlockExecution execution) { + + Optional serviceInstance = aaiSliceProfileUtil.getServiceInstance(execution); + + + GeneralBuildingBlock gBB = execution.getGeneralBuildingBlock(); + + String serviceInstanceId = gBB.getServiceInstance().getServiceInstanceId(); + + List> mapUserParams = gBB.getRequestContext().getRequestParameters().getUserParams(); + + + Attributes attributes = null; + + for (Map userParamData : mapUserParams) { + if (userParamData.get("nssi") != null) { + Map mapParam = (Map) userParamData.get("nssi"); + attributes = mapper.convertValue(mapParam, Attributes.class); + } + } + if (attributes.getSliceProfileList().get(0).getRANSliceSubnetProfile().getResourceSharingLevel() + .equalsIgnoreCase("NON-SHARED")) + return true; + else + return false; + } + + + public void createSliceProfileInstance(BuildingBlockExecution execution) { + GeneralBuildingBlock gBB = execution.getGeneralBuildingBlock(); + + String serviceInstanceId = gBB.getServiceInstance().getServiceInstanceId(); + + Customer customer = getCustomer(execution); + + List> mapUserParams = gBB.getRequestContext().getRequestParameters().getUserParams(); + + + Attributes attributes = null; + + for (Map userParamData : mapUserParams) { + if (userParamData.get("nssi") != null) { + Map mapParam = (Map) userParamData.get("nssi"); + attributes = mapper.convertValue(mapParam, Attributes.class); + } + } + // Create SliceProfile Instance + ServiceInstance sliceProfileServiceInstance = new ServiceInstance(); + String sliceProfileInstanceId = UUID.randomUUID().toString(); + sliceProfileServiceInstance.setServiceInstanceId(sliceProfileInstanceId); + sliceProfileServiceInstance.setServiceInstanceName("slice-profile-" + serviceInstanceId); + sliceProfileServiceInstance.setServiceRole("slice-profile"); + + sliceProfileServiceInstance = + mapperUtil.fillSliceProfileInstanceFromMoiRequest(attributes, sliceProfileServiceInstance); + + AAIResourceUri serviceInstanceURI = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(customer.getGlobalCustomerId()) + .serviceSubscription( + customer.getServiceSubscriptions().getServiceSubscription().get(0).getServiceType()) + .serviceInstance(sliceProfileServiceInstance.getServiceInstanceId())); + + injectionHelper.getAaiClient().createIfNotExists(serviceInstanceURI, Optional.of(sliceProfileServiceInstance)); + + List> sliceProfilesData = gBB.getRequestContext().getRequestParameters().getUserParams(); + + // sliceProfile + SliceProfile sliceProfile = mapperUtil.extractAaiSliceProfileFromMoiRequest(attributes); + String sliceProfileId = UUID.randomUUID().toString(); + sliceProfile.setProfileId(sliceProfileId); + + AAIResourceUri sliceProfileURI = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(customer.getGlobalCustomerId()) + .serviceSubscription( + customer.getServiceSubscriptions().getServiceSubscription().get(0).getServiceType()) + .serviceInstance(sliceProfileInstanceId).sliceProfile(sliceProfile.getProfileId())); + + injectionHelper.getAaiClient().createIfNotExists(sliceProfileURI, Optional.of(sliceProfile)); + + execution.setVariable("sliceProfileServiceInstanceId", sliceProfileServiceInstance.getServiceInstanceId()); + } + + public void allotResources(BuildingBlockExecution execution) { + + GeneralBuildingBlock gBB = execution.getGeneralBuildingBlock(); + + String sliceProfileServiceInstanceId = execution.getVariable("sliceProfileServiceInstanceId"); + + LOGGER.debug("sliceProfileServiceInstanceId: {}", sliceProfileServiceInstanceId); + + Customer customer = getCustomer(execution); + + org.onap.aai.domain.yang.v23.AllottedResource allottedResource = + new org.onap.aai.domain.yang.v23.AllottedResource(); + + UUID allottedResourceUuid = UUID.randomUUID(); + allottedResource.setId(allottedResourceUuid.toString()); + + AAIResourceUri allotedResourceURI = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(customer.getGlobalCustomerId()) + .serviceSubscription( + customer.getServiceSubscriptions().getServiceSubscription().get(0).getServiceType()) + .serviceInstance(sliceProfileServiceInstanceId).allottedResource(allottedResource.getId())); + + injectionHelper.getAaiClient().createIfNotExists(allotedResourceURI, Optional.of(allottedResource)); + + execution.setVariable("allottedResourceUuid", allottedResource.getId()); + + } + + + public void addSliceProfileToNssi(BuildingBlockExecution execution) { + LOGGER.info("Entering into addSliceProfileToNssi"); + + String sliceProfileServiceInstanceId = execution.getVariable("sliceProfileServiceInstanceId"); + String allottedResourceUuid = execution.getVariable("allottedResourceUuid"); + GeneralBuildingBlock gBB = execution.getGeneralBuildingBlock(); + String serviceInstanceId = gBB.getServiceInstance().getServiceInstanceId(); + + Customer customer = getCustomer(execution); + + + AAIResourceUri nssiUri = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(customer.getGlobalCustomerId()) + .serviceSubscription( + customer.getServiceSubscriptions().getServiceSubscription().get(0).getServiceType()) + .serviceInstance(serviceInstanceId)); + + AAIResourceUri allotedResourceURI = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(customer.getGlobalCustomerId()) + .serviceSubscription( + customer.getServiceSubscriptions().getServiceSubscription().get(0).getServiceType()) + .serviceInstance(sliceProfileServiceInstanceId).allottedResource(allottedResourceUuid)); + + try { + injectionHelper.getAaiClient().connect(allotedResourceURI, nssiUri); + } catch (Exception e) { + LOGGER.error(">>>>> Error in creating Relationship: {} ", e); + } + } + + public void activateNssi(BuildingBlockExecution execution) { + GeneralBuildingBlock gBB = execution.getGeneralBuildingBlock(); + String serviceInstanceId = gBB.getServiceInstance().getServiceInstanceId(); + + Customer customer = getCustomer(execution); + + AAIResourceUri serviceInstanceURI = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(customer.getGlobalCustomerId()) + .serviceSubscription( + customer.getServiceSubscriptions().getServiceSubscription().get(0).getServiceType()) + .serviceInstance(serviceInstanceId)); + + Optional serviceInstanceReturned = + injectionHelper.getAaiClient().get(ServiceInstance.class, serviceInstanceURI); + + ServiceInstance serviceInstance = null; + if (serviceInstanceReturned.isPresent()) { + serviceInstance = serviceInstanceReturned.get(); + serviceInstance.setOperationalStatus("UNLOCKED"); + serviceInstance.setOrchestrationStatus("Active"); + + try { + injectionHelper.getAaiClient().update(serviceInstanceURI, serviceInstance); + } catch (Exception e) { + LOGGER.error("Nssi couldnot be activated: {}", e); + } + } else { + LOGGER.debug("Service Instance not present with Id: {}", serviceInstanceId); + } + + // SliceProfile + List sliceProfileList = new ArrayList(); + ServiceInstance serviceInstanceObj; + List listOfNssiRelationship = serviceInstance.getRelationshipList().getRelationship(); + + List listOfNssiRelationshipAR = listOfNssiRelationship.stream() + .filter(relationship -> relationship.getRelatedTo().equalsIgnoreCase("allotted-resource")) + .collect(Collectors.toList()); + + for (Relationship relationship : listOfNssiRelationshipAR) { + org.onap.so.moi.SliceProfile sliceProfile = new org.onap.so.moi.SliceProfile(); + for (RelationshipData relationshipData : relationship.getRelationshipData()) { + if (relationshipData.getRelationshipKey().equalsIgnoreCase("service-instance.service-instance-id")) { + String sliceProfileInstanceId = relationshipData.getRelationshipValue(); + + Optional sliceProfileServiceInstance = + aaiRestClient.getServiceInstanceById(sliceProfileInstanceId, "5G", "5GCustomer"); + if (sliceProfileServiceInstance.isPresent()) { + ServiceInstance sliceProflieInstance = sliceProfileServiceInstance.get(); + sliceProflieInstance.setOperationalStatus("UNLOCKED"); + sliceProflieInstance.setOrchestrationStatus("ACTIVE"); + + AAIResourceUri sliceProfileInstanceURI = AAIUriFactory.createResourceUri( + AAIFluentTypeBuilder.business().customer(customer.getGlobalCustomerId()) + .serviceSubscription(customer.getServiceSubscriptions().getServiceSubscription() + .get(0).getServiceType()) + .serviceInstance(sliceProflieInstance.getServiceInstanceId())); + try { + injectionHelper.getAaiClient().update(sliceProfileInstanceURI, sliceProflieInstance); + } catch (Exception e) { + LOGGER.error("SliceProfile couldnot be activated: {}", e); + } + } else { + LOGGER.debug("Slice Profile Instance not present with Id: {}", serviceInstanceId); + } + + + } + } + + } + } + + + private Customer getCustomer(BuildingBlockExecution execution) { + + GeneralBuildingBlock gBB = execution.getGeneralBuildingBlock(); + + String serviceType = gBB.getCustomer().getServiceSubscription().getServiceType(); + + String globalCustomerId = gBB.getCustomer().getGlobalCustomerId(); + + ServiceSubscription serviceSubscription = new ServiceSubscription(); + serviceSubscription.setServiceType(serviceType); + + ServiceSubscriptions serviceSubscriptions = new ServiceSubscriptions(); + serviceSubscriptions.getServiceSubscription().add(serviceSubscription); + + Customer customer = new Customer(); + customer.setGlobalCustomerId(globalCustomerId); + customer.setServiceSubscriptions(serviceSubscriptions); + + return customer; + + } + +}