0e6493c1f1f4b19fbb812f4783d1043d90c2a8d1
[vfc/nfvo/driver/vnfm/svnfm.git] / nokia / vnfmdriver / vfcadaptorservice / vfcadaptor / src / main / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / adaptor / TerminateVnfContinueRunnable.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.util.ArrayList;
20 import java.util.List;
21
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;
41
42 public class TerminateVnfContinueRunnable implements Runnable {
43         private static final Logger logger = LoggerFactory.getLogger(TerminateVnfContinueRunnable.class);
44
45         private CbamMgmrInf cbamMgmr;
46         private NslcmMgmrInf nslcmMgmr;
47         
48         private TerminateVnfRequest driverRequest;
49         private String vnfInstanceId;
50         private String jobId;
51         private String vnfmId;
52         private VnfmJobExecutionRepository jobDbMgmr;
53         
54         private Driver2CbamRequestConverter requestConverter;
55         
56         public TerminateVnfContinueRunnable(String vnfmId, TerminateVnfRequest driverRequest, String vnfInstanceId, String jobId,
57                         NslcmMgmrInf nslcmMgmr, CbamMgmrInf cbamMgmr, Driver2CbamRequestConverter requestConverter, VnfmJobExecutionRepository dbManager)
58         {
59                 this.driverRequest = driverRequest;
60                 this.vnfInstanceId = vnfInstanceId;
61                 this.nslcmMgmr = nslcmMgmr; 
62                 this.cbamMgmr = cbamMgmr;
63                 this.requestConverter = requestConverter;
64                 this.jobId = jobId;
65                 this.jobDbMgmr = dbManager;
66                 this.vnfmId = vnfmId;
67         }
68         
69         private void handleGrant(){
70                 try {
71                         NslcmGrantVnfRequest grantRequest = buildNslcmGrantVnfRequest();
72                         nslcmMgmr.grantVnf(grantRequest);
73                 } catch (Exception e) {
74                         logger.error("TerminateVnfContinueRunnable --> handleGrant error.", e);
75                 }
76         }
77         
78         public void run() {
79                 handleGrant();
80                 handleTerminate();
81                 handleDelete();
82         }
83         
84         private void handleDelete() {
85                 try {
86                         boolean vnfAllowDelete = false;
87                         int i = 0;
88                         while(!vnfAllowDelete) {
89                                 CBAMQueryVnfResponse queryResponse = cbamMgmr.queryVnf(vnfInstanceId);
90                                 if(CommonEnum.InstantiationState.NOT_INSTANTIATED == queryResponse.getInstantiationState())
91                                 {
92                                         vnfAllowDelete = true;
93                                         break;
94                                 }
95                                 i++;
96                                 logger.info(i + ": The vnf's current status is " + queryResponse.getInstantiationState().name() + " is not ready for deleting, please wait ... ");
97                                 Thread.sleep(30000);
98                         }
99                         prepareDelete(jobId);
100                         cbamMgmr.deleteVnf(vnfInstanceId);
101                 } catch (Exception e) {
102                         logger.error("TerminateVnfContinueRunnable --> handleDelete error.", e);
103                 }
104         }
105         
106         private void prepareDelete(String jobId) {
107                 OperateTaskProgress.stopTerminateTimerTask();
108                 
109                 VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
110                 jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_FINISH);
111                 jobDbMgmr.save(jobInfo);
112                 
113                 try {
114                         NslcmNotifyLCMEventsRequest nslcmNotifyReq = buildNslcmNotifyLCMEventsRequest();
115                         nslcmMgmr.notifyVnf(nslcmNotifyReq, vnfmId, vnfInstanceId);
116                 } catch (Exception e) {
117                         logger.error("TerminateVnfContinueRunnable --> handleNotify error.", e);
118                 }
119         }
120
121         private CBAMTerminateVnfResponse handleTerminate() {
122                 CBAMTerminateVnfResponse cbamResponse = null;
123                 try {
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);
129                 }
130                 
131                 return cbamResponse;
132         }
133
134         private void handleCbamTerminateResponse(CBAMTerminateVnfResponse cbamResponse, String jobId) {
135                 VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
136                 
137                 jobInfo.setVnfmExecutionId(cbamResponse.getId());
138                 if(CommonEnum.OperationStatus.FAILED == cbamResponse.getStatus()) {
139                         jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_ERROR);
140                 }
141                 else {
142                         jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_PROCESSING);
143                 }
144                 jobDbMgmr.save(jobInfo);
145         }
146         
147         private NslcmGrantVnfRequest buildNslcmGrantVnfRequest() {
148                 NslcmGrantVnfRequest request = new NslcmGrantVnfRequest();
149                 
150                 request.setVnfInstanceId(vnfInstanceId);
151                 request.setLifecycleOperation(LifecycleOperation.Terminal);
152                 request.setJobId(jobId);
153                 
154                 ResourceDefinition resource = getFreeVnfResource();
155                 List<ResourceDefinition> resourceList = new ArrayList<ResourceDefinition>();
156                 resourceList.add(resource);
157                 request.setRemoveResource(resourceList);
158                 
159                 return request;
160         }
161         
162         private ResourceDefinition getFreeVnfResource() {
163                 ResourceDefinition def = new ResourceDefinition();
164                 def.setVnfInstanceId(vnfInstanceId);
165                 def.setVimId("001");
166                 List<AddResource> resources = new ArrayList<>();
167                 AddResource res = new AddResource();
168                 res.setVdu("1");
169                 res.setType("vdu");
170                 res.setResourceDefinitionId(2);
171                 resources.add(res);
172                 def.setAddResource(resources);
173                 return def;
174         }
175
176         private NslcmNotifyLCMEventsRequest buildNslcmNotifyLCMEventsRequest() {
177                 NslcmNotifyLCMEventsRequest request = new NslcmNotifyLCMEventsRequest();
178                 request.setStatus(CommonEnum.status.result);
179                 
180                 List<AffectedVnfc> vnfcs = modifyResourceTypeAsRemove(OperateTaskProgress.getAffectedVnfc());
181                 
182                 request.setAffectedVnfc(vnfcs);
183                 request.setVnfInstanceId(vnfInstanceId);
184                 request.setOperation(CommonConstants.NSLCM_OPERATION_TERMINATE);
185                 request.setJobId(jobId);
186                 return request;
187         }
188
189         private List<AffectedVnfc> modifyResourceTypeAsRemove(List<AffectedVnfc> affectedVnfc) {
190                 List<AffectedVnfc> vnfcs = affectedVnfc;
191                 if(vnfcs != null && !vnfcs.isEmpty()) {
192                         for(AffectedVnfc vnfc : vnfcs)
193                         {
194                                 vnfc.setChangeType(CommonEnum.AffectchangeType.removed);
195                         }
196                 }
197                 
198                 return vnfcs;
199         }
200
201         private void handleNslcmGrantResponse(NslcmGrantVnfResponse grantResponse) {
202                 // TODO Auto-generated method stub
203                 
204         }
205 }