summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/AnsibleAdapterImpl.java6
-rw-r--r--appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleMessageParser.java425
-rw-r--r--appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleResult.java16
3 files changed, 195 insertions, 252 deletions
diff --git a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/AnsibleAdapterImpl.java b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/AnsibleAdapterImpl.java
index 4f25492e9..afb442463 100644
--- a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/AnsibleAdapterImpl.java
+++ b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/AnsibleAdapterImpl.java
@@ -256,7 +256,7 @@ public class AnsibleAdapterImpl implements AnsibleAdapter {
try {
// create json object to send request
- JsonPayload = messageProcessor.ReqMessage(params);
+ JsonPayload = messageProcessor.reqMessage(params);
AgentUrl = (String) JsonPayload.remove("AgentUrl");
User = (String) JsonPayload.remove("User");
@@ -325,7 +325,7 @@ public class AnsibleAdapterImpl implements AnsibleAdapter {
String ReqUri = "";
try {
- ReqUri = messageProcessor.ReqUri_Result(params);
+ ReqUri = messageProcessor.reqUriResult(params);
System.out.println("Got uri = " + ReqUri);
} catch (APPCException e) {
doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(), "Error constructing request to retreive result due to missing parameters. Reason = " + e.getMessage());
@@ -393,7 +393,7 @@ public class AnsibleAdapterImpl implements AnsibleAdapter {
// Get uri
String ReqUri = "";
try {
- ReqUri = messageProcessor.ReqUri_Log(params);
+ ReqUri = messageProcessor.reqUriLog(params);
logger.info("Retreiving results from " + ReqUri);
} catch (Exception e) {
doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(), e.getMessage());
diff --git a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleMessageParser.java b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleMessageParser.java
index 897aae61b..5457eda49 100644
--- a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleMessageParser.java
+++ b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleMessageParser.java
@@ -30,280 +30,168 @@ package org.onap.appc.adapter.ansible.model;
*/
import java.util.*;
+
import com.google.common.base.Strings;
import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONException;
import org.onap.appc.exceptions.APPCException;
-import org.onap.appc.adapter.ansible.model.AnsibleResult;
-
/**
- * Class that validates and constructs requests sent/received from
+ * Class that validates and constructs requests sent/received from
* Ansible Server
- *
*/
public class AnsibleMessageParser {
-
-
-
- // Accepts a map of strings and
- // a) validates if all parameters are appropriate (else, throws an exception)
- // and b) if correct returns a JSON object with appropriate key-value
- // pairs to send to the server.
- public JSONObject ReqMessage(Map <String, String> params) throws APPCException, NumberFormatException, JSONException{
-
- // Mandatory parameters, that must be in the supplied information to the Ansible Adapter
- // 1. URL to connect to
- // 2. credentials for URL (assume username password for now)
- // 3. Playbook name
- String[] mandatoryTestParams = {"AgentUrl", "PlaybookName", "User", "Password"};
-
- // Optional testService parameters that may be provided in the request
- String[] optionalTestParams = {"EnvParameters", "NodeList", "LocalParameters", "Timeout", "Version", "FileParameters", "Action"};
-
- JSONObject JsonPayload = new JSONObject();
- String payload = "";
- JSONObject paramsJson;
-
-
- // Verify all the mandatory parameters are there
- for (String key: mandatoryTestParams){
- if (! params.containsKey(key)){
- throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !", key));
- }
- payload = params.get(key);
- if (Strings.isNullOrEmpty(payload)){
- throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key % value is Null or Emtpy", key));
- }
-
- JsonPayload.put(key, payload);
- }
-
- // Iterate through optional parameters
- // If null or empty omit it
- for (String key : optionalTestParams){
- if (params.containsKey(key)){
- payload = params.get(key);
- if(!Strings.isNullOrEmpty(payload)){
-
- // different cases require different treatment
- switch (key){
- case "Timeout":
- int Timeout = Integer.parseInt(payload);
- if (Timeout < 0){
- throw new NumberFormatException(" : specified negative integer for timeout = " + payload);
- }
- JsonPayload.put(key, payload);
- break;
-
- case "Version":
- JsonPayload.put(key, payload);
- break;
-
- case "LocalParameters":
- paramsJson = new JSONObject(payload);
- JsonPayload.put(key, paramsJson);
- break;
-
- case "EnvParameters":
- paramsJson = new JSONObject(payload);
- JsonPayload.put(key, paramsJson);
- break;
-
- case "NodeList":
- JSONArray paramsArray = new JSONArray(payload);
- JsonPayload.put(key, paramsArray);
- break;
-
- case "FileParameters":
- // Files may have strings with newlines. Escape them as appropriate
- String formattedPayload = payload.replace("\n", "\\n").replace("\r", "\\r");
- JSONObject fileParams = new JSONObject(formattedPayload);
- JsonPayload.put(key, fileParams);
- break;
-
- }
- }
- }
- }
-
-
- // Generate a unique uuid for the test
- String ReqId = UUID.randomUUID().toString();
- JsonPayload.put("Id", ReqId);
-
- return JsonPayload;
-
+ private static final String STATUS_MESSAGE_KEY = "StatusMessage";
+ private static final String STATUS_CODE_KEY = "StatusCode";
+
+ private static final String PLAYBOOK_NAME_KEY = "PlaybookName";
+ private static final String AGENT_URL_KEY = "AgentUrl";
+ private static final String PASS_KEY = "Password";
+ private static final String USER_KEY = "User";
+ private static final String ID_KEY = "Id";
+
+ private static final String LOCAL_PARAMETERS_OPT_KEY = "LocalParameters";
+ private static final String FILE_PARAMETERS_OPT_KEY = "FileParameters";
+ private static final String ENV_PARAMETERS_OPT_KEY = "EnvParameters";
+ private static final String NODE_LIST_OPT_KEY = "NodeList";
+ private static final String TIMEOUT_OPT_KEY = "Timeout";
+ private static final String VERSION_OPT_KEY = "Version";
+ private static final String ACTION_OPT_KEY = "Action";
+
+ /**
+ * Accepts a map of strings and
+ * a) validates if all parameters are appropriate (else, throws an exception) and
+ * b) if correct returns a JSON object with appropriate key-value pairs to send to the server.
+ *
+ * Mandatory parameters, that must be in the supplied information to the Ansible Adapter
+ * 1. URL to connect to
+ * 2. credentials for URL (assume username password for now)
+ * 3. Playbook name
+ *
+ */
+ public JSONObject reqMessage(Map<String, String> params) throws APPCException {
+ final String[] mandatoryTestParams = { AGENT_URL_KEY, PLAYBOOK_NAME_KEY, USER_KEY, PASS_KEY };
+ final String[] optionalTestParams = { ENV_PARAMETERS_OPT_KEY, NODE_LIST_OPT_KEY, LOCAL_PARAMETERS_OPT_KEY,
+ TIMEOUT_OPT_KEY, VERSION_OPT_KEY, FILE_PARAMETERS_OPT_KEY, ACTION_OPT_KEY };
+
+ JSONObject jsonPayload = new JSONObject();
+
+ for (String key : mandatoryTestParams) {
+ throwIfMissingMandatoryParam(params, key);
+ jsonPayload.put(key, params.get(key));
+ }
+
+ parseOptionalParams(params, optionalTestParams, jsonPayload);
+
+ // Generate a unique uuid for the test
+ String reqId = UUID.randomUUID().toString();
+ jsonPayload.put(ID_KEY, reqId);
+
+ return jsonPayload;
}
+ /**
+ * Method that validates that the Map has enough information
+ * to query Ansible server for a result. If so, it returns
+ * the appropriate url, else an empty string.
+ */
+ public String reqUriResult(Map<String, String> params) throws APPCException {
+ final String[] mandatoryTestParams = { AGENT_URL_KEY, ID_KEY, USER_KEY, PASS_KEY };
- // method that validates that the Map has enough information
- // to query Ansible server for a result . If so, it
- // returns the appropriate url, else an empty string
- public String ReqUri_Result(Map <String, String> params) throws APPCException, NumberFormatException{
-
- // Mandatory parameters, that must be in the request
- String[] mandatoryTestParams = {"AgentUrl", "Id", "User", "Password" };
-
- // Verify all the mandatory parameters are there
- String payload = "";
- String Uri = "";
-
- for (String key: mandatoryTestParams){
- if (! params.containsKey(key)){
- throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !", key));
- }
-
- payload = params.get(key);
- if (Strings.isNullOrEmpty(payload)){
- throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !", key));
- }
-
- }
-
- Uri = params.get("AgentUrl") + "?Id=" + params.get("Id") + "&Type=GetResult";
-
- return Uri;
-
+ for (String key : mandatoryTestParams) {
+ throwIfMissingMandatoryParam(params, key);
+ }
+ return params.get(AGENT_URL_KEY) + "?Id=" + params.get(ID_KEY) + "&Type=GetResult";
}
+ /**
+ * Method that validates that the Map has enough information
+ * to query Ansible server for logs. If so, it populates the
+ * appropriate returns the appropriate url, else an empty string.
+ */
+ public String reqUriOutput(Map<String, String> params) throws APPCException {
+ final String[] mandatoryTestParams = { AGENT_URL_KEY, ID_KEY, USER_KEY, PASS_KEY };
- // method that validates that the Map has enough information
- // to query Ansible server for logs. If so, it populates the appropriate
- // returns the appropriate url, else an empty string
- public String ReqUri_Output(Map <String, String> params) throws APPCException, NumberFormatException{
-
-
- // Mandatory parameters, that must be in the request
- String[] mandatoryTestParams = {"AgentUrl", "Id", "User", "Password" };
-
- // Verify all the mandatory parameters are there
- String payload = "";
- String Uri = "";
-
- for (String key: mandatoryTestParams){
- if (! params.containsKey(key)){
- throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !", key));
- }
- payload = params.get(key);
- if (Strings.isNullOrEmpty(payload)){
- throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !", key));
- }
-
- }
-
- Uri = params.get("AgentUrl") + "?Id=" + params.get("Id") + "&Type=GetOutput";
- return Uri;
-
+ for (String mandatoryParam : mandatoryTestParams) {
+ throwIfMissingMandatoryParam(params, mandatoryParam);
+ }
+ return params.get(AGENT_URL_KEY) + "?Id=" + params.get(ID_KEY) + "&Type=GetOutput";
}
- // method that validates that the Map has enough information
- // to query Ansible server for logs. If so, it populates the appropriate
- // returns the appropriate url, else an empty string
- public String ReqUri_Log(Map <String, String> params) throws APPCException, NumberFormatException{
-
-
- // Mandatory parameters, that must be in the request
- String[] mandatoryTestParams = {"AgentUrl", "Id", "User", "Password" };
-
- // Verify all the mandatory parameters are there
- String payload = "";
- String Uri = "";
-
- for (String key: mandatoryTestParams){
- if (! params.containsKey(key)){
- throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !", key));
- }
- payload = params.get(key);
- if (Strings.isNullOrEmpty(payload)){
- throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !", key));
- }
+ /**
+ * Method that validates that the Map has enough information
+ * to query Ansible server for logs. If so, it populates the appropriate
+ * returns the appropriate url, else an empty string.
+ */
+ public String reqUriLog(Map<String, String> params) throws APPCException {
- }
+ final String[] mandatoryTestParams = { AGENT_URL_KEY, ID_KEY, USER_KEY, PASS_KEY };
- Uri = params.get("AgentUrl") + "?Id=" + params.get("Id") + "&Type=GetLog";
- return Uri;
-
+ for (String mandatoryParam : mandatoryTestParams) {
+ throwIfMissingMandatoryParam(params, mandatoryParam);
+ }
+ return params.get(AGENT_URL_KEY) + "?Id=" + params.get(ID_KEY) + "&Type=GetLog";
}
-
- /**
- This method parses response from the
- Ansible Server when we do a post
- and returns an AnsibleResult object
- **/
-
- public AnsibleResult parsePostResponse(String Input) throws APPCException{
-
- AnsibleResult ansibleResult = new AnsibleResult();
-
- try{
- //Jsonify it
- JSONObject postResponse = new JSONObject(Input);
-
- // Mandatory keys required are StatusCode and StatusMessage
- int Code = postResponse.getInt("StatusCode");
- String Message = postResponse.getString("StatusMessage");
-
-
- // Status code must must be either 100 (accepted) or 101 (rejected)
- boolean valCode = AnsibleResultCodes.CODE.checkValidCode(AnsibleResultCodes.INITRESPONSE.getValue(), Code);
- if(!valCode){
- throw new APPCException("Invalid InitResponse code = " + Code + " received. MUST be one of " + AnsibleResultCodes.CODE.getValidCodes(AnsibleResultCodes.INITRESPONSE.getValue()) );
- }
-
- ansibleResult.setStatusCode(Code);
- ansibleResult.setStatusMessage(Message);
-
- }
- catch(JSONException e){
- ansibleResult = new AnsibleResult(600, "Error parsing response = " + Input + ". Error = " + e.getMessage(), "");
- }
-
-
- return ansibleResult;
+ /**
+ * This method parses response from the Ansible Server when we do a post
+ * and returns an AnsibleResult object.
+ */
+ public AnsibleResult parsePostResponse(String input) throws APPCException {
+ AnsibleResult ansibleResult;
+ try {
+ JSONObject postResponse = new JSONObject(input);
+
+ int code = postResponse.getInt(STATUS_CODE_KEY);
+ String msg = postResponse.getString(STATUS_MESSAGE_KEY);
+
+ int initResponseValue = AnsibleResultCodes.INITRESPONSE.getValue();
+ boolean validCode = AnsibleResultCodes.CODE.checkValidCode(initResponseValue, code);
+ if (!validCode) {
+ throw new APPCException("Invalid InitResponse code = " + code + " received. MUST be one of " + AnsibleResultCodes.CODE.getValidCodes(initResponseValue));
+ }
+
+ ansibleResult = new AnsibleResult(code, msg);
+
+ } catch (JSONException e) {
+ ansibleResult = new AnsibleResult(600, "Error parsing response = " + input + ". Error = " + e.getMessage());
+ }
+ return ansibleResult;
}
-
- /** This method parses response from an Ansible server when we do a GET for a result
- and returns an AnsibleResult object
+ /**
+ * This method parses response from an Ansible server when we do a GET for a result
+ * and returns an AnsibleResult object.
**/
- public AnsibleResult parseGetResponse(String Input) throws APPCException {
+ public AnsibleResult parseGetResponse(String input) throws APPCException {
AnsibleResult ansibleResult = new AnsibleResult();
- int FinalCode = AnsibleResultCodes.FINAL_SUCCESS.getValue();
-
+ int finalCode = AnsibleResultCodes.FINAL_SUCCESS.getValue();
try{
+ JSONObject postResponse = new JSONObject(input);
- //Jsonify it
- JSONObject postResponse = new JSONObject(Input);
-
- // Mandatory keys required are Status and Message
- int Code = postResponse.getInt("StatusCode");
- String Message = postResponse.getString("StatusMessage");
+ int codeStatus = postResponse.getInt(STATUS_CODE_KEY);
+ String messageStatus = postResponse.getString(STATUS_MESSAGE_KEY);
- // Status code must be valid
- // Status code must must be either 100 (accepted) or 101 (rejected)
- boolean valCode = AnsibleResultCodes.CODE.checkValidCode(AnsibleResultCodes.FINALRESPONSE.getValue(), Code);
+ boolean valCode = AnsibleResultCodes.CODE.checkValidCode(AnsibleResultCodes.FINALRESPONSE.getValue(), codeStatus);
if(!valCode){
- throw new APPCException("Invalid FinalResponse code = " + Code + " received. MUST be one of " + AnsibleResultCodes.CODE.getValidCodes(AnsibleResultCodes.FINALRESPONSE.getValue()));
+ throw new APPCException("Invalid FinalResponse code = " + codeStatus + " received. MUST be one of " + AnsibleResultCodes.CODE.getValidCodes(AnsibleResultCodes.FINALRESPONSE.getValue()));
}
-
- ansibleResult.setStatusCode(Code);
- ansibleResult.setStatusMessage(Message);
- System.out.println("Received response with code = " + Integer.toString(Code) + " Message = " + Message);
+ ansibleResult.setStatusCode(codeStatus);
+ ansibleResult.setStatusMessage(messageStatus);
+ System.out.println("Received response with code = " + Integer.toString(codeStatus) + " Message = " + messageStatus);
if(! postResponse.isNull("Results")){
- // Results are available. process them
+ // Results are available. process them
// Results is a dictionary of the form
// {host :{status:s, group:g, message:m, hostname:h}, ...}
System.out.println("Processing results in response");
@@ -317,14 +205,14 @@ public class AnsibleMessageParser {
System.out.println("Processing host = " + host);
try{
- JSONObject host_response = results.getJSONObject(host);
- int subCode = host_response.getInt("StatusCode");
- String message = host_response.getString("StatusMessage");
+ JSONObject hostResponse = results.getJSONObject(host);
+ int subCode = hostResponse.getInt(STATUS_CODE_KEY);
+ String message = hostResponse.getString(STATUS_MESSAGE_KEY);
System.out.println("Code = " + Integer.toString(subCode) + " Message = " + message);
if(subCode != 200 || ! message.equals("SUCCESS")){
- FinalCode = AnsibleResultCodes.REQ_FAILURE.getValue();
+ finalCode = AnsibleResultCodes.REQ_FAILURE.getValue();
}
}
catch(JSONException e){
@@ -334,7 +222,7 @@ public class AnsibleMessageParser {
}
}
- ansibleResult.setStatusCode(FinalCode);
+ ansibleResult.setStatusCode(finalCode);
// We return entire Results object as message
ansibleResult.setResults(results.toString());
@@ -348,16 +236,71 @@ public class AnsibleMessageParser {
}
catch(JSONException e){
- ansibleResult = new AnsibleResult(AnsibleResultCodes.INVALID_PAYLOAD.getValue(), "Error parsing response = " + Input + ". Error = " + e.getMessage(), "");
+ ansibleResult = new AnsibleResult(AnsibleResultCodes.INVALID_PAYLOAD.getValue(), "Error parsing response = " + input + ". Error = " + e.getMessage(), "");
}
return ansibleResult;
}
+ private void parseOptionalParams(Map<String, String> params, String[] optionalTestParams, JSONObject jsonPayload) {
+ Set<String> optionalParamsSet = new HashSet<>();
+ Collections.addAll(optionalParamsSet, optionalTestParams);
-};
-
-
+ params.entrySet()
+ .stream()
+ .filter(entry -> optionalParamsSet.contains(entry.getKey()))
+ .filter(entry -> !Strings.isNullOrEmpty(entry.getValue()))
+ .forEach(entry -> parseOptionalParam(entry, jsonPayload));
+ }
+
+ private void parseOptionalParam(Map.Entry<String, String> params, JSONObject jsonPayload) {
+ String key = params.getKey();
+ String payload = params.getValue();
+
+ switch (key) {
+ case TIMEOUT_OPT_KEY:
+ int timeout = Integer.parseInt(payload);
+ if (timeout < 0) {
+ throw new NumberFormatException(" : specified negative integer for timeout = " + payload);
+ }
+ jsonPayload.put(key, payload);
+ break;
+
+ case VERSION_OPT_KEY:
+ jsonPayload.put(key, payload);
+ break;
+
+ case LOCAL_PARAMETERS_OPT_KEY:
+ case ENV_PARAMETERS_OPT_KEY:
+ JSONObject paramsJson = new JSONObject(payload);
+ jsonPayload.put(key, paramsJson);
+ break;
+
+ case NODE_LIST_OPT_KEY:
+ JSONArray paramsArray = new JSONArray(payload);
+ jsonPayload.put(key, paramsArray);
+ break;
+
+ case FILE_PARAMETERS_OPT_KEY:
+ // Files may have strings with newlines. Escape them as appropriate
+ String formattedPayload = payload.replace("\n", "\\n").replace("\r", "\\r");
+ JSONObject fileParams = new JSONObject(formattedPayload);
+ jsonPayload.put(key, fileParams);
+ break;
+
+ default:
+ break;
+ }
+ }
+ private void throwIfMissingMandatoryParam(Map<String, String> params, String key) throws APPCException {
+ if (!params.containsKey(key)) {
+ throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !", key));
+ }
+ if (Strings.isNullOrEmpty(params.get(key))) {
+ throw new APPCException(String.format("Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !", key));
+ }
+ }
+} \ No newline at end of file
diff --git a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleResult.java b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleResult.java
index 6b7369cfb..873d88f43 100644
--- a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleResult.java
+++ b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/model/AnsibleResult.java
@@ -32,18 +32,18 @@ public class AnsibleResult{
private String results;
- public AnsibleResult(){
- statusCode = -1;
- statusMessage = "UNKNOWN";
- results = "UNKNOWN";
+ public AnsibleResult(){
+ this(-1, "UNKNOWN", "UNKNOWN");
+ }
+ public AnsibleResult(int code, String message) {
+ this(code, message, "UNKNOWN");
}
- // constructor
public AnsibleResult(int code, String message, String result){
- statusCode = code;
- statusMessage = message;
- results = result;
+ statusCode = code;
+ statusMessage = message;
+ results = result;
}
//*************************************************