Add modify vnf feature on driver
[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.CBAMCreateVnfRequest;
28 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMCreateVnfResponse;
29 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMHealVnfRequest;
30 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMHealVnfResponse;
31 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryOperExecutionResponse;
32 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryVnfResponse;
33 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMScaleVnfRequest;
34 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMScaleVnfResponse;
35 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.inf.CbamMgmrInf;
36 import org.onap.vfc.nfvo.driver.vnfm.svnfm.common.bo.AdaptorEnv;
37 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonConstants;
38 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.bean.VnfmJobExecutionInfo;
39 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.repository.VnfmJobExecutionRepository;
40 import org.onap.vfc.nfvo.driver.vnfm.svnfm.exception.VnfmDriverException;
41 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.inf.NslcmMgmrInf;
42 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.HealVnfRequest;
43 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.HealVnfResponse;
44 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.InstantiateVnfRequest;
45 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.InstantiateVnfResponse;
46 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.OperStatusVnfResponse;
47 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.QueryVnfResponse;
48 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.ScaleVnfRequest;
49 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.ScaleVnfResponse;
50 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfRequest;
51 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfResponse;
52 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.inf.VnfContinueProcessorInf;
53 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.inf.VnfmDriverMgmrInf;
54 import org.slf4j.Logger;
55 import org.slf4j.LoggerFactory;
56 import org.springframework.beans.factory.annotation.Autowired;
57 import org.springframework.stereotype.Component;
58
59 import com.google.gson.Gson;
60
61
62 @Component
63 public class VnfmDriverMgmrImpl implements VnfmDriverMgmrInf{
64         private static final Logger logger = LoggerFactory.getLogger(VnfmDriverMgmrImpl.class);
65         
66         @Autowired
67         Driver2CbamRequestConverter requestConverter;
68         
69         @Autowired
70         Cbam2DriverResponseConverter responseConverter;
71         
72         @Autowired
73         private CbamMgmrInf cbamMgmr;
74         
75         @Autowired
76         private CatalogMgmrInf catalogMgmr;
77         
78         @Autowired
79         private NslcmMgmrInf nslcmMgmr;
80         
81         @Autowired
82         private AaiMgmrInf aaiMgmr;
83         
84         @Autowired
85         private VnfmJobExecutionRepository jobDbManager;
86         
87         @Autowired
88         AdaptorEnv adaptorEnv;
89         
90         @Autowired
91         private VnfContinueProcessorInf vnfContinueProcessorInf;
92         
93         private Gson gson = new Gson();
94         
95         public InstantiateVnfResponse instantiateVnf(InstantiateVnfRequest driverRequest, String vnfmId) throws VnfmDriverException {
96                 InstantiateVnfResponse driverResponse;
97                 try {
98                         driverRequest.setVnfdId(adaptorEnv.getVnfdId());
99                         buildVnfmHttpPathById(vnfmId);
100                         
101 //                      String dirPath = "/etc/vnfmpkg";
102 //                      String cbamDirName = CommonUtil.getAppRoot() + dirPath;
103 //                      File cbamDirFile = new File(cbamDirName);
104 //                      String cbamPackageName = cbamDirFile.listFiles()[0].getAbsolutePath();
105 //                      cbamMgmr.uploadVnfPackage(cbamPackageName);
106                         
107                         //step 3: create vnf
108                         CBAMCreateVnfRequest cbamRequest = requestConverter.createReqConvert(driverRequest);
109                         CBAMCreateVnfResponse cbamResponse = cbamMgmr.createVnf(cbamRequest);
110                         String vnfInstanceId = cbamResponse.getId();
111                         
112                         Long jobId = saveCreateVnfJob(vnfInstanceId);
113                         driverResponse = responseConverter.createRspConvert(cbamResponse, jobId);
114                         
115                         vnfContinueProcessorInf.continueInstantiateVnf(vnfmId, driverRequest, vnfInstanceId, jobId.toString(), nslcmMgmr, catalogMgmr, cbamMgmr, requestConverter, jobDbManager);
116                         
117                 } catch (Exception e) {
118                         logger.error("error VnfmDriverMgmrImpl --> instantiateVnf. ", e);
119                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
120                 }
121                 
122         return driverResponse;
123         }
124         
125         private Long saveCreateVnfJob(String vnfInstanceId) {
126                 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
127                 jobInfo.setVnfInstanceId(vnfInstanceId);
128                 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_INSTANTIATE);
129                 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
130
131                 VnfmJobExecutionInfo jobInfo1 = (VnfmJobExecutionInfo) jobDbManager.save(jobInfo);
132                 Long jobId = jobInfo1.getJobId();
133                 return jobId;
134         }
135
136         public TerminateVnfResponse terminateVnf(TerminateVnfRequest driverRequest, String vnfmId, String vnfInstanceId) {
137                 TerminateVnfResponse driverResponse;
138                 try {
139                         buildVnfmHttpPathById(vnfmId);
140                         driverResponse = generateTerminateVnfResponse(vnfInstanceId);
141                         String jobId = driverResponse.getJobId();
142                         vnfContinueProcessorInf.continueTerminateVnf(vnfmId, driverRequest, vnfInstanceId, jobId, nslcmMgmr, cbamMgmr, requestConverter, jobDbManager);
143                         
144                 } catch (Exception e) {
145                         logger.error("error VnfmDriverMgmrImpl --> terminateVnf. ", e);
146                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
147                 }
148                 
149         return driverResponse;
150         }
151
152         private TerminateVnfResponse generateTerminateVnfResponse(String vnfInstanceId) {
153                 VnfmJobExecutionInfo jobInfo = new VnfmJobExecutionInfo();
154                 jobInfo.setVnfInstanceId(vnfInstanceId);
155                 jobInfo.setVnfmInterfceName(CommonConstants.NSLCM_OPERATION_TERMINATE);
156                 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
157                 
158                 VnfmJobExecutionInfo jobInfo1=  jobDbManager.save(jobInfo);
159                 Long jobId = jobInfo1.getJobId();
160                 
161                 TerminateVnfResponse response = new TerminateVnfResponse();
162                 response.setJobId("" + jobId);
163                 return response;
164         }
165
166         public QueryVnfResponse queryVnf(String vnfmId, String vnfInstanceId) {
167                 QueryVnfResponse driverResponse;
168                 try {
169                         buildVnfmHttpPathById(vnfmId);
170                         CBAMQueryVnfResponse cbamResponse = cbamMgmr.queryVnf(vnfInstanceId);
171                         driverResponse = responseConverter.queryRspConvert(cbamResponse);
172                 } catch (Exception e) {
173                         logger.error("error VnfmDriverMgmrImpl --> queryVnf. ", e);
174                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
175                 }
176                 
177         return driverResponse;
178         }
179
180         public OperStatusVnfResponse getOperStatus(String vnfmId, String jobId)  throws VnfmDriverException {
181                 
182                 CBAMQueryOperExecutionResponse cbamResponse;
183                 
184                 try {
185                         buildVnfmHttpPathById(vnfmId);
186                         
187                         VnfmJobExecutionInfo jobInfo = jobDbManager.findOne(Long.parseLong(jobId));
188                         String execId = jobInfo.getVnfmExecutionId();
189                         logger.info(" VnfmDriverMgmrImpl --> getOperStatus execId is " + execId);
190                         cbamResponse = cbamMgmr.queryOperExecution(execId);
191                 } catch (Exception e) {
192                         logger.error("error VnfmDriverMgmrImpl --> getOperStatus. ", e);
193                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
194                 }
195                 
196                 OperStatusVnfResponse response = responseConverter.operRspConvert(cbamResponse);
197                 
198                 return response;
199         }
200
201         public ScaleVnfResponse scaleVnf(ScaleVnfRequest driverRequest, String vnfmId, String vnfInstanceId) throws VnfmDriverException {
202                 ScaleVnfResponse driverResponse;
203                 try {
204                         buildVnfmHttpPathById(vnfmId);
205                         CBAMScaleVnfRequest cbamRequest = requestConverter.scaleReqconvert(driverRequest);
206                         CBAMScaleVnfResponse cbamResponse = cbamMgmr.scaleVnf(cbamRequest, vnfInstanceId);
207                         driverResponse = responseConverter.scaleRspConvert(cbamResponse);
208                 } catch (Exception e) {
209                         logger.error("error VnfmDriverMgmrImpl --> scaleVnf. ", e);
210                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
211                 }
212                 
213         return driverResponse;
214         }
215
216         public HealVnfResponse healVnf(HealVnfRequest driverRequest, String vnfmId, String vnfInstanceId) throws VnfmDriverException {
217                 HealVnfResponse driverResponse;
218                 try {
219                         buildVnfmHttpPathById(vnfmId);
220                         CBAMHealVnfRequest cbamRequest = requestConverter.healReqConvert(driverRequest);
221                         CBAMHealVnfResponse cbamResponse = cbamMgmr.healVnf(cbamRequest, vnfInstanceId);
222                         driverResponse = responseConverter.healRspConvert(cbamResponse);
223                 } catch (Exception e) {
224                         logger.error("error VnfmDriverMgmrImpl --> healVnf. ", e);
225                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
226                 }
227                 
228         return driverResponse;
229         }
230
231         public String buildVnfmHttpPathById(String vnfmId) throws ClientProtocolException, IOException, VnfmDriverException {
232                 
233                 return buildVnfmHttpPathByRealId(vnfmId);
234         }
235         
236         public String buildVnfmHttpPathByRealId(String vnfmId) throws ClientProtocolException, IOException, VnfmDriverException {
237                 AaiVnfmInfo vnfmInfo = aaiMgmr.queryVnfm(vnfmId);
238                 logger.info("vnfmInfo in AAI is {}", gson.toJson(vnfmInfo));
239                 if(isVnfmInfoValid(vnfmId, vnfmInfo))
240                 {
241                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
242                 }
243                 
244                 EsrSystemInfo systemInfo = vnfmInfo.getEsrSystemInfoList().get(0);
245                 
246                 String urlHead = systemInfo.getServiceUrl();
247 //              adaptorEnv.setCbamApiUriFront(urlHead);
248 //              adaptorEnv.setCbamUserName(systemInfo.getUserName());
249 //              adaptorEnv.setCbamPassword(systemInfo.getPassword());
250                 
251                 return urlHead;
252         }
253
254         private boolean isVnfmInfoValid(String vnfmId, AaiVnfmInfo vnfmInfo) {
255                 return vnfmInfo == null || vnfmInfo.getEsrSystemInfoList() == null || vnfmInfo.getEsrSystemInfoList().isEmpty();
256         }
257
258         public void setRequestConverter(Driver2CbamRequestConverter requestConverter) {
259                 this.requestConverter = requestConverter;
260         }
261
262         public void setResponseConverter(Cbam2DriverResponseConverter responseConverter) {
263                 this.responseConverter = responseConverter;
264         }
265
266 }