2 * Copyright 2016-2017, Nokia Corporation
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.onap.vfc.nfvo.driver.vnfm.svnfm.adaptor;
19 import java.io.IOException;
21 import org.apache.http.HttpStatus;
22 import org.apache.http.client.ClientProtocolException;
23 import org.onap.vfc.nfvo.driver.vnfm.svnfm.aai.bo.AaiVnfmInfo;
24 import org.onap.vfc.nfvo.driver.vnfm.svnfm.aai.bo.entity.EsrSystemInfo;
25 import org.onap.vfc.nfvo.driver.vnfm.svnfm.aai.inf.AaiMgmrInf;
26 import org.onap.vfc.nfvo.driver.vnfm.svnfm.catalog.inf.CatalogMgmrInf;
27 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMCreateSubscriptionRequest;
28 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMCreateSubscriptionResponse;
29 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMCreateVnfRequest;
30 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMCreateVnfResponse;
31 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryVnfResponse;
32 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.entity.OperationExecution;
33 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.entity.OperationExecution.OperationType;
34 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.inf.CbamMgmrInf;
35 import org.onap.vfc.nfvo.driver.vnfm.svnfm.common.bo.AdaptorEnv;
36 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonConstants;
37 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonEnum;
38 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.ScaleType;
39 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.bean.VnfmJobExecutionInfo;
40 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.mapper.VnfcResourceInfoMapper;
41 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.mapper.VnfmJobExecutionMapper;
42 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.mapper.VnfmSubscriptionsMapper;
43 import org.onap.vfc.nfvo.driver.vnfm.svnfm.exception.VnfmDriverException;
44 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.inf.NslcmMgmrInf;
45 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.CreateSubscriptionRequest;
46 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.CreateSubscriptionResponse;
47 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.HealVnfRequest;
48 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.HealVnfResponse;
49 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.InstantiateVnfRequest;
50 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.InstantiateVnfResponse;
51 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.OperStatusVnfResponse;
52 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.QueryVnfResponse;
53 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.ScaleVnfRequest;
54 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.ScaleVnfResponse;
55 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfRequest;
56 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfResponse;
57 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.inf.VnfContinueProcessorInf;
58 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.inf.VnfmDriverMgmrInf;
59 import org.slf4j.Logger;
60 import org.slf4j.LoggerFactory;
61 import org.springframework.beans.factory.annotation.Autowired;
62 import org.springframework.stereotype.Component;
64 import com.google.gson.Gson;
67 public class VnfmDriverMgmrImpl implements VnfmDriverMgmrInf {
68 private static final Logger logger = LoggerFactory.getLogger(VnfmDriverMgmrImpl.class);
71 Driver2CbamRequestConverter requestConverter;
74 Cbam2DriverResponseConverter responseConverter;
77 private CbamMgmrInf cbamMgmr;
80 private CatalogMgmrInf catalogMgmr;
83 private NslcmMgmrInf nslcmMgmr;
86 private AaiMgmrInf aaiMgmr;
89 private VnfmJobExecutionMapper jobDbManager;
92 private VnfcResourceInfoMapper vnfcDbMgmr;
95 private VnfmSubscriptionsMapper subscriptionsMapper;
98 AdaptorEnv adaptorEnv;
101 private VnfContinueProcessorInf vnfContinueProcessorInf;
103 private Gson gson = new Gson();
105 public InstantiateVnfResponse instantiateVnf(InstantiateVnfRequest driverRequest, String vnfmId)
106 throws VnfmDriverException {
107 InstantiateVnfResponse driverResponse;
109 driverRequest.setVnfdId(adaptorEnv.getVnfdId());
110 buildVnfmHttpPathById(vnfmId);
112 // String dirPath = "/etc/vnfmpkg";
113 // String cbamDirName = CommonUtil.getAppRoot() + dirPath;
114 // File cbamDirFile = new File(cbamDirName);
115 // String cbamPackageName = cbamDirFile.listFiles()[0].getAbsolutePath();
116 // cbamMgmr.uploadVnfPackage(cbamPackageName);
118 // step 3: create vnf
119 CBAMCreateVnfRequest cbamRequest = requestConverter.createReqConvert(driverRequest);
120 logger.info("VnfmDriverMgmrImpl --> instantiateVnf, ready to create vnf on CBAM. ");
121 CBAMCreateVnfResponse cbamResponse = cbamMgmr.createVnf(cbamRequest);
122 String vnfInstanceId = cbamResponse.getId();
123 logger.info("VnfmDriverMgmrImpl --> instantiateVnf, vnfInstanceId is " + vnfInstanceId);
124 Long jobId = saveCreateVnfJob(vnfInstanceId);
125 driverResponse = responseConverter.createRspConvert(cbamResponse, jobId);
127 vnfContinueProcessorInf.continueInstantiateVnf(vnfmId, driverRequest, vnfInstanceId, jobId.toString(),
128 nslcmMgmr, catalogMgmr, cbamMgmr, requestConverter, jobDbManager, vnfcDbMgmr);
130 } catch (Exception e) {
131 logger.error("error VnfmDriverMgmrImpl --> instantiateVnf. ", e);
132 throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
135 return driverResponse;
138 private Long saveCreateVnfJob(String vnfInstanceId) {
139 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
140 long nowTime = System.currentTimeMillis();
141 jobInfo.setVnfInstanceId(vnfInstanceId);
142 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_INSTANTIATE);
143 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
144 jobInfo.setOperateStartTime(nowTime);
146 jobDbManager.insert(jobInfo);
147 VnfmJobExecutionInfo jobInfo1 = (VnfmJobExecutionInfo) jobDbManager.findNewestJobInfo();
148 Long jobId = jobInfo1.getJobId();
152 public TerminateVnfResponse terminateVnf(TerminateVnfRequest driverRequest, String vnfmId, String vnfInstanceId) {
153 TerminateVnfResponse driverResponse;
155 buildVnfmHttpPathById(vnfmId);
156 driverResponse = generateTerminateVnfResponse(vnfInstanceId);
157 String jobId = driverResponse.getJobId();
159 vnfContinueProcessorInf.continueTerminateVnf(vnfmId, driverRequest, vnfInstanceId, jobId, nslcmMgmr,
160 cbamMgmr, requestConverter, jobDbManager, vnfcDbMgmr);
162 } catch (Exception e) {
163 logger.error("error VnfmDriverMgmrImpl --> terminateVnf. ", e);
164 throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
167 return driverResponse;
170 private TerminateVnfResponse generateTerminateVnfResponse(String vnfInstanceId) {
171 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
172 long nowTime = System.currentTimeMillis();
173 jobInfo.setVnfInstanceId(vnfInstanceId);
174 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_TERMINATE);
175 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
176 jobInfo.setOperateStartTime(nowTime);
177 jobDbManager.insert(jobInfo);
178 VnfmJobExecutionInfo jobInfo1 = jobDbManager.findNewestJobInfo();
179 Long jobId = jobInfo1.getJobId();
181 TerminateVnfResponse response = new TerminateVnfResponse();
182 response.setJobId("" + jobId);
186 public QueryVnfResponse queryVnf(String vnfmId, String vnfInstanceId) {
187 QueryVnfResponse driverResponse;
189 buildVnfmHttpPathById(vnfmId);
190 CBAMQueryVnfResponse cbamResponse = cbamMgmr.queryVnf(vnfInstanceId);
191 driverResponse = responseConverter.queryRspConvert(cbamResponse);
192 } catch (Exception e) {
193 logger.error("error VnfmDriverMgmrImpl --> queryVnf. ", e);
194 throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
197 return driverResponse;
200 public OperStatusVnfResponse getOperStatus(String vnfmId, String jobId) throws VnfmDriverException {
202 OperationExecution cbamResponse = null;
205 buildVnfmHttpPathById(vnfmId);
207 VnfmJobExecutionInfo jobInfo = jobDbManager.findOne(Long.parseLong(jobId));
208 cbamResponse = new OperationExecution();
210 if ("Instantiate".equalsIgnoreCase(jobInfo.getVnfmInterfceName())) {
211 cbamResponse.setOperationType(OperationType.INSTANTIATE);
212 } else if ("Terminal".equalsIgnoreCase(jobInfo.getVnfmInterfceName())) {
213 cbamResponse.setOperationType(OperationType.TERMINATE);
214 } else if ("Scalein".equalsIgnoreCase(jobInfo.getVnfmInterfceName())
215 || "Scaleout".equalsIgnoreCase(jobInfo.getVnfmInterfceName())) {
216 cbamResponse.setOperationType(OperationType.SCALE);
218 cbamResponse.setOperationType(OperationType.HEAL);
221 if (jobInfo.getStatus().equalsIgnoreCase(CommonConstants.CBAM_OPERATION_STATUS_FINISH)) {
222 cbamResponse.setStatus(CommonEnum.OperationStatus.FINISHED);
223 } else if (jobInfo.getStatus().equalsIgnoreCase(CommonConstants.CBAM_OPERATION_STATUS_ERROR)) {
224 cbamResponse.setStatus(CommonEnum.OperationStatus.FINISHED);
226 cbamResponse.setStatus(CommonEnum.OperationStatus.OTHER);
227 // String execId = jobInfo.getVnfmExecutionId();
228 // logger.info(" VnfmDriverMgmrImpl --> getOperStatus execId is " + execId);
229 // cbamResponse = cbamMgmr.queryOperExecution(execId);
232 } catch (Exception e) {
233 logger.error("error VnfmDriverMgmrImpl --> getOperStatus. ", e);
234 throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
237 OperStatusVnfResponse response = responseConverter.operRspConvert(cbamResponse, jobId);
238 response.setJobId(jobId);
243 public ScaleVnfResponse scaleVnf(ScaleVnfRequest driverRequest, String vnfmId, String vnfInstanceId)
244 throws VnfmDriverException {
245 ScaleVnfResponse driverResponse;
247 buildVnfmHttpPathById(vnfmId);
248 driverResponse = generateScaleVnfResponse(vnfInstanceId, driverRequest.getType());
249 String jobId = driverResponse.getJobId();
251 vnfContinueProcessorInf.continueScaleVnf(vnfmId, driverRequest, vnfInstanceId, jobId, nslcmMgmr, cbamMgmr,
252 requestConverter, jobDbManager);
253 } catch (Exception e) {
254 logger.error("error VnfmDriverMgmrImpl --> scaleVnf. ", e);
255 throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
258 return driverResponse;
261 private ScaleVnfResponse generateScaleVnfResponse(String vnfInstanceId, ScaleType type) {
262 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
263 long nowTime = System.currentTimeMillis();
264 jobInfo.setVnfInstanceId(vnfInstanceId);
265 if (type.equals(ScaleType.SCALE_OUT)) {
266 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_SCALE_OUT);
268 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_SCALE_IN);
270 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
271 jobInfo.setOperateStartTime(nowTime);
272 jobDbManager.insert(jobInfo);
273 VnfmJobExecutionInfo jobInfo1 = jobDbManager.findNewestJobInfo();
274 Long jobId = jobInfo1.getJobId();
276 ScaleVnfResponse response = new ScaleVnfResponse();
277 response.setJobId("" + jobId);
282 public HealVnfResponse healVnf(HealVnfRequest driverRequest, String vnfmId, String vnfInstanceId)
283 throws VnfmDriverException {
284 HealVnfResponse driverResponse;
286 buildVnfmHttpPathById(vnfmId);
287 driverResponse = generateHealVnfResponse(vnfInstanceId);
288 String jobId = driverResponse.getJobId();
290 vnfContinueProcessorInf.continueHealVnf(vnfmId, driverRequest, vnfInstanceId, jobId, nslcmMgmr, cbamMgmr,
291 requestConverter, jobDbManager);
292 } catch (Exception e) {
293 logger.error("error VnfmDriverMgmrImpl --> healVnf. ", e);
294 throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
297 return driverResponse;
300 private HealVnfResponse generateHealVnfResponse(String vnfInstanceId) {
301 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
302 long nowTime = System.currentTimeMillis();
303 jobInfo.setVnfInstanceId(vnfInstanceId);
304 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_HEAL);
305 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
306 jobInfo.setOperateStartTime(nowTime);
307 jobDbManager.insert(jobInfo);
308 VnfmJobExecutionInfo jobInfo1 = jobDbManager.findNewestJobInfo();
309 Long jobId = jobInfo1.getJobId();
311 HealVnfResponse response = new HealVnfResponse();
312 response.setJobId("" + jobId);
316 public String buildVnfmHttpPathById(String vnfmId) {
319 result = buildVnfmHttpPathByRealId(vnfmId);
320 } catch (Exception e) {
321 logger.error("buildVnfmHttpPathById Error.", e);
326 public String buildVnfmHttpPathByRealId(String vnfmId)
327 throws ClientProtocolException, IOException, VnfmDriverException {
328 AaiVnfmInfo vnfmInfo = aaiMgmr.queryVnfm(vnfmId);
329 logger.info("vnfmInfo in AAI is " + gson.toJson(vnfmInfo));
330 if (isVnfmInfoValid(vnfmId, vnfmInfo)) {
331 throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
334 EsrSystemInfo systemInfo = vnfmInfo.getEsrSystemInfoList().get(0);
336 String urlHead = systemInfo.getServiceUrl();
337 // adaptorEnv.setCbamApiUriFront(urlHead);
338 // adaptorEnv.setCbamUserName(systemInfo.getUserName());
339 // adaptorEnv.setCbamPassword(systemInfo.getPassword());
344 private boolean isVnfmInfoValid(String vnfmId, AaiVnfmInfo vnfmInfo) {
345 return vnfmInfo == null || vnfmInfo.getEsrSystemInfoList() == null || vnfmInfo.getEsrSystemInfoList().isEmpty();
348 public void setRequestConverter(Driver2CbamRequestConverter requestConverter) {
349 this.requestConverter = requestConverter;
352 public void setResponseConverter(Cbam2DriverResponseConverter responseConverter) {
353 this.responseConverter = responseConverter;
357 public CreateSubscriptionResponse createSubscription(CreateSubscriptionRequest request) throws VnfmDriverException {
358 CreateSubscriptionResponse driverResponse;
360 CBAMCreateSubscriptionRequest cbamRequest = new CBAMCreateSubscriptionRequest();
361 cbamRequest.setCallbackUrl(request.getCallbackUri());
362 cbamRequest.setAuthentication(request.getAuthentication());
363 cbamRequest.setFilter(request.getFilter());
364 CBAMCreateSubscriptionResponse cbamResponse = cbamMgmr.createSubscription(cbamRequest);
365 driverResponse = responseConverter.queryRspConvert(cbamResponse);
366 subscriptionsMapper.insert(cbamResponse.getId());
367 } catch (Exception e) {
368 logger.error("error VnfmDriverMgmrImpl --> createSubscripiton. ", e);
369 throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
372 return driverResponse;