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.util.ArrayList;
20 import java.util.List;
22 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryVnfResponse;
23 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMTerminateVnfRequest;
24 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMTerminateVnfResponse;
25 import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.inf.CbamMgmrInf;
26 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonConstants;
27 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonEnum;
28 import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonEnum.LifecycleOperation;
29 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.bean.VnfmJobExecutionInfo;
30 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.mapper.VnfcResourceInfoMapper;
31 import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.mapper.VnfmJobExecutionMapper;
32 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmGrantVnfRequest;
33 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmGrantVnfResponse;
34 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmNotifyLCMEventsRequest;
35 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.AddResource;
36 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.AffectedVnfc;
37 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.ResourceDefinition;
38 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.inf.NslcmMgmrInf;
39 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfRequest;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
42 import org.springframework.beans.factory.annotation.Autowired;
44 public class TerminateVnfContinueRunnable implements Runnable {
45 private static final Logger logger = LoggerFactory.getLogger(TerminateVnfContinueRunnable.class);
48 private CbamMgmrInf cbamMgmr;
50 private NslcmMgmrInf nslcmMgmr;
52 private TerminateVnfRequest driverRequest;
53 private String vnfInstanceId;
55 private String vnfmId;
57 private VnfmJobExecutionMapper jobDbMgmr;
59 private VnfcResourceInfoMapper vnfcDbMgmr;
61 private Driver2CbamRequestConverter requestConverter;
64 ////////////////////////// Builder class
66 public static class TerminateVnfContinueRunnableBuilder {
67 private String vnfmId;
68 private TerminateVnfRequest driverRequest;
69 private String vnfInstanceId;
71 private NslcmMgmrInf nslcmMgmr;
72 private CbamMgmrInf cbamMgmr;
73 private Driver2CbamRequestConverter requestConverter;
74 private VnfmJobExecutionMapper dbManager;
75 private VnfcResourceInfoMapper vnfcDbMgmr;
77 public TerminateVnfContinueRunnableBuilder setVnfmId(String vnfmId) {
82 public TerminateVnfContinueRunnableBuilder setDriverRequest(TerminateVnfRequest driverRequest) {
83 this.driverRequest = driverRequest;
87 public TerminateVnfContinueRunnableBuilder setVnfInstanceId(String vnfInstanceId) {
88 this.vnfInstanceId = vnfInstanceId;
92 public TerminateVnfContinueRunnableBuilder setJobId(String jobId) {
97 public TerminateVnfContinueRunnableBuilder setNslcmMgmr(NslcmMgmrInf nslcmMgmr) {
98 this.nslcmMgmr = nslcmMgmr;
102 public TerminateVnfContinueRunnableBuilder setCbamMgmr(CbamMgmrInf cbamMgmr) {
103 this.cbamMgmr = cbamMgmr;
107 public TerminateVnfContinueRunnableBuilder setRequestConverter(Driver2CbamRequestConverter requestConverter) {
108 this.requestConverter = requestConverter;
112 public TerminateVnfContinueRunnableBuilder setDbManager(VnfmJobExecutionMapper dbManager) {
113 this.dbManager = dbManager;
117 public TerminateVnfContinueRunnableBuilder setVnfcDbMgmr(VnfcResourceInfoMapper vnfcDbMgmr) {
118 this.vnfcDbMgmr = vnfcDbMgmr;
122 public TerminateVnfContinueRunnable build(){
123 return new TerminateVnfContinueRunnable(this);
130 public TerminateVnfContinueRunnable(TerminateVnfContinueRunnableBuilder builder)
132 this.driverRequest = builder.driverRequest;
133 this.vnfInstanceId = builder.vnfInstanceId;
134 this.nslcmMgmr = builder.nslcmMgmr;
135 this.cbamMgmr = builder.cbamMgmr;
136 this.requestConverter = builder.requestConverter;
137 this.jobId = builder.jobId;
138 this.jobDbMgmr = builder.dbManager;
139 this.vnfmId = builder.vnfmId;
140 this.vnfcDbMgmr = builder.vnfcDbMgmr;
144 private void handleGrant(){
146 NslcmGrantVnfRequest grantRequest = buildNslcmGrantVnfRequest();
147 nslcmMgmr.grantVnf(grantRequest);
148 } catch (Exception e) {
149 logger.error("TerminateVnfContinueRunnable --> handleGrant error.", e);
159 private void handleDelete() {
161 boolean vnfAllowDelete = false;
163 while (!vnfAllowDelete) {
164 CBAMQueryVnfResponse queryResponse = cbamMgmr.queryVnf(vnfInstanceId);
165 if (CommonEnum.InstantiationState.NOT_INSTANTIATED == queryResponse.getInstantiationState()) {
166 vnfAllowDelete = true;
170 logger.info(i + ": The vnf's current status is " + queryResponse.getInstantiationState().name()
171 + " is not ready for deleting, please wait ... ");
174 prepareDelete(jobId);
175 cbamMgmr.deleteVnf(vnfInstanceId);
176 } catch (Exception e) {
177 logger.error("TerminateVnfContinueRunnable --> handleDelete error.", e);
181 private void prepareDelete(String jobId) {
182 long nowTime = System.currentTimeMillis();
183 VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
184 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_FINISH);
185 jobInfo.setOperateEndTime(nowTime);
186 jobDbMgmr.update(jobInfo);
189 NslcmNotifyLCMEventsRequest nslcmNotifyReq = buildNslcmNotifyLCMEventsRequest();
190 nslcmMgmr.notifyVnf(nslcmNotifyReq, vnfmId, vnfInstanceId);
191 } catch (Exception e) {
192 logger.error("TerminateVnfContinueRunnable --> handleNotify error.", e);
196 private CBAMTerminateVnfResponse handleTerminate() {
197 CBAMTerminateVnfResponse cbamResponse = null;
199 CBAMTerminateVnfRequest modifyReq = requestConverter.terminateReqConvert(driverRequest);
200 cbamResponse = cbamMgmr.terminateVnf(modifyReq, vnfInstanceId);
201 handleCbamTerminateResponse(cbamResponse, jobId);
202 } catch (Exception e) {
203 logger.error("TerminateVnfContinueRunnable --> handleTerminate error.", e);
209 private void handleCbamTerminateResponse(CBAMTerminateVnfResponse cbamResponse, String jobId) {
210 VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
212 jobInfo.setVnfmExecutionId(cbamResponse.getId());
213 if(CommonEnum.OperationStatus.FAILED == cbamResponse.getStatus()) {
214 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_ERROR);
217 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_PROCESSING);
219 jobDbMgmr.update(jobInfo);
222 private NslcmGrantVnfRequest buildNslcmGrantVnfRequest() {
223 NslcmGrantVnfRequest request = new NslcmGrantVnfRequest();
225 request.setVnfInstanceId(vnfInstanceId);
226 request.setLifecycleOperation(LifecycleOperation.Terminal);
227 request.setJobId(jobId);
229 ResourceDefinition resource = getFreeVnfResource();
230 List<ResourceDefinition> resourceList = new ArrayList<ResourceDefinition>();
231 resourceList.add(resource);
232 request.setRemoveResource(resourceList);
237 private ResourceDefinition getFreeVnfResource() {
238 ResourceDefinition def = new ResourceDefinition();
239 def.setVnfInstanceId(vnfInstanceId);
241 List<AddResource> resources = new ArrayList<>();
242 AddResource res = new AddResource();
245 res.setResourceDefinitionId(2);
247 def.setAddResource(resources);
251 private NslcmNotifyLCMEventsRequest buildNslcmNotifyLCMEventsRequest() {
252 NslcmNotifyLCMEventsRequest request = new NslcmNotifyLCMEventsRequest();
253 request.setStatus(CommonEnum.status.result);
254 List<AffectedVnfc> vnfcsFromDb = vnfcDbMgmr.getAllByInstanceId(vnfInstanceId);
255 List<AffectedVnfc> vnfcs = modifyResourceTypeAsRemove(vnfcsFromDb);
257 request.setAffectedVnfc(vnfcs);
258 request.setVnfInstanceId(vnfInstanceId);
259 request.setOperation(CommonConstants.NSLCM_OPERATION_TERMINATE);
260 request.setJobId(jobId);
264 private List<AffectedVnfc> modifyResourceTypeAsRemove(List<AffectedVnfc> affectedVnfc) {
265 List<AffectedVnfc> vnfcs = affectedVnfc;
266 if(vnfcs != null && !vnfcs.isEmpty()) {
267 for(AffectedVnfc vnfc : vnfcs)
269 vnfc.setChangeType(CommonEnum.AffectchangeType.removed);
274 vnfcs = new ArrayList<>();
280 public void setDriverRequest(TerminateVnfRequest driverRequest) {
281 this.driverRequest = driverRequest;
284 public void setVnfInstanceId(String vnfInstanceId) {
285 this.vnfInstanceId = vnfInstanceId;
288 public void setJobId(String jobId) {
292 public void setVnfmId(String vnfmId) {
293 this.vnfmId = vnfmId;
296 public void setRequestConverter(Driver2CbamRequestConverter requestConverter) {
297 this.requestConverter = requestConverter;