Support multiple Ansible servers 44/78444/4
authorSonali Das <sd394g@att.com>
Wed, 13 Feb 2019 21:28:02 +0000 (16:28 -0500)
committerTakamune Cho <takamune.cho@att.com>
Fri, 15 Feb 2019 18:16:32 +0000 (18:16 +0000)
Issue-ID: APPC-1364
Change-Id: I63cf89f5964bcfaba7d1f0b0eac2477f827b69fa
Signed-off-by: Sonali Das <sd394g@att.com>
Review Comment update

Issue-ID: APPC-1364
Change-Id: I03fa97d60c6497218c14b53531c2dea69c7fba34
Signed-off-by: Sonali Das <sd394g@att.com>
Review Comment update

Issue-ID: APPC-1364
Change-Id: I03fa97d60c6497218c14b53531c2dea69c7fba34
Signed-off-by: Sonali Das <sd394g@att.com>
Support multiple Ansible servers

Issue-ID: APPC-1364
Change-Id: I63cf89f5964bcfaba7d1f0b0eac2477f827b69fa
Signed-off-by: Sonali Das <sd394g@att.com>
Support multiple Ansible servers

Issue-ID: APPC-1364
Change-Id: I63cf89f5964bcfaba7d1f0b0eac2477f827b69fa
Signed-off-by: Sonali Das <sd394g@att.com>
appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNode.java
appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/utils/SdcArtifactHandlerConstants.java
appc-inbound/appc-artifact-handler/provider/src/test/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNodeTest.java

index 0b8aa5f..b2cc984 100644 (file)
@@ -81,6 +81,7 @@ import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.V
 import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.VNF_TYPE;
 import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.URL;
 import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.OPENSTACK;
+import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.ANSIBLE;
 
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
@@ -104,6 +105,11 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;
 import org.onap.sdnc.config.params.transformer.tosca.ArtifactProcessorImpl;
 import org.onap.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException;
 
+import org.json.JSONException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
 public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
 
     private static final EELFLogger log = EELFManager.getInstance().getLogger(ArtifactHandlerNode.class);
@@ -120,7 +126,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
             return;
         }
         String postData = inParams.get("postData");
-        if (postData == null || postData.isEmpty()) {
+        if ( StringUtils.isBlank(postData)) {
             return;
         }
         try {
@@ -129,7 +135,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
             storeUpdateSdcArtifacts(input);
         } catch (Exception e) {
             log.error("Error when processing artifact", e);
-            throw new ArtifactProcessorException("Error occurred while processing artifact", e);
+            throw new ArtifactProcessorException("Error occurred while processing artifact, " + e.getMessage(), e);
         }
     }
 
@@ -139,35 +145,113 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
             JSONObject requestInfo = (JSONObject) postDataJson.get(REQUEST_INFORMATION);
             JSONObject documentInfo = (JSONObject) postDataJson.get(DOCUMENT_PARAMETERS);
             String artifactName = documentInfo.getString(ARTIFACT_NAME);
-            if (artifactName != null) {
-                updateStoreArtifacts(requestInfo, documentInfo);
-                if (artifactName.toLowerCase().startsWith(REFERENCE)) {
-                    return storeReferenceData(requestInfo, documentInfo);
-                } else if (artifactName.toLowerCase().startsWith(PD)) {
-                    return createDataForPD(requestInfo, documentInfo);
-                }
 
-            } else {
-                throw new ArtifactHandlerInternalException("Missing Artifact Name for Request: "
-                    + requestInfo.getString(REQUEST_ID));
+            if (StringUtils.isBlank(artifactName))
+                throw new ArtifactHandlerInternalException("Missing Artifact Name ");
+
+            if (artifactName.toLowerCase().startsWith(ANSIBLE)) {
+                validateAnsibleAdminArtifact(documentInfo);
+                log.info("validateAnsibleAdminArtifact sucessfully done");
             }
+
+            updateStoreArtifacts(requestInfo, documentInfo);
+            if (artifactName.toLowerCase().startsWith(REFERENCE)) {
+                return storeReferenceData(requestInfo, documentInfo);
+            } else if (artifactName.toLowerCase().startsWith(PD)) {
+                return createDataForPD(requestInfo, documentInfo);
+            }
+
         } catch (Exception e) {
             log.error("Error while processing request with id: "
-                + ((JSONObject) postDataJson.get(REQUEST_INFORMATION)).getString(REQUEST_ID), e);
-
+                    + ((JSONObject) postDataJson.get(REQUEST_INFORMATION)).getString(REQUEST_ID), e);
             throw new ArtifactHandlerInternalException("Error while processing request with id: "
-                + ((JSONObject) postDataJson.get(REQUEST_INFORMATION)).getString(REQUEST_ID), e);
+                    + ((JSONObject) postDataJson.get(REQUEST_INFORMATION)).getString(REQUEST_ID)
+                    + ", Exception Message : " + e.getMessage(), e);
         }
         return false;
     }
 
+    public void validateAnsibleAdminArtifact(JSONObject documentInfo) throws ArtifactHandlerInternalException {
+        String fn = "ArtifactHandlerNode.validateAnsibleAdminArtifact";
+        String artifactName = documentInfo.getString(ARTIFACT_NAME);
+        log.info(fn + ": Received Admin File Name: " + artifactName + " ArtifactCotent : "
+                + documentInfo.getString(ARTIFACT_CONTENTS));
+        try {
+            ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
+            String contentString = ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_CONTENTS));
+            JSONObject artifact = new JSONObject(contentString);
+            JSONArray fqdnList = artifact.getJSONArray("fqdn-list");
+            Map<String, List<String>> artifactMap = new HashMap<>();
+            
+            
+            for (int i = 0; i < fqdnList.length(); i++) {
+                JSONObject fqdn = fqdnList.getJSONObject(i);
+                List<String> valuesforFQDN = populateValueForFQDN(fqdn);
+                artifactMap.put(fqdn.getString("vnf-management-server-fqdn"), valuesforFQDN);
+            }
+
+            validateKeyValue(artifactMap);
+
+        } catch (JSONException je) {
+            log.error(
+                    fn + " ansible_admin artifact content may not be a valid JSON, error message : " + je.getMessage());
+            throw new ArtifactHandlerInternalException(
+                    "JSON Exception:ansible admin artifact content may not be a valid JSON, error message : " + je.getMessage(), je);
+        } catch (ArtifactHandlerInternalException ae) {
+         throw ae;
+        } catch (Exception e) {
+            
+            log.error(fn + "Error while creating Admin data records", e);
+            throw new ArtifactHandlerInternalException("Error while processing ansible admin artifact" + e.getMessage(), e);
+        }
+
+    }
+    private void validateKeyValue(Map<String, List<String>> artifactMap) throws ArtifactHandlerInternalException {
+        for (Map.Entry<String,List<String>> entry1:artifactMap.entrySet()) {    
+            for (String value : entry1.getValue()) {
+                for(Map.Entry<String,List<String>> entry2:artifactMap.entrySet() ) {                                      
+                    if (!entry1.getKey().equals(entry2.getKey()) && entry2.getValue().contains(value)) {
+                        log.info("Validation Failure, error message : Ansible Admin artifact has CloudOwner-RegionId-Tenant : " + value
+                                + " mapped to multiple FQDN :" + entry1.getKey() + " & " + entry2.getKey());
+                        throw new ArtifactHandlerInternalException(
+                                "Validation Failure, error message : Ansible Admin artifact has CloudOwner-RegionId-Tenant : " + value
+                                + " mapped to multiple FQDN :" + entry1.getKey() + " & " + entry2.getKey());
+                    }
+
+
+                }
+            }
+    }
+}
+
+    private List<String> populateValueForFQDN(JSONObject fqdn) {
+        log.info("Inside populateValueForFQDN :" + fqdn.getString("vnf-management-server-fqdn"));
+        List<String> valuesforFQDN = new ArrayList<>();
+        JSONArray cloudJsonList = fqdn.getJSONArray("cloud-owner-list");
+        for (int j = 0; j < cloudJsonList.length(); j++) {
+            String cloudOwner = cloudJsonList.getJSONObject(j).getString("cloud-owner");
+            JSONArray regionList = cloudJsonList.getJSONObject(j).getJSONArray("region-id-list");
+            for (int i = 0; i < regionList.length(); i++) {
+                String region = regionList.getJSONObject(i).getString("region-id");
+                JSONArray tenantList = regionList.getJSONObject(i).getJSONArray("tenant-id-list");
+
+                for (int k = 0; k < tenantList.length(); k++) {
+                    String tenant =  tenantList.getString(k);
+                    String valueforFQDN = cloudOwner + "-" + region + "-" + tenant;
+                    log.info("valueforFQDN for i " + i + " & j " + j + " :" + valueforFQDN);
+                    valuesforFQDN.add(valueforFQDN);
+                }
+            }
+        }
+        return valuesforFQDN;
+    }
+
     private boolean createDataForPD(JSONObject requestInfo, JSONObject documentInfo)
-        throws ArtifactHandlerInternalException {
+            throws ArtifactHandlerInternalException {
 
         String fn = "ArtifactHandlerNode.createReferenceDataForPD";
         String artifactName = documentInfo.getString(ARTIFACT_NAME);
-        log.info(fn + "Received PD File Name: " + artifactName + " and suffix length "
-            + PD.length());
+        log.info(fn + "Received PD File Name: " + artifactName + " and suffix length " + PD.length());
         try {
 
             String suffix = artifactName.substring(PD.length());
@@ -180,11 +264,11 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
     }
 
     private void createArtifactRecords(JSONObject requestInfo, JSONObject documentInfo, String suffix)
-        throws ArtifactHandlerInternalException {
+            throws ArtifactHandlerInternalException {
 
         try {
             log.info("Creating Tosca Records and storing into SDC Artifacs");
-            String[] docs = {TOSCA_PARAM, YANG_PARAM};
+            String[] docs = { TOSCA_PARAM, YANG_PARAM };
             ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
             String pdFileContents = documentInfo.getString(ARTIFACT_CONTENTS);
 
@@ -240,17 +324,15 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
         return dbservice.getArtifactID(context, yangName);
     }
 
-    protected boolean updateStoreArtifacts(JSONObject requestInfo, JSONObject documentInfo)
-        throws SvcLogicException {
+    protected boolean updateStoreArtifacts(JSONObject requestInfo, JSONObject documentInfo) throws SvcLogicException {
         log.info("UpdateStoreArtifactsStarted storing of SDC Artifacs ");
         SvcLogicContext context = new SvcLogicContext();
         DBService dbservice = DBService.initialise();
         ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
         int intversion = 0;
-        context.setAttribute("artifact_name",
-            documentInfo.getString(ARTIFACT_NAME));
-        String internalVersion = dbservice.getInternalVersionNumber(context,
-            documentInfo.getString(ARTIFACT_NAME), null);
+        context.setAttribute("artifact_name", documentInfo.getString(ARTIFACT_NAME));
+        String internalVersion = dbservice.getInternalVersionNumber(context, documentInfo.getString(ARTIFACT_NAME),
+                null);
         log.info("Internal Version number received from Database : " + internalVersion);
         if (internalVersion != null) {
             intversion = Integer.parseInt(internalVersion);
@@ -276,18 +358,15 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
     }
 
     public boolean storeReferenceData(JSONObject requestInfo, JSONObject documentInfo)
-        throws ArtifactHandlerInternalException {
+            throws ArtifactHandlerInternalException {
 
         log.info("Started storing of SDC Artifacs into Handler");
         try {
             DBService dbservice = DBService.initialise();
             ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
-            String contentString =
-                ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_CONTENTS));
-            String artifactName =
-                ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_NAME));
-            String capabilityArtifactName =
-                StringUtils.replace(artifactName, ARTIFACT_NAME_REFERENCE,
+            String contentString = ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_CONTENTS));
+            String artifactName = ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_NAME));
+            String capabilityArtifactName = StringUtils.replace(artifactName, ARTIFACT_NAME_REFERENCE,
                     ARTIFACT_NAME_CAPABILITY);
             JSONObject capabilities = new JSONObject();
             JSONArray vnfActionList = new JSONArray();
@@ -311,7 +390,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
                 setAttribute(context, content::getString, ACTION_LEVEL);
                 setAttribute(context, documentInfo::getString, ARTIFACT_TYPE);
                 processActionLists(content, actionLevel, vnfcActionList, vfModuleActionList, vnfActionList,
-                    vmActionVnfcFunctionCodesList);
+                        vmActionVnfcFunctionCodesList);
                 JSONArray vnfcTypeList = setVnfcTypeInformation(scope, context);
                 storeCapabilityArtifact = isCapabilityArtifactNeeded(context);
                 if (content.has(DEVICE_PROTOCOL)) {
@@ -329,17 +408,16 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
                 processArtifactList(content, dbservice, context, vnfcTypeList);
                 processConfigTypeActions(content, dbservice, context);
                 dbservice.processDeviceAuthentication(context,
-                    dbservice.isArtifactUpdateRequired(context, DB_DEVICE_AUTHENTICATION));
+                        dbservice.isArtifactUpdateRequired(context, DB_DEVICE_AUTHENTICATION));
 
                 String actionProtocol = tryGetProtocol(content);
                 if (!StringUtils.equalsIgnoreCase(actionProtocol, OPENSTACK)) {
-                     populateProtocolReference(dbservice, content);
+                    populateProtocolReference(dbservice, content);
                 }
 
                 context.setAttribute(VNFC_TYPE, null);
 
-                if (content.has(VM)
-                    && content.get(VM) instanceof JSONArray) {
+                if (content.has(VM) && content.get(VM) instanceof JSONArray) {
                     processVmList(content, context, dbservice);
                 }
             }
@@ -348,9 +426,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
                 capabilities.put("vf-module", vfModuleActionList);
                 capabilities.put("vnfc", vnfcActionList);
                 capabilities.put("vm", vmActionVnfcFunctionCodesList);
-                processAndStoreCapabilitiesArtifact(dbservice, documentInfo, capabilities,
-                    capabilityArtifactName,
-                    vnfType);
+                processAndStoreCapabilitiesArtifact(dbservice, documentInfo, capabilities, capabilityArtifactName,
+                        vnfType);
             }
 
         } catch (Exception e) {
@@ -365,22 +442,20 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
     public boolean isCapabilityArtifactNeeded(SvcLogicContext context) {
         String vnfcType = context.getAttribute(VNFC_TYPE);
         if (StringUtils.isNotBlank(vnfcType)) {
-            log.info("No capability Artifact for this reference data as it is at VNFC level!!" );
+            log.info("No capability Artifact for this reference data as it is at VNFC level!!");
             return false;
-        }
-        else {
+        } else {
             return true;
         }
     }
 
     public JSONArray setVnfcTypeInformation(JSONObject scope, SvcLogicContext context) {
         JSONArray vnfcTypeList = null;
-        if (scope.has(VNFC_TYPE)
-            && !scope.isNull(VNFC_TYPE)) {
+        if (scope.has(VNFC_TYPE) && !scope.isNull(VNFC_TYPE)) {
             String vnfcTypeScope = scope.getString(VNFC_TYPE);
             if (StringUtils.isNotBlank(vnfcTypeScope)) {
                 setAttribute(context, scope::getString, VNFC_TYPE);
-                log.info("VNFC Type has been set for this reference artifact!!"+vnfcTypeScope);
+                log.info("VNFC Type has been set for this reference artifact!!" + vnfcTypeScope);
             } else {
                 context.setAttribute(VNFC_TYPE, null);
             }
@@ -388,16 +463,15 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
             context.setAttribute(VNFC_TYPE, null);
         }
         if (scope.has(VNFC_TYPE_LIST) && !scope.isNull(VNFC_TYPE_LIST)
-            && scope.get(VNFC_TYPE_LIST) instanceof JSONArray) {
+                && scope.get(VNFC_TYPE_LIST) instanceof JSONArray) {
             vnfcTypeList = scope.getJSONArray(VNFC_TYPE_LIST);
-            log.info("VNFC TYPE LIST found for this artifact!! "+ vnfcTypeList.toString());
+            log.info("VNFC TYPE LIST found for this artifact!! " + vnfcTypeList.toString());
         }
         return vnfcTypeList;
     }
 
     public void processActionLists(JSONObject content, String actionLevel, JSONArray vnfcActionList,
-        JSONArray vfModuleActionList,
-        JSONArray vnfActionList, JSONArray vmActionVnfcFunctionCodesList) {
+            JSONArray vfModuleActionList, JSONArray vnfActionList, JSONArray vmActionVnfcFunctionCodesList) {
         if (validateActionLevel(actionLevel, ACTION_LEVEL_VNFC)) {
             vnfcActionList.put(content.getString(ACTION));
         }
@@ -408,9 +482,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
             vnfActionList.put(content.getString(ACTION));
         }
         if (validateActionLevel(actionLevel, ACTION_LEVEL_VM)) {
-            if (content.has(VNFC_FUNCTION_CODE_LIST)
-                && !content.isNull(VNFC_FUNCTION_CODE_LIST) && content.get(
-                VNFC_FUNCTION_CODE_LIST) instanceof JSONArray) {
+            if (content.has(VNFC_FUNCTION_CODE_LIST) && !content.isNull(VNFC_FUNCTION_CODE_LIST)
+                    && content.get(VNFC_FUNCTION_CODE_LIST) instanceof JSONArray) {
                 log.info("Found vnfc-function-code-list!!");
                 JSONArray vnfcList = content.getJSONArray(VNFC_FUNCTION_CODE_LIST);
                 JSONObject obj = new JSONObject();
@@ -427,9 +500,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
         return null != actionLevel && actionLevel.equalsIgnoreCase(actionLevelVnfc);
     }
 
-    public void processArtifactList(JSONObject content, DBService dbservice, SvcLogicContext context, JSONArray vnfcTypeList)
-        throws ArtifactHandlerInternalException {
-
+    public void processArtifactList(JSONObject content, DBService dbservice, SvcLogicContext context,
+            JSONArray vnfcTypeList) throws ArtifactHandlerInternalException {
 
         try {
             if (content.has(ARTIFACT_LIST_PARAM) && content.get(ARTIFACT_LIST_PARAM) instanceof JSONArray) {
@@ -437,7 +509,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
                 JSONArray templateIdList = null;
                 if (content.has("template-id-list") && null != content.get("template-id-list")
                         && content.get("template-id-list") instanceof JSONArray) {
-                        templateIdList = content.getJSONArray("template-id-list");
+                    templateIdList = content.getJSONArray("template-id-list");
                 }
                 doProcessArtifactList(dbservice, context, artifactLists, templateIdList, vnfcTypeList);
 
@@ -449,30 +521,30 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
     }
 
     private void doProcessArtifactList(DBService dbservice, SvcLogicContext context, JSONArray artifactLists,
-        JSONArray templateIdList, JSONArray vnfcTypeList)
-        throws SvcLogicException, SQLException, ConfigurationException, DBException {
+            JSONArray templateIdList, JSONArray vnfcTypeList)
+            throws SvcLogicException, SQLException, ConfigurationException, DBException {
         boolean pdFile = false;
-        int modelInd = 0,  vnfcRefInd = 0;
+        int modelInd = 0, vnfcRefInd = 0;
         for (int i = 0; i < artifactLists.length(); i++) {
             String suffix = null;
             String model = null;
             JSONObject artifact = (JSONObject) artifactLists.get(i);
             log.info("artifact is " + artifact);
 
-            //Get Model details
-            if (null != templateIdList && i>0 && i%2 == 0) {//Should this be changed to 3 to account for 3 artifacts
+            // Get Model details
+            if (null != templateIdList && i > 0 && i % 2 == 0) {// Should this be changed to 3 to account for 3
+                                                                // artifacts
                 modelInd++;
             }
-            if (null != vnfcTypeList && i>0 && i%3 == 0) { 
-               //TDP 517180 - CD tool has made changes to send 3 artifacts instead of 2
+            if (null != vnfcTypeList && i > 0 && i % 3 == 0) {
+                // TDP 517180 - CD tool has made changes to send 3 artifacts instead of 2
                 vnfcRefInd++;
             }
             setAttribute(context, artifact::getString, ARTIFACT_NAME);
-            context.setAttribute(FILE_CATEGORY,
-                artifact.getString(ARTIFACT_TYPE));
+            context.setAttribute(FILE_CATEGORY, artifact.getString(ARTIFACT_TYPE));
 
             if (artifact.getString(ARTIFACT_NAME) != null
-                && artifact.getString(ARTIFACT_NAME).toLowerCase().startsWith(PD)) {
+                    && artifact.getString(ARTIFACT_NAME).toLowerCase().startsWith(PD)) {
 
                 suffix = artifact.getString(ARTIFACT_NAME).substring(PD.length());
                 pdFile = true;
@@ -480,11 +552,11 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
             log.info("Artifact-type = " + context.getAttribute(FILE_CATEGORY));
             log.info("Artifact-name = " + context.getAttribute(ARTIFACT_NAME));
 
-            if (null != templateIdList  && modelInd < templateIdList.length()) {
+            if (null != templateIdList && modelInd < templateIdList.length()) {
                 model = templateIdList.getString(modelInd);
-                log.info("Model is ::: "+model+"  ,modelInd = " + modelInd);
+                log.info("Model is ::: " + model + "  ,modelInd = " + modelInd);
             }
-            if (null != vnfcTypeList && vnfcRefInd < vnfcTypeList.length() ) {
+            if (null != vnfcTypeList && vnfcRefInd < vnfcTypeList.length()) {
                 String vnfcType = vnfcTypeList.getString(vnfcRefInd);
                 if (StringUtils.isNotBlank(vnfcType)) {
                     context.setAttribute(VNFC_TYPE, vnfcType);
@@ -492,60 +564,55 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
                 log.info("Setting vnfc type from vnfc-type-list ::" + vnfcType);
             }
             if (StringUtils.isNotBlank(model)) {
-                dbservice.processSdcReferences(context, dbservice.isArtifactUpdateRequired(context,
-                    DB_SDC_REFERENCE, model), model);
-            }
-            else {
-                dbservice.processSdcReferences(context, dbservice.isArtifactUpdateRequired(context,
-                DB_SDC_REFERENCE));
+                dbservice.processSdcReferences(context,
+                        dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model);
+            } else {
+                dbservice.processSdcReferences(context, dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE));
             }
 
             cleanArtifactInstanceData(context);
-            //Moving this into the for loop to account for mulitple artifact sets with pds
+            // Moving this into the for loop to account for mulitple artifact sets with pds
             if (pdFile) {
                 log.info("Sending information related to pdfile Artifact");
                 tryUpdateContext(dbservice, context, pdFile, suffix, model);
-                pdFile = false;//set to false afterprocessing yang and Tosca
+                pdFile = false;// set to false afterprocessing yang and Tosca
             }
         }
 
     }
 
-    private void tryUpdateContext(DBService dbservice, SvcLogicContext context, boolean pdFile,
-            String suffix, String model)
-        throws SvcLogicException, SQLException, ConfigurationException, DBException {
+    private void tryUpdateContext(DBService dbservice, SvcLogicContext context, boolean pdFile, String suffix,
+            String model) throws SvcLogicException, SQLException, ConfigurationException, DBException {
         if (pdFile) {
             context.setAttribute(ARTIFACT_NAME, "Tosca".concat(suffix));
             context.setAttribute(FILE_CATEGORY, TOSCA_MODEL);
             dbservice.processSdcReferences(context,
-                dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model);
+                    dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model);
             context.setAttribute(ARTIFACT_NAME, "Yang".concat(suffix));
             context.setAttribute(FILE_CATEGORY, PARAMETER_YANG);
             dbservice.processSdcReferences(context,
-                dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model);
+                    dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model);
         }
     }
 
     public void processConfigTypeActions(JSONObject content, DBService dbservice, SvcLogicContext context)
-        throws ArtifactHandlerInternalException {
+            throws ArtifactHandlerInternalException {
 
         try {
-            if (contentsActionEquals(content, CONFIGURE_PARAM)
-                || contentsActionEquals(content, CONFIG_MODIFY_PARAM)
-                || contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM)) {
+            if (contentsActionEquals(content, CONFIGURE_PARAM) || contentsActionEquals(content, CONFIG_MODIFY_PARAM)
+                    || contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM)) {
 
                 if (content.has(DOWNLOAD_DG_REFERENCE) && content.getString(DOWNLOAD_DG_REFERENCE).length() > 0) {
 
                     setAttribute(context, content::getString, DOWNLOAD_DG_REFERENCE);
                     dbservice.processDownloadDgReference(context,
-                        dbservice.isArtifactUpdateRequired(context, DB_DOWNLOAD_DG_REFERENCE));
+                            dbservice.isArtifactUpdateRequired(context, DB_DOWNLOAD_DG_REFERENCE));
                 }
                 if (StringUtils.isBlank(context.getAttribute(DOWNLOAD_DG_REFERENCE))) {
-                    context.setAttribute(DOWNLOAD_DG_REFERENCE,
-                        dbservice.getDownLoadDGReference(context));
+                    context.setAttribute(DOWNLOAD_DG_REFERENCE, dbservice.getDownLoadDGReference(context));
                 }
-                dbservice
-                    .processConfigActionDg(context, dbservice.isArtifactUpdateRequired(context, DB_CONFIG_ACTION_DG));
+                dbservice.processConfigActionDg(context,
+                        dbservice.isArtifactUpdateRequired(context, DB_CONFIG_ACTION_DG));
 
                 tryProcessInterfaceProtocol(content, dbservice, context);
             }
@@ -556,13 +623,12 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
     }
 
     private void tryProcessInterfaceProtocol(JSONObject content, DBService dbservice, SvcLogicContext context)
-        throws SvcLogicException, SQLException, ConfigurationException, DBException {
+            throws SvcLogicException, SQLException, ConfigurationException, DBException {
 
         if (contentsActionEquals(content, CONFIGURE_PARAM) || contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM)) {
             boolean isUpdateRequired = dbservice.isArtifactUpdateRequired(context, DB_DEVICE_INTERFACE_PROTOCOL);
             if (contentsActionEquals(content, CONFIGURE_PARAM)
-                || (contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM)
-                && !isUpdateRequired)) {
+                    || (contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM) && !isUpdateRequired)) {
 
                 dbservice.processDeviceInterfaceProtocol(context, isUpdateRequired);
             }
@@ -574,7 +640,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
     }
 
     public void processVmList(JSONObject content, SvcLogicContext context, DBService dbservice)
-        throws SvcLogicException {
+            throws SvcLogicException {
         JSONArray vmList = (JSONArray) content.get(VM);
         dbservice.cleanUpVnfcReferencesForVnf(context);
         for (int i = 0; i < vmList.length(); i++) {
@@ -608,9 +674,9 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
     }
 
     private void tryProcessVnfcReference(JSONObject content, SvcLogicContext context, DBService dbservice)
-        throws SvcLogicException {
+            throws SvcLogicException {
         if (content.getString(ACTION).equals(CONFIGURE_PARAM)
-            || content.getString(ACTION).equals(CONFIG_SCALE_OUT_PARAM)) {
+                || content.getString(ACTION).equals(CONFIG_SCALE_OUT_PARAM)) {
 
             dbservice.processVnfcReference(context, false);
         }
@@ -645,8 +711,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
     }
 
     private void processAndStoreCapabilitiesArtifact(DBService dbService, JSONObject documentInfo,
-        JSONObject capabilities, String capabilityArtifactName, String vnfType)
-        throws ArtifactHandlerInternalException {
+            JSONObject capabilities, String capabilityArtifactName, String vnfType)
+            throws ArtifactHandlerInternalException {
 
         log.info("Begin-->processAndStoreCapabilitiesArtifact ");
 
@@ -663,8 +729,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
             context.setAttribute(ARTIFACT_CONTENTS, newCapabilitiesObject.toString());
             dbService.processSdcReferences(context, dbService.isArtifactUpdateRequired(context, DB_SDC_REFERENCE));
             int intVersion = 0;
-            String internalVersion = dbService.getInternalVersionNumber(context,
-                context.getAttribute(ARTIFACT_NAME), null);
+            String internalVersion = dbService.getInternalVersionNumber(context, context.getAttribute(ARTIFACT_NAME),
+                    null);
             log.info("Internal Version number received from Database : " + internalVersion);
             if (internalVersion != null) {
                 intVersion = Integer.parseInt(internalVersion) + 1;
@@ -694,7 +760,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
     }
 
     private void populateProtocolReference(DBService dbservice, JSONObject content)
-        throws ArtifactHandlerInternalException {
+            throws ArtifactHandlerInternalException {
         log.info("Begin-->populateProtocolReference ");
         try {
             SvcLogicContext context = new SvcLogicContext();
@@ -705,8 +771,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
             String actionLevel = tryGetActionLevel(content);
             String template = tryGetTemplate(content);
 
-            boolean isUpdateNeeded = dbservice
-                .isProtocolReferenceUpdateRequired(context, vnfType, protocol, action, actionLevel, template);
+            boolean isUpdateNeeded = dbservice.isProtocolReferenceUpdateRequired(context, vnfType, protocol, action,
+                    actionLevel, template);
             if (isUpdateNeeded) {
                 dbservice.updateProtocolReference(context, vnfType, protocol, action, actionLevel, template);
             } else {
index 13941b3..f4f623c 100644 (file)
@@ -92,6 +92,8 @@ public class SdcArtifactHandlerConstants {
     public static final String ARTIFACT_NAME_CAPABILITY = "capability";
     public static final String APPC_CONFIG_DIR="/opt/appcauth";
     public static final String URL="url";
-    public static final String OPENSTACK = "OS";
+    public static final String OPENSTACK = "OS"; 
+    public static final String ANSIBLE = "ansible"; 
+
 }
 
index 0d25fbc..7adee0d 100644 (file)
@@ -58,6 +58,8 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({DBService.class, YANGGeneratorFactory.class})
@@ -298,4 +300,147 @@ public class ArtifactHandlerNodeTest {
         documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, "12345");
         return documentInfo;
     }
+    
+    
+    @Test
+    public void testValidateAnsibleAdminArtifact() throws Exception {
+        String contentStr = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\":\"fqdn-value1 url:port\",\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\","
+          + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]},{\"region-id\":\"san4b\","
+          + "\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]}]},{\"cloud-owner\":\"nc1.0\",\"region-id-list\":[{\"region-id\":\"san4a\","
+          + "\"tenant-id-list\":[\"tenantuuid3\",\"tenantuuid4\"]}]}],\"description\":\"fqdn for east zone Production\",\"username\":\"attuid\","
+          + "\"create-date\":\"\",\"modify-username\":\"\",\"modify-date\":\"\"},{\"vnf-management-server-fqdn\":\"fqdn-value2 url:port\","
+          + "\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\",\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid5\","
+          + "\"tenantuuid6\"]},{\"region-id\":\"san4b\",\"tenant-id-list\":[\"tenantuuid5\",\"tenantuuid6\"]}]},{\"cloud-owner\":\"nc1.0\","
+          + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid7\",\"tenantuuid8\"]}]}],"
+          + "\"description\":\"fqdn for east zone Test\",\"username\":\"attuid\",\"create-date\":\"\","
+          + "\"modify-username\":\"\",\"modify-date\":\"\"}]}";
+
+        JSONObject documentInfo = new JSONObject();       
+        documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, contentStr);
+        documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.1V.json");
+        artifactHandlerNode.validateAnsibleAdminArtifact(documentInfo);
+    }
+    
+    @Test
+    public void testValidateAnsibleAdminArtifactWithException() throws Exception {
+       String contentStrOne = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\":\"fqdn-value1 url:port\",\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\","
+         + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]},{\"region-id\":\"san4b\","
+         + "\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]}]},{\"cloud-owner\":\"nc1.0\",\"region-id-list\":[{\"region-id\":\"san4a\","
+         + "\"tenant-id-list\":[\"tenantuuid3\",\"tenantuuid4\"]}]}],\"description\":\"fqdn for east zone Production\",\"username\":\"attuid\","
+         + "\"create-date\":\"\",\"modify-username\":\"\",\"modify-date\":\"\"},{\"vnf-management-server-fqdn\":\"fqdn-value2 url:port\","
+         + "\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\",\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid1\","
+         + "\"tenantuuid6\"]},{\"region-id\":\"san4b\",\"tenant-id-list\":[\"tenantuuid5\",\"tenantuuid6\"]}]},{\"cloud-owner\":\"nc1.0\","
+         + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid7\",\"tenantuuid8\"]}]}],"
+         + "\"description\":\"fqdn for east zone Test\",\"username\":\"attuid\",\"create-date\":\"\","
+         + "\"modify-username\":\"\",\"modify-date\":\"\"}]}";
+       JSONObject documentInfoOne = new JSONObject();       
+       documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, contentStrOne);
+       documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.1V.json");
+       
+       try {
+           artifactHandlerNode.validateAnsibleAdminArtifact(documentInfoOne);
+           fail("Missing exception");
+           }catch(ArtifactHandlerInternalException e) {
+            assertTrue(e.getMessage().contains("Validation Failure"));
+            }
+       
+    }
+    
+    @Test
+    public void testValidateAnsibleAdminArtifactWithJSONException() throws Exception {
+        String contentStrOne = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\":\"fqdn-value1 url:port\",\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\"}";          
+       
+        JSONObject documentInfoOne = new JSONObject();       
+        documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, contentStrOne);
+        documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.1V.json");
+               
+        try {
+            artifactHandlerNode.validateAnsibleAdminArtifact(documentInfoOne);
+            fail("Missing exception");
+        }catch(ArtifactHandlerInternalException je) {
+          assertTrue(je.getMessage().contains("JSON Exception"));
+          
+        }           
+       
+     }
+    
+    @Test
+    public void testProcessArtifactWithException() throws Exception {
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("test", "test");
+        Map<String, String> inParams = new HashMap<>();
+        JSONObject postData = new JSONObject();
+        JSONObject input = new JSONObject();
+        inParams.put("response_prefix", "prefix");
+        JSONObject requestInfo = new JSONObject();
+        JSONObject documentInfo = new JSONObject();
+        String artifactContent = IOUtils.toString(ArtifactHandlerProviderUtilTest.class.getClassLoader()
+                .getResourceAsStream("templates/reference_template"), Charset.defaultCharset());
+        documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, artifactContent);
+        documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "");
+        requestInfo.put("RequestInfo", "testValue");
+        requestInfo.put("request-id","testREQUEST_ID");
+        input.put(SdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, documentInfo);
+        input.put(SdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
+        postData.put("input", input);
+        inParams.put("postData", postData.toString());
+        try {
+            artifactHandlerNode.processArtifact(inParams, ctx);
+            fail("Missing exception");
+        }catch(Exception e) {
+          assertTrue(e.getMessage().contains("Missing Artifact Name"));
+        }
+       
+    }
+    @Test
+    public void testProcessArtifactWithExceptionforAnsible() throws Exception {
+        SvcLogicContext ctx = new SvcLogicContext();
+        ctx.setAttribute("test", "test");
+        Map<String, String> inParams = new HashMap<>();
+        JSONObject postData = new JSONObject();
+        JSONObject input = new JSONObject();
+        inParams.put("response_prefix", "prefix");
+        JSONObject requestInfo = new JSONObject();
+        JSONObject documentInfo = new JSONObject();
+        String artifactContent = IOUtils.toString(ArtifactHandlerProviderUtilTest.class.getClassLoader()
+                .getResourceAsStream("templates/reference_template"), Charset.defaultCharset());
+        documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, artifactContent);
+        documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.2V.json");
+        requestInfo.put("RequestInfo", "testValue");
+        requestInfo.put("request-id","testREQUEST_ID");
+        input.put(SdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, documentInfo);
+        input.put(SdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
+        postData.put("input", input);
+        inParams.put("postData", postData.toString());
+        
+        try {
+             artifactHandlerNode.processArtifact(inParams, ctx);
+             fail("Missing exception");
+        }catch(Exception e) {
+           assertTrue(e.getMessage().contains("JSON Exception:ansible admin"));
+        }
+     }
+    
+    @Test
+    public void testProcessAndStoreCapablitiesArtifact() throws Exception {
+        ArtifactHandlerNode ah = new ArtifactHandlerNode();
+        JSONObject capabilities = new JSONObject();
+        JSONObject documentInfo = new JSONObject();
+        MockDBService dbService = MockDBService.initialise();
+        documentInfo.put(SdcArtifactHandlerConstants.SERVICE_UUID, "testuid");
+        documentInfo.put(SdcArtifactHandlerConstants.DISTRIBUTION_ID, "testDist");
+        documentInfo.put(SdcArtifactHandlerConstants.SERVICE_NAME, "testName");
+        documentInfo.put(SdcArtifactHandlerConstants.SERVICE_DESCRIPTION, "testDesc");
+        documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_UUID, "testRes");
+        documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME, "testResIns");
+        documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_VERSION, "testVers");
+        documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_TYPE, "testResType");
+        documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_UUID, "testArtifactUuid");
+        documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_VERSION, "testArtifactVers");
+        documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, "testArtifactDesc");
+        Whitebox.invokeMethod(ah, "processAndStoreCapabilitiesArtifact", dbService, documentInfo, capabilities,
+                "artifactName", "someVnf");
+    }
+    
+
 }