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.repository.VnfmJobExecutionRepository;
31 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmGrantVnfRequest;
32 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmGrantVnfResponse;
33 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmNotifyLCMEventsRequest;
34 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.AddResource;
35 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.AffectedVnfc;
36 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.ResourceDefinition;
37 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.inf.NslcmMgmrInf;
38 import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfRequest;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
42 public class TerminateVnfContinueRunnable implements Runnable {
43 private static final Logger logger = LoggerFactory.getLogger(TerminateVnfContinueRunnable.class);
45 private CbamMgmrInf cbamMgmr;
46 private NslcmMgmrInf nslcmMgmr;
48 private TerminateVnfRequest driverRequest;
49 private String vnfInstanceId;
51 private String vnfmId;
52 private VnfmJobExecutionRepository jobDbMgmr;
54 private Driver2CbamRequestConverter requestConverter;
56 public TerminateVnfContinueRunnable(String vnfmId, TerminateVnfRequest driverRequest, String vnfInstanceId, String jobId,
57 NslcmMgmrInf nslcmMgmr, CbamMgmrInf cbamMgmr, Driver2CbamRequestConverter requestConverter, VnfmJobExecutionRepository dbManager)
59 this.driverRequest = driverRequest;
60 this.vnfInstanceId = vnfInstanceId;
61 this.nslcmMgmr = nslcmMgmr;
62 this.cbamMgmr = cbamMgmr;
63 this.requestConverter = requestConverter;
65 this.jobDbMgmr = dbManager;
69 private void handleGrant(){
71 NslcmGrantVnfRequest grantRequest = buildNslcmGrantVnfRequest();
72 nslcmMgmr.grantVnf(grantRequest);
73 } catch (Exception e) {
74 logger.error("TerminateVnfContinueRunnable --> handleGrant error.", e);
84 private void handleDelete() {
86 boolean vnfAllowDelete = false;
88 while(!vnfAllowDelete) {
89 CBAMQueryVnfResponse queryResponse = cbamMgmr.queryVnf(vnfInstanceId);
90 if(CommonEnum.InstantiationState.NOT_INSTANTIATED == queryResponse.getInstantiationState())
92 vnfAllowDelete = true;
96 logger.info(i + ": The vnf's current status is " + queryResponse.getInstantiationState().name() + " is not ready for deleting, please wait ... ");
100 cbamMgmr.deleteVnf(vnfInstanceId);
101 } catch (Exception e) {
102 logger.error("TerminateVnfContinueRunnable --> handleDelete error.", e);
106 private void prepareDelete(String jobId) {
107 OperateTaskProgress.stopTerminateTimerTask();
109 VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
110 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_FINISH);
111 jobDbMgmr.save(jobInfo);
114 NslcmNotifyLCMEventsRequest nslcmNotifyReq = buildNslcmNotifyLCMEventsRequest();
115 nslcmMgmr.notifyVnf(nslcmNotifyReq, vnfmId, vnfInstanceId);
116 } catch (Exception e) {
117 logger.error("TerminateVnfContinueRunnable --> handleNotify error.", e);
121 private CBAMTerminateVnfResponse handleTerminate() {
122 CBAMTerminateVnfResponse cbamResponse = null;
124 CBAMTerminateVnfRequest modifyReq = requestConverter.terminateReqConvert(driverRequest);
125 cbamResponse = cbamMgmr.terminateVnf(modifyReq, vnfInstanceId);
126 handleCbamTerminateResponse(cbamResponse, jobId);
127 } catch (Exception e) {
128 logger.error("TerminateVnfContinueRunnable --> handleTerminate error.", e);
134 private void handleCbamTerminateResponse(CBAMTerminateVnfResponse cbamResponse, String jobId) {
135 VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
137 jobInfo.setVnfmExecutionId(cbamResponse.getId());
138 if(CommonEnum.OperationStatus.FAILED == cbamResponse.getStatus()) {
139 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_ERROR);
142 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_PROCESSING);
144 jobDbMgmr.save(jobInfo);
147 private NslcmGrantVnfRequest buildNslcmGrantVnfRequest() {
148 NslcmGrantVnfRequest request = new NslcmGrantVnfRequest();
150 request.setVnfInstanceId(vnfInstanceId);
151 request.setLifecycleOperation(LifecycleOperation.Terminal);
152 request.setJobId(jobId);
154 ResourceDefinition resource = getFreeVnfResource();
155 List<ResourceDefinition> resourceList = new ArrayList<ResourceDefinition>();
156 resourceList.add(resource);
157 request.setRemoveResource(resourceList);
162 private ResourceDefinition getFreeVnfResource() {
163 ResourceDefinition def = new ResourceDefinition();
164 def.setVnfInstanceId(vnfInstanceId);
166 List<AddResource> resources = new ArrayList<>();
167 AddResource res = new AddResource();
170 res.setResourceDefinitionId(2);
172 def.setAddResource(resources);
176 private NslcmNotifyLCMEventsRequest buildNslcmNotifyLCMEventsRequest() {
177 NslcmNotifyLCMEventsRequest request = new NslcmNotifyLCMEventsRequest();
178 request.setStatus(CommonEnum.status.result);
180 List<AffectedVnfc> vnfcs = modifyResourceTypeAsRemove(OperateTaskProgress.getAffectedVnfc());
182 request.setAffectedVnfc(vnfcs);
183 request.setVnfInstanceId(vnfInstanceId);
184 request.setOperation(CommonConstants.NSLCM_OPERATION_TERMINATE);
185 request.setJobId(jobId);
189 private List<AffectedVnfc> modifyResourceTypeAsRemove(List<AffectedVnfc> affectedVnfc) {
190 List<AffectedVnfc> vnfcs = affectedVnfc;
191 if(vnfcs != null && !vnfcs.isEmpty()) {
192 for(AffectedVnfc vnfc : vnfcs)
194 vnfc.setChangeType(CommonEnum.AffectchangeType.removed);
201 private void handleNslcmGrantResponse(NslcmGrantVnfResponse grantResponse) {
202 // TODO Auto-generated method stub