X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=nokiav2%2Fdriver%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fvfc%2Fnfvo%2Fdriver%2Fvnfm%2Fsvnfm%2Fnokia%2Fvnfm%2FLifecycleManager.java;h=d543f3ce33bf15f3824491489a6313e63e0253ee;hb=876a4acf6f2e8264bb82e960e9aa886799c4bdb1;hp=e835e35c045a20c0ae2e229e7f92c3426ff31000;hpb=b17042b955489d8a023d09abad5436ff9b900dc3;p=vfc%2Fnfvo%2Fdriver%2Fvnfm%2Fsvnfm.git diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java index e835e35c..d543f3ce 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java @@ -21,12 +21,12 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.nokia.cbam.catalog.v1.model.CatalogAdapterVnfpackage; -import com.nokia.cbam.lcm.v32.ApiException; import com.nokia.cbam.lcm.v32.model.*; import com.nokia.cbam.lcm.v32.model.ScaleDirection; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IGrantManager; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VimInfoProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.StoreLoader; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.UserVisibleError; import org.onap.vnfmdriver.model.ExtVirtualLinkInfo; import org.onap.vnfmdriver.model.*; import org.onap.vnfmdriver.model.VimInfo; @@ -44,6 +44,9 @@ import java.util.concurrent.Executors; import static com.google.common.base.Splitter.on; import static com.google.common.collect.Iterables.find; import static com.google.common.collect.Lists.newArrayList; +import static com.google.common.collect.Sets.newHashSet; +import static com.nokia.cbam.lcm.v32.model.InstantiationState.INSTANTIATED; +import static com.nokia.cbam.lcm.v32.model.OperationStatus.FINISHED; import static com.nokia.cbam.lcm.v32.model.OperationType.INSTANTIATE; import static com.nokia.cbam.lcm.v32.model.VimInfo.VimInfoTypeEnum.*; import static java.lang.Integer.parseInt; @@ -51,7 +54,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.*; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider.NOKIA_LCM_API_VERSION; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.ILifecycleChangeNotificationManager.*; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.LifecycleChangeNotificationManager.NEWEST_OPERATIONS_FIRST; import static org.slf4j.LoggerFactory.getLogger; import static org.springframework.util.StringUtils.isEmpty; @@ -62,6 +65,11 @@ import static org.springframework.util.StringUtils.isEmpty; public class LifecycleManager { public static final String ONAP_CSAR_ID = "onapCsarId"; public static final long OPERATION_STATUS_POLLING_INTERVAL_IN_MS = 5000L; + /** + * The key of the CBAM VNF extension for the identifier of the VNFM in ONAP + */ + public static final String EXTERNAL_VNFM_ID = "externalVnfmId"; + public static final String SCALE_OPERATION_NAME = "scale"; private static Logger logger = getLogger(LifecycleManager.class); private final CatalogManager catalogManager; private final IGrantManager grantManager; @@ -85,10 +93,18 @@ public class LifecycleManager { this.catalogManager = catalogManager; } + /** + * @param vimId the VIM identifier + * @return the name of the region + */ public static String getRegionName(String vimId) { return newArrayList(on(SEPARATOR).split(vimId)).get(1); } + /** + * @param vimId the VIM identifier + * @return the owner of the cloud + */ public static String getCloudOwner(String vimId) { return newArrayList(on(SEPARATOR).split(vimId)).get(0); } @@ -97,6 +113,71 @@ public class LifecycleManager { return find(NEWEST_OPERATIONS_FIRST.sortedCopy(operationExecutions), op -> INSTANTIATE.equals(op.getOperationType())); } + /** + * Create the VNF. It consists of the following steps + * + * The rollback of the failed operation is not implemented + * + * + * @param vnfmId the identifier of the VNFM + * @param csarId the identifier of the VNF package + * @param vnfName the name of the VNF + * @param description the description of the VNF + * @return the VNF creation result + */ + public VnfCreationResult create(String vnfmId, String csarId, String vnfName, String description) { + logOperationInput("not yet specified", "creation", csarId); + try { + CatalogAdapterVnfpackage cbamPackage = catalogManager.preparePackageInCbam(vnfmId, csarId); + CreateVnfRequest vnfCreateRequest = new CreateVnfRequest(); + vnfCreateRequest.setVnfdId(cbamPackage.getVnfdId()); + vnfCreateRequest.setName(vnfName); + vnfCreateRequest.setDescription(description); + com.nokia.cbam.lcm.v32.model.VnfInfo vnfInfo = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsPost(vnfCreateRequest, NOKIA_LCM_API_VERSION).blockingFirst(); + addVnfdIdToVnfModifyableAttributeExtensions(vnfmId, vnfInfo.getId(), csarId); + return new VnfCreationResult(vnfInfo, cbamPackage.getVnfdId()); + } catch (Exception e) { + throw buildFatalFailure(logger, "Unable to create the VNF", e); + } + } + + private void logOperationInput(String vnfId, String operationName, Object payload) { + if (logger.isInfoEnabled()) { + logger.info("Starting {} operation on VNF with {} identifier with {} parameter", operationName, vnfId, new Gson().toJson(payload)); + } + } + + /** + * Instantiate the VNF + * + * @param vnfmId the identifier of the VNFM + * @param request the VNF instantiation request + * @param httpResponse the HTTP response that corresponds to the VNF instantiation request + * @param additionalParameters additional parameters + * @param vnfId thr identifier of the VNF + * @param vnfdId the identifier of the VNF package in CBAM + * @return the instantiation response + */ + public VnfInstantiateResponse instantiate(String vnfmId, VnfInstantiateRequest request, HttpServletResponse httpResponse, AdditionalParameters additionalParameters, String vnfId, String vnfdId) { + logOperationInput(vnfId, "instantiation", request); + validateVimType(additionalParameters.getVimType()); + VnfInstantiateResponse response = new VnfInstantiateResponse(); + response.setVnfInstanceId(vnfId); + String vimId = getVimId(request.getAdditionalParam()); + JobInfo spawnJob = scheduleExecution(vnfId, httpResponse, "instantiate", jobInfo -> + instantiateVnf(vnfmId, request, additionalParameters, vnfdId, vnfId, vimId, jobInfo) + ); + response.setJobId(spawnJob.getJobId()); + return response; + } + /** * Instantiate (VF-C terminology) the VNF. It consists of the following steps *