From 2109b159bb28fc8eff6613b227fe7e5d5d8ae915 Mon Sep 17 00:00:00 2001 From: zm330 Date: Fri, 22 May 2020 10:05:26 +0800 Subject: Update NSI slection process Issue-ID: SO-2949 Signed-off-by: zm330 Change-Id: Ibb13fb6d146d5ef9dbe702c23294653276204f7a --- .../infrastructure/scripts/DoAllocateNSSI.groovy | 1 + .../scripts/DoCreateSliceServiceOption.groovy | 196 ++++++++++++--------- 2 files changed, 110 insertions(+), 87 deletions(-) (limited to 'bpmn') diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy index 570b6a5ed7..081dddab99 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy @@ -324,6 +324,7 @@ class DoAllocateNSSI extends org.onap.so.bpmn.common.scripts.AbstractServiceTask sliceProfile.setExpDataRate(0) sliceProfile.setTrafficDensity(0) sliceProfile.setConnDensity(0) + sliceProfile.setSNssai(sliceProfileMap.get("sNSSAI").toString()) sliceProfile.setExpDataRateUL(Integer.parseInt(sliceProfileMap.get("expDataRateUL").toString())) sliceProfile.setExpDataRateDL(Integer.parseInt(sliceProfileMap.get("expDataRateDL").toString())) sliceProfile.setActivityFactor(Integer.parseInt(sliceProfileMap.get("activityFactor").toString())) diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy index 5741a78ed4..ec9596e7f3 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy @@ -136,7 +136,6 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ String OOFResponse = httpResponse.readEntity(String.class) logger.debug("NSI OOFResponse is: " + OOFResponse) execution.setVariable("OOFResponse", OOFResponse) - int index = 0 //This needs to be changed to derive a value when we add policy to decide the solution options. Map OOFResponseObject = new JsonSlurper().parseText(OOFResponse) Map solutions = OOFResponseObject.get("solutions") @@ -145,41 +144,12 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ Boolean isSharable = resourceSharingLevel.equals("shared") if (solutions != null) { - if (isSharable) { + if (isSharable && hasSharedNSIsolutions(solutions)) { //sharedNSISolution processSharedNSISolutions(solutions, execution) - } else { - //TODO test OOF - if (solutions.containsKey("newNSISolutions")) { - List newNSISolutions = solutions.get("newNSISolutions") - List NSSImap = new ArrayList<>() - if (newNSISolutions != null && newNSISolutions.size() > 0) { - NSSImap = newNSISolutions.get(index).get("NSSISolutions") as List - } - for (Map nssi : NSSImap) { - def nssiSolution = nssi.get("NSSISolution") as Map - String nssiName = nssiSolution.getOrDefault("NSSIName", "") - String nssiId = nssiSolution.getOrDefault("NSSIId", "") - String domain = nssiSolution.getOrDefault("domainName", "").toString().toUpperCase() - switch (domain) { - case "AN": - sliceTaskParams.setAnSuggestNssiId(nssiId) - sliceTaskParams.setAnSuggestNssiName(nssiName) - break - case "CN": - sliceTaskParams.setCnSuggestNssiId(nssiId) - sliceTaskParams.setCnSuggestNssiName(nssiName) - break - case "TN": - sliceTaskParams.setTnSuggestNssiId(nssiId) - sliceTaskParams.setTnSuggestNssiName(nssiName) - break - default: - break - } - } - //TODO sliceProfile - } + } + else if(solutions.containsKey("newNSISolutions")) { + processNewNSISolutions(solutions, execution) } } execution.setVariable("sliceTaskParams", sliceTaskParams) @@ -188,17 +158,45 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ logger.debug("*** Completed options Call to OOF ***") } - private void processSharedNSISolutions(Map solutions, DelegateExecution execution) { - if (!solutions.containsKey("sharedNSISolutions")) - { - logger.error("OOF don't return sharedNSISolutions") - return + private boolean hasSharedNSIsolutions( Map solutions){ + if(solutions.containsKey("sharedNSISolutions")){ + List sharedNSIsolutions = solutions.get("sharedNSISolutions") + if (sharedNSIsolutions != null && !sharedNSIsolutions.isEmpty()) { + return true + } + } + return false + } + + private void processNewNSISolutions(Map solutions, DelegateExecution execution) { + int index = 0 + List newNSISolutions = solutions.get("newNSISolutions") + List NSSImap = new ArrayList<>() + if (newNSISolutions != null && newNSISolutions.size() > 0) { + NSSImap = newNSISolutions.get(index).get("NSSISolutions") as List + for (Map nssi : NSSImap) { + Map oofSliceProfile = nssi.get("sliceProfile") + String domain = oofSliceProfile.getOrDefault("domainType","") + logger.debug("OOF newNSISolutions SliceProfile: " +oofSliceProfile.toString()+",domain:${domain}") + if(null != domain){ + //TODO +// def nssiSolution = nssi.get("NSSISolution") as Map +// String nssiName = nssiSolution.getOrDefault("NSSIName", "") +// String nssiId = nssiSolution.getOrDefault("NSSIId", "") +// saveNSSIId(nssi, sliceTaskParams) + Map sliceProfile = getSliceProfile(domain, execution, oofSliceProfile) + saveSliceProfile(execution, domain, sliceProfile) + + } + } } + } + + private void processSharedNSISolutions(Map solutions, DelegateExecution execution) { String nsiName, nsiInstanceId, nssiId, nssiName - Map sliceProfile SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams") - Map sharedNSIsolution = ((List) solutions.get("sharedNSISolutions")).get(0) + Map sharedNSIsolution = ((List) solutions.get("sharedNSISolutions"))?.get(0) nsiInstanceId = sharedNSIsolution.getOrDefault("NSIId", "") nsiName = sharedNSIsolution.getOrDefault("NSIName", "") sliceTaskParams.setSuggestNsiId(nsiInstanceId) @@ -206,77 +204,102 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ //Temporary modification List NSSIs = sharedNSIsolution.get("NSSIs") - if(NSSIs.size()==1){ - Map nssi = NSSIs.get(0) + for(Map nssi : NSSIs){ + Map oofSliceProfile = ((List)nssi.get("sliceProfile"))?.get(0) + String domain = oofSliceProfile.getOrDefault("domainType","") nssiId = nssi.getOrDefault("NSSIId","") nssiName = nssi.getOrDefault("NSSIName","") - sliceTaskParams.setCnSuggestNssiId(nssiId) - //TODO Need update after OOF return camel key and domainType - sliceProfile = ((List)nssi.get("sliceProfile"))?.get(0) - sliceTaskParams.setCnSuggestNssiName(nssiName) -// execution.setVariable("sliceProfileCn", sliceProfile) -// sliceTaskParams.setSliceProfileCn(sliceProfile) + saveNSSIId(domain, nssiId, nssiName,execution) + Map sliceProfile = getSliceProfile(domain, execution, oofSliceProfile) + saveSliceProfile(execution, domain, sliceProfile) + logger.debug("OOF sharedNSISolution SliceProfile:"+oofSliceProfile.toString()+",domain:${domain}") + logger.debug("OOF sharedNSISolution nsiInstanceId:${nsiInstanceId}, nsiName:${nsiName}, nssiId:${nssiId}, nssiName:${nssiName}") } - logger.debug("OOF sharedNSISolution nsiInstanceId:${nsiInstanceId}, nsiName:${nsiName}, nssiId:${nssiId}, nssiName:${nssiName}") - logger.debug("OOF SliceProfile:"+sliceProfile.toString()) } - void parseServiceProfile(DelegateExecution execution) { + private void parseServiceProfile(DelegateExecution execution) { logger.debug("Start parseServiceProfile") String serviceType = execution.getVariable("serviceType") Map serviceProfile = execution.getVariable("serviceProfile") SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams") // set sliceProfile for three domains if(!sliceTaskParams.getSliceProfileAn()){ - Map sliceProfileAn = getSliceProfile(serviceType, "AN", serviceProfile) - execution.setVariable("sliceProfileAn", sliceProfileAn) - sliceTaskParams.setSliceProfileAn(sliceProfileAn) - logger.debug("sliceProfileAn: " + sliceProfileAn) + Map sliceProfileAn = getSliceProfile( "AN", execution,null) + saveSliceProfile(execution,"AN",sliceProfileAn) } if(!sliceTaskParams.getSliceProfileTn()){ - Map sliceProfileTn = getSliceProfile(serviceType, "TN", serviceProfile) - execution.setVariable("sliceProfileTn", sliceProfileTn) - sliceTaskParams.setSliceProfileTn(sliceProfileTn) - logger.debug("sliceProfileTn: " + sliceProfileTn) + Map sliceProfileTn = getSliceProfile( "TN", execution,null) + saveSliceProfile(execution,"TN",sliceProfileTn) } if(!sliceTaskParams.getSliceProfileCn()){ - Map sliceProfileCn = getSliceProfile(serviceType, "CN", serviceProfile) - execution.setVariable("sliceProfileCn", sliceProfileCn) - sliceTaskParams.setSliceProfileCn(sliceProfileCn) - logger.debug("sliceProfileCn: " + sliceProfileCn) + Map sliceProfileCn = getSliceProfile( "CN", execution,null, ) + saveSliceProfile(execution,"CN",sliceProfileCn) } logger.debug("Finish parseServiceProfile") } - Map getSliceProfile(String serviceType, String domain, Map serviceProfile) { + private void saveSliceProfile(DelegateExecution execution, String domain, Map sliceProfile){ + SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams") + if(domain.equalsIgnoreCase("AN")){ + execution.setVariable("sliceProfileAn", sliceProfile) + sliceTaskParams.setSliceProfileAn(sliceProfile) + logger.debug("sliceProfileAn: " + sliceProfile) + } + else if(domain.equalsIgnoreCase("TN")){ + execution.setVariable("sliceProfileTn", sliceProfile) + sliceTaskParams.setSliceProfileTn(sliceProfile) + logger.debug("sliceProfileTn: " + sliceProfile) + } + else if(domain.equalsIgnoreCase("CN")){ + execution.setVariable("sliceProfileCn", sliceProfile) + sliceTaskParams.setSliceProfileCn(sliceProfile) + logger.debug("sliceProfileCn: " + sliceProfile) + } + } + + private void saveNSSIId(String domain, String nssiId, String nssiName, DelegateExecution execution) { + SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams") + if(domain.equalsIgnoreCase("AN")){ + sliceTaskParams.setAnSuggestNssiId(nssiId) + sliceTaskParams.setAnSuggestNssiName(nssiName) + } + else if(domain.equalsIgnoreCase("CN")){ + sliceTaskParams.setCnSuggestNssiId(nssiId) + sliceTaskParams.setCnSuggestNssiName(nssiName) + } + else if(domain.equalsIgnoreCase("TN")){ + sliceTaskParams.setTnSuggestNssiId(nssiId) + sliceTaskParams.setTnSuggestNssiName(nssiName) + } + } + + private Map getSliceProfile(String domain, DelegateExecution execution, Map oofSliceProfile) { String profileMapStr + Map serviceProfile = execution.getVariable("serviceProfile") Integer domainLatency = (Integer) serviceProfile.get("latency")/3 - switch (domain) { - case "AN": - profileMapStr = """ { + if(domain.equalsIgnoreCase("AN")){ + profileMapStr = """ { "latency": ${domainLatency}, "sNSSAI": "sNSSAI", "uEMobilityLevel": "uEMobilityLevel", "coverageAreaTAList": "coverageAreaTAList", "5QI": 100 - } - """.trim().replaceAll(" ", "") - break - case "TN": - profileMapStr =""" { + }""" + } + else if(domain.equalsIgnoreCase("TN")){ + profileMapStr =""" { "latency":${domainLatency}, "sNSSAI":"sNSSAI", "e2eLatency":"latency", "bandwidth": 100 - } - """.trim().replaceAll(" ", "") - break - case "CN": - profileMapStr = """ { + }""" + } + else if(domain.equalsIgnoreCase("CN")){ + profileMapStr = """ { "areaTrafficCapDL":"areaTrafficCapDL", "maxNumberofUEs":"maxNumberofUEs", "latency":${domainLatency}, @@ -287,27 +310,26 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ "expDataRateDL":"expDataRateDL", "activityFactor":"activityFactor", "resourceSharingLevel":"resourceSharingLevel" - } - """.trim().replaceAll(" ", "") - break - default: - break - } + }""" + } logger.debug("Profile map for " + domain + " : " + profileMapStr) - Map profileMaps = objectMapper.readValue(profileMapStr, new TypeReference>(){}) + Map profileMaps = objectMapper.readValue(profileMapStr.trim().replaceAll(" ", ""), new TypeReference>(){}) Map sliceProfile = [:] for (Map.Entry profileMap : profileMaps) { String key = profileMap.key String value = profileMaps.get(key) - if(serviceProfile.keySet().contains(value)){ + if(null != oofSliceProfile && oofSliceProfile.keySet().contains(key)){ + sliceProfile.put(key, oofSliceProfile.get(key)) + logger.debug("Get from oof, key:${key}, value: ${oofSliceProfile.get(key)}") + } + else if(serviceProfile.keySet().contains(value)){ sliceProfile.put(key, serviceProfile.get(value)) } else{ sliceProfile.put(key, profileMaps.get(key)) } } - return sliceProfile } -- cgit 1.2.3-korg