* =============================================================================
* Modifications Copyright (C) 2019 IBM
* =============================================================================
+ * Modifications Copyright (C) 2019 Orange
+ * =============================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
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 AUTO_NODE_LIST_OPT_KEY = "AutoNodeList";
private static final String TIMEOUT_OPT_KEY = "Timeout";
private static final String VERSION_OPT_KEY = "Version";
private static final String INVENTORY_NAMES_OPT_KEY = "InventoryNames";
+ private static final String EXTRAVARS_OPT_KEY ="ExtraVars";
private static final String ACTION_OPT_KEY = "Action";
private static final String OUTPUT_OPT_KEY = "Output";
private static final String JSON_ERROR_MESSAGE = "JSONException: Error parsing response";
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 };
+ TIMEOUT_OPT_KEY, VERSION_OPT_KEY, FILE_PARAMETERS_OPT_KEY, ACTION_OPT_KEY, INVENTORY_NAMES_OPT_KEY,
+ AUTO_NODE_LIST_OPT_KEY };
JSONObject jsonPayload = new JSONObject();
int codeStatus = postRsp.getInt(STATUS_CODE_KEY);
String messageStatus = postRsp.getString(STATUS_MESSAGE_KEY);
int finalCode = AnsibleResultCodes.FINAL_SUCCESS.getValue();
-
+ JSONObject config = null;
boolean valCode = AnsibleResultCodes.CODE.checkValidCode(AnsibleResultCodes.FINALRESPONSE.getValue(),
codeStatus);
ansibleResult.setStatusCode(codeStatus);
ansibleResult.setStatusMessage(messageStatus);
+ ansibleResult.setconfigData("UNKNOWN");
LOGGER.info("Received response with code = {}, Message = {}", codeStatus, messageStatus);
if (!postRsp.isNull("Results")) {
if (subCode != 200 || !(("SUCCESS").equals(message))) {
finalCode = AnsibleResultCodes.REQ_FAILURE.getValue();
}
+ if ((hostResponse.optJSONObject(OUTPUT_OPT_KEY)) != null) {
+ JSONObject hostResponseObjectInfo = hostResponse.optJSONObject(OUTPUT_OPT_KEY).optJSONObject("info");
+ JSONObject hostResponseConfigData = hostResponseObjectInfo.optJSONObject("configData");
+ if ((hostResponseObjectInfo != null) && hostResponseConfigData != null) {
+ config = hostResponseConfigData;
+ ansibleResult.setconfigData(config.toString());
+ }
+ }
} catch (JSONException e) {
LOGGER.error(JSON_ERROR_MESSAGE, e);
ansibleResult.setStatusCode(AnsibleResultCodes.INVALID_RESPONSE.getValue());
switch (key) {
case TIMEOUT_OPT_KEY:
+ if (dataIsVariable(payload))
+ break;
int timeout = Integer.parseInt(payload);
if (timeout < 0) {
throw new NumberFormatException(" : specified negative integer for timeout = " + payload);
}
jsonPayload.put(key, payload);
break;
-
+ case AUTO_NODE_LIST_OPT_KEY:
+ if (payload.equalsIgnoreCase("true") || payload.equalsIgnoreCase("false")) {
+ jsonPayload.put(key, payload);
+ } else {
+ throw new IllegalArgumentException(" : specified invalid boolean value of AutoNodeList = " + payload);
+ }
+ break;
case VERSION_OPT_KEY:
+ if (dataIsVariable(payload))
+ break;
case INVENTORY_NAMES_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 EXTRAVARS_OPT_KEY:
+ JSONObject paramsJson = new JSONObject(payload);
+ jsonDataIsVariable(paramsJson);
+ 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:
+ if(payload.startsWith("$"))
+ break;
+ JSONArray paramsArray = new JSONArray(payload);
+ jsonPayload.put(key, paramsArray);
+ break;
+ case FILE_PARAMETERS_OPT_KEY:
+ if (dataIsVariable(payload))
+ break;
jsonPayload.put(key, getFilePayload(payload));
break;
"Ansible: Mandatory AnsibleAdapter key %s not found in parameters provided by calling agent !",
key));
}
+
+ if (StringUtils.startsWith(params.get(key), "$")) {
+ throw new APPCException(String.format(
+ "Ansible: Mandatory AnsibleAdapter key %s is a variable",
+ key));
+ }
+ }
+
+
+ /*private boolean varObjContainsNoData(Object obj) {
+ if (obj instanceof String) {
+ if (StringUtils.startsWith(obj.toString(), "$") || StringUtils.isEmpty(obj.toString()))
+ return true;
+ }
+ return false;
+
+ }*/
+
+ private boolean dataIsVariable(String payload) {
+ if (StringUtils.startsWith(payload, "$") || StringUtils.isEmpty(payload))
+ return true;
+ else
+ return false;
+
+ }
+
+ private JSONObject jsonDataIsVariable(JSONObject paramsJson) {
+ LOGGER.info("input json is " + paramsJson);
+ String[] keys = JSONObject.getNames(paramsJson);
+ for (String k : keys) {
+ Object a = paramsJson.get(k);
+ if (a instanceof String) {
+ if (StringUtils.startsWith(a.toString(), "$") || StringUtils.isEmpty(a.toString())) {
+ LOGGER.info("removing key " + k);
+ paramsJson.remove(k);
+ }
+ }
+ }
+ LOGGER.info("returning json as " + paramsJson);
+ return paramsJson;
}
}