summaryrefslogtreecommitdiffstats
path: root/adaptors/ansible-adapter/ansible-adapter-bundle/src/main/java/org/onap/ccsdk/sli/adaptors/ansible/impl/ConnectionBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'adaptors/ansible-adapter/ansible-adapter-bundle/src/main/java/org/onap/ccsdk/sli/adaptors/ansible/impl/ConnectionBuilder.java')
-rw-r--r--adaptors/ansible-adapter/ansible-adapter-bundle/src/main/java/org/onap/ccsdk/sli/adaptors/ansible/impl/ConnectionBuilder.java116
1 files changed, 73 insertions, 43 deletions
diff --git a/adaptors/ansible-adapter/ansible-adapter-bundle/src/main/java/org/onap/ccsdk/sli/adaptors/ansible/impl/ConnectionBuilder.java b/adaptors/ansible-adapter/ansible-adapter-bundle/src/main/java/org/onap/ccsdk/sli/adaptors/ansible/impl/ConnectionBuilder.java
index 672e0df67..1fbf20633 100644
--- a/adaptors/ansible-adapter/ansible-adapter-bundle/src/main/java/org/onap/ccsdk/sli/adaptors/ansible/impl/ConnectionBuilder.java
+++ b/adaptors/ansible-adapter/ansible-adapter-bundle/src/main/java/org/onap/ccsdk/sli/adaptors/ansible/impl/ConnectionBuilder.java
@@ -1,13 +1,9 @@
/*-
* ============LICENSE_START=======================================================
- * ONAP : APPC
+ * ONAP : SLI
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
* ================================================================================
- * Copyright (C) 2017 Amdocs
- * ================================================================================
- * Modifications Copyright © 2018 IBM.
- * =============================================================================
* 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
@@ -26,6 +22,9 @@
package org.onap.ccsdk.sli.adaptors.ansible.impl;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import java.io.Closeable;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.KeyManagementException;
@@ -36,13 +35,16 @@ import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
+import org.apache.commons.lang.StringUtils;
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.config.RequestConfig;
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.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
@@ -51,13 +53,11 @@ 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.json.JSONObject;
import org.onap.ccsdk.sli.adaptors.ansible.model.AnsibleResult;
import org.onap.ccsdk.sli.adaptors.ansible.model.AnsibleResultCodes;
import org.onap.ccsdk.sli.core.utils.PathValidator;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
/**
* Returns a custom http client
* - based on options
@@ -67,35 +67,36 @@ import com.att.eelf.configuration.EELFManager;
* option
**/
-public class ConnectionBuilder {
-
+public class ConnectionBuilder implements Closeable {
+ private static final String STATUS_CODE_KEY = "StatusCode";
private static final EELFLogger logger = EELFManager.getInstance().getLogger(ConnectionBuilder.class);
- private CloseableHttpClient httpClient = null;
- private HttpClientContext httpContext = new HttpClientContext();
+ private final CloseableHttpClient httpClient;
+ private final HttpClientContext httpContext = new HttpClientContext();
/**
* Constructor that initializes an http client based on certificate
**/
- public ConnectionBuilder(String certFile) throws KeyStoreException, CertificateException, IOException,
+ public ConnectionBuilder(String certFile, int timeout) throws KeyStoreException, CertificateException, IOException,
KeyManagementException, NoSuchAlgorithmException {
/* Point to the certificate */
- try(FileInputStream fs = new FileInputStream(certFile)){
- /* Generate a certificate from the X509 */
- CertificateFactory cf = CertificateFactory.getInstance("X.509");
- X509Certificate cert = (X509Certificate) cf.generateCertificate(fs);
+ try (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);
+ /* 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);
+ SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(keystore).build();
+ SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext,
+ SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
- httpClient = HttpClients.custom().setSSLSocketFactory(factory).build();
+ RequestConfig config = RequestConfig.custom().setSocketTimeout(timeout).build();
+ httpClient = HttpClients.custom().setDefaultRequestConfig(config).setSSLSocketFactory(factory).build();
}
}
@@ -103,9 +104,9 @@ public class ConnectionBuilder {
* 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 {
-
+ public ConnectionBuilder(String trustStoreFile, char[] trustStorePasswd, int timeout, String serverIP)
+ throws KeyStoreException, IOException, KeyManagementException, NoSuchAlgorithmException,
+ CertificateException {
if (!PathValidator.isValidFilePath(trustStoreFile)) {
throw new IOException("Invalid trust store file path");
}
@@ -114,37 +115,45 @@ public class ConnectionBuilder {
KeyStore keystore = KeyStore.getInstance("JKS");
FileInputStream readStream = new FileInputStream(trustStoreFile);
keystore.load(readStream, trustStorePasswd);
+ if (StringUtils.isNotBlank(serverIP)) {
+ SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build();
+ SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext, new NoopHostnameVerifier());
- SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(keystore).build();
- SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext,
- SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
-
- httpClient = HttpClients.custom().setSSLSocketFactory(factory).build();
+ RequestConfig config = RequestConfig.custom().setSocketTimeout(timeout).build();
+ httpClient = HttpClients.custom().setDefaultRequestConfig(config).setSSLSocketFactory(factory).build();
+ } else {
+ SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(keystore).build();
+ SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext,
+ SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
+ RequestConfig config = RequestConfig.custom().setSocketTimeout(timeout).build();
+ httpClient = HttpClients.custom().setDefaultRequestConfig(config).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)
+ public ConnectionBuilder(int mode, int timeout)
throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
+ RequestConfig config = RequestConfig.custom().setSocketTimeout(timeout).build();
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();
+ httpClient = HttpClients.custom().setDefaultRequestConfig(config).setSSLSocketFactory(factory).build();
} else {
- httpClient = HttpClients.createDefault();
+ httpClient = HttpClients.custom().setDefaultRequestConfig(config).build();
}
}
// Use to create an http context with auth headers
- public void setHttpContext(String user, String myPassword) {
+ public void setHttpContext(String user, String pswd) {
// 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);
+ if (user != null && !user.isEmpty() && pswd != null && !pswd.isEmpty()) {
+ UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(user, pswd);
AuthScope authscope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT);
BasicCredentialsProvider credsprovider = new BasicCredentialsProvider();
credsprovider.setCredentials(authscope, credentials);
@@ -165,7 +174,6 @@ public class ConnectionBuilder {
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();
@@ -189,11 +197,21 @@ public class ConnectionBuilder {
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);
+ logger.info("GetResult response for ansible GET URL" + agentUrl + " returned " + responseOutput);
+ JSONObject postResponse = new JSONObject(responseOutput);
+ if (postResponse.has(STATUS_CODE_KEY)) {
+ int codeStatus = postResponse.getInt(STATUS_CODE_KEY);
+ if (codeStatus == AnsibleResultCodes.PENDING.getValue()) {
+ result.setStatusCode(codeStatus);
+ } else {
+ result.setStatusCode(responseCode);
+ }
+ } else {
+ result.setStatusCode(responseCode);
+ }
result.setStatusMessage(responseOutput);
} catch (IOException io) {
result.setStatusCode(AnsibleResultCodes.IO_EXCEPTION.getValue());
@@ -202,4 +220,16 @@ public class ConnectionBuilder {
}
return result;
}
+
+ @Override
+ public void close() {
+ try {
+ if (httpClient != null) {
+ httpClient.close();
+ }
+ } catch (IOException e) {
+ logger.error("Caught IOException during httpClient close", e);
+ }
+ }
+
}