2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2020 Nordix Foundation.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
20 package org.onap.so.etsi.nfvo.ns.lcm.bpmn.flows.tasks;
22 import static org.onap.so.etsi.nfvo.ns.lcm.bpmn.flows.CamundaVariableNameConstants.NS_INSTANCE_ID_PARAM_NAME;
23 import static org.onap.so.etsi.nfvo.ns.lcm.database.beans.JobStatusEnum.ERROR;
24 import static org.onap.so.etsi.nfvo.ns.lcm.database.beans.JobStatusEnum.FINISHED;
25 import static org.onap.so.etsi.nfvo.ns.lcm.database.beans.JobStatusEnum.IN_PROGRESS;
26 import java.time.LocalDateTime;
27 import java.util.Optional;
28 import org.camunda.bpm.engine.delegate.DelegateExecution;
29 import org.onap.aai.domain.yang.GenericVnf;
30 import org.onap.so.adapters.etsisol003adapter.lcm.v1.model.CreateVnfRequest;
31 import org.onap.so.adapters.etsisol003adapter.lcm.v1.model.CreateVnfResponse;
32 import org.onap.so.adapters.etsisol003adapter.lcm.v1.model.Tenant;
33 import org.onap.so.etsi.nfvo.ns.lcm.bpmn.flows.extclients.aai.AaiServiceProvider;
34 import org.onap.so.etsi.nfvo.ns.lcm.bpmn.flows.extclients.vnfm.Sol003AdapterServiceProvider;
35 import org.onap.so.etsi.nfvo.ns.lcm.database.beans.JobStatusEnum;
36 import org.onap.so.etsi.nfvo.ns.lcm.database.beans.NfvoNfInst;
37 import org.onap.so.etsi.nfvo.ns.lcm.database.beans.NfvoNsInst;
38 import org.onap.so.etsi.nfvo.ns.lcm.database.beans.State;
39 import org.onap.so.etsi.nfvo.ns.lcm.database.service.DatabaseServiceProvider;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
42 import org.springframework.beans.factory.annotation.Autowired;
43 import org.springframework.stereotype.Component;
46 * @author Waqas Ikram (waqas.ikram@est.tech)
49 public class CreateInstantiateVnfTask extends AbstractNetworkServiceTask {
50 private static final String CREATE_INSTANTIATE_REQUEST_PARAM_NAME = "request";
51 private static final Logger logger = LoggerFactory.getLogger(CreateInstantiateVnfTask.class);
52 private static final String NF_INST_ID_PARAM_NAME = "NF_INST_ID";
53 public static final String CREATE_VNF_RESPONSE_PARAM_NAME = "createVnfResponse";
54 private final AaiServiceProvider aaiServiceProvider;
55 private final Sol003AdapterServiceProvider sol003AdapterServiceProvider;
58 public CreateInstantiateVnfTask(final DatabaseServiceProvider databaseServiceProvider,
59 final AaiServiceProvider aaiServiceProvider,
60 final Sol003AdapterServiceProvider sol003AdapterServiceProvider) {
61 super(databaseServiceProvider);
62 this.aaiServiceProvider = aaiServiceProvider;
63 this.sol003AdapterServiceProvider = sol003AdapterServiceProvider;
66 public void checkIfNfInstanceExistsInDb(final DelegateExecution execution) {
67 logger.info("Executing checkIfNfInstanceInDb");
68 final CreateInstantiateRequest request =
69 (CreateInstantiateRequest) execution.getVariable(CREATE_INSTANTIATE_REQUEST_PARAM_NAME);
70 logger.info("request: {}", request);
72 setJobStatus(execution, JobStatusEnum.IN_PROGRESS, "Checking if NF Instance record exists in database for "
73 + request.getNsInstId() + " and " + request.getVnfName());
74 if (!databaseServiceProvider.isNsInstExists(request.getNsInstId(), request.getVnfName())) {
75 abortOperation(execution,
76 request.getNsInstId() + " " + request.getVnfName() + " VNF instance already exists");
78 logger.info("Finished executing checkIfNfInstanceInDb ...");
82 public void createNfInstanceInDb(final DelegateExecution execution) {
83 logger.info("Executing createNfInstanceInDb");
84 final CreateInstantiateRequest request =
85 (CreateInstantiateRequest) execution.getVariable(CREATE_INSTANTIATE_REQUEST_PARAM_NAME);
86 logger.info("request: {}", request);
88 setJobStatus(execution, IN_PROGRESS, "Creating NF Instance record in database for " + request.getVnfName());
90 final Optional<NfvoNsInst> optional = databaseServiceProvider.getNfvoNsInst(request.getNsInstId());
92 if (optional.isEmpty()) {
93 abortOperation(execution, "NfvoNsInst: " + request.getNsInstId() + "not founda");
96 final NfvoNsInst nfvoNsInst = optional.get();
97 final LocalDateTime now = LocalDateTime.now();
98 final NfvoNfInst nfvoNfInst = new NfvoNfInst().status(State.NOT_INSTANTIATED).createTime(now)
99 .lastUpdateTime(now).name(request.getVnfName()).vnfdId(request.getVnfdId())
100 .packageId(request.getVnfPkgId()).nfvoNsInst(nfvoNsInst);
101 databaseServiceProvider.saveNfvoNfInst(nfvoNfInst);
102 execution.setVariable(NF_INST_ID_PARAM_NAME, nfvoNfInst.getNfInstId());
103 logger.info("Finished executing createNfInstanceInDb ...");
107 public void createGenericVnfInAai(final DelegateExecution execution) {
108 logger.info("Executing createGenericVnfInAai");
110 final CreateInstantiateRequest request =
111 (CreateInstantiateRequest) execution.getVariable(CREATE_INSTANTIATE_REQUEST_PARAM_NAME);
113 setJobStatus(execution, IN_PROGRESS, "Creating GenericVnf record in AAI for " + request.getVnfName());
115 final String nfInstId = (String) execution.getVariable(NF_INST_ID_PARAM_NAME);
116 final String nsInstId = (String) execution.getVariable(NS_INSTANCE_ID_PARAM_NAME);
117 final NfvoNsInst nfvoNsInst = getNfvoNsInst(execution, nsInstId);
119 final GenericVnf genericVnf = new GenericVnf();
120 genericVnf.setVnfId(nfInstId);
121 genericVnf.setVnfName(request.getVnfName());
122 genericVnf.setVnfType(nfvoNsInst.getName() + "/" + request.getVnfName());
123 genericVnf.setServiceId(request.getNsInstId());
124 genericVnf.setNfType(request.getNfType());
125 genericVnf.setOperationalStatus("Created");
126 genericVnf.setIsClosedLoopDisabled(false);
128 aaiServiceProvider.createGenericVnfAndConnectServiceInstance(nsInstId, nfInstId, genericVnf);
130 final Tenant tenant = request.getTenant();
131 aaiServiceProvider.connectGenericVnfToTenant(nfInstId, tenant.getCloudOwner(), tenant.getRegionName(),
132 tenant.getTenantId());
134 } catch (final Exception exception) {
135 final String message = "Unable to Create GenericVnf in AAI";
136 logger.error(message, exception);
137 abortOperation(execution, message);
140 logger.info("Finished executing createGenericVnfInAai ...");
143 public void invokeCreateInstantiationRequest(final DelegateExecution execution) {
144 logger.info("Executing invokeCreateInstantiationRequest");
147 final CreateInstantiateRequest request =
148 (CreateInstantiateRequest) execution.getVariable(CREATE_INSTANTIATE_REQUEST_PARAM_NAME);
149 logger.info("request: {}", request);
151 setJobStatus(execution, IN_PROGRESS,
152 "Invoking SOL003 adapter for creating and instantiating VNF: " + request.getVnfName());
154 final CreateVnfRequest vnfRequest = new CreateVnfRequest();
155 vnfRequest.setTenant(request.getTenant());
156 vnfRequest.setName(request.getVnfName());
157 vnfRequest.setPkgId(request.getVnfPkgId());
158 vnfRequest.setAdditionalParams(request.getAdditionalParams());
159 final String vnfId = (String) execution.getVariable(NF_INST_ID_PARAM_NAME);
160 final Optional<CreateVnfResponse> optional =
161 sol003AdapterServiceProvider.invokeCreateInstantiationRequest(vnfId, vnfRequest);
163 if (!optional.isPresent()) {
164 final String errorMessage = "Unexpected error while processing create and instantiation request";
165 logger.error(errorMessage);
166 abortOperation(execution, errorMessage);
169 final CreateVnfResponse vnfResponse = optional.get();
171 logger.info("Vnf instantiation response: {}", vnfResponse);
172 execution.setVariable(CREATE_VNF_RESPONSE_PARAM_NAME, vnfResponse);
173 setJobStatus(execution, IN_PROGRESS, "Successfully invoked SOL003 adapater creating and instantiating VNF: "
174 + request.getVnfName() + " CreaetVnfResponse Job Id: " + vnfResponse.getJobId());
175 logger.debug("Finished executing invokeCreateInstantiationRequest ...");
176 } catch (final Exception exception) {
177 final String message = "Unable to invoke create and instantiation request";
178 logger.error(message, exception);
179 abortOperation(execution, message);
184 public void updateNfInstanceStatusToInstantiated(final DelegateExecution execution) {
185 logger.info("Executing updateNfInstanceStatusToInstantiated");
187 updateNfInstanceStatus(execution, State.INSTANTIATED);
188 final CreateInstantiateRequest request =
189 (CreateInstantiateRequest) execution.getVariable(CREATE_INSTANTIATE_REQUEST_PARAM_NAME);
190 setJobStatus(execution, FINISHED, "Successfully created and Instantiated VNF: " + request.getVnfName()
191 + " will set status to " + State.INSTANTIATED);
193 logger.info("Finished executing updateNfInstanceStatusToInstantiated ...");
197 public void updateNfInstanceStatusToFailed(final DelegateExecution execution) {
198 logger.info("Executing updateNfInstanceStatusToActive");
200 updateNfInstanceStatus(execution, State.FAILED);
201 final CreateInstantiateRequest request =
202 (CreateInstantiateRequest) execution.getVariable(CREATE_INSTANTIATE_REQUEST_PARAM_NAME);
203 setJobStatus(execution, ERROR, "Failed to create and instantiate VNF: " + request.getVnfName()
204 + " will set status to " + State.FAILED);
206 logger.info("Finished executing updateNfInstanceStatusToInstantiated ...");
210 private void updateNfInstanceStatus(final DelegateExecution execution, final State vnfStatus) {
211 final String nfInstId = (String) execution.getVariable(NF_INST_ID_PARAM_NAME);
213 final Optional<NfvoNfInst> optional = databaseServiceProvider.getNfvoNfInst(nfInstId);
214 if (optional.isEmpty()) {
215 final String message = "Unable to find NfvoNfInst record in database using nfInstId: " + nfInstId;
216 logger.error(message);
218 abortOperation(execution, message);
222 final NfvoNfInst nfvoNfInst = optional.get();
223 nfvoNfInst.setStatus(vnfStatus);
224 databaseServiceProvider.saveNfvoNfInst(nfvoNfInst);