aboutsummaryrefslogtreecommitdiffstats
path: root/appc-dg/appc-dg-shared/appc-dg-aai/src/main/java/org/openecomp/appc/dg/aai/impl/AAIPluginImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'appc-dg/appc-dg-shared/appc-dg-aai/src/main/java/org/openecomp/appc/dg/aai/impl/AAIPluginImpl.java')
-rw-r--r--appc-dg/appc-dg-shared/appc-dg-aai/src/main/java/org/openecomp/appc/dg/aai/impl/AAIPluginImpl.java302
1 files changed, 280 insertions, 22 deletions
diff --git a/appc-dg/appc-dg-shared/appc-dg-aai/src/main/java/org/openecomp/appc/dg/aai/impl/AAIPluginImpl.java b/appc-dg/appc-dg-shared/appc-dg-aai/src/main/java/org/openecomp/appc/dg/aai/impl/AAIPluginImpl.java
index 6eae559e8..830147ca2 100644
--- a/appc-dg/appc-dg-shared/appc-dg-aai/src/main/java/org/openecomp/appc/dg/aai/impl/AAIPluginImpl.java
+++ b/appc-dg/appc-dg-shared/appc-dg-aai/src/main/java/org/openecomp/appc/dg/aai/impl/AAIPluginImpl.java
@@ -20,10 +20,17 @@
*/
package org.openecomp.appc.dg.aai.impl;
+import org.openecomp.appc.domainmodel.Vnf;
+import org.openecomp.appc.domainmodel.Vnfc;
+import org.openecomp.appc.domainmodel.Vserver;
+import org.openecomp.appc.exceptions.APPCException;
+import org.openecomp.appc.i18n.Msg;
+import com.att.eelf.i18n.EELFResourceManager;
import org.openecomp.appc.dg.aai.AAIPlugin;
-import org.openecomp.appc.dg.aai.impl.Constants;
-import org.openecomp.appc.exceptions.APPCException;
+import org.openecomp.appc.dg.aai.exception.AAIQueryException;
+import org.openecomp.appc.dg.aai.objects.AAIQueryResult;
+import org.openecomp.appc.dg.aai.objects.Relationship;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import org.openecomp.sdnc.sli.SvcLogicContext;
@@ -35,8 +42,7 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
public class AAIPluginImpl implements AAIPlugin {
@@ -68,20 +74,23 @@ public class AAIPluginImpl implements AAIPlugin {
try {
SvcLogicResource.QueryStatus response = aaiClient.update("generic-vnf", key, data, prefix, ctx);
if (SvcLogicResource.QueryStatus.NOT_FOUND.equals(response)) {
- String errorMessage = String.format("VNF not found for vnf_id = %s", vnf_id);
- ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, errorMessage);
- throw new APPCException(errorMessage);
+ String msg = EELFResourceManager.format(Msg.VNF_NOT_FOUND, vnf_id);
+ ctx.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg);
+ throw new APPCException(msg);
}
logger.info("AAIResponse: " + response.toString());
if (SvcLogicResource.QueryStatus.FAILURE.equals(response)) {
- String errorMessage = String.format("Error Querying AAI with vnfID = %s", vnf_id);
- ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, errorMessage);
- throw new APPCException(errorMessage);
+ String msg = EELFResourceManager.format(Msg.AAI_QUERY_FAILED, vnf_id);
+ ctx.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg);
+ throw new APPCException(msg);
}
+ String msg = EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE, "PostGenericVnfData", "VNF ID " + vnf_id);
+ ctx.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_SUCCESS_MESSAGE, msg);
+
} catch (SvcLogicException e) {
- String errorMessage = String.format("Error in postVnfdata %s", e);
- ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, errorMessage);
- logger.error(errorMessage);
+ String msg = EELFResourceManager.format(Msg.AAI_QUERY_FAILED, vnf_id);
+ ctx.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg);
+ logger.error(msg);
throw new APPCException(e);
}
}
@@ -95,13 +104,14 @@ public class AAIPluginImpl implements AAIPlugin {
try {
SvcLogicResource.QueryStatus response = aaiClient.query("generic-vnf", false, null, key, prefix, null, ctx);
if (SvcLogicResource.QueryStatus.NOT_FOUND.equals(response)) {
- String errorMessage = String.format("VNF not found for vnf_id = %s", vnf_id);
- ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, errorMessage);
- throw new APPCException(errorMessage);
+ String msg = EELFResourceManager.format(Msg.VNF_NOT_FOUND, vnf_id);
+// String errorMessage = String.format("VNF not found for vnf_id = %s", vnf_id);
+ ctx.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg);
+ throw new APPCException(msg);
} else if (SvcLogicResource.QueryStatus.FAILURE.equals(response)) {
- String errorMessage = String.format("Error Querying AAI with vnfID = %s", vnf_id);
- ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, errorMessage);
- throw new APPCException(errorMessage);
+ String msg = EELFResourceManager.format(Msg.AAI_QUERY_FAILED, vnf_id);
+ ctx.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg);
+ throw new APPCException(msg);
}
String aaiEntitlementPoolUuid = ctx.getAttribute(Constants.AAI_ENTITLMENT_POOL_UUID_NAME);
if (null == aaiEntitlementPoolUuid) aaiEntitlementPoolUuid = "";
@@ -110,13 +120,261 @@ public class AAIPluginImpl implements AAIPlugin {
ctx.setAttribute(Constants.IS_RELEASE_ENTITLEMENT_REQUIRE, Boolean.toString(!aaiEntitlementPoolUuid.isEmpty()));
ctx.setAttribute(Constants.IS_RELEASE_LICENSE_REQUIRE, Boolean.toString(!aaiLicenseKeyGroupUuid.isEmpty()));
+ String msg = EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE, "GetGenericVnfData","VNF ID " + vnf_id);
+ ctx.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_SUCCESS_MESSAGE, msg);
logger.info("AAIResponse: " + response.toString());
} catch (SvcLogicException e) {
- String errorMessage = String.format("Error in getVnfdata %s", e);
- ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, errorMessage);
- logger.error(errorMessage);
+ String msg = EELFResourceManager.format(Msg.AAI_QUERY_FAILED, vnf_id);
+ ctx.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg);
+ logger.error(msg);
throw new APPCException(e);
}
}
+
+ @Override
+ public void getVnfHierarchy(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
+
+ Map<Vnfc,Set<Vserver>> vnfcMap = new HashMap<>();
+ String vnfType,vnfVersion = null;
+ String vnfId = params.get("resourceKey");
+ AAIQueryResult vnfQueryResult = null;
+ int vmCount =0;
+ try {
+ vnfQueryResult = readVnf(vnfId);
+
+ vnfType = vnfQueryResult.getAdditionProperties().get("vnf-type");
+ vnfVersion = vnfQueryResult.getAdditionProperties().get("persona-model-version");
+
+ for(Relationship vnfRelationship:vnfQueryResult.getRelationshipList()){
+ if("vserver".equalsIgnoreCase(vnfRelationship.getRelatedTo())){
+ vmCount++;
+ String tenantId = vnfRelationship.getRelationShipDataMap().get("tenant.tenant-id");
+ String vmId = vnfRelationship.getRelationShipDataMap().get("vserver.vserver-id");
+ String vmRelatedLink = vnfRelationship.getRelatedLink();
+ String vmName = vnfRelationship.getRelatedProperties().get("vserver.vserver-name");
+ String cloudOwner = vnfRelationship.getRelationShipDataMap().get("cloud-region.cloud-owner");
+ String cloudRegionId = vnfRelationship.getRelationShipDataMap().get("cloud-region.cloud-region-id");
+
+ AAIQueryResult vmQueryResult = readVM(vmId,tenantId,cloudOwner,cloudRegionId);
+ String vmURL = vmQueryResult.getAdditionProperties().get("vserver-selflink");
+
+ Vserver vm = new Vserver(vmURL,tenantId,vmId,vmRelatedLink,vmName);
+ for(Relationship vmRelation:vmQueryResult.getRelationshipList()){
+
+ if("vnfc".equalsIgnoreCase(vmRelation.getRelatedTo())){
+ String vnfcName = vmRelation.getRelationShipDataMap().get("vnfc.vnfc-name");
+ AAIQueryResult vnfcQueryResult = readVnfc(vnfcName);
+ String vnfcType = vnfcQueryResult.getAdditionProperties().get("vnfc-type");
+
+ Vnfc vnfc = new Vnfc(vnfcType,null,vnfcName);
+ Set<Vserver> vmSet = vnfcMap.get(vnfc);
+ if(vmSet == null){
+ vmSet = new HashSet<>();
+ vnfcMap.put(vnfc,vmSet);
+ }
+ vmSet.add(vm);
+ }
+ }
+ }
+ }
+ ctx.setAttribute("VNF.VMCount",String.valueOf(vmCount));
+ } catch (AAIQueryException e) {
+ ctx.setAttribute("getVnfHierarchy_result", "FAILURE");
+ String msg = EELFResourceManager.format(Msg.AAI_QUERY_FAILED, vnfId);
+ ctx.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg);
+ logger.error("Failed in getVnfHierarchy, Error retrieving VNF details. Error message: " + ctx
+ .getAttribute("getResource_result"));
+ logger.warn("Incorrect or Incomplete VNF Hierarchy");
+ throw new APPCException("Error Retrieving VNF hierarchy");
+ }
+
+ Vnf vnf = new Vnf(vnfId,vnfType,vnfVersion);
+ for(Vnfc vnfc:vnfcMap.keySet()){
+ for(Vserver vm:vnfcMap.get(vnfc)){
+ vnfc.addVm(vm);
+ }
+ vnf.addVnfc(vnfc);
+ }
+
+ populateContext(vnf,ctx);
+ ctx.setAttribute("getVnfHierarchy_result", "SUCCESS");
+ String msg = EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE, "GetVNFHierarchy","VNF ID " + vnfId);
+ ctx.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_SUCCESS_MESSAGE, msg);
+
+ }
+
+ private void populateContext(Vnf vnf ,SvcLogicContext ctx) {
+ ctx.setAttribute("vnf.type",vnf.getVnfType());
+ ctx.setAttribute("vnf.version",vnf.getVnfVersion());
+ ctx.setAttribute("vnf.vnfcCount",String.valueOf(vnf.getVnfcs().size()));
+ int vnfcCount =0;
+ for(Vnfc vnfc:vnf.getVnfcs()){
+ ctx.setAttribute("vnf.vnfc["+vnfcCount+"].name",vnfc.getVnfcName());
+ ctx.setAttribute("vnf.vnfc["+vnfcCount+"].type",vnfc.getVnfcType());
+ ctx.setAttribute("vnf.vnfc["+vnfcCount+"].vm_count",String.valueOf(vnfc.getVserverList().size()));
+ int vmCount =0;
+ for(Vserver vm:vnfc.getVserverList()){
+ ctx.setAttribute("vnf.vnfc["+vnfcCount+"].vm["+ vmCount++ +"].url",vm.getUrl());
+ }
+ vnfcCount++;
+ }
+ }
+
+ private AAIQueryResult readVnfc(String vnfcName) throws AAIQueryException {
+ String query = "vnfc.vnfc-name = '" + vnfcName + "'";
+ String prefix = "VNFC";
+ String resourceType = "vnfc";
+ SvcLogicContext vnfContext = readResource(query,prefix,resourceType);
+ String[] additionalProperties = new String[]{"vnfc-type","vnfc-name",
+ "vnfc-function-code","in-maint","prov-status",
+ "is-closed-loop-disabled","orchestration-status","resource-version"};
+ AAIQueryResult result = readRelationDataAndProperties(prefix, vnfContext,additionalProperties);
+ return result;
+ }
+
+ private AAIQueryResult readVM(String vmId,String tenantId,String cloudOwner,String cloudRegionId) throws AAIQueryException {
+ String query = "vserver.vserver-id = '" + vmId + "' AND tenant.tenant_id = '" + tenantId + "' AND cloud-region.cloud-owner = '"
+ + cloudOwner + "' AND cloud-region.cloud-region-id = '" + cloudRegionId + "'";
+ String prefix = "VM";
+ String resourceType = "vserver";
+ SvcLogicContext vnfContext = readResource(query,prefix,resourceType);
+ String[] additionalProperties = new String[]{"vserver-id","vserver-selflink",
+ "vserver-name","in-maint","prov-status","is-closed-loop-disabled",
+ "vserver-name2","resource-version",};
+ AAIQueryResult result = readRelationDataAndProperties(prefix, vnfContext,additionalProperties);
+
+ return result;
+ }
+
+ private AAIQueryResult readVnf(String vnfId) throws AAIQueryException {
+ String query = "generic-vnf.vnf-id = '" + vnfId + "'";
+ String prefix = "VNF";
+ String resourceType = "generic-vnf";
+ SvcLogicContext vnfContext = readResource(query,prefix,resourceType);
+
+ String[] additionalProperties = new String[]{"vnf-type","vnf-name",
+ "in-maint","prov-status","heat-stack-id",
+ "is-closed-loop-disabled","orchestration-status","resource-version","persona-model-version"};
+
+ AAIQueryResult result = readRelationDataAndProperties(prefix, vnfContext,additionalProperties);
+
+ return result;
+ }
+
+ private AAIQueryResult readRelationDataAndProperties(String prefix, SvcLogicContext context,String[] additionalProperties) {
+ AAIQueryResult result = new AAIQueryResult();
+
+ Integer relationsCount = Integer.parseInt(context.getAttribute(prefix + ".relationship-list.relationship_length"));
+ for(int i=0;i<relationsCount;i++){
+ Relationship relationShip = new Relationship();
+ relationShip.setRelatedLink(context.getAttribute(prefix + ".relationship-list.relationship["+i+"].related-link"));
+ relationShip.setRelatedTo(context.getAttribute(prefix + ".relationship-list.relationship["+i+"].related-to"));
+ Integer relationDataCount = Integer.parseInt(context.getAttribute(prefix + ".relationship-list.relationship["+i+"].relationship-data_length"));
+ for(int j=0;j<relationDataCount;j++){
+ String key = context.getAttribute(prefix+".relationship-list.relationship["+i+"].relationship-data["+j+"].relationship-key");
+ String value = context.getAttribute(prefix+".relationship-list.relationship["+i+"].relationship-data["+j+"].relationship-value");
+ relationShip.getRelationShipDataMap().put(key,value);
+ }
+ Integer relatedPropertyCount = 0;
+ String relatedPropertyCountStr = null;
+ try{
+ relatedPropertyCountStr =context.getAttribute(prefix + ".relationship-list.relationship["+i+"].related-to-property_length");
+ relatedPropertyCount = Integer.parseInt(relatedPropertyCountStr);
+ }
+ catch (NumberFormatException e){
+ logger.debug("Invalid value in the context for Related Property Count " + relatedPropertyCountStr);
+ }
+
+ for(int j=0;j<relatedPropertyCount;j++){
+ String key = context.getAttribute(prefix+".relationship-list.relationship["+i+"].related-to-property["+j+"].property-key");
+ String value = context.getAttribute(prefix+".relationship-list.relationship["+i+"].related-to-property["+j+"].property-value");
+ relationShip.getRelatedProperties().put(key,value);
+ }
+ result.getRelationshipList().add(relationShip);
+ }
+
+ for(String key:additionalProperties){
+ result.getAdditionProperties().put(key,context.getAttribute(prefix+"."+key));
+ }
+ return result;
+ }
+
+ private SvcLogicContext readResource(String query, String prefix, String resourceType) throws AAIQueryException {
+ SvcLogicContext resourceContext = new SvcLogicContext();
+ try {
+ SvcLogicResource.QueryStatus response = aaiClient.query(resourceType,false,null,query,prefix,null,resourceContext);
+ logger.info("AAIResponse: " + response.toString());
+ if(!SvcLogicResource.QueryStatus.SUCCESS.equals(response)){
+ throw new AAIQueryException("Error Retrieving VNF hierarchy from A&AI");
+ }
+ } catch (SvcLogicException e) {
+ logger.error(EELFResourceManager.format(Msg.AAI_GET_DATA_FAILED, query, "", e.getMessage()));
+ throw new AAIQueryException("Error Retrieving VNF hierarchy from A&AI");
+ }
+ return resourceContext;
+ }
+
+ @Override public void getResource(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
+ String resourceType = params.get("resourceType"), ctx_prefix = params.get("prefix"), resourceKey =
+ params.get("resourceKey");
+ if (logger.isDebugEnabled()) {
+ logger.debug("inside getResorce");
+ logger.debug("Retrieving " + resourceType + " details from A&AI for Key : " + resourceKey);
+ }
+ try {
+ SvcLogicResource.QueryStatus response =
+ aaiClient.query(resourceType, false, null, resourceKey, ctx_prefix, null, ctx);
+ logger.info("AAIResponse: " + response.toString());
+ ctx.setAttribute("getResource_result", response.toString());
+ } catch (SvcLogicException e) {
+ logger.error(EELFResourceManager.format(Msg.AAI_GET_DATA_FAILED, resourceKey, "", e.getMessage()));
+ }
+ if (logger.isDebugEnabled()) {
+ logger.debug("exiting getResource======");
+ }
+ }
+
+ @Override public void postResource(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
+ String resourceType = params.get("resourceType"), ctx_prefix = params.get("prefix"), resourceKey =
+ params.get("resourceKey"), att_name = params.get("attributeName"), att_value =
+ params.get("attributeValue");
+ if (logger.isDebugEnabled()) {
+ logger.debug("inside postResource");
+ logger.debug("Updating " + resourceType + " details in A&AI for Key : " + resourceKey);
+ logger.debug("Updating " + att_name + " to : " + att_value);
+ }
+ Map<String, String> data = new HashMap<String, String>();
+ data.put(att_name, att_value);
+
+ try {
+ SvcLogicResource.QueryStatus response = aaiClient.update(resourceType, resourceKey, data, ctx_prefix, ctx);
+ logger.info("AAIResponse: " + response.toString());
+ ctx.setAttribute("postResource_result", response.toString());
+ } catch (SvcLogicException e) {
+ logger.error(EELFResourceManager.format(Msg.AAI_UPDATE_FAILED, resourceKey, att_value, e.getMessage()));
+ }
+ if (logger.isDebugEnabled()) {
+ logger.debug("exiting postResource======");
+ }
+ }
+
+ @Override public void deleteResource(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
+ String resourceType = params.get("resourceType"), resourceKey = params.get("resourceKey");
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("inside deleteResource");
+ logger.debug("Deleting " + resourceType + " details From A&AI for Key : " + resourceKey);
+ }
+ try {
+ SvcLogicResource.QueryStatus response = aaiClient.delete(resourceType, resourceKey, ctx);
+ logger.info("AAIResponse: " + response.toString());
+ ctx.setAttribute("deleteResource_result", response.toString());
+ } catch (SvcLogicException e) {
+ logger.error(EELFResourceManager.format(Msg.AAI_DELETE_FAILED, resourceKey, e.getMessage()));
+ }
+ if (logger.isDebugEnabled()) {
+ logger.debug("exiting deleteResource======");
+ }
+ }
}