summaryrefslogtreecommitdiffstats
path: root/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src
diff options
context:
space:
mode:
Diffstat (limited to 'appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src')
-rw-r--r--appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/AnsibleAdapterImpl.java341
-rw-r--r--appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/ConnectionBuilder.java307
2 files changed, 294 insertions, 354 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 afb442463..d3f8c7e18 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
@@ -26,48 +26,36 @@ package org.onap.appc.adapter.ansible.impl;
import java.util.Map;
import java.util.Properties;
-import java.lang.*;
-
-import org.onap.appc.configuration.Configuration;
-import org.onap.appc.configuration.ConfigurationFactory;
-import org.onap.appc.exceptions.APPCException;
-
-import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
-import org.onap.ccsdk.sli.core.sli.SvcLogicException;
-
-import org.json.JSONObject;
+import org.apache.commons.lang.StringUtils;
import org.json.JSONException;
-
+import org.json.JSONObject;
import org.onap.appc.adapter.ansible.AnsibleAdapter;
-
-import org.onap.appc.adapter.ansible.model.AnsibleResult;
import org.onap.appc.adapter.ansible.model.AnsibleMessageParser;
+import org.onap.appc.adapter.ansible.model.AnsibleResult;
import org.onap.appc.adapter.ansible.model.AnsibleResultCodes;
import org.onap.appc.adapter.ansible.model.AnsibleServerEmulator;
-
+import org.onap.appc.configuration.Configuration;
+import org.onap.appc.configuration.ConfigurationFactory;
+import org.onap.appc.exceptions.APPCException;
+import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
-
-
/**
- * This class implements the {@link AnsibleAdapter} interface. This interface
- * defines the behaviors that our service provides.
+ * This class implements the {@link AnsibleAdapter} interface. This interface defines the behaviors
+ * that our service provides.
*/
public class AnsibleAdapterImpl implements AnsibleAdapter {
/**
- * The constant used to define the adapter name in the mapped diagnostic
- * context
+ * The constant used to define the adapter name in the mapped diagnostic context
*/
-
-
@SuppressWarnings("nls")
public static final String MDC_ADAPTER = "Ansible Adapter";
/**
- * The constant used to define the service name in the mapped diagnostic
- * context
+ * The constant used to define the service name in the mapped diagnostic context
*/
@SuppressWarnings("nls")
public static final String MDC_SERVICE = "service";
@@ -86,9 +74,20 @@ public class AnsibleAdapterImpl implements AnsibleAdapter {
/**
* Adapter Name
- **/
+ */
private static final String ADAPTER_NAME = "Ansible Adapter";
+ private static final String RESULT_CODE_ATTRIBUTE_NAME = "org.onap.appc.adapter.ansible.result.code";
+ private static final String MESSAGE_ATTRIBUTE_NAME = "org.onap.appc.adapter.ansible.message";
+ private static final String RESULTS_ATTRIBUTE_NAME = "org.onap.appc.adapter.ansible.results";
+ private static final String ID_ATTRIBUTE_NAME = "org.onap.appc.adapter.ansible.Id";
+ private static final String LOG_ATTRIBUTE_NAME = "org.onap.appc.adapter.ansible.log";
+
+ private static final String CLIENT_TYPE_PROPERTY_NAME = "org.onap.appc.adapter.ansible.clientType";
+ private static final String TRUSTSTORE_PROPERTY_NAME = "org.onap.appc.adapter.ansible.trustStore";
+ private static final String TRUSTPASSWD_PROPERTY_NAME = "org.onap.appc.adapter.ansible.trustStore.trustPasswd";
+
+ private static final String PASSWORD = "Password";
/**
* The logger to be used
@@ -99,19 +98,11 @@ public class AnsibleAdapterImpl implements AnsibleAdapter {
* A reference to the adapter configuration object.
*/
private Configuration configuration;
- ;
-
- /**
- * can Specify a X509 certificate file for use if required ...
- * Must be initialized with setCertFile
- **/
- private String certFile = "";
-
/**
* Connection object
**/
- ConnectionBuilder http_client;
+ private ConnectionBuilder httpClient;
/**
* Ansible API Message Handlers
@@ -129,27 +120,17 @@ public class AnsibleAdapterImpl implements AnsibleAdapter {
private AnsibleServerEmulator testServer;
/**
- * This default constructor is used as a work around because the activator
- * wasnt getting called
+ * This default constructor is used as a work around because the activator wasnt getting called
*/
public AnsibleAdapterImpl() {
initialize();
}
-
- /**
- * @param props not used
- */
- public AnsibleAdapterImpl(Properties props) {
- initialize();
- }
-
-
/**
* Used for jUnit test and testing interface
- **/
- public AnsibleAdapterImpl(boolean Mode) {
- testMode = Mode;
+ */
+ public AnsibleAdapterImpl(boolean mode) {
+ testMode = mode;
testServer = new AnsibleServerEmulator();
messageProcessor = new AnsibleMessageParser();
}
@@ -165,24 +146,22 @@ public class AnsibleAdapterImpl implements AnsibleAdapter {
return ADAPTER_NAME;
}
-
/**
- * @param rc Method posts info to Context memory in case of an error
- * and throws a SvcLogicException causing SLI to register this as a failure
+ * @param rc Method posts info to Context memory in case of an error and throws a
+ * SvcLogicException causing SLI to register this as a failure
*/
@SuppressWarnings("static-method")
private void doFailure(SvcLogicContext svcLogic, int code, String message) throws SvcLogicException {
svcLogic.setStatus(OUTCOME_FAILURE);
- svcLogic.setAttribute("org.onap.appc.adapter.ansible.result.code", Integer.toString(code));
- svcLogic.setAttribute("org.onap.appc.adapter.ansible.message", message);
+ svcLogic.setAttribute(RESULT_CODE_ATTRIBUTE_NAME, Integer.toString(code));
+ svcLogic.setAttribute(MESSAGE_ATTRIBUTE_NAME, message);
throw new SvcLogicException("Ansible Adapter Error = " + message);
}
-
/**
- * initialize the Ansible adapter based on default and over-ride configuration data
+ * initialize the Ansible adapter based on default and over-ride configuration data
*/
private void initialize() {
@@ -196,152 +175,155 @@ public class AnsibleAdapterImpl implements AnsibleAdapter {
// type of client is extracted from the property file parameter
// org.onap.appc.adapter.ansible.clientType
// It can be :
- // 1. TRUST_ALL (trust all SSL certs). To be used ONLY in dev
- // 2. TRUST_CERT (trust only those whose certificates have been stored in the trustStore file)
- // 3. DEFAULT (trust only well known certificates). This is standard behaviour to which it will
- // revert. To be used in PROD
+ // 1. TRUST_ALL (trust all SSL certs). To be used ONLY in dev
+ // 2. TRUST_CERT (trust only those whose certificates have been stored in the trustStore file)
+ // 3. DEFAULT (trust only well known certificates). This is standard behavior to which it will
+ // revert. To be used in PROD
try {
- String clientType = props.getProperty("org.onap.appc.adapter.ansible.clientType");
+ String clientType = props.getProperty(CLIENT_TYPE_PROPERTY_NAME);
logger.info("Ansible http client type set to " + clientType);
- if (clientType.equals("TRUST_ALL")) {
- logger.info("Creating http client to trust ALL ssl certificates. WARNING. This should be done only in dev environments");
- http_client = new ConnectionBuilder(1);
- } else if (clientType.equals("TRUST_CERT")) {
+ if ("TRUST_ALL".equals(clientType)) {
+ logger.info(
+ "Creating http client to trust ALL ssl certificates. WARNING. This should be done only in dev environments");
+ httpClient = new ConnectionBuilder(1);
+ } else if ("TRUST_CERT".equals(clientType)) {
// set path to keystore file
- String trustStoreFile = props.getProperty("org.onap.appc.adapter.ansible.trustStore");
- String key = props.getProperty("org.onap.appc.adapter.ansible.trustStore.trustPasswd");
+ String trustStoreFile = props.getProperty(TRUSTSTORE_PROPERTY_NAME);
+ String key = props.getProperty(TRUSTPASSWD_PROPERTY_NAME);
char[] trustStorePasswd = key.toCharArray();
- String trustStoreType = "JKS";
logger.info("Creating http client with trustmanager from " + trustStoreFile);
- http_client = new ConnectionBuilder(trustStoreFile, trustStorePasswd);
+ httpClient = new ConnectionBuilder(trustStoreFile, trustStorePasswd);
} else {
logger.info("Creating http client with default behaviour");
- http_client = new ConnectionBuilder(0);
+ httpClient = new ConnectionBuilder(0);
}
} catch (Exception e) {
- logger.error("Error Initializing Ansible Adapter due to Unknown Exception: reason = " + e.getMessage());
+ logger.error("Error Initializing Ansible Adapter due to Unknown Exception", e);
}
logger.info("Intitialized Ansible Adapter");
-
- }
-
-
- /**
- * set the certificate file if not a trusted/known CA
- **/
- private void setCertFile(String CertFile) {
- this.certFile = CertFile;
}
-
// Public Method to post request to execute playbook. Posts the following back
// to Svc context memory
// org.onap.appc.adapter.ansible.req.code : 100 if successful
// org.onap.appc.adapter.ansible.req.messge : any message
// org.onap.appc.adapter.ansible.req.Id : a unique uuid to reference the request
-
+ @Override
public void reqExec(Map<String, String> params, SvcLogicContext ctx) throws SvcLogicException {
- String PlaybookName = "";
- String payload = "";
- String AgentUrl = "";
- String User = "";
- String Password = "";
- String Id = "";
+ String playbookName = StringUtils.EMPTY;
+ String payload = StringUtils.EMPTY;
+ String agentUrl = StringUtils.EMPTY;
+ String user = StringUtils.EMPTY;
+ String password = StringUtils.EMPTY;
+ String id = StringUtils.EMPTY;
- JSONObject JsonPayload;
+ JSONObject jsonPayload;
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");
- Password = (String) JsonPayload.remove("Password");
- Id = (String) JsonPayload.getString("Id");
- payload = JsonPayload.toString();
+ agentUrl = (String) jsonPayload.remove("AgentUrl");
+ user = (String) jsonPayload.remove("User");
+ password = (String) jsonPayload.remove(PASSWORD);
+ id = jsonPayload.getString("Id");
+ payload = jsonPayload.toString();
logger.info("Updated Payload = " + payload);
} catch (APPCException e) {
- doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(), "Error constructing request for execution of playbook due to missing mandatory parameters. Reason = " + e.getMessage());
+ logger.error("APPCException caught", e);
+ doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(),
+ "Error constructing request for execution of playbook due to missing mandatory parameters. Reason = "
+ + e.getMessage());
} catch (JSONException e) {
- doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(), "Error constructing request for execution of playbook due to invalid JSON block. Reason = " + e.getMessage());
+ logger.error("JSONException caught", e);
+ doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(),
+ "Error constructing request for execution of playbook due to invalid JSON block. Reason = "
+ + e.getMessage());
} catch (NumberFormatException e) {
- doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(), "Error constructing request for execution of playbook due to invalid parameter values. Reason = " + e.getMessage());
+ logger.error("NumberFormateException caught", e);
+ doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(),
+ "Error constructing request for execution of playbook due to invalid parameter values. Reason = "
+ + e.getMessage());
}
-
int code = -1;
- String message = "";
+ String message = StringUtils.EMPTY;
try {
-
// post the test request
- //---------------------------------------
- logger.info("Posting request = " + payload + " to url = " + AgentUrl);
- AnsibleResult testresult = postExecRequest(AgentUrl, payload, User, Password);
-
+ logger.info("Posting request = " + payload + " to url = " + agentUrl);
+ AnsibleResult testresult = postExecRequest(agentUrl, payload, user, password);
- // Process if HTTP was successfull
+ // Process if HTTP was successful
if (testresult.getStatusCode() == 200) {
testresult = messageProcessor.parsePostResponse(testresult.getStatusMessage());
} else {
- doFailure(ctx, testresult.getStatusCode(), "Error posting request. Reason = " + testresult.getStatusMessage());
+ doFailure(ctx, testresult.getStatusCode(),
+ "Error posting request. Reason = " + testresult.getStatusMessage());
}
code = testresult.getStatusCode();
message = testresult.getStatusMessage();
-
// Check status of test request returned by Agent
- //-----------------------------------------------
if (code == AnsibleResultCodes.PENDING.getValue()) {
- logger.info(String.format("Submission of Test %s successful.", PlaybookName));
+ logger.info(String.format("Submission of Test %s successful.", playbookName));
// test request accepted. We are in asynchronous case
} else {
doFailure(ctx, code, "Request for execution of playbook rejected. Reason = " + message);
}
} catch (APPCException e) {
- doFailure(ctx, AnsibleResultCodes.UNKNOWN_EXCEPTION.getValue(), "Exception encountered when posting request for execution of playbook. Reason = " + e.getMessage());
+ logger.error("APPCException caught", e);
+ doFailure(ctx, AnsibleResultCodes.UNKNOWN_EXCEPTION.getValue(),
+ "Exception encountered when posting request for execution of playbook. Reason = " + e.getMessage());
}
-
- ctx.setAttribute("org.onap.appc.adapter.ansible.result.code", Integer.toString(code));
- ctx.setAttribute("org.onap.appc.adapter.ansible.message", message);
- ctx.setAttribute("org.onap.appc.adapter.ansible.Id", Id);
-
+ ctx.setAttribute(RESULT_CODE_ATTRIBUTE_NAME, Integer.toString(code));
+ ctx.setAttribute(MESSAGE_ATTRIBUTE_NAME, message);
+ ctx.setAttribute(ID_ATTRIBUTE_NAME, id);
}
-
- // Public method to query status of a specific request
- // It blocks till the Ansible Server responds or the session times out
-
+ /**
+ * Public method to query status of a specific request It blocks till the Ansible Server
+ * responds or the session times out (non-Javadoc)
+ *
+ * @see org.onap.appc.adapter.ansible.AnsibleAdapter#reqExecResult(java.util.Map,
+ * org.onap.ccsdk.sli.core.sli.SvcLogicContext)
+ */
+ @Override
public void reqExecResult(Map<String, String> params, SvcLogicContext ctx) throws SvcLogicException {
-
- // Get uri
- String ReqUri = "";
+ // Get URI
+ String reqUri = StringUtils.EMPTY;
try {
- ReqUri = messageProcessor.reqUriResult(params);
- System.out.println("Got uri = " + ReqUri);
+ 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());
+ logger.error("APPCException caught", e);
+ doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(),
+ "Error constructing request to retreive result due to missing parameters. Reason = "
+ + e.getMessage());
return;
} catch (NumberFormatException e) {
- doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(), "Error constructing request to retreive result due to invalid parameters value. Reason = " + e.getMessage());
+ logger.error("NumberFormatException caught", e);
+ doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(),
+ "Error constructing request to retreive result due to invalid parameters value. Reason = "
+ + e.getMessage());
return;
}
int code = -1;
- String message = "";
- String results = "";
+ String message = StringUtils.EMPTY;
+ String results = StringUtils.EMPTY;
try {
- // Try to retreive the test results (modify the url for that)
- AnsibleResult testresult = queryServer(ReqUri, params.get("User"), params.get("Password"));
+ // Try to retrieve the test results (modify the URL for that)
+ AnsibleResult testresult = queryServer(reqUri, params.get("User"), params.get(PASSWORD));
code = testresult.getStatusCode();
message = testresult.getStatusMessage();
@@ -356,113 +338,96 @@ public class AnsibleAdapterImpl implements AnsibleAdapter {
}
logger.info("Request response = " + message);
-
} catch (APPCException e) {
- doFailure(ctx, AnsibleResultCodes.UNKNOWN_EXCEPTION.getValue(), "Exception encountered retreiving result : " + e.getMessage());
+ doFailure(ctx, AnsibleResultCodes.UNKNOWN_EXCEPTION.getValue(),
+ "Exception encountered retreiving result : " + e.getMessage());
return;
}
// We were able to get and process the results. Determine if playbook succeeded
if (code == AnsibleResultCodes.FINAL_SUCCESS.getValue()) {
- message = String.format("Ansible Request %s finished with Result = %s, Message = %s", params.get("Id"), OUTCOME_SUCCESS, message);
+ message = String.format("Ansible Request %s finished with Result = %s, Message = %s", params.get("Id"),
+ OUTCOME_SUCCESS, message);
logger.info(message);
} else {
- logger.info(String.format("Ansible Request %s finished with Result %s, Message = %s", params.get("Id"), OUTCOME_FAILURE, message));
- ctx.setAttribute("org.onap.appc.adapter.ansible.results", results);
+ logger.info(String.format("Ansible Request %s finished with Result %s, Message = %s", params.get("Id"),
+ OUTCOME_FAILURE, message));
+ ctx.setAttribute(RESULTS_ATTRIBUTE_NAME, results);
doFailure(ctx, code, message);
return;
}
-
- ctx.setAttribute("org.onap.appc.adapter.ansible.result.code", Integer.toString(400));
- ctx.setAttribute("org.onap.appc.adapter.ansible.message", message);
- ctx.setAttribute("org.onap.appc.adapter.ansible.results", results);
+ ctx.setAttribute(RESULT_CODE_ATTRIBUTE_NAME, Integer.toString(400));
+ ctx.setAttribute(MESSAGE_ATTRIBUTE_NAME, message);
+ ctx.setAttribute(RESULTS_ATTRIBUTE_NAME, results);
ctx.setStatus(OUTCOME_SUCCESS);
}
-
- // Public method to get logs from plyabook execution for a specifcic request
- // It blocks till the Ansible Server responds or the session times out
- // very similar to reqExecResult
- // logs are returned in the DG context variable org.onap.appc.adapter.ansible.log
-
+ /**
+ * Public method to get logs from playbook execution for a specific request
+ *
+ * It blocks till the Ansible Server responds or the session times out very similar to
+ * reqExecResult logs are returned in the DG context variable org.onap.appc.adapter.ansible.log
+ */
+ @Override
public void reqExecLog(Map<String, String> params, SvcLogicContext ctx) throws SvcLogicException {
-
- // Get uri
- String ReqUri = "";
+ String reqUri = StringUtils.EMPTY;
try {
- ReqUri = messageProcessor.reqUriLog(params);
- logger.info("Retreiving results from " + ReqUri);
+ reqUri = messageProcessor.reqUriLog(params);
+ logger.info("Retreiving results from " + reqUri);
} catch (Exception e) {
+ logger.error("Exception caught", e);
doFailure(ctx, AnsibleResultCodes.INVALID_PAYLOAD.getValue(), e.getMessage());
}
- int code = -1;
- String message = "";
- float Duration = -1;
-
+ String message = StringUtils.EMPTY;
try {
- // Try to retreive the test results (modify the url for that)
- AnsibleResult testresult = queryServer(ReqUri, params.get("User"), params.get("Password"));
- code = testresult.getStatusCode();
+ // Try to retrieve the test results (modify the url for that)
+ AnsibleResult testresult = queryServer(reqUri, params.get("User"), params.get(PASSWORD));
message = testresult.getStatusMessage();
-
logger.info("Request output = " + message);
-
+ ctx.setAttribute(LOG_ATTRIBUTE_NAME, message);
+ ctx.setStatus(OUTCOME_SUCCESS);
} catch (Exception e) {
- doFailure(ctx, AnsibleResultCodes.UNKNOWN_EXCEPTION.getValue(), "Exception encountered retreiving output : " + e.getMessage());
+ logger.error("Exception caught", e);
+ doFailure(ctx, AnsibleResultCodes.UNKNOWN_EXCEPTION.getValue(),
+ "Exception encountered retreiving output : " + e.getMessage());
}
-
- ctx.setAttribute("org.onap.appc.adapter.ansible.log", message);
- ctx.setStatus(OUTCOME_SUCCESS);
}
-
/**
* Method that posts the request
- **/
-
- private AnsibleResult postExecRequest(String AgentUrl, String Payload, String User, String Password) {
-
- String reqOutput = "UNKNOWN";
- int reqStatus = -1;
+ */
+ private AnsibleResult postExecRequest(String agentUrl, String payload, String User, String password) {
AnsibleResult testresult;
if (!testMode) {
- http_client.setHttpContext(User, Password);
- testresult = http_client.Post(AgentUrl, Payload);
+ httpClient.setHttpContext(User, password);
+ testresult = httpClient.post(agentUrl, payload);
} else {
- testresult = testServer.Post(AgentUrl, Payload);
+ testresult = testServer.Post(agentUrl, payload);
}
-
return testresult;
}
+ /**
+ * Method to query Ansible server
+ */
+ private AnsibleResult queryServer(String agentUrl, String user, String password) {
- /*
- Method to query Ansible server
-
- */
- private AnsibleResult queryServer(String AgentUrl, String User, String Password) {
-
- String testOutput = "UNKNOWN";
- int testStatus = -1;
AnsibleResult testresult;
- logger.info("Querying url = " + AgentUrl);
+ logger.info("Querying url = " + agentUrl);
if (!testMode) {
- testresult = http_client.Get(AgentUrl);
+ testresult = httpClient.get(agentUrl);
} else {
- testresult = testServer.Get(AgentUrl);
+ testresult = testServer.Get(agentUrl);
}
return testresult;
-
}
-
-
}
diff --git a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/ConnectionBuilder.java b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/ConnectionBuilder.java
index e84a85a0c..f7c282bdf 100644
--- a/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/ConnectionBuilder.java
+++ b/appc-adapters/appc-ansible-adapter/appc-ansible-adapter-bundle/src/main/java/org/onap/appc/adapter/ansible/impl/ConnectionBuilder.java
@@ -9,216 +9,191 @@
* 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
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* 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.adapter.ansible.impl;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.entity.StringEntity;
-
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
-import java.security.KeyManagementException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
-import java.security.NoSuchAlgorithmException;
-import javax.net.ssl.SSLException;
import javax.net.ssl.SSLContext;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-
-
+import javax.net.ssl.SSLException;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
-
-
-import org.onap.appc.exceptions.APPCException;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
import org.onap.appc.adapter.ansible.model.AnsibleResult;
import org.onap.appc.adapter.ansible.model.AnsibleResultCodes;
-
-
-/**
- * Returns custom http client
- - based on options
- - can create one with ssl using an X509 certificate that does NOT have a known CA
- - create one which trusts ALL SSL certificates
- - return default httpclient (which only trusts known CAs from default cacerts file for process) -- this is the default option
-
-**/
-
+import org.onap.appc.exceptions.APPCException;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+/**
+ * Returns a custom http client
+ * - based on options
+ * - can create one with ssl using an X509 certificate that does NOT have a known CA
+ * - create one which trusts ALL SSL certificates
+ * - return default httpclient (which only trusts known CAs from default cacerts file for process) this is the default
+ * option
+ **/
public class ConnectionBuilder {
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(ConnectionBuilder.class);
+ private CloseableHttpClient httpClient = null;
+ private HttpClientContext httpContext = new HttpClientContext();
- private CloseableHttpClient http_client = null;
- private HttpClientContext http_context = new HttpClientContext();
+ /**
+ * Constructor that initializes an http client based on certificate
+ **/
+ public ConnectionBuilder(String certFile) throws KeyStoreException, CertificateException, IOException,
+ KeyManagementException, NoSuchAlgorithmException, APPCException {
+ /* Point to the certificate */
+ FileInputStream fs = new FileInputStream(certFile);
+ /* Generate a certificate from the X509 */
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ X509Certificate cert = (X509Certificate) cf.generateCertificate(fs);
+ /* Create a keystore object and load the certificate there */
+ KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
+ keystore.load(null, null);
+ keystore.setCertificateEntry("cacert", cert);
- // Various constructors depending on how we want to instantiate the http ConnectionBuilder instance
+ SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(keystore).build();
+ SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext,
+ SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+ httpClient = HttpClients.custom().setSSLSocketFactory(factory).build();
+ }
/**
- * Constructor that initializes an http client based on certificate
+ * Constructor which trusts all certificates in a specific java keystore file (assumes a JKS
+ * file)
**/
- public ConnectionBuilder(String CertFile) throws KeyStoreException, CertificateException, IOException, KeyManagementException, NoSuchAlgorithmException, APPCException{
-
-
- /* Point to the certificate */
- FileInputStream fs = new FileInputStream(CertFile);
-
- /* Generate a certificate from the X509 */
- CertificateFactory cf = CertificateFactory.getInstance("X.509");
- X509Certificate cert = (X509Certificate)cf.generateCertificate(fs);
-
- /* Create a keystore object and load the certificate there */
- KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
- keystore.load(null, null);
- keystore.setCertificateEntry("cacert", cert);
-
-
- SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(keystore).build();
- SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
-
- http_client = HttpClients.custom().setSSLSocketFactory(factory).build();
- };
+ public ConnectionBuilder(String trustStoreFile, char[] trustStorePasswd) throws KeyStoreException, IOException,
+ KeyManagementException, NoSuchAlgorithmException, CertificateException {
+ /* Load the specified trustStore */
+ KeyStore keystore = KeyStore.getInstance("JKS");
+ FileInputStream readStream = new FileInputStream(trustStoreFile);
+ keystore.load(readStream, trustStorePasswd);
- /**
- * Constructor which trusts all certificates in a specific java keystore file (assumes a JKS file)
- **/
- public ConnectionBuilder(String trustStoreFile, char[] trustStorePasswd) throws KeyStoreException, IOException, KeyManagementException, NoSuchAlgorithmException, CertificateException {
-
-
- /* Load the specified trustStore */
- KeyStore keystore = KeyStore.getInstance("JKS");
- FileInputStream readStream = new FileInputStream(trustStoreFile);
- keystore.load(readStream,trustStorePasswd);
-
- SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(keystore).build();
- SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
-
- http_client = HttpClients.custom().setSSLSocketFactory(factory).build();
- };
+ SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(keystore).build();
+ SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext,
+ SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+
+ httpClient = HttpClients.custom().setSSLSocketFactory(factory).build();
+ }
/**
- * Constructor that trusts ALL SSl certificates (NOTE : ONLY FOR DEV TESTING) if Mode == 1
- or Default if Mode == 0
- */
- public ConnectionBuilder(int Mode) throws SSLException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException{
- if (Mode == 1){
- SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build();
- SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
-
- http_client = HttpClients.custom().setSSLSocketFactory(factory).build();
- }
-
- else{
- http_client = HttpClients.createDefault();
- }
-
- };
-
-
+ * Constructor that trusts ALL SSl certificates (NOTE : ONLY FOR DEV TESTING) if Mode == 1 or
+ * Default if Mode == 0
+ */
+ public ConnectionBuilder(int mode)
+ throws SSLException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
+ if (mode == 1) {
+ SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build();
+ SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext,
+ SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+
+ httpClient = HttpClients.custom().setSSLSocketFactory(factory).build();
+ } else {
+ httpClient = HttpClients.createDefault();
+ }
+ }
+
// Use to create an http context with auth headers
- public void setHttpContext(String User, String MyPassword){
-
- // Are credential provided ? If so, set the context to be used
- if (User != null && ! User.isEmpty() && MyPassword != null && ! MyPassword.isEmpty()){
- UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(User, MyPassword);
- AuthScope authscope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT);
- BasicCredentialsProvider credsprovider = new BasicCredentialsProvider();
- credsprovider.setCredentials(authscope, credentials);
- http_context.setCredentialsProvider(credsprovider);
- }
-
-
- };
-
-
- // Method posts to the ansible server and writes out response to
- // Ansible result object
- public AnsibleResult Post(String AgentUrl, String Payload){
-
- AnsibleResult result = new AnsibleResult();
- try{
-
- HttpPost postObj = new HttpPost(AgentUrl);
- StringEntity bodyParams = new StringEntity(Payload, "UTF-8");
- postObj.setEntity(bodyParams);
- postObj.addHeader("Content-type", "application/json");
-
- HttpResponse response = http_client.execute(postObj, http_context);
-
- HttpEntity entity = response.getEntity();
- String responseOutput = entity != null ? EntityUtils.toString(entity) : null;
- int responseCode = response.getStatusLine().getStatusCode();
- result.setStatusCode(responseCode);
- result.setStatusMessage(responseOutput);
- }
-
- catch(IOException io){
- result.setStatusCode(AnsibleResultCodes.IO_EXCEPTION.getValue());
- result.setStatusMessage(io.getMessage());
- }
-
-
-
- return result;
+ public void setHttpContext(String user, String myPassword) {
+
+ // Are credential provided ? If so, set the context to be used
+ if (user != null && !user.isEmpty() && myPassword != null && !myPassword.isEmpty()) {
+ UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(user, myPassword);
+ AuthScope authscope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT);
+ BasicCredentialsProvider credsprovider = new BasicCredentialsProvider();
+ credsprovider.setCredentials(authscope, credentials);
+ httpContext.setCredentialsProvider(credsprovider);
+ }
+ }
+ // Method posts to the ansible server and writes out response to
+ // Ansible result object
+ public AnsibleResult post(String agentUrl, String payload) {
+
+ AnsibleResult result = new AnsibleResult();
+ try {
+
+ HttpPost postObj = new HttpPost(agentUrl);
+ StringEntity bodyParams = new StringEntity(payload, "UTF-8");
+ postObj.setEntity(bodyParams);
+ postObj.addHeader("Content-type", "application/json");
+
+ HttpResponse response = httpClient.execute(postObj, httpContext);
+
+ HttpEntity entity = response.getEntity();
+ String responseOutput = entity != null ? EntityUtils.toString(entity) : null;
+ int responseCode = response.getStatusLine().getStatusCode();
+ result.setStatusCode(responseCode);
+ result.setStatusMessage(responseOutput);
+ } catch (IOException io) {
+ logger.error("Caught IOException", io);
+ result.setStatusCode(AnsibleResultCodes.IO_EXCEPTION.getValue());
+ result.setStatusMessage(io.getMessage());
+ }
+ return result;
}
-
+
// Method gets information from an Ansible server and writes out response to
// Ansible result object
- public AnsibleResult Get(String AgentUrl){
-
- AnsibleResult result = new AnsibleResult();
-
- try{
- HttpGet getObj = new HttpGet(AgentUrl );
- HttpResponse response = http_client.execute(getObj, http_context);
-
-
- HttpEntity entity = response.getEntity();
- String responseOutput = entity != null ? EntityUtils.toString(entity) : null;
- int responseCode = response.getStatusLine().getStatusCode();
- result.setStatusCode(responseCode);
- result.setStatusMessage(responseOutput);
-
- }
- catch(IOException io){
- result.setStatusCode(AnsibleResultCodes.IO_EXCEPTION.getValue());
- result.setStatusMessage(io.getMessage());
- }
-
- return result;
- };
-
+ public AnsibleResult get(String agentUrl) {
+
+ AnsibleResult result = new AnsibleResult();
+
+ try {
+ HttpGet getObj = new HttpGet(agentUrl);
+ HttpResponse response = httpClient.execute(getObj, httpContext);
+
+ HttpEntity entity = response.getEntity();
+ String responseOutput = entity != null ? EntityUtils.toString(entity) : null;
+ int responseCode = response.getStatusLine().getStatusCode();
+ result.setStatusCode(responseCode);
+ result.setStatusMessage(responseOutput);
+ } catch (IOException io) {
+ result.setStatusCode(AnsibleResultCodes.IO_EXCEPTION.getValue());
+ result.setStatusMessage(io.getMessage());
+ logger.error("Caught IOException", io);
+ }
+ return result;
+ }
}