028f615212f1e6e365e6d370bfec835125372a8d
[vfc/nfvo/driver/vnfm/svnfm.git] / nokia / vnfmdriver / vfcadaptorservice / vfcadaptor / src / main / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / adaptor / VnfmDriverMgmrImpl.java
1 /*
2  * Copyright 2016-2017, Nokia Corporation
3  *
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
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.onap.vfc.nfvo.driver.vnfm.svnfm.adaptor;
18
19 import java.io.IOException;
20
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;
63
64 import com.google.gson.Gson;
65
66 @Component
67 public class VnfmDriverMgmrImpl implements VnfmDriverMgmrInf {
68         private static final Logger logger = LoggerFactory.getLogger(VnfmDriverMgmrImpl.class);
69
70         @Autowired
71         Driver2CbamRequestConverter requestConverter;
72
73         @Autowired
74         Cbam2DriverResponseConverter responseConverter;
75
76         @Autowired
77         private CbamMgmrInf cbamMgmr;
78
79         @Autowired
80         private CatalogMgmrInf catalogMgmr;
81
82         @Autowired
83         private NslcmMgmrInf nslcmMgmr;
84
85         @Autowired
86         private AaiMgmrInf aaiMgmr;
87
88         @Autowired
89         private VnfmJobExecutionMapper jobDbManager;
90
91         @Autowired
92         private VnfcResourceInfoMapper vnfcDbMgmr;
93         
94         @Autowired
95         private VnfmSubscriptionsMapper subscriptionsMapper;
96
97         @Autowired
98         AdaptorEnv adaptorEnv;
99
100         @Autowired
101         private VnfContinueProcessorInf vnfContinueProcessorInf;
102
103         private Gson gson = new Gson();
104
105         public InstantiateVnfResponse instantiateVnf(InstantiateVnfRequest driverRequest, String vnfmId)
106                         throws VnfmDriverException {
107                 InstantiateVnfResponse driverResponse;
108                 try {
109                         driverRequest.setVnfdId(adaptorEnv.getVnfdId());
110                         buildVnfmHttpPathById(vnfmId);
111
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);
117
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);
126
127                         vnfContinueProcessorInf.continueInstantiateVnf(vnfmId, driverRequest, vnfInstanceId, jobId.toString(),
128                                         nslcmMgmr, catalogMgmr, cbamMgmr, requestConverter, jobDbManager, vnfcDbMgmr);
129
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);
133                 }
134
135                 return driverResponse;
136         }
137
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);
145
146                 jobDbManager.insert(jobInfo);
147                 VnfmJobExecutionInfo jobInfo1 = (VnfmJobExecutionInfo) jobDbManager.findNewestJobInfo();
148                 Long jobId = jobInfo1.getJobId();
149                 return jobId;
150         }
151
152         public TerminateVnfResponse terminateVnf(TerminateVnfRequest driverRequest, String vnfmId, String vnfInstanceId) {
153                 TerminateVnfResponse driverResponse;
154                 try {
155                         buildVnfmHttpPathById(vnfmId);
156                         driverResponse = generateTerminateVnfResponse(vnfInstanceId);
157                         String jobId = driverResponse.getJobId();
158
159                         vnfContinueProcessorInf.continueTerminateVnf(vnfmId, driverRequest, vnfInstanceId, jobId, nslcmMgmr,
160                                         cbamMgmr, requestConverter, jobDbManager, vnfcDbMgmr);
161
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);
165                 }
166
167                 return driverResponse;
168         }
169
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();
180
181                 TerminateVnfResponse response = new TerminateVnfResponse();
182                 response.setJobId("" + jobId);
183                 return response;
184         }
185
186         public QueryVnfResponse queryVnf(String vnfmId, String vnfInstanceId) {
187                 QueryVnfResponse driverResponse;
188                 try {
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);
195                 }
196
197                 return driverResponse;
198         }
199
200         public OperStatusVnfResponse getOperStatus(String vnfmId, String jobId) throws VnfmDriverException {
201
202                 OperationExecution cbamResponse = null;
203
204                 try {
205                         buildVnfmHttpPathById(vnfmId);
206
207                         VnfmJobExecutionInfo jobInfo = jobDbManager.findOne(Long.parseLong(jobId));
208                         cbamResponse = new OperationExecution();
209
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);
217                         } else {
218                                 cbamResponse.setOperationType(OperationType.HEAL);
219                         }
220
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);
225                         } else {
226                                 cbamResponse.setStatus(CommonEnum.OperationStatus.OTHER);
227                                 // String execId = jobInfo.getVnfmExecutionId();
228                                 // logger.info(" VnfmDriverMgmrImpl --> getOperStatus execId is " + execId);
229                                 // cbamResponse = cbamMgmr.queryOperExecution(execId);
230                         }
231
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);
235                 }
236
237                 OperStatusVnfResponse response = responseConverter.operRspConvert(cbamResponse, jobId);
238                 response.setJobId(jobId);
239
240                 return response;
241         }
242
243         public ScaleVnfResponse scaleVnf(ScaleVnfRequest driverRequest, String vnfmId, String vnfInstanceId)
244                         throws VnfmDriverException {
245                 ScaleVnfResponse driverResponse;
246                 try {
247                         buildVnfmHttpPathById(vnfmId);
248                         driverResponse = generateScaleVnfResponse(vnfInstanceId, driverRequest.getType());
249                         String jobId = driverResponse.getJobId();
250
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);
256                 }
257
258                 return driverResponse;
259         }
260
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);
267                 } else {
268                         jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_SCALE_IN);
269                 }
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();
275
276                 ScaleVnfResponse response = new ScaleVnfResponse();
277                 response.setJobId("" + jobId);
278                 return response;
279
280         }
281
282         public HealVnfResponse healVnf(HealVnfRequest driverRequest, String vnfmId, String vnfInstanceId)
283                         throws VnfmDriverException {
284                 HealVnfResponse driverResponse;
285                 try {
286                         buildVnfmHttpPathById(vnfmId);
287                         driverResponse = generateHealVnfResponse(vnfInstanceId);
288                         String jobId = driverResponse.getJobId();
289
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);
295                 }
296
297                 return driverResponse;
298         }
299
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();
310
311                 HealVnfResponse response = new HealVnfResponse();
312                 response.setJobId("" + jobId);
313                 return response;
314         }
315
316         public String buildVnfmHttpPathById(String vnfmId) {
317                 String result = "";
318                 try {
319                         result = buildVnfmHttpPathByRealId(vnfmId);
320                 } catch (Exception e) {
321                         logger.error("buildVnfmHttpPathById Error.", e);
322                 }
323                 return result;
324         }
325
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);
332                 }
333
334                 EsrSystemInfo systemInfo = vnfmInfo.getEsrSystemInfoList().get(0);
335
336                 String urlHead = systemInfo.getServiceUrl();
337                 // adaptorEnv.setCbamApiUriFront(urlHead);
338                 // adaptorEnv.setCbamUserName(systemInfo.getUserName());
339                 // adaptorEnv.setCbamPassword(systemInfo.getPassword());
340
341                 return urlHead;
342         }
343
344         private boolean isVnfmInfoValid(String vnfmId, AaiVnfmInfo vnfmInfo) {
345                 return vnfmInfo == null || vnfmInfo.getEsrSystemInfoList() == null || vnfmInfo.getEsrSystemInfoList().isEmpty();
346         }
347
348         public void setRequestConverter(Driver2CbamRequestConverter requestConverter) {
349                 this.requestConverter = requestConverter;
350         }
351
352         public void setResponseConverter(Cbam2DriverResponseConverter responseConverter) {
353                 this.responseConverter = responseConverter;
354         }
355
356         @Override
357         public CreateSubscriptionResponse createSubscription(CreateSubscriptionRequest request) throws VnfmDriverException {
358                 CreateSubscriptionResponse driverResponse;
359                 try {
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);
370                 }
371
372                 return driverResponse;
373         }
374
375 }