diff options
author | Wonnell, Skip (kw5258) <kw5258@att.com> | 2018-04-27 14:14:01 -0500 |
---|---|---|
committer | Randa Maher <rx196w@att.com> | 2018-04-27 21:18:47 +0000 |
commit | 06a8e46e6beb8538d75b27b8cb7d82e3bcab0a2d (patch) | |
tree | 7f4c0caab99e104718262fc28a289149a4f39446 /appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org | |
parent | df1c3a5b0862a881a1159e5c350eae7982bb9663 (diff) |
Fixes for Chef Adapter bundle
Programatically configure values for truststore and password when
initializing the HttpClient.
Update post and put methods to set entity
Add organization into request URI
Restore log messages to original values
Issue-ID: APPC-868
Change-Id: Ia0fdf13fcb1e3ad91a4d2c5ce704523562191379
Signed-off-by: Wonnell, Skip (kw5258) <kw5258@att.com>
Diffstat (limited to 'appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org')
5 files changed, 77 insertions, 51 deletions
diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/ChefApiClientFactory.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/ChefApiClientFactory.java index 11d820d5d..c41142cc0 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/ChefApiClientFactory.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/ChefApiClientFactory.java @@ -3,6 +3,7 @@ * ONAP : APPC * ================================================================================ * Copyright (C) 2018 Nokia. All rights reserved. + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. * ============================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,30 +20,51 @@ */ package org.onap.appc.adapter.chef.chefclient; -import com.google.common.collect.ImmutableMap; +import java.io.File; +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; import org.apache.http.client.HttpClient; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.SSLContexts; import org.onap.appc.adapter.chef.chefclient.api.ChefApiClient; import org.onap.appc.adapter.chef.chefclient.impl.ChefApiClientImpl; import org.onap.appc.adapter.chef.chefclient.impl.ChefApiHeaderFactory; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.google.common.collect.ImmutableMap; public class ChefApiClientFactory { - private HttpClient httpClient = HttpClients.createDefault(); + private static final EELFLogger logger = EELFManager.getInstance().getLogger(ChefApiClientFactory.class); + + private HttpClient createChefHttpClient() { + String trustStoreFileName = "/opt/app/bvc/chef/chefServerSSL.jks"; + char[] trustStoreCreds = "adminadmin".toCharArray(); + try { + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( + SSLContexts.custom().loadTrustMaterial(new File(trustStoreFileName), trustStoreCreds).build(), + SSLConnectionSocketFactory.getDefaultHostnameVerifier()); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException | CertificateException + | IOException e) { + logger.error(e.getMessage(), e); + } + return null; + } + + private HttpClient httpClient = createChefHttpClient(); private ChefApiHeaderFactory chefApiHeaderFactory = new ChefApiHeaderFactory(); public ChefApiClient create(String endPoint, String organizations, String userId, String pemPath) { - return new ChefApiClientImpl( - httpClient, - endPoint, - (methodName, requestPath, body) -> chefApiHeaderFactory + return new ChefApiClientImpl(httpClient, endPoint, organizations, (methodName, requestPath, body) -> chefApiHeaderFactory .create(methodName, requestPath, body, userId, organizations, pemPath)); } - public ChefApiClient create(String endPoint) { - return new ChefApiClientImpl( - httpClient, - endPoint, - (methodName, requestPath, body) -> ImmutableMap.of()); + public ChefApiClient create(String endPoint, String organizations) { + return new ChefApiClientImpl(httpClient, endPoint, organizations, (methodName, requestPath, body) -> ImmutableMap.of()); } } diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefApiClientImpl.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefApiClientImpl.java index 8edc2b566..f86b49033 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefApiClientImpl.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefApiClientImpl.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP : APPC * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Copyright (C) 2017 Amdocs * ============================================================================= @@ -17,8 +17,6 @@ * 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========================================================= */ @@ -26,6 +24,9 @@ package org.onap.appc.adapter.chef.chefclient.impl; import java.io.IOException; import java.net.URISyntaxException; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; @@ -39,11 +40,14 @@ public class ChefApiClientImpl implements ChefApiClient { private final HttpClient httpClient; private final String endpoint; + private final String organization; private final HttpHeaderFactory httpHeaderFactory; - - public ChefApiClientImpl(HttpClient httpClient, String endpoint, HttpHeaderFactory httpHeaderFactory) { + private static final EELFLogger logger = EELFManager.getInstance().getLogger(ChefApiClientImpl.class); + public ChefApiClientImpl(HttpClient httpClient, String endpoint, String organization, + HttpHeaderFactory httpHeaderFactory) { this.httpClient = httpClient; this.endpoint = endpoint; + this.organization = organization; this.httpHeaderFactory = httpHeaderFactory; } @@ -51,7 +55,7 @@ public class ChefApiClientImpl implements ChefApiClient { public ChefResponse get(String path) { OngoingRequestBuilder requestBuilder = ChefRequestBuilder.newRequestTo(endpoint) .httpGet() - .withPath(path) + .withPath(getPath(path)) .withHeaders(httpHeaderFactory.create("GET", path, "")); return execute(requestBuilder); } @@ -60,7 +64,7 @@ public class ChefApiClientImpl implements ChefApiClient { public ChefResponse delete(String path) { OngoingRequestBuilder requestBuilder = ChefRequestBuilder.newRequestTo(endpoint) .httpDelete() - .withPath(path) + .withPath(getPath(path)) .withHeaders(httpHeaderFactory.create("DELETE", path, "")); return execute(requestBuilder); } @@ -69,7 +73,7 @@ public class ChefApiClientImpl implements ChefApiClient { public ChefResponse post(String path, String body) { OngoingRequestBuilder requestBuilder = ChefRequestBuilder.newRequestTo(endpoint) .httpPost(body) - .withPath(path) + .withPath(getPath(path)) .withHeaders(httpHeaderFactory.create("POST", path, body)); return execute(requestBuilder); } @@ -78,13 +82,17 @@ public class ChefApiClientImpl implements ChefApiClient { public ChefResponse put(String path, String body) { OngoingRequestBuilder requestBuilder = ChefRequestBuilder.newRequestTo(endpoint) .httpPut(body) - .withPath(path) + .withPath(getPath(path)) .withHeaders(httpHeaderFactory.create("PUT", path, body)); + logger.info("request: PATH: "+path+ " body: "+body); return execute(requestBuilder); } private ChefResponse execute(OngoingRequestBuilder chefRequest) { try { + if (httpClient == null) { + return ChefResponse.create(HttpStatus.SC_INTERNAL_SERVER_ERROR, "Could not create http client for chef"); + } HttpResponse response = httpClient.execute(chefRequest.build()); int statusCode = response.getStatusLine().getStatusCode(); HttpEntity httpEntity = response.getEntity(); @@ -96,5 +104,9 @@ public class ChefApiClientImpl implements ChefApiClient { return ChefResponse.create(HttpStatus.SC_INTERNAL_SERVER_ERROR, ex.getMessage()); } } + + private String getPath(String path) { + return "/organizations/" + organization + path; + } } diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefApiHeaderFactory.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefApiHeaderFactory.java index d045135c4..e40eee2a6 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefApiHeaderFactory.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefApiHeaderFactory.java @@ -3,6 +3,7 @@ * ONAP : APPC * ================================================================================ * Copyright (C) 2018 Nokia. All rights reserved. + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. * ============================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,11 +28,6 @@ public class ChefApiHeaderFactory { private FormattedTimestamp formattedTimestamp = new FormattedTimestamp(); - static { - System.setProperty("javax.net.ssl.trustStore", "/opt/onap/appc/chef/chefServerSSL.jks"); - System.setProperty("javax.net.ssl.trustStorePassword", "adminadmin"); - } - public ImmutableMap<String, String> create(String methodName, String path, String body, String userId, String organizations, String pemPath) { diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefRequestBuilder.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefRequestBuilder.java index a2248438a..c2501e334 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefRequestBuilder.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/chefclient/impl/ChefRequestBuilder.java @@ -3,6 +3,7 @@ * ONAP : APPC * ================================================================================ * Copyright (C) 2018 Nokia. All rights reserved. + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. * ============================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,8 +34,7 @@ import org.apache.http.entity.StringEntity; final class ChefRequestBuilder { - private ChefRequestBuilder() { - } + private ChefRequestBuilder() {} static OngoingRequestBuilder newRequestTo(String endPoint) { return new OngoingRequestBuilder(endPoint); @@ -68,21 +68,22 @@ final class ChefRequestBuilder { public OngoingRequestBuilder httpPost(String body) { HttpPost httpPost = new HttpPost(); - toEntity(body); + httpPost.setEntity(toEntity(body)); httpRequestBase = httpPost; return this; } public OngoingRequestBuilder httpPut(String body) { HttpPut httpPut = new HttpPut(); - toEntity(body); + httpPut.setEntity(toEntity(body)); httpRequestBase = httpPut; return this; } - private void toEntity(String body) { + private StringEntity toEntity(String body) { StringEntity stringEntity = new StringEntity(body, "UTF-8"); stringEntity.setContentType("application/json"); + return stringEntity; } public OngoingRequestBuilder withHeaders(ImmutableMap<String, String> headers) { @@ -93,13 +94,11 @@ final class ChefRequestBuilder { public HttpRequestBase build() throws URISyntaxException { setRequestUri(); setRequestHeaders(); - return httpRequestBase; } private void setRequestUri() throws URISyntaxException { - URI fullPath = new URIBuilder(endPoint) - .setPath(path).build(); + URI fullPath = new URIBuilder(endPoint).setPath(path).build(); httpRequestBase.setURI(fullPath); } diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java index 64aedcc24..bd367b035 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP : APPC * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Copyright (C) 2017 Amdocs * ============================================================================= @@ -17,8 +17,6 @@ * 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.chef.impl; @@ -146,8 +144,8 @@ public class ChefAdapterImpl implements ChefAdapter { doFailure(ctx, code, POSTING_REQUEST_JSON_ERROR_STR + e.getMessage()); } catch (Exception e) { code = 401; - logger.error(POSTING_REQUEST_ERROR_STR, e); - doFailure(ctx, code, POSTING_REQUEST_ERROR_STR + e.getMessage()); + logger.error(POSTING_REQUEST_ERROR_STR + "vnfcEnvironment", e); + doFailure(ctx, code, POSTING_REQUEST_ERROR_STR + "vnfcEnvironment"+ e.getMessage()); } } else { code = 500; @@ -201,12 +199,12 @@ public class ChefAdapterImpl implements ChefAdapter { } } catch (JSONException e) { code = 401; - logger.error(POSTING_REQUEST_JSON_ERROR_STR, e); - doFailure(ctx, code, POSTING_REQUEST_JSON_ERROR_STR + e.getMessage()); + logger.error(POSTING_REQUEST_JSON_ERROR_STR +"vnfcNodeobjects", e); + doFailure(ctx, code, POSTING_REQUEST_JSON_ERROR_STR +"vnfcNodeobjects" + e.getMessage()); } catch (Exception e) { code = 401; - logger.error(POSTING_REQUEST_ERROR_STR, e); - doFailure(ctx, code, POSTING_REQUEST_ERROR_STR + e.getMessage()); + logger.error(POSTING_REQUEST_ERROR_STR +"vnfcNodeobjects", e); + doFailure(ctx, code, POSTING_REQUEST_ERROR_STR +"vnfcNodeobjects"+ e.getMessage()); } } @@ -250,8 +248,8 @@ public class ChefAdapterImpl implements ChefAdapter { } } catch (Exception e) { code = 401; - logger.error(POSTING_REQUEST_ERROR_STR, e); - doFailure(ctx, code, POSTING_REQUEST_ERROR_STR + e.getMessage()); + logger.error(POSTING_REQUEST_ERROR_STR + "vnfcPushJob", e); + doFailure(ctx, code, POSTING_REQUEST_ERROR_STR + "vnfcPushJob"+ e.getMessage()); } } @@ -321,12 +319,12 @@ public class ChefAdapterImpl implements ChefAdapter { } } catch (JSONException e) { code = 401; - logger.error(POSTING_REQUEST_JSON_ERROR_STR, e); - doFailure(ctx, code, POSTING_REQUEST_JSON_ERROR_STR + e.getMessage()); + logger.error(POSTING_REQUEST_JSON_ERROR_STR + "fetchResults", e); + doFailure(ctx, code, POSTING_REQUEST_JSON_ERROR_STR + "fetchResults" + e.getMessage()); } catch (Exception e) { code = 401; - logger.error(POSTING_REQUEST_ERROR_STR , e); - doFailure(ctx, code, POSTING_REQUEST_ERROR_STR + e.getMessage()); + logger.error(POSTING_REQUEST_ERROR_STR + "fetchResults" , e); + doFailure(ctx, code, POSTING_REQUEST_ERROR_STR + "fetchResults"+ e.getMessage()); } } @@ -382,7 +380,6 @@ public class ChefAdapterImpl implements ChefAdapter { String dgContext = params.get("dgContext"); JSONObject jsonConfig = new JSONObject(allConfigData); String contextData = fetchContextData(key, jsonConfig); - ctx.setAttribute(dgContext, contextData); } @@ -522,7 +519,7 @@ public class ChefAdapterImpl implements ChefAdapter { String tVmIp = params.get("ip"); try { - ChefResponse chefResponse = chefApiClientFactory.create(tVmIp).get(""); + ChefResponse chefResponse = chefApiClientFactory.create(tVmIp, organizations).get(""); chefClientResult(svcLogicContext, chefResponse.getStatusCode(), chefResponse.getBody()); svcLogicContext.setAttribute("chefAgent.code", "200"); } catch (Exception e) { @@ -655,4 +652,4 @@ public class ChefAdapterImpl implements ChefAdapter { throw new SvcLogicException("Chef Adapter error:" + cutMessage); } -}
\ No newline at end of file +} |