X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=appc-outbound%2Fappc-aai-client%2Fprovider%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fappc%2Faai%2Fclient%2Faai%2FAaiService.java;h=76336c1de4e448fd678d09296f96ab9f563bd3f0;hb=3be4c991bc7d18e3d0bcf4b8524f5b93934242a8;hp=cb439ee1619e4f419d1408edf4e406c87de35c94;hpb=2a65f44fc463f204ef51367dff9a894ce0acceb8;p=appc.git diff --git a/appc-outbound/appc-aai-client/provider/src/main/java/org/onap/appc/aai/client/aai/AaiService.java b/appc-outbound/appc-aai-client/provider/src/main/java/org/onap/appc/aai/client/aai/AaiService.java index cb439ee16..76336c1de 100644 --- a/appc-outbound/appc-aai-client/provider/src/main/java/org/onap/appc/aai/client/aai/AaiService.java +++ b/appc-outbound/appc-aai-client/provider/src/main/java/org/onap/appc/aai/client/aai/AaiService.java @@ -18,12 +18,13 @@ * See the License for the specific language governing permissions and * limitations under the License. * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. * ============LICENSE_END========================================================= */ package org.onap.appc.aai.client.aai; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -34,16 +35,40 @@ import org.onap.appc.aai.client.AppcAaiClientConstant; import org.onap.ccsdk.sli.adaptors.aai.AAIClient; import org.onap.ccsdk.sli.adaptors.aai.AAIService; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; import org.onap.ccsdk.sli.core.sli.SvcLogicResource; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.ServiceReference; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; public class AaiService { private static final EELFLogger log = EELFManager.getInstance().getLogger(AaiService.class); + private static final String STR_VNF_ID = "generic-vnf.vnf-id = '"; + private static final String STR_VNFC_REF = "vnfcReference["; + private static final String STR_VNFC_REF_KEY = "VNFCREFKEY "; + private static final String STR_AAI_REF_KEY = "AAIREFKEY "; + private static final String STR_RELATIONSHIP_LIST = ".relationship-list.relationship["; + private static final String STR_VNFC_NAME = "vnfc.vnfc-name = '"; + private static final String QUERY_STR_VNFC_NAME = "VNFCNAME IN INSERTVNFCS "; + + private static final String PARAM_GENERIC_VNF = "generic-vnf"; + private static final String PARAM_VNF_INFO = "vnfInfo"; + private static final String PARAM_VSERVER = "vserver"; + private static final String PARAM_VM_INFO = "vmInfo"; + private static final String PARAM_PROV_STATUS = "prov-status"; + private static final String PARAM_VAL_NVTPROV = "NVTPROV"; + + private static final String ATTR_VSERVER_ID = "vserver-id"; + private static final String ATTR_TENANT_ID = "tenant-id"; + private static final String ATTR_CLOUD_OWNER = "cloud-owner"; + private static final String ATTR_CLOUD_REGION_ID = "cloud-region-id"; + private static final String ATTR_VNFC_COUNT = "vm.vnfc-count"; + private static final String ATTR_VNFC_NAME = "vnfc-name"; + private static final String ATTR_VNFC_FUNC_CODE = "VNFC-FUNCTION-CODE"; + private static final String ATTR_VSERVER_NAME = "vserver-name"; + private static final String ATTR_VNF_ID = "vnf-id"; + private AAIClient aaiClient; public AaiService(AAIClient aaiClient) { @@ -56,18 +81,17 @@ public class AaiService { aaiClient = (AAIClient) bctx.getService(sref); } - public void getGenericVnfInfo(Map params, SvcLogicContext ctx) throws Exception { + public void getGenericVnfInfo(Map params, SvcLogicContext ctx) + throws AaiServiceInternalException, SvcLogicException { String vnfId = params.get("vnfId"); if (StringUtils.isBlank(vnfId)) { - throw new Exception("VnfId is missing"); + throw new AaiServiceInternalException("VnfId is missing"); } String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : ""; - String resourceKey = "generic-vnf.vnf-id = '" + vnfId + "'"; - String resourceType = "generic-vnf"; - String queryPrefix = "vnfInfo"; - SvcLogicContext vnfCtx = readResource(resourceKey, queryPrefix, resourceType); + String resourceKey = STR_VNF_ID + vnfId + "'"; + SvcLogicContext vnfCtx = readResource(resourceKey, PARAM_VNF_INFO, PARAM_GENERIC_VNF); ctx.setAttribute(prefix + "vnf.vnf-name", vnfCtx.getAttribute("vnfInfo.vnf-name")); ctx.setAttribute(prefix + "vnf.vnf-type", vnfCtx.getAttribute("vnfInfo.vnf-type")); @@ -83,18 +107,19 @@ public class AaiService { } log.info("RELLEN " + relationshipLength); for (int i = 0; i < relationshipLength; i++) { - String vserverId = getRelationshipValue(i, vnfCtx, "vserver", "vserver.vserver-id", "vnfInfo"); - String tenantId = getRelationshipValue(i, vnfCtx, "vserver", "tenant.tenant-id", "vnfInfo"); - String cloudOwner = getRelationshipValue(i, vnfCtx, "vserver", "cloud-region.cloud-owner", "vnfInfo"); + String vserverId = getRelationshipValue(i, vnfCtx, PARAM_VSERVER, "vserver.vserver-id", PARAM_VNF_INFO); + String tenantId = getRelationshipValue(i, vnfCtx, PARAM_VSERVER, "tenant.tenant-id", PARAM_VNF_INFO); + String cloudOwner = getRelationshipValue(i, vnfCtx, PARAM_VSERVER, "cloud-region.cloud-owner", + PARAM_VNF_INFO); String cloudRegionId = - getRelationshipValue(i, vnfCtx, "vserver", "cloud-region.cloud-region-id", "vnfInfo"); + getRelationshipValue(i, vnfCtx, PARAM_VSERVER, "cloud-region.cloud-region-id", PARAM_VNF_INFO); if (vserverId != null) { log.info("VSERVER KEYS " + vserverId + " " + tenantId + " " + cloudOwner + " " + cloudRegionId); String vnfPrefix = prefix + "vm[" + vmCount + "]."; - ctx.setAttribute(vnfPrefix + "vserver-id", vserverId); - ctx.setAttribute(vnfPrefix + "tenant-id", tenantId); - ctx.setAttribute(vnfPrefix + "cloud-owner", cloudOwner); - ctx.setAttribute(vnfPrefix + "cloud-region-id", cloudRegionId); + ctx.setAttribute(vnfPrefix + ATTR_VSERVER_ID, vserverId); + ctx.setAttribute(vnfPrefix + ATTR_TENANT_ID, tenantId); + ctx.setAttribute(vnfPrefix + ATTR_CLOUD_OWNER, cloudOwner); + ctx.setAttribute(vnfPrefix + ATTR_CLOUD_REGION_ID, cloudRegionId); vmCount++; } } @@ -102,80 +127,78 @@ public class AaiService { log.info("VMCOUNT FROM VNF INFO " + ctx.getAttribute(prefix + "vm-count")); } - public void getVMInfo(Map params, SvcLogicContext ctx) throws Exception { - log.info("Received getVmInfo call with params : " + params); - String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); - prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : ""; - int vnfcCount = 0; - ctx.setAttribute(prefix + "vm.vnfc-count", String.valueOf(vnfcCount)); // Incase no vnfcs are found - String vserverId = params.get("vserverId"); - if (StringUtils.isBlank(vserverId)) { - throw new Exception("VServerId is missing"); - } - String tenantId = params.get("tenantId"); - if (StringUtils.isBlank(tenantId)) { - throw new Exception("TenantId is missing"); - } - String cloudOwner = params.get("cloudOwner"); - if (StringUtils.isBlank(cloudOwner)) { - throw new Exception("Cloud Owner is missing"); - } - String cloudRegionId = params.get("cloudRegionId"); - if (StringUtils.isBlank(cloudRegionId)) { - throw new Exception("Cloud region Id is missing"); - } - String resourceKey = "vserver.vserver-id = '" + vserverId + "' AND tenant.tenant-id = '" + tenantId - + "' AND cloud-region.cloud-owner = '" + cloudOwner + "' AND cloud-region.cloud-region-id = '" - + cloudRegionId + "'"; - String queryPrefix = "vmInfo"; - String resourceType = "vserver"; - SvcLogicContext vmCtx = readResource(resourceKey, queryPrefix, resourceType); + public void getVMInfo(Map params, SvcLogicContext ctx) + throws SvcLogicException { + + try { + log.info("Received getVmInfo call with params : " + params); + String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); + prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : ""; + int vnfcCount = 0; + ctx.setAttribute(prefix + ATTR_VNFC_COUNT, String.valueOf(vnfcCount)); // In case no vnfcs are found + + VServerInfo vServerInfo = new VServerInfo(params); + + String resourceKey = + "vserver.vserver-id = '" + vServerInfo.getVserverId() + "' AND tenant.tenant-id = '" + vServerInfo + .getTenantId() + + "' AND cloud-region.cloud-owner = '" + vServerInfo.getCloudOwner() + + "' AND cloud-region.cloud-region-id = '" + + vServerInfo.getCloudRegionId() + "'"; + + SvcLogicContext vmCtx = readResource(resourceKey, PARAM_VM_INFO, PARAM_VSERVER); + ctx.setAttribute(prefix + "vm.prov-status", vmCtx.getAttribute("vmInfo.prov-status")); + ctx.setAttribute(prefix + "vm.vserver-name", vmCtx.getAttribute("vmInfo.vserver-name")); + ctx.setAttribute(prefix + "vm.vserver-selflink", vmCtx.getAttribute("vmInfo.vserver-selflink")); + + String relLen = vmCtx.getAttribute("vmInfo.relationship-list.relationship_length"); + int relationshipLength = 0; + if (relLen != null) { + relationshipLength = Integer.parseInt(relLen); + } + log.info("RELLEN" + relationshipLength); + for (int i = 0; i < relationshipLength; i++) { + String vfModuleId = getRelationshipValue(i, vmCtx, "vf-module", "vf-module.vf-module-id", + PARAM_VM_INFO); + if (vfModuleId != null) { + ctx.setAttribute(prefix + "vm.vf-module-id", vfModuleId); + } - ctx.setAttribute(prefix + "vm.prov-status", vmCtx.getAttribute("vmInfo.prov-status")); - ctx.setAttribute(prefix + "vm.vserver-name", vmCtx.getAttribute("vmInfo.vserver-name")); + String vnfcName = getRelationshipValue(i, vmCtx, "vnfc", "vnfc.vnfc-name", PARAM_VM_INFO); + if (vnfcName != null) { + ctx.setAttribute(prefix + "vm.vnfc[" + vnfcCount + "].vnfc-name", vnfcName); + vnfcCount++; + } - String relLen = vmCtx.getAttribute("vmInfo.relationship-list.relationship_length"); - int relationshipLength = 0; - if (relLen != null) { - relationshipLength = Integer.parseInt(relLen); + } // relationshipLength + ctx.setAttribute(prefix + ATTR_VNFC_COUNT, String.valueOf(vnfcCount)); + log.info("VSERVERNAME " + ctx.getAttribute(prefix + "vm.vserver-name") + " HAS NUM VNFCS = " + + ctx.getAttribute(prefix + ATTR_VNFC_COUNT)); + } catch (Exception e) { + log.error("An error occurred when fetching Vm info", e); + throw new SvcLogicException("Failed to fetch VM info", e); } - log.info("RELLEN" + relationshipLength); - for (int i = 0; i < relationshipLength; i++) { - String vfModuleId = getRelationshipValue(i, vmCtx, "vf-module", "vf-module.vf-module-id", "vmInfo"); - if (vfModuleId != null) - ctx.setAttribute(prefix + "vm.vf-module-id", vfModuleId); - - String vnfcName = getRelationshipValue(i, vmCtx, "vnfc", "vnfc.vnfc-name", "vmInfo"); - if (vnfcName != null) { - ctx.setAttribute(prefix + "vm.vnfc[" + vnfcCount + "].vnfc-name", vnfcName); - vnfcCount++; - } - - } // relationshipLength - ctx.setAttribute(prefix + "vm.vnfc-count", String.valueOf(vnfcCount)); - log.info("VSERVERNAME " + ctx.getAttribute(prefix + "vm.vserver-name") + " HAS NUM VNFCS = " - + ctx.getAttribute(prefix + "vm.vnfc-count")); } private String getRelationshipValue(int i, SvcLogicContext ctx, String relatedTo, String relationshipKey, - String prefix) throws Exception { + String prefix) { - if (relatedTo.equals(ctx.getAttribute(prefix + ".relationship-list.relationship[" + i + "].related-to"))) { + if (relatedTo.equals(ctx.getAttribute(prefix + STR_RELATIONSHIP_LIST + i + "].related-to"))) { log.info("RELATEDTO " + relatedTo); int relationshipDataLength = 0; String relDataLen = - ctx.getAttribute(prefix + ".relationship-list.relationship[" + i + "].relationship-data_length"); + ctx.getAttribute(prefix + STR_RELATIONSHIP_LIST + i + "].relationship-data_length"); if (relDataLen != null) { relationshipDataLength = Integer.parseInt(relDataLen); } for (int j = 0; j < relationshipDataLength; j++) { - String key = ctx.getAttribute(prefix + ".relationship-list.relationship[" + i + "].relationship-data[" - + j + "].relationship-key"); + String key = ctx.getAttribute(prefix + STR_RELATIONSHIP_LIST + i + "].relationship-data[" + + j + "].relationship-key"); - String value = ctx.getAttribute(prefix + ".relationship-list.relationship[" + i + "].relationship-data[" - + j + "].relationship-value"); + String value = ctx.getAttribute(prefix + STR_RELATIONSHIP_LIST + i + "].relationship-data[" + + j + "].relationship-value"); log.info("GENERIC KEY " + key); log.info("GENERIC VALUE " + value); @@ -190,7 +213,8 @@ public class AaiService { return null; } - public void getVnfcInfo(Map params, SvcLogicContext ctx) throws Exception { + public void getVnfcInfo(Map params, SvcLogicContext ctx) + throws AaiServiceInternalException, SvcLogicException { log.info("Received getVnfc call with params : " + params); String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); @@ -198,13 +222,11 @@ public class AaiService { String vnfcName = params.get("vnfcName"); if (StringUtils.isBlank(vnfcName)) { - throw new Exception("Vnfc Name is missing"); + throw new AaiServiceInternalException("Vnfc Name is missing"); } - String resourceKey = "vnfc.vnfc-name = '" + vnfcName + "'"; - String queryPrefix = "vnfcInfo"; - String resourceType = "vnfc"; - SvcLogicContext vnfcCtx = readResource(resourceKey, queryPrefix, resourceType); + String resourceKey = STR_VNFC_NAME + vnfcName + "'"; + SvcLogicContext vnfcCtx = readResource(resourceKey, "vnfcInfo", "vnfc"); // Changes for US 315820 for 1710 vnfc-type renamed to nfc-function,vnfc-function-code renamed to // nfc-naming-code @@ -216,8 +238,9 @@ public class AaiService { } - public void insertVnfcs(Map params, SvcLogicContext ctx, int vnfcRefLen, int vmCount) - throws Exception { + public void insertVnfcs(Map params, SvcLogicContext ctx, int vnfcRefLen, int vmCount, + String vfModuleIdFromRequest) + throws AaiServiceInternalException, SvcLogicException { log.info("Received insertVnfcs call with params : " + params); String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); @@ -228,33 +251,43 @@ public class AaiService { for (int i = 0; i < vmCount; i++) { String aaiRefKey = prefix + "vm[" + i + "]."; - log.info("VNFCNAME IN INSERTVNFCS " + ctx.getAttribute(aaiRefKey + "vnfc-name")); - String vnfcNameAAI = ctx.getAttribute(aaiRefKey + "vnfc-name"); + //ConfigScaleOut - Do not process vms that are not associated with vfmodule id if vfmodule id is present + if (StringUtils.isNotBlank(vfModuleIdFromRequest)) { + String vmVfModuleId = ctx.getAttribute(aaiRefKey + "vf-module-id"); + log.info("insertVnfcs():::vfModule for vm is=" + vmVfModuleId); + if (StringUtils.isBlank(vmVfModuleId) || !StringUtils + .equalsIgnoreCase(vmVfModuleId, vfModuleIdFromRequest)) { + continue; + } + } + + log.info(QUERY_STR_VNFC_NAME + ctx.getAttribute(aaiRefKey + ATTR_VNFC_NAME)); + String vnfcNameAAI = ctx.getAttribute(aaiRefKey + ATTR_VNFC_NAME); // Get Vnfc_reference data from the table - String vnfcRefKey = "vnfcReference[" + vnfcRefIndx + "]."; + String vnfcRefKey = STR_VNFC_REF + vnfcRefIndx + "]."; - log.info("VNFCREFKEY " + vnfcRefKey); - log.info("AAIREFKEY " + aaiRefKey); + log.info(STR_VNFC_REF_KEY + vnfcRefKey); + log.info(STR_AAI_REF_KEY + aaiRefKey); String groupNotationType = ctx.getAttribute(vnfcRefKey + "GROUP-NOTATION-TYPE"); String groupNotationValue = ctx.getAttribute(vnfcRefKey + "GROUP-NOTATION-VALUE"); String vnfcType = ctx.getAttribute(vnfcRefKey + "VNFC-TYPE"); - String vnfcFuncCode = ctx.getAttribute(vnfcRefKey + "VNFC-FUNCTION-CODE"); + String vnfcFuncCode = ctx.getAttribute(vnfcRefKey + ATTR_VNFC_FUNC_CODE); String populateIpAddressV4OamVip = ctx.getAttribute(vnfcRefKey + "IPADDRESS-V4-OAM-VIP"); // Get vnfc Data to be added - String vserverName = ctx.getAttribute(aaiRefKey + "vserver-name"); + String vserverName = ctx.getAttribute(aaiRefKey + ATTR_VSERVER_NAME); String vnfcName = vserverName + vnfcFuncCode + "001"; String groupNotation = getGroupNotation(groupNotationType, groupNotationValue, vnfcName, vserverName, - prefix, ctx, vnfcType); + prefix, ctx, vnfcType, vnfcFuncCode, vmCount); String ipAddressV4OamVip = null; if ("Y".equals(populateIpAddressV4OamVip)) { ipAddressV4OamVip = ctx.getAttribute("vnf-host-ip-address"); // from input } Map vnfcParams = - populateVnfcParams(ctx, aaiRefKey, ipAddressV4OamVip, groupNotation, vnfcType, vnfcFuncCode); + populateVnfcParams(ctx, aaiRefKey, ipAddressV4OamVip, groupNotation, vnfcType, vnfcFuncCode); log.info("Vnfc name from AAI: " + vnfcNameAAI); log.info("Vnfc name generated: " + vnfcName); @@ -270,38 +303,36 @@ public class AaiService { addVnfc(vnfcName, vnfcParams, prefix); // Add VNFC Info to context for current added VNFC - ctx.setAttribute(aaiRefKey + "vnfc-name", vnfcName); + ctx.setAttribute(aaiRefKey + ATTR_VNFC_NAME, vnfcName); ctx.setAttribute(aaiRefKey + "vnfc-type", vnfcType); ctx.setAttribute(aaiRefKey + "vnfc-function-code", vnfcFuncCode); ctx.setAttribute(aaiRefKey + "group-notation", groupNotation); } } - public List getVnfcData(Map params, SvcLogicContext ctx, int vnfcRefLen, int vmCount) - throws Exception { + public List getVnfcData(Map params, SvcLogicContext ctx, int vnfcRefLen, int vmCount) { String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : ""; - List vnfcNames = new ArrayList(); + List vnfcNames = new ArrayList<>(); int vnfcRefIndx = -1; for (int i = 0; i < vmCount; i++) { String aaiRefKey = prefix + "vm[" + i + "]."; - log.info("VNFCNAME IN INSERTVNFCS " + ctx.getAttribute(aaiRefKey + "vnfc-name")); - if (ctx.getAttribute(aaiRefKey + "vnfc-name") != null) { + log.info(QUERY_STR_VNFC_NAME + ctx.getAttribute(aaiRefKey + ATTR_VNFC_NAME)); + if (ctx.getAttribute(aaiRefKey + ATTR_VNFC_NAME) != null) { continue; } else { vnfcRefIndx++; } - String vnfcRefKey = "vnfcReference[" + vnfcRefIndx + "]."; - log.info("VNFCREFKEY " + vnfcRefKey); - log.info("AAIREFKEY " + aaiRefKey); - String vnfcFuncCode = ctx.getAttribute(vnfcRefKey + "VNFC-FUNCTION-CODE"); + String vnfcRefKey = STR_VNFC_REF + vnfcRefIndx + "]."; + log.info(STR_VNFC_REF_KEY + vnfcRefKey); + log.info(STR_AAI_REF_KEY + aaiRefKey); + String vnfcFuncCode = ctx.getAttribute(vnfcRefKey + ATTR_VNFC_FUNC_CODE); // Get vnfc Data to be added - String vserverName = ctx.getAttribute(aaiRefKey + "vserver-name"); + String vserverName = ctx.getAttribute(aaiRefKey + ATTR_VSERVER_NAME); String vnfcName = vserverName + vnfcFuncCode + "001"; - vnfcNames.add(vnfcName); } @@ -309,75 +340,78 @@ public class AaiService { } private Map populateVnfcParams(SvcLogicContext ctx, String aaiRefKey, String ipAddressV4OamVip, - String groupNotation, String vnfcType, String vnfcFuncCode) throws Exception { + String groupNotation, String vnfcType, String vnfcFuncCode) { - Map vnfcParams = new HashMap(); + Map vnfcParams = new HashMap<>(); // Changes for vnfc-type renamed to nfc-function,vnfc-function-code renamed to // nfc-naming-code vnfcParams.put("nfc-naming-code", vnfcFuncCode); vnfcParams.put("nfc-function", vnfcType); vnfcParams.put("ipaddress-v4-oam-vip", ipAddressV4OamVip); - vnfcParams.put("prov-status", "NVTPROV"); + vnfcParams.put(PARAM_PROV_STATUS, PARAM_VAL_NVTPROV); vnfcParams.put("orchestration-status", "CONFIGURED"); vnfcParams.put("in-maint", "false"); vnfcParams.put("is-closed-loop", "false"); vnfcParams.put("group-notation", groupNotation); - vnfcParams.put("relationship-list.relationship[0].related-to", "vserver"); + vnfcParams.put("relationship-list.relationship[0].related-to", PARAM_VSERVER); vnfcParams.put("relationship-list.relationship[0].relationship-data[0].relationship-key", "vserver.vserver-id"); vnfcParams.put("relationship-list.relationship[0].relationship-data[0].relationship-value", - ctx.getAttribute(aaiRefKey + "vserver-id")); + ctx.getAttribute(aaiRefKey + ATTR_VSERVER_ID)); vnfcParams.put("relationship-list.relationship[0].relationship-data[1].relationship-key", "tenant.tenant-id"); vnfcParams.put("relationship-list.relationship[0].relationship-data[1].relationship-value", - ctx.getAttribute(aaiRefKey + "tenant-id")); + ctx.getAttribute(aaiRefKey + ATTR_TENANT_ID)); vnfcParams.put("relationship-list.relationship[0].relationship-data[2].relationship-key", - "cloud-region.cloud-owner"); + "cloud-region.cloud-owner"); vnfcParams.put("relationship-list.relationship[0].relationship-data[2].relationship-value", - ctx.getAttribute(aaiRefKey + "cloud-owner")); + ctx.getAttribute(aaiRefKey + ATTR_CLOUD_OWNER)); vnfcParams.put("relationship-list.relationship[0].relationship-data[3].relationship-key", - "cloud-region.cloud-region-id"); + "cloud-region.cloud-region-id"); vnfcParams.put("relationship-list.relationship[0].relationship-data[3].relationship-value", - ctx.getAttribute(aaiRefKey + "cloud-region-id")); - vnfcParams.put("relationship-list.relationship[1].related-to", "generic-vnf"); + ctx.getAttribute(aaiRefKey + ATTR_CLOUD_REGION_ID)); + vnfcParams.put("relationship-list.relationship[1].related-to", PARAM_GENERIC_VNF); vnfcParams.put("relationship-list.relationship[1].relationship-data[0].relationship-key", "generic-vnf.vnf-id"); vnfcParams.put("relationship-list.relationship[1].relationship-data[0].relationship-value", - ctx.getAttribute("vnf-id")); + ctx.getAttribute(ATTR_VNF_ID)); vnfcParams.put("relationship-list.relationship[2].related-to", "vf-module"); vnfcParams.put("relationship-list.relationship[2].relationship-data[0].relationship-key", "generic-vnf.vnf-id"); vnfcParams.put("relationship-list.relationship[2].relationship-data[0].relationship-value", - ctx.getAttribute("vnf-id")); + ctx.getAttribute(ATTR_VNF_ID)); vnfcParams.put("relationship-list.relationship[2].relationship-data[1].relationship-key", - "vf-module.vf-module-id"); + "vf-module.vf-module-id"); vnfcParams.put("relationship-list.relationship[2].relationship-data[1].relationship-value", - ctx.getAttribute(aaiRefKey + "vf-module-id")); + ctx.getAttribute(aaiRefKey + "vf-module-id")); return vnfcParams; } - public void addVnfc(String vnfcName, Map params, String prefix) throws Exception { + public void addVnfc(String vnfcName, Map params, String prefix) + throws AaiServiceInternalException, SvcLogicException { + log.info("Received addVnfc call with vnfcName : " + vnfcName); log.info("Received addVnfc call with params : " + params); - String resourceKey = "vnfc.vnfc-name = '" + vnfcName + "'"; + String resourceKey = STR_VNFC_NAME + vnfcName + "'"; log.info("Received addVnfc call with resourceKey : " + resourceKey); SvcLogicContext vnfcCtx = new SvcLogicContext(); SvcLogicResource.QueryStatus response = - aaiClient.save("vnfc", true, false, resourceKey, params, prefix, vnfcCtx); + aaiClient.save("vnfc", true, false, resourceKey, params, prefix, vnfcCtx); if (SvcLogicResource.QueryStatus.SUCCESS.equals(response)) { log.info("Added VNFC SUCCESSFULLY " + vnfcName); } else if (SvcLogicResource.QueryStatus.FAILURE.equals(response)) { - throw new Exception("VNFC Add failed for for vnfc_name " + vnfcName); + throw new AaiServiceInternalException("VNFC Add failed for vnfc_name " + vnfcName); } } public String getGroupNotation(String groupNotationType, String groupNotationValue, String vnfcName, - String vserverName, String prefix, SvcLogicContext ctx, String vnfcRefVnfcType) throws Exception { + String vserverName, String prefix, SvcLogicContext ctx, String vnfcRefVnfcType, String vnfcFuncCode, + int vmCount) { - String grpNotation = null; + String groupNotation = null; if ("fixed-value".equals(groupNotationType)) { - grpNotation = groupNotationValue; + groupNotation = groupNotationValue; } else if ("first-vnfc-name".equals(groupNotationType)) { /* @@ -398,13 +432,7 @@ public class AaiService { log.info("RETURNED FIRSTVNFCNAME" + tmpVnfcName); log.info("CURRENTVNFCNAME" + vnfcName); - if (tmpVnfcName == null) { - log.info("CURRENTVNFCNAME" + vnfcName); - // No Vnfcs currently exist. Use Current vnfcName - grpNotation = vnfcName + groupNotationValue; - } else { - grpNotation = tmpVnfcName + groupNotationValue; - } + groupNotation = resolveGroupNotation(groupNotationValue, vnfcName, tmpVnfcName); } else if ("relative-value".equals(groupNotationType)) { /* @@ -418,11 +446,10 @@ public class AaiService { // next and same cant be defined for first VM. if next will not generate grpNotation if Prior is not a // number - String tmpVserverName = null; + String tmpVserverName; if (vserverName != null) { String vmNamePrefix = vserverName.substring(0, vserverName.length() - 3); - String lastThreeChars = vserverName.substring(vserverName.length() - 3); if (NumberUtils.isDigits(lastThreeChars)) { @@ -434,21 +461,77 @@ public class AaiService { tmpVserverName = vmNamePrefix + formatted; String priorGroupNotation = getGroupNotationForVServer(ctx, prefix, tmpVserverName); + groupNotation = resolveGroupNotation(groupNotationValue, priorGroupNotation); + } + } + } else if ("existing-value".equals(groupNotationType)) { + /* This is a new value being added. Find the existing vnfc records in A&AI inventory with the same vnfc-function code as the value in vnfc_reference table. + * Verify that the group-notation value is the same for all such records found in inventory. + * if all records do not have the same group-notation value, write the new vnfc record to A&AI inventory without a group-notation value and continue to the next VM in the vnfc_reference table. A 501 intermediate error message should be sent after all new VNFC records have been added to A&AI. + * If all records match, use the same group-notation value for the new vnfc record as found in the existing vnfc records. + */ + groupNotation = getGroupNotationForExistigValue(ctx, prefix, vnfcFuncCode, vmCount); + } - if ("same".equals(groupNotationValue)) { - grpNotation = priorGroupNotation; - } else if ("next".equals(groupNotationValue)) { - if (priorGroupNotation != null && NumberUtils.isDigits(priorGroupNotation)) { - int nextGrpNotation = Integer.parseInt(priorGroupNotation) + 1; - grpNotation = String.valueOf(nextGrpNotation); - } + log.info("RETURNED GROUPNOTATION " + groupNotation); + return groupNotation; + } + + private String resolveGroupNotation(String groupNotationValue, String vnfcName, String tmpVnfcName) { + if (tmpVnfcName == null) { + log.info("CURRENTVNFCNAME" + vnfcName); + // No Vnfcs currently exist. Use Current vnfcName + return vnfcName + groupNotationValue; + } else { + return tmpVnfcName + groupNotationValue; + } + } + + private String resolveGroupNotation(String groupNotationValue, String priorGroupNotation) { + if ("same".equals(groupNotationValue)) { + return priorGroupNotation; + } else if ("next".equals(groupNotationValue) && priorGroupNotation != null + && NumberUtils.isDigits(priorGroupNotation)) { + + int nextGrpNotation = Integer.parseInt(priorGroupNotation) + 1; + return String.valueOf(nextGrpNotation); + } + return null; + } + + public String getGroupNotationForExistigValue(SvcLogicContext ctx, String prefix, String vnfcFuncCode, + int vmCount) { + String vfModuleId = ctx.getAttribute("req-vf-module-id"); //Coming from request-params + boolean first = true; + String aaiGroupNotationValue = null; + for (int i = 0; i < vmCount; i++) { + String ind = "tmp.vnfInfo.vm[" + i + "]."; + String aaiFuncCode = ctx.getAttribute(ind + "vnfc-function-code"); + String aaiGroupNotation = ctx.getAttribute(ind + "group-notation"); + String aaiVfModuleId = ctx.getAttribute(ind + "vf-module-id"); + + log.info("getGroupNotationForExistigValue()::: vfModuleId=" + vfModuleId + ", aaiFuncCode=" + aaiFuncCode + + ", aaiGroupNotation=" + aaiGroupNotation + ",aaiVfMOduleId=" + aaiVfModuleId); + + if (StringUtils.isNotBlank(aaiFuncCode) && aaiFuncCode.equals(vnfcFuncCode) && + (StringUtils.isNotBlank(vfModuleId) && StringUtils.isNotBlank(aaiVfModuleId) && aaiVfModuleId + .equals(vfModuleId))) { + if (null == aaiGroupNotationValue && first) { + if (null == aaiGroupNotation) {//Return if null + return null; + } + aaiGroupNotationValue = ctx.getAttribute(ind + "group-notation"); + first = false; + } else { + if (!StringUtils.equals(aaiGroupNotationValue, ctx.getAttribute(ind + "group-notation"))) { + log.info("Values are different, returning null"); + return null; } } } } - log.info("RETURNED GROUPNOTATION " + grpNotation); - return grpNotation; + return aaiGroupNotationValue; } public String getGroupNotationForVServer(SvcLogicContext ctx, String prefix, String vserverName) { @@ -459,7 +542,7 @@ public class AaiService { return null; } - int vmCount = Integer.valueOf(vmCountStr); + int vmCount = Integer.parseInt(vmCountStr); for (int i = 0; i < vmCount; i++) { String tmpVserver = ctx.getAttribute(prefix + "vm[" + i + "].vserver-name"); @@ -468,19 +551,16 @@ public class AaiService { return ctx.getAttribute(prefix + "vm[" + i + "].group-notation"); } } // vmCount - return null; } public String getFirstVnfcNameForVnfcType(SvcLogicContext ctx, String prefix, String vnfcRefVnfcType) { String vmCountStr = ctx.getAttribute(prefix + "vnf.vm-count"); - if (vmCountStr == null) { return null; } - - int vmCount = Integer.valueOf(vmCountStr); + int vmCount = Integer.parseInt(vmCountStr); for (int i = 0; i < vmCount; i++) { String tmpvnfcType = ctx.getAttribute(prefix + "vm[" + i + "].vnfc-type"); @@ -492,57 +572,56 @@ public class AaiService { return null; } - public void updateVServerStatus(Map params, SvcLogicContext ctx, int vmCount) throws Exception { + public void updateVServerStatus(Map params, SvcLogicContext ctx, int vmCount) + throws AaiServiceInternalException, SvcLogicException { log.info("Received updateVServerStatus call with params : " + params); String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : ""; - Map vServerParams = new HashMap(); + Map vServerParams = new HashMap<>(); // TODO - Should this just update prov-status or both? What about generic-vnf status? Will that be updated by // Dispatcher? - vServerParams.put("prov-status", "NVTPROV"); + vServerParams.put(PARAM_PROV_STATUS, PARAM_VAL_NVTPROV); for (int i = 0; i < vmCount; i++) { String aaiRefKey = prefix + "vm[" + i + "]."; - log.info("VNFCNAME IN UpdateVServer " + ctx.getAttribute(aaiRefKey + "vnfc-name")); + log.info("VNFCNAME IN UpdateVServer " + ctx.getAttribute(aaiRefKey + ATTR_VNFC_NAME)); - if (ctx.getAttribute(aaiRefKey + "vnfc-name") != null) { + if (ctx.getAttribute(aaiRefKey + ATTR_VNFC_NAME) != null) { continue; } - String resourceKey = "vserver.vserver-id = '" + ctx.getAttribute(aaiRefKey + "vserver-id") + "'" - + " AND tenant.tenant-id = '" + ctx.getAttribute(aaiRefKey + "tenant-id") + "'" - + " AND cloud-region.cloud-owner = '" + ctx.getAttribute(aaiRefKey + "cloud-owner") + "'" - + " AND cloud-region.cloud-region-id = '" + ctx.getAttribute(aaiRefKey + "cloud-region-id") + "'"; + String resourceKey = "vserver.vserver-id = '" + ctx.getAttribute(aaiRefKey + ATTR_VSERVER_ID) + "'" + + " AND tenant.tenant-id = '" + ctx.getAttribute(aaiRefKey + ATTR_TENANT_ID) + "'" + + " AND cloud-region.cloud-owner = '" + ctx.getAttribute(aaiRefKey + ATTR_CLOUD_OWNER) + "'" + + " AND cloud-region.cloud-region-id = '" + ctx.getAttribute(aaiRefKey + ATTR_CLOUD_REGION_ID) + "'"; - updateResource("vserver", resourceKey, vServerParams); + updateResource(PARAM_VSERVER, resourceKey, vServerParams); } } - public void updateVnfStatus(Map params, SvcLogicContext ctx) throws Exception { + public void updateVnfStatus(Map params, SvcLogicContext ctx) + throws AaiServiceInternalException, SvcLogicException { log.info("Received updateVnfStatus call with params : " + params); - String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); - - prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : ""; - - Map vnfParams = new HashMap(); + Map vnfParams = new HashMap<>(); // TODO - Should this just update prov-status or both? What about generic-vnf status? Will that be updated by // Dispatcher? - vnfParams.put("prov-status", "NVTPROV"); + vnfParams.put(PARAM_PROV_STATUS, PARAM_VAL_NVTPROV); - String resourceKey = "generic-vnf.vnf-id = '" + ctx.getAttribute("vnf-id") + "'"; + String resourceKey = STR_VNF_ID + ctx.getAttribute(ATTR_VNF_ID) + "'"; - updateResource("generic-vnf", resourceKey, vnfParams); + updateResource(PARAM_GENERIC_VNF, resourceKey, vnfParams); } - public void updateResource(String resource, String resourceKey, Map params) throws Exception { + public void updateResource(String resource, String resourceKey, Map params) + throws AaiServiceInternalException, SvcLogicException { log.info("Received updateResource call with Key : " + resourceKey); @@ -553,27 +632,26 @@ public class AaiService { log.info("Updated " + resource + " SUCCESSFULLY for " + resourceKey); } else if (SvcLogicResource.QueryStatus.FAILURE.equals(response)) { - throw new Exception(resource + " Update failed for " + resourceKey); + throw new AaiServiceInternalException(resource + " Update failed for " + resourceKey); } } - public SvcLogicContext readResource(String query, String prefix, String resourceType) throws Exception { + public SvcLogicContext readResource(String query, String prefix, String resourceType) + throws AaiServiceInternalException, SvcLogicException { SvcLogicContext resourceContext = new SvcLogicContext(); SvcLogicResource.QueryStatus response = - aaiClient.query(resourceType, false, null, query, prefix, null, resourceContext); + aaiClient.query(resourceType, false, null, query, prefix, null, resourceContext); log.info("AAIResponse: " + response.toString()); if (!SvcLogicResource.QueryStatus.SUCCESS.equals(response)) { - throw new Exception("Error Retrieving " + resourceType + " from A&AI"); + throw new AaiServiceInternalException("Error Retrieving " + resourceType + " from A&AI"); } - return resourceContext; } // Added for Backward Compatibility - public void checkAndUpdateVnfc(Map params, SvcLogicContext ctx, int vnfcRefLen, int vmCount) - throws Exception { + throws AaiServiceInternalException, SvcLogicException { log.info("Received checkAndUpdateVnfcStatus call with params : " + params); String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); @@ -583,41 +661,46 @@ public class AaiService { for (int i = 0; i < vmCount; i++) { String aaiRefKey = prefix + "vm[" + i + "]."; - log.info("VNFCNAME IN INSERTVNFCS " + aaiRefKey + "vnfc-name:" + ctx.getAttribute(aaiRefKey + "vnfc-name")); + log.info(QUERY_STR_VNFC_NAME + aaiRefKey + "vnfc-name:" + ctx.getAttribute(aaiRefKey + ATTR_VNFC_NAME)); - String vnfcNameAai = ctx.getAttribute(aaiRefKey + "vnfc-name"); + String vnfcNameAai = ctx.getAttribute(aaiRefKey + ATTR_VNFC_NAME); if (StringUtils.isNotBlank(vnfcNameAai)) { // Get Vnfc_reference data for (int vnfcRefIndx = 0; vnfcRefIndx < vnfcRefLen; vnfcRefIndx++) { - String vnfcRefKey = "vnfcReference[" + vnfcRefIndx + "]."; + String vnfcRefKey = STR_VNFC_REF + vnfcRefIndx + "]."; - log.info("VNFCREFKEY " + vnfcRefKey); - log.info("AAIREFKEY " + aaiRefKey); + log.info(STR_VNFC_REF_KEY + vnfcRefKey); + log.info(STR_AAI_REF_KEY + aaiRefKey); - String vnfcFuncCode = ctx.getAttribute(vnfcRefKey + "VNFC-FUNCTION-CODE"); - String vserverName = ctx.getAttribute(aaiRefKey + "vserver-name"); + String vnfcFuncCode = ctx.getAttribute(vnfcRefKey + ATTR_VNFC_FUNC_CODE); + String vserverName = ctx.getAttribute(aaiRefKey + ATTR_VSERVER_NAME); String vnfcNameReference = vserverName + vnfcFuncCode + "001"; - - if (vnfcNameAai.equals(vnfcNameReference)) { - updateVnfcStatus(vnfcNameAai, params, prefix); - } + tryUpdateVnfcStatus(params, prefix, vnfcNameAai, vnfcNameReference); } } } } - public void updateVnfcStatus(String vnfcName, Map params, String prefix) throws Exception { + private void tryUpdateVnfcStatus(Map params, String prefix, String vnfcNameAai, + String vnfcNameReference) throws AaiServiceInternalException, SvcLogicException { + if (vnfcNameAai.equals(vnfcNameReference)) { + updateVnfcStatus(vnfcNameAai, params, prefix); + } + } + + public void updateVnfcStatus(String vnfcName, Map params, String prefix) + throws AaiServiceInternalException, SvcLogicException { log.info("Received updateVnfcStatus call with vnfcName : " + vnfcName); log.info("Received updateVnfcStatus call with params : " + params); - String resourceKey = "vnfc.vnfc-name = '" + vnfcName + "'"; + String resourceKey = STR_VNFC_NAME + vnfcName + "'"; log.info("Received updateVnfcStatus call with resourceKey : " + resourceKey); - Map vnfcParams = new HashMap(); - vnfcParams.put("prov-status", "NVTPROV"); + Map vnfcParams = new HashMap<>(); + vnfcParams.put(PARAM_PROV_STATUS, PARAM_VAL_NVTPROV); vnfcParams.put("orchestration-status", "CONFIGURED"); log.info("In updateVnfcStatus call with vnfcParams : " + vnfcParams); @@ -627,22 +710,17 @@ public class AaiService { log.info("End of updateVnfcStatus"); } - public void updateVnfStatusWithOAMAddress(Map params, SvcLogicContext ctx) throws Exception { + public void updateVnfStatusWithOAMAddress(Map params, SvcLogicContext ctx) + throws AaiServiceInternalException, SvcLogicException { log.info("Received updateVnfStatusWithOAMAddress call with params : " + params); - String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); String ipAddress = ctx.getAttribute("vnf-host-ip-address"); log.debug("Vnf-host-ip-address" + ipAddress); - prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : ""; - - Map vnfParams = new HashMap(); - + Map vnfParams = new HashMap<>(); vnfParams.put("ipv4-oam-address", ipAddress); - - String resourceKey = "generic-vnf.vnf-id = '" + ctx.getAttribute("vnf-id") + "'"; - - updateResource("generic-vnf", resourceKey, vnfParams); + String resourceKey = STR_VNF_ID + ctx.getAttribute(ATTR_VNF_ID) + "'"; + updateResource(PARAM_GENERIC_VNF, resourceKey, vnfParams); } public void getVfModuleInfo(Map params, SvcLogicContext vfModuleCtx) throws Exception { @@ -653,14 +731,16 @@ public class AaiService { String vnfId = params.get("vnfId"); String vfModuleId = params.get("vfModuleId"); String resourceKey = "generic-vnf.vnf-id = '" + vnfId + - "' AND vf-module.vf-module-id = '" + vfModuleId + "'"; + "' AND vf-module.vf-module-id = '" + vfModuleId + "'"; String queryPrefix = "vfModuleInfo"; String resourceType = "vf-module"; SvcLogicContext vfmCtx = readResource(resourceKey, queryPrefix, resourceType); - String modelInvariantId=vfmCtx.getAttribute("vfModuleInfo.model-invariant-id"); - log.info("getVfModuleInfo():::modelInvariant="+modelInvariantId); - vfModuleCtx.setAttribute(prefix+"vfModule.model-invariant-id", vfmCtx.getAttribute("vfModuleInfo.model-invariant-id")); - vfModuleCtx.setAttribute(prefix+"vfModule.model-version-id", vfmCtx.getAttribute("vfModuleInfo.model-version-id")); + String modelInvariantId = vfmCtx.getAttribute("vfModuleInfo.model-invariant-id"); + log.info("getVfModuleInfo():::modelInvariant=" + modelInvariantId); + vfModuleCtx.setAttribute(prefix + "vfModule.model-invariant-id", + vfmCtx.getAttribute("vfModuleInfo.model-invariant-id")); + vfModuleCtx + .setAttribute(prefix + "vfModule.model-version-id", vfmCtx.getAttribute("vfModuleInfo.model-version-id")); log.info("End - getVfModuleInfo"); } @@ -672,13 +752,35 @@ public class AaiService { String modelInvariantId = modelParams.get("model-invariant-id"); String modelVersionId = modelParams.get("model-version-id"); String resourceKey = "model.model-invariant-id = '" + modelInvariantId + - "' AND model-ver.model-version-id = '" + modelVersionId + "'"; + "' AND model-ver.model-version-id = '" + modelVersionId + "'"; String queryPrefix = "modelInfo"; String resourceType = "model-ver"; SvcLogicContext vfmCtx = readResource(resourceKey, queryPrefix, resourceType); - log.info("getModelVersionInfo():::modelname="+vfmCtx.getAttribute("modelInfo.model-name")); - modelCtx.setAttribute(prefix+"vfModule.model-name", vfmCtx.getAttribute("modelInfo.model-name")); + log.info("getModelVersionInfo():::modelname=" + vfmCtx.getAttribute("modelInfo.model-name")); + modelCtx.setAttribute(prefix + "vfModule.model-name", vfmCtx.getAttribute("modelInfo.model-name")); log.info("End - getModelVersionInfo"); } + + public void getIdentityUrl(Map params, SvcLogicContext ctx) throws Exception{ + log.info("Recieved getIdentityUrl call with params : "+params); + String prefix = params.get(AppcAaiClientConstant.INPUT_PARAM_RESPONSE_PREFIX); + prefix = StringUtils.isNotBlank(prefix) ? (prefix + ".") : ""; + + String cloudOwner = params.get("cloudOwner"); + String cloudRegionId = params.get("cloudRegionId"); + // per comment from git review, we need to sanitize the two parameters + // to avoid security issues + cloudOwner = cloudOwner.replaceAll("'", ""); + cloudRegionId = cloudRegionId.replaceAll("'", ""); + log.debug("cloudOwner" +cloudOwner +"," +"cloudRegionId"+ cloudRegionId); + String resourceKey = "depth = '" + 0 + "' AND cloud-region.cloud-owner = '" + cloudOwner + + "' AND cloud-region.cloud-region-id = '" + cloudRegionId + "'"; + String queryPrefix ="urlInfo"; + String resourceType = "cloud-region"; + SvcLogicContext urlCtx = readResource(resourceKey, queryPrefix, resourceType); + log.info("IdentityUrl: "+urlCtx.getAttribute("urlInfo.identity-url")); + ctx.setAttribute(prefix+"cloud-region.identity-url", urlCtx.getAttribute("urlInfo.identity-url")); + + } }