2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.so.adapters.valet;
24 import org.onap.so.adapters.valet.beans.HeatRequest;
25 import org.onap.so.adapters.valet.beans.ValetConfirmRequest;
26 import org.onap.so.adapters.valet.beans.ValetConfirmResponse;
27 import org.onap.so.adapters.valet.beans.ValetCreateRequest;
28 import org.onap.so.adapters.valet.beans.ValetCreateResponse;
29 import org.onap.so.adapters.valet.beans.ValetDeleteRequest;
30 import org.onap.so.adapters.valet.beans.ValetDeleteResponse;
31 import org.onap.so.adapters.valet.beans.ValetRollbackRequest;
32 import org.onap.so.adapters.valet.beans.ValetRollbackResponse;
33 import org.onap.so.adapters.valet.beans.ValetUpdateRequest;
34 import org.onap.so.adapters.valet.beans.ValetUpdateResponse;
38 import javax.annotation.PostConstruct;
39 import javax.ws.rs.core.MediaType;
40 import javax.ws.rs.core.UriBuilder;
42 import org.onap.so.adapters.valet.GenericValetResponse;
44 import org.onap.so.logger.MsoLogger;
45 import org.springframework.beans.factory.annotation.Autowired;
46 import org.springframework.core.env.Environment;
47 import org.springframework.http.HttpEntity;
48 import org.springframework.http.HttpHeaders;
49 import org.springframework.http.HttpMethod;
50 import org.springframework.http.ResponseEntity;
51 import org.springframework.web.client.RestTemplate;
52 import org.springframework.stereotype.Component;
54 import com.fasterxml.jackson.databind.ObjectMapper;
57 public class ValetClient {
58 private static MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, ValetClient.class);
61 private Environment environment;
63 private static final String VALET_BASE_URL = "org.onap.so.adapters.valet.base_url";
64 private static final String VALET_BASE_PATH = "org.onap.so.adapters.valet.base_path";
65 private static final String VALET_AUTH = "org.onap.so.adapters.valet.basic_auth";
66 private static final String REQ_ID_HEADER_NAME = "X-RequestID";
67 protected static final String NO_STATUS_RETURNED = "no status returned from Valet";
69 private static final String DEFAULT_BASE_URL = "http://localhost:8080/";
70 private static final String DEFAULT_BASE_PATH = "api/valet/placement/v1";
71 private static final String DEFAULT_AUTH_STRING = "";
74 private ObjectMapper mapper;
76 protected String baseUrl;
77 protected String basePath;
78 protected String authString;
81 * Setup the properties needed from properties file. Each will fall to a default
84 private void setupParams() {
86 this.baseUrl = this.environment.getProperty(ValetClient.VALET_BASE_URL, ValetClient.DEFAULT_BASE_URL);
87 this.basePath = this.environment.getProperty(ValetClient.VALET_BASE_PATH, ValetClient.DEFAULT_BASE_PATH);
88 this.authString = this.environment.getProperty(ValetClient.VALET_AUTH, ValetClient.DEFAULT_AUTH_STRING);
89 } catch (Exception e) {
90 LOGGER.debug("Error retrieving valet properties. " + e.getMessage());
95 * This method will be invoked to send a Create request to Valet.
97 public GenericValetResponse<ValetCreateResponse> callValetCreateRequest(String requestId, String regionId, String tenantId, String serviceInstanceId,
98 String vnfId, String vnfName, String vfModuleId, String vfModuleName, String keystoneUrl, HeatRequest heatRequest) throws Exception {
99 ResponseEntity<ValetCreateResponse> response = null;
100 GenericValetResponse<ValetCreateResponse> gvr = null;
103 UriBuilder builder = UriBuilder.fromPath(baseUrl).path(basePath).queryParam("requestId", requestId);
104 URI uri = builder.build();
106 ValetCreateRequest vcr = this.createValetCreateRequest(regionId, tenantId, serviceInstanceId, vnfId, vnfName, vfModuleId, vfModuleName, keystoneUrl, heatRequest);
107 RestTemplate restTemplate = new RestTemplate();
108 String body = mapper.writeValueAsString(vcr);
109 HttpHeaders headers = generateHeaders(requestId);
110 HttpEntity<String> entity = new HttpEntity<>(body, headers);
111 LOGGER.debug("valet create req: " + uri.toString() + ", headers=" + headers.toString() + ", body=" + body.toString());
113 response = restTemplate.exchange(uri, HttpMethod.POST, entity, ValetCreateResponse.class);
114 gvr = this.getGVRFromResponse(response);
115 } catch (Exception e) {
116 LOGGER.error("An exception occurred in callValetCreateRequest", e);
123 * This method will be invoked to send an Update request to Valet.
125 public GenericValetResponse<ValetUpdateResponse> callValetUpdateRequest(String requestId, String regionId, String tenantId, String serviceInstanceId,
126 String vnfId, String vnfName, String vfModuleId, String vfModuleName, String keystoneUrl, HeatRequest heatRequest) throws Exception {
127 ResponseEntity<ValetUpdateResponse> response = null;
128 GenericValetResponse<ValetUpdateResponse> gvr = null;
131 UriBuilder builder = UriBuilder.fromPath(baseUrl).path(basePath).queryParam("requestId", requestId);
132 URI uri = builder.build();
134 ValetUpdateRequest vur = this.createValetUpdateRequest(regionId, tenantId, serviceInstanceId, vnfId, vnfName, vfModuleId, vfModuleName, keystoneUrl, heatRequest);
135 RestTemplate restTemplate = new RestTemplate();
136 String body = mapper.writeValueAsString(vur);
137 HttpHeaders headers = generateHeaders(requestId);
138 HttpEntity<String> entity = new HttpEntity<>(body, headers);
139 LOGGER.debug("valet update req: " + uri.toString() + ", headers=" + headers.toString() + ", body=" + body.toString());
141 response = restTemplate.exchange(uri, HttpMethod.PUT, entity, ValetUpdateResponse.class);
142 gvr = this.getGVRFromResponse(response);
143 } catch (Exception e) {
144 LOGGER.error("An exception occurred in callValetUpdateRequest", e);
151 * This method will be invoked to send a Delete request to Valet.
153 public GenericValetResponse<ValetDeleteResponse> callValetDeleteRequest(String requestId, String regionId, String tenantId, String vfModuleId, String vfModuleName) throws Exception {
154 ResponseEntity<ValetDeleteResponse> response = null;
155 GenericValetResponse<ValetDeleteResponse> gvr = null;
158 UriBuilder builder = UriBuilder.fromPath(baseUrl).path(basePath).queryParam("requestId", requestId);
159 URI uri = builder.build();
161 ValetDeleteRequest vdr = this.createValetDeleteRequest(regionId, tenantId, vfModuleId, vfModuleName);
162 RestTemplate restTemplate = new RestTemplate();
163 String body = mapper.writeValueAsString(vdr);
164 HttpHeaders headers = generateHeaders(requestId);
165 HttpEntity<String> entity = new HttpEntity<>(body, headers);
166 LOGGER.debug("valet delete req: " + uri.toString() + ", headers=" + headers.toString() + ", body=" + body.toString());
168 response = restTemplate.exchange(uri, HttpMethod.DELETE, entity, ValetDeleteResponse.class);
169 gvr = this.getGVRFromResponse(response);
170 } catch (Exception e) {
171 LOGGER.error("An exception occurred in callValetDeleteRequest", e);
178 * This method is called to invoke a Confirm request to Valet.
180 public GenericValetResponse<ValetConfirmResponse> callValetConfirmRequest(String requestId, String stackId) throws Exception {
181 ResponseEntity<ValetConfirmResponse> response = null;
182 GenericValetResponse<ValetConfirmResponse> gvr = null;
185 UriBuilder builder = UriBuilder.fromPath(this.baseUrl).path(this.basePath).path("{requestId}/confirm/");
186 URI uri = builder.build(requestId);
188 ValetConfirmRequest vcr = this.createValetConfirmRequest(stackId);
189 RestTemplate restTemplate = new RestTemplate();
190 String body = mapper.writeValueAsString(vcr);
191 HttpHeaders headers = generateHeaders(requestId);
192 HttpEntity<String> entity = new HttpEntity<>(body, headers);
193 LOGGER.debug("valet confirm req: " + uri.toString() + ", headers=" + headers.toString() + ", body=" + body);
195 response = restTemplate.exchange(uri, HttpMethod.PUT, entity, ValetConfirmResponse.class);
196 gvr = this.getGVRFromResponse(response);
197 } catch (Exception e) {
198 LOGGER.error("An exception occurred in callValetConfirmRequest", e);
205 * This method is called to invoke a Rollback request to Valet.
207 public GenericValetResponse<ValetRollbackResponse> callValetRollbackRequest(String requestId, String stackId, Boolean suppressRollback, String errorMessage) throws Exception {
208 ResponseEntity<ValetRollbackResponse> response = null;
209 GenericValetResponse<ValetRollbackResponse> gvr = null;
212 UriBuilder builder = UriBuilder.fromPath(this.baseUrl).path(this.basePath).path("{requestId}/rollback/");
213 URI uri = builder.build(requestId);
215 ValetRollbackRequest vrr = this.createValetRollbackRequest(stackId, suppressRollback, errorMessage);
216 RestTemplate restTemplate = new RestTemplate();
217 String body = mapper.writeValueAsString(vrr);
218 HttpHeaders headers = generateHeaders(requestId);
219 HttpEntity<String> entity = new HttpEntity<>(body, headers);
220 LOGGER.debug("valet rollback req: " + uri.toString() + ", headers=" + headers.toString() + ", body=" + body.toString());
222 response = restTemplate.exchange(uri, HttpMethod.PUT, entity, ValetRollbackResponse.class);
223 gvr = this.getGVRFromResponse(response);
224 } catch (Exception e) {
225 LOGGER.error("An exception occurred in callValetRollbackRequest", e);
232 * This method is to construct the ValetCreateRequest pojo
234 private ValetCreateRequest createValetCreateRequest(String regionId, String tenantId, String serviceInstanceId,
235 String vnfId, String vnfName, String vfModuleId, String vfModuleName, String keystoneUrl, HeatRequest heatRequest) {
236 ValetCreateRequest vcr = new ValetCreateRequest();
237 vcr.setHeatRequest(heatRequest);
238 vcr.setKeystoneUrl(keystoneUrl);
239 vcr.setRegionId(regionId);
240 vcr.setServiceInstanceId(serviceInstanceId);
241 vcr.setTenantId(tenantId);
242 vcr.setVfModuleId(vfModuleId);
243 vcr.setVfModuleName(vfModuleName);
245 vcr.setVnfName(vnfName);
251 * This method is to construct the ValetUpdateRequest pojo
253 private ValetUpdateRequest createValetUpdateRequest(String regionId, String tenantId, String serviceInstanceId,
254 String vnfId, String vnfName, String vfModuleId, String vfModuleName, String keystoneUrl, HeatRequest heatRequest) {
255 ValetUpdateRequest vur = new ValetUpdateRequest();
256 vur.setHeatRequest(heatRequest);
257 vur.setKeystoneUrl(keystoneUrl);
258 vur.setRegionId(regionId == null ? "" : regionId);
259 vur.setServiceInstanceId(serviceInstanceId == null ? "" : serviceInstanceId);
260 vur.setTenantId(tenantId == null ? "" : tenantId);
261 vur.setVfModuleId(vfModuleId == null ? "" : vfModuleId);
262 vur.setVfModuleName(vfModuleName == null ? "" : vfModuleName);
263 vur.setVnfId(vnfId == null ? "" : vnfId);
264 vur.setVnfName(vnfName == null ? "" : vnfName);
270 * This method is to construct the ValetDeleteRequest pojo
272 private ValetDeleteRequest createValetDeleteRequest(String regionId, String tenantId, String vfModuleId, String vfModuleName) {
273 ValetDeleteRequest vdr = new ValetDeleteRequest();
274 vdr.setRegionId(regionId == null ? "" : regionId);
275 vdr.setTenantId(tenantId == null ? "" : tenantId);
276 vdr.setVfModuleId(vfModuleId == null ? "" : vfModuleId);
277 vdr.setVfModuleName(vfModuleName == null ? "" : vfModuleName);
283 * This method is to construct the ValetDeleteRequest pojo
285 private ValetConfirmRequest createValetConfirmRequest(String stackId) {
286 ValetConfirmRequest vcr = new ValetConfirmRequest();
287 vcr.setStackId(stackId);
293 * This method is to construct the ValetRollbackRequest pojo
295 private ValetRollbackRequest createValetRollbackRequest(String stackId, Boolean suppressRollback, String errorMessage) {
296 ValetRollbackRequest vrr = new ValetRollbackRequest();
297 vrr.setStackId(stackId);
298 vrr.setSuppressRollback(suppressRollback);
299 vrr.setErrorMessage(errorMessage);
304 private HttpHeaders generateHeaders(String requestId) {
305 HttpHeaders headers = new HttpHeaders();
306 headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
307 if (!(this.authString == null || this.authString.isEmpty())) {
308 headers.add("Authorization", "Basic " + this.authString);
310 headers.add(ValetClient.REQ_ID_HEADER_NAME, requestId);
315 private <T> GenericValetResponse<T> getGVRFromResponse(ResponseEntity<T> response) {
316 GenericValetResponse<T> gvr = null;
317 if (response != null) {
318 T responseObj = response.getBody();
319 gvr = new GenericValetResponse<>(response.getStatusCodeValue(), ValetClient.NO_STATUS_RETURNED, responseObj);
322 gvr = new GenericValetResponse<>(-1, ValetClient.NO_STATUS_RETURNED, null);