Fixing vulnerabilities and code smells
[so.git] / so-etsi-nfvo / so-etsi-nfvo-ns-lcm / so-etsi-nfvo-ns-lcm-bpmn-flows / src / main / java / org / onap / so / etsi / nfvo / ns / lcm / bpmn / flows / tasks / CreateInstantiateVnfTask.java
1 /*-
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.so.etsi.nfvo.ns.lcm.bpmn.flows.tasks;
21
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;
44
45 /**
46  * @author Waqas Ikram (waqas.ikram@est.tech)
47  */
48 @Component
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;
56
57     @Autowired
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;
64     }
65
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);
71
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");
77         }
78         logger.info("Finished executing checkIfNfInstanceInDb  ...");
79
80     }
81
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);
87
88         setJobStatus(execution, IN_PROGRESS, "Creating NF Instance record in database for " + request.getVnfName());
89
90         final Optional<NfvoNsInst> optional = databaseServiceProvider.getNfvoNsInst(request.getNsInstId());
91
92         if (optional.isEmpty()) {
93             abortOperation(execution, "NfvoNsInst: " + request.getNsInstId() + "not founda");
94         }
95
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  ...");
104
105     }
106
107     public void createGenericVnfInAai(final DelegateExecution execution) {
108         logger.info("Executing createGenericVnfInAai");
109         try {
110             final CreateInstantiateRequest request =
111                     (CreateInstantiateRequest) execution.getVariable(CREATE_INSTANTIATE_REQUEST_PARAM_NAME);
112
113             setJobStatus(execution, IN_PROGRESS, "Creating GenericVnf record in AAI for " + request.getVnfName());
114
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);
118
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);
127
128             aaiServiceProvider.createGenericVnfAndConnectServiceInstance(nsInstId, nfInstId, genericVnf);
129
130             final Tenant tenant = request.getTenant();
131             aaiServiceProvider.connectGenericVnfToTenant(nfInstId, tenant.getCloudOwner(), tenant.getRegionName(),
132                     tenant.getTenantId());
133
134         } catch (final Exception exception) {
135             final String message = "Unable to Create GenericVnf in AAI";
136             logger.error(message, exception);
137             abortOperation(execution, message);
138         }
139
140         logger.info("Finished executing createGenericVnfInAai  ...");
141     }
142
143     public void invokeCreateInstantiationRequest(final DelegateExecution execution) {
144         logger.info("Executing invokeCreateInstantiationRequest");
145
146         try {
147             final CreateInstantiateRequest request =
148                     (CreateInstantiateRequest) execution.getVariable(CREATE_INSTANTIATE_REQUEST_PARAM_NAME);
149             logger.info("request: {}", request);
150
151             setJobStatus(execution, IN_PROGRESS,
152                     "Invoking SOL003 adapter for creating and instantiating VNF: " + request.getVnfName());
153
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);
162
163             if (!optional.isPresent()) {
164                 final String errorMessage = "Unexpected error while processing create and instantiation request";
165                 logger.error(errorMessage);
166                 abortOperation(execution, errorMessage);
167             }
168
169             final CreateVnfResponse vnfResponse = optional.get();
170
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);
180         }
181
182     }
183
184     public void updateNfInstanceStatusToInstantiated(final DelegateExecution execution) {
185         logger.info("Executing updateNfInstanceStatusToInstantiated");
186
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);
192
193         logger.info("Finished executing updateNfInstanceStatusToInstantiated  ...");
194
195     }
196
197     public void updateNfInstanceStatusToFailed(final DelegateExecution execution) {
198         logger.info("Executing updateNfInstanceStatusToActive");
199
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);
205
206         logger.info("Finished executing updateNfInstanceStatusToInstantiated  ...");
207
208     }
209
210     private void updateNfInstanceStatus(final DelegateExecution execution, final State vnfStatus) {
211         final String nfInstId = (String) execution.getVariable(NF_INST_ID_PARAM_NAME);
212
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);
217
218             abortOperation(execution, message);
219
220         }
221
222         final NfvoNfInst nfvoNfInst = optional.get();
223         nfvoNfInst.setStatus(vnfStatus);
224         databaseServiceProvider.saveNfvoNfInst(nfvoNfInst);
225     }
226
227 }