-/*
- * Copyright 2016-2017, Nokia Corporation
- *
+/**
+ * Copyright 2016-2017, Nokia Corporation.
+ * Modifications Copyright (C) 2019 Samsung Electronics Co., Ltd.
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMInstantiateVnfRequest;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMInstantiateVnfResponse;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMModifyVnfRequest;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.CBAMQueryOperExecutionResponse;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.entity.OperationExecution;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.bo.entity.VnfcResourceInfo;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.cbam.inf.CbamMgmrInf;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.common.util.CommonUtil;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonConstants;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonEnum;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.constant.CommonEnum.LifecycleOperation;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.bean.VnfmJobExecutionInfo;
-import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.repository.VnfmJobExecutionRepository;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.mapper.VnfcResourceInfoMapper;
+import org.onap.vfc.nfvo.driver.vnfm.svnfm.db.mapper.VnfmJobExecutionMapper;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.http.client.HttpClientProcessorImpl;
import org.onap.vfc.nfvo.driver.vnfm.svnfm.nslcm.bo.NslcmGrantVnfRequest;
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.InstantiateVnfRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
import com.google.gson.Gson;
public class InstantiateVnfContinueRunnable implements Runnable {
private static final Logger logger = LoggerFactory.getLogger(InstantiateVnfContinueRunnable.class);
+ @Autowired
private CbamMgmrInf cbamMgmr;
+ @Autowired
private CatalogMgmrInf catalogMgmr;
+ @Autowired
private NslcmMgmrInf nslcmMgmr;
private InstantiateVnfRequest driverRequest;
private String jobId;
private String vnfmId;
- private VnfmJobExecutionRepository jobDbMgmr;
+// private VnfmJobExecutionRepository jobDbMgmr;
+ @Autowired
+ private VnfmJobExecutionMapper jobDbMgmr;
+ @Autowired
+ private VnfcResourceInfoMapper vnfcDbMgmr;
private Driver2CbamRequestConverter requestConverter;
private Gson gson = new Gson();
- public InstantiateVnfContinueRunnable(String vnfmId, InstantiateVnfRequest driverRequest, String vnfInstanceId, String jobId,
- NslcmMgmrInf nslcmMgmr, CatalogMgmrInf catalogMgmr, CbamMgmrInf cbamMgmr, Driver2CbamRequestConverter requestConverter, VnfmJobExecutionRepository dbManager)
- {
- this.driverRequest = driverRequest;
- this.vnfInstanceId = vnfInstanceId;
- this.jobId = jobId;
- this.nslcmMgmr = nslcmMgmr;
- this.catalogMgmr = catalogMgmr;
- this.cbamMgmr = cbamMgmr;
- this.requestConverter = requestConverter;
- this.jobDbMgmr = dbManager;
- this.vnfmId = vnfmId;
+ // Builder class
+
+ public static class InstantiateVnfContinueRunnableBuilder {
+ private String vnfmId;
+ private InstantiateVnfRequest driverRequest;
+ private String vnfInstanceId;
+ private String jobId;
+ private NslcmMgmrInf nslcmMgmr;
+ private CatalogMgmrInf catalogMgmr;
+ private CbamMgmrInf cbamMgmr;
+ private Driver2CbamRequestConverter requestConverter;
+ private VnfmJobExecutionMapper dbManager;
+ private VnfcResourceInfoMapper vnfcDbMgmr;
+
+ public InstantiateVnfContinueRunnableBuilder setVnfmId(String vnfmId) {
+ this.vnfmId = vnfmId;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnableBuilder setDriverRequest(InstantiateVnfRequest driverRequest) {
+ this.driverRequest = driverRequest;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnableBuilder setVnfInstanceId(String vnfInstanceId) {
+ this.vnfInstanceId = vnfInstanceId;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnableBuilder setJobId(String jobId) {
+ this.jobId = jobId;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnableBuilder setNslcmMgmr(NslcmMgmrInf nslcmMgmr) {
+ this.nslcmMgmr = nslcmMgmr;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnableBuilder setCatalogMgmr(CatalogMgmrInf catalogMgmr) {
+ this.catalogMgmr = catalogMgmr;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnableBuilder setCbamMgmr(CbamMgmrInf cbamMgmr) {
+ this.cbamMgmr = cbamMgmr;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnableBuilder setRequestConverter(Driver2CbamRequestConverter requestConverter) {
+ this.requestConverter = requestConverter;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnableBuilder setDbManager(VnfmJobExecutionMapper dbManager) {
+ this.dbManager = dbManager;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnableBuilder setVnfcDbMgmr(VnfcResourceInfoMapper vnfcDbMgmr) {
+ this.vnfcDbMgmr = vnfcDbMgmr;
+ return this;
+ }
+
+ public InstantiateVnfContinueRunnable build() {
+ return new InstantiateVnfContinueRunnable(this);
+ }
}
- public void run() {
+
+ private InstantiateVnfContinueRunnable(InstantiateVnfContinueRunnableBuilder builder) {
+
+ this.driverRequest = builder.driverRequest;
+ this.vnfInstanceId = builder.vnfInstanceId;
+ this.jobId = builder.jobId;
+ this.nslcmMgmr = builder.nslcmMgmr;
+ this.catalogMgmr = builder.catalogMgmr;
+ this.cbamMgmr = builder.cbamMgmr;
+ this.requestConverter = builder.requestConverter;
+ this.jobDbMgmr = builder.dbManager;
+ this.vnfmId = builder.vnfmId;
+ this.vnfcDbMgmr = builder.vnfcDbMgmr;
+
+ }
+
+ public void run() {
//step 1 handle vnf package
handleVnfPackage();
//step 5: instantiate vnf
CBAMInstantiateVnfResponse cbamInstantiateResponse = handleInstantiate();
- handleNotify(cbamInstantiateResponse);
+ handleNotify(cbamInstantiateResponse.getId());
} catch (Exception e) {
logger.error("InstantiateVnfContinueRunnable --> handleInstantiate or handleNotify error.", e);
}
}
- private void handleNotify(CBAMInstantiateVnfResponse cbamInstantiateResponse) {
- try {
- NslcmNotifyLCMEventsRequest nslcmNotifyReq = buildNslcmNotifyLCMEventsRequest(cbamInstantiateResponse);
- nslcmMgmr.notifyVnf(nslcmNotifyReq, vnfmId, vnfInstanceId);
- } catch (Exception e) {
- logger.error("InstantiateVnfContinueRunnable --> handleNotify error.", e);
- }
+ private void handleNotify(String execId) {
+ boolean instantiateFinished = false;
+
+ do {
+ try {
+ logger.info(" InstantiateVnfContinueRunnable --> handleNotify execId is " + execId);
+ CBAMQueryOperExecutionResponse exeResponse = cbamMgmr.queryOperExecution(execId);
+ if (exeResponse.getStatus() == CommonEnum.OperationStatus.FINISHED || exeResponse.getStatus() == CommonEnum.OperationStatus.FAILED)
+ {
+ instantiateFinished = true;
+ handleCbamInstantiateResponse(exeResponse, jobId);
+ if (exeResponse.getStatus() == CommonEnum.OperationStatus.FINISHED)
+ {
+
+ logger.info("Start to get vnfc resource");
+ List<VnfcResourceInfo> vnfcResources = new ArrayList<>();
+
+ try {
+ vnfcResources = cbamMgmr.queryVnfcResource(vnfInstanceId);
+ } catch (Exception e) {
+ logger.error("Error to queryVnfcResource.", e);
+ }
+
+ logger.info("vnfc resource for vnfInstanceId " + vnfInstanceId + " is: " + gson.toJson(vnfcResources));
+ logger.info("End to get vnfc resource");
+
+ if(vnfcResources == null)
+ {
+ vnfcResources = new ArrayList<>();
+ }
+ logger.info("Start to notify LCM the instantiation result");
+ NslcmNotifyLCMEventsRequest nslcmNotifyReq = buildNslcmNotifyLCMEventsRequest(vnfcResources);
+
+// OperateTaskProgress.setAffectedVnfc(nslcmNotifyReq.getAffectedVnfc());
+
+ nslcmMgmr.notifyVnf(nslcmNotifyReq, vnfmId, vnfInstanceId);
+ logger.info("End to notify LCM the instantiation result");
+ }
+ }
+ else {
+ Thread.sleep(60000);
+ }
+
+ } catch (Exception e) {
+ logger.error("InstantiateVnfContinueRunnable --> handleNotify error.", e);
+ }
+ } while(!instantiateFinished);
+
}
- private CBAMInstantiateVnfResponse handleInstantiate() throws Exception {
+ private CBAMInstantiateVnfResponse handleInstantiate() throws IOException {
CBAMInstantiateVnfRequest instantiateReq = requestConverter.instantiateRequestConvert(driverRequest, null, null, null);
CBAMInstantiateVnfResponse cbamInstantiateResponse = cbamMgmr.instantiateVnf(instantiateReq, vnfInstanceId);
handleCbamInstantiateResponse(cbamInstantiateResponse, jobId);
private CBAMModifyVnfRequest generateModifyVnfRequest() throws IOException{
String filePath = "/etc/vnfpkginfo/cbam_extension.json";
String fileContent = CommonUtil.getJsonStrFromFile(filePath);
- CBAMModifyVnfRequest req = gson.fromJson(fileContent, CBAMModifyVnfRequest.class);
-
- return req;
+ return gson.fromJson(fileContent, CBAMModifyVnfRequest.class);
}
private void handleVnfPackage() {
});
}
- private NslcmNotifyLCMEventsRequest buildNslcmNotifyLCMEventsRequest(CBAMInstantiateVnfResponse cbamInstantiateResponse) {
+ private NslcmNotifyLCMEventsRequest buildNslcmNotifyLCMEventsRequest(List<VnfcResourceInfo> vnfcResources) {
NslcmNotifyLCMEventsRequest request = new NslcmNotifyLCMEventsRequest();
- if(CommonEnum.OperationStatus.STARTED == cbamInstantiateResponse.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);
request.setVnfInstanceId(vnfInstanceId);
request.setOperation(CommonConstants.NSLCM_OPERATION_INSTANTIATE);
request.setJobId(jobId);
+
+ List<AffectedVnfc> affectedVnfcs = convertVnfcResourceToAffectecVnfc(vnfcResources);
+ request.setAffectedVnfc(affectedVnfcs);
return request;
}
+ private List<AffectedVnfc> convertVnfcResourceToAffectecVnfc(List<VnfcResourceInfo> vnfcResources) {
+ List<AffectedVnfc> vnfcs = new ArrayList<>();
+ for(VnfcResourceInfo resource : vnfcResources)
+ {
+ if(resource.getComputeResource() != null && "OS::Nova::Server".equalsIgnoreCase(resource.getComputeResource().getResourceType()))
+ {
+ AffectedVnfc vnfc = new AffectedVnfc();
+ vnfc.setVnfcInstanceId(resource.getId());
+ vnfc.setVduId(resource.getVduId());
+ vnfc.setVimid(resource.getComputeResource().getVimId());
+ vnfc.setVmid(resource.getComputeResource().getResourceId());
+
+ vnfcs.add(vnfc);
+
+ vnfcDbMgmr.insert(vnfc);
+ }
+ }
+ return vnfcs;
+ }
+
private NslcmGrantVnfRequest buildNslcmGrantVnfRequest() {
NslcmGrantVnfRequest request = new NslcmGrantVnfRequest();
request.setJobId(jobId);
ResourceDefinition resource = getFreeVnfResource();
- List<ResourceDefinition> resourceList = new ArrayList<ResourceDefinition>();
+ List<ResourceDefinition> resourceList = new ArrayList<>();
resourceList.add(resource);
request.setAddResource(resourceList);
return def;
}
- private void handleCbamInstantiateResponse(CBAMInstantiateVnfResponse cbamInstantiateResponse, String jobId) {
+ private void handleCbamInstantiateResponse(OperationExecution cbamInstantiateResponse, String jobId) {
VnfmJobExecutionInfo jobInfo = jobDbMgmr.findOne(Long.parseLong(jobId));
jobInfo.setVnfmExecutionId(cbamInstantiateResponse.getId());
+ long nowTime = System.currentTimeMillis();
if(CommonEnum.OperationStatus.FAILED == cbamInstantiateResponse.getStatus()){
jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_ERROR);
+// jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_FINISH);
+ } else if(CommonEnum.OperationStatus.OTHER == cbamInstantiateResponse.getStatus()){
+ jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_PROCESSING);
+ } else if(CommonEnum.OperationStatus.FINISHED == cbamInstantiateResponse.getStatus()){
+ jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_FINISH);
+ jobInfo.setOperateEndTime(nowTime);
+
}
- jobDbMgmr.save(jobInfo);
+ else{
+ jobInfo.setStatus(CommonConstants.CBAM_OPERATION_STATUS_START);
+ }
+
+ jobDbMgmr.update(jobInfo);
+ }
+
+ public void setDriverRequest(InstantiateVnfRequest driverRequest) {
+ this.driverRequest = driverRequest;
+ }
+
+ public void setVnfInstanceId(String vnfInstanceId) {
+ this.vnfInstanceId = vnfInstanceId;
+ }
+
+ public void setJobId(String jobId) {
+ this.jobId = jobId;
+ }
+
+ public void setVnfmId(String vnfmId) {
+ this.vnfmId = vnfmId;
+ }
+
+ public void setRequestConverter(Driver2CbamRequestConverter requestConverter) {
+ this.requestConverter = requestConverter;
}
}