package org.onap.vfc.nfvo.driver.vnfm.svnfm.adaptor;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import org.apache.http.client.ClientProtocolException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryVnfResponse;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMTerminateVnfRequest;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMTerminateVnfResponse;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.inf.CbamMgmrInf;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmGrantVnfRequest;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmGrantVnfResponse;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmNotifyLCMEventsRequest;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.AddResource;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.AffectedVnfc;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.entity.ResourceDefinition;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.inf.NslcmMgmrInf;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.vnfmdriver.bo.TerminateVnfRequest;
-
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class TerminateVnfContinueRunnable implements Runnable {
private static final Logger logger = LoggerFactory.getLogger(TerminateVnfContinueRunnable.class);
private TerminateVnfRequest driverRequest;
private String vnfInstanceId;
private String jobId;
+ private String vnfmId;
private VnfmJobExecutionRepository jobDbMgmr;
private Driver2CbamRequestConverter requestConverter;
- public TerminateVnfContinueRunnable(TerminateVnfRequest driverRequest, String vnfInstanceId, String jobId,
+ public TerminateVnfContinueRunnable(String vnfmId, TerminateVnfRequest driverRequest, String vnfInstanceId, String jobId,
NslcmMgmrInf nslcmMgmr, CbamMgmrInf cbamMgmr, Driver2CbamRequestConverter requestConverter, VnfmJobExecutionRepository dbManager)
{
this.driverRequest = driverRequest;
this.requestConverter = requestConverter;
this.jobId = jobId;
this.jobDbMgmr = dbManager;
+ this.vnfmId = vnfmId;
}
- public void run() {
+ private void handleGrant(){
try {
NslcmGrantVnfRequest grantRequest = buildNslcmGrantVnfRequest();
- NslcmGrantVnfResponse grantResponse = nslcmMgmr.grantVnf(grantRequest);
- handleNslcmGrantResponse(grantResponse);
-
- CBAMTerminateVnfRequest cbamRequest = requestConverter.terminateReqConvert(driverRequest);
- CBAMTerminateVnfResponse cbamResponse = cbamMgmr.terminateVnf(cbamRequest, vnfInstanceId);
- handleCbamInstantiateResponse(cbamResponse, jobId);
-
+ nslcmMgmr.grantVnf(grantRequest);
+ } catch (Exception e) {
+ logger.error("TerminateVnfContinueRunnable --> handleGrant error.", e);
+ }
+ }
+
+ public void run() {
+ handleGrant();
+ handleTerminate();
+ handleDelete();
+ }
+
+ private void handleDelete() {
+ try {
+ boolean vnfAllowDelete = false;
+ int i = 0;
+ while(!vnfAllowDelete) {
+ CBAMQueryVnfResponse queryResponse = cbamMgmr.queryVnf(vnfInstanceId);
+ if(CommonEnum.InstantiationState.NOT_INSTANTIATED == queryResponse.getInstantiationState())
+ {
+ vnfAllowDelete = true;
+ break;
+ }
+ i++;
+ logger.info(i + ": The vnf's current status is " + queryResponse.getInstantiationState().name() + " is not ready for deleting, please wait ... ");
+ Thread.sleep(30000);
+ }
+ prepareDelete(jobId);
cbamMgmr.deleteVnf(vnfInstanceId);
-
- NslcmNotifyLCMEventsRequest nslcmNotifyReq = buildNslcmNotifyLCMEventsRequest(cbamResponse);
- nslcmMgmr.notifyVnf(nslcmNotifyReq, vnfInstanceId);
-
- } catch (ClientProtocolException e) {
- logger.error("TerminateVnfContinueRunnable run error ClientProtocolException", e);
- } catch (IOException e) {
- logger.error("TerminateVnfContinueRunnable run error IOException", e);
+ } catch (Exception e) {
+ logger.error("TerminateVnfContinueRunnable --> handleDelete error.", e);
}
-
}
- private void handleCbamInstantiateResponse(CBAMTerminateVnfResponse cbamResponse, String jobId) {
- VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.getLong(jobId));
+ private void prepareDelete(String jobId) {
+ OperateTaskProgress.stopTerminateTimerTask();
+
+ VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
+ jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_FINISH);
+ jobDbMgmr.save(jobInfo);
+
+ try {
+ NslcmNotifyLCMEventsRequest nslcmNotifyReq = buildNslcmNotifyLCMEventsRequest();
+ nslcmMgmr.notifyVnf(nslcmNotifyReq, vnfmId, vnfInstanceId);
+ } catch (Exception e) {
+ logger.error("TerminateVnfContinueRunnable --> handleNotify error.", e);
+ }
+ }
+
+ private CBAMTerminateVnfResponse handleTerminate() {
+ CBAMTerminateVnfResponse cbamResponse = null;
+ try {
+ CBAMTerminateVnfRequest modifyReq = requestConverter.terminateReqConvert(driverRequest);
+ cbamResponse = cbamMgmr.terminateVnf(modifyReq, vnfInstanceId);
+ handleCbamTerminateResponse(cbamResponse, jobId);
+ } catch (Exception e) {
+ logger.error("TerminateVnfContinueRunnable --> handleTerminate error.", e);
+ }
+
+ return cbamResponse;
+ }
+
+ private void handleCbamTerminateResponse(CBAMTerminateVnfResponse cbamResponse, String jobId) {
+ VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
jobInfo.setVnfmExecutionId(cbamResponse.getId());
+ if(CommonEnum.OperationStatus.FAILED == cbamResponse.getStatus()) {
+ jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_ERROR);
+ }
+ else {
+ jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_PROCESSING);
+ }
jobDbMgmr.save(jobInfo);
}
NslcmGrantVnfRequest request = new NslcmGrantVnfRequest();
request.setVnfInstanceId(vnfInstanceId);
- request.setLifecycleOperation(LifecycleOperation.Instantiate);
+ request.setLifecycleOperation(LifecycleOperation.Terminal);
request.setJobId(jobId);
ResourceDefinition resource = getFreeVnfResource();
}
private ResourceDefinition getFreeVnfResource() {
- // TODO Auto-generated method stub
- return null;
+ ResourceDefinition def = new ResourceDefinition();
+ def.setVnfInstanceId(vnfInstanceId);
+ def.setVimId("001");
+ List<AddResource> resources = new ArrayList<>();
+ AddResource res = new AddResource();
+ res.setVdu("1");
+ res.setType("vdu");
+ res.setResourceDefinitionId(2);
+ resources.add(res);
+ def.setAddResource(resources);
+ return def;
}
- private NslcmNotifyLCMEventsRequest buildNslcmNotifyLCMEventsRequest(CBAMTerminateVnfResponse cbamResponse) {
+ private NslcmNotifyLCMEventsRequest buildNslcmNotifyLCMEventsRequest() {
NslcmNotifyLCMEventsRequest request = new NslcmNotifyLCMEventsRequest();
- if(CommonEnum.OperationStatus.STARTED == cbamResponse.getStatus())
- {
- request.setStatus(CommonEnum.status.start);
- }
- else
- {
- request.setStatus(CommonEnum.status.result);
-
- //TODO the following are for the result
-// request.setAffectedVnfc(affectedVnfc);
-// request.setAffectedVI(affectedVI);
-// request.setAffectedVirtualStorage(affectedVirtualStorage);
- }
+ request.setStatus(CommonEnum.status.result);
+ List<AffectedVnfc> vnfcs = modifyResourceTypeAsRemove(OperateTaskProgress.getAffectedVnfc());
+
+ request.setAffectedVnfc(vnfcs);
request.setVnfInstanceId(vnfInstanceId);
request.setOperation(CommonConstants.NSLCM_OPERATION_TERMINATE);
request.setJobId(jobId);
return request;
}
+ private List<AffectedVnfc> modifyResourceTypeAsRemove(List<AffectedVnfc> affectedVnfc) {
+ List<AffectedVnfc> vnfcs = affectedVnfc;
+ if(vnfcs != null && !vnfcs.isEmpty()) {
+ for(AffectedVnfc vnfc : vnfcs)
+ {
+ vnfc.setChangeType(CommonEnum.AffectchangeType.removed);
+ }
+ }
+
+ return vnfcs;
+ }
+
private void handleNslcmGrantResponse(NslcmGrantVnfResponse grantResponse) {
// TODO Auto-generated method stub
}
-
}