2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.aai.tasks;
23 import java.util.List;
26 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
27 import org.onap.so.bpmn.common.BuildingBlockExecution;
28 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
29 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
30 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
31 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
32 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
33 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
34 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
35 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
36 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
37 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
38 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
39 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
40 import org.onap.so.client.exception.BBObjectNotFoundException;
41 import org.onap.so.client.exception.ExceptionBuilder;
42 import org.onap.so.client.orchestration.AAICollectionResources;
43 import org.onap.so.client.orchestration.AAIConfigurationResources;
44 import org.onap.so.client.orchestration.AAINetworkResources;
45 import org.onap.so.client.orchestration.AAIServiceInstanceResources;
46 import org.onap.so.client.orchestration.AAIVfModuleResources;
47 import org.onap.so.client.orchestration.AAIVnfResources;
48 import org.onap.so.client.orchestration.AAIVolumeGroupResources;
49 import org.onap.so.db.catalog.beans.OrchestrationStatus;
50 import org.onap.so.logger.MsoLogger;
51 import org.springframework.beans.factory.annotation.Autowired;
52 import org.springframework.stereotype.Component;
55 public class AAIUpdateTasks {
56 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, AAIUpdateTasks.class);
57 private static final String ALACARTE = "aLaCarte";
58 private static final String MULTI_STAGE_DESIGN_OFF = "false";
59 private static final String MULTI_STAGE_DESIGN_ON = "true";
61 private AAIServiceInstanceResources aaiServiceInstanceResources;
63 private AAIVnfResources aaiVnfResources;
65 private AAIVfModuleResources aaiVfModuleResources;
67 private ExceptionBuilder exceptionUtil;
69 private ExtractPojosForBB extractPojosForBB;
71 private AAIVolumeGroupResources aaiVolumeGroupResources;
73 private AAINetworkResources aaiNetworkResources;
75 private AAICollectionResources aaiCollectionResources;
77 private AAIConfigurationResources aaiConfigurationResources;
79 public void updateOrchestrationStatusAssignedService(BuildingBlockExecution execution) {
81 ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
82 aaiServiceInstanceResources.updateOrchestrationStatusServiceInstance(serviceInstance, OrchestrationStatus.ASSIGNED);
83 execution.setVariable("aaiServiceInstanceRollback", true);
84 } catch (Exception ex) {
85 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
89 public void updateOrchestrationStatusActiveService(BuildingBlockExecution execution) {
91 ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
92 aaiServiceInstanceResources.updateOrchestrationStatusServiceInstance(serviceInstance, OrchestrationStatus.ACTIVE);
93 } catch (Exception ex) {
94 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
98 public void updateOrchestrationStatusAssignedVnf(BuildingBlockExecution execution) {
100 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
101 aaiVnfResources.updateOrchestrationStatusVnf(vnf,OrchestrationStatus.ASSIGNED);
102 } catch (Exception ex) {
103 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
107 public void updateOrchestrationStatusActiveVnf(BuildingBlockExecution execution) {
109 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
110 aaiVnfResources.updateOrchestrationStatusVnf(vnf,OrchestrationStatus.ACTIVE);
111 } catch (Exception ex) {
112 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
116 public void updateOrchestrationStatusAssignedVolumeGroup(BuildingBlockExecution execution) {
118 GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
120 VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID));
121 CloudRegion cloudRegion = gBBInput.getCloudRegion();
122 volumeGroup.setHeatStackId("");
123 aaiVolumeGroupResources.updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.ASSIGNED);
124 } catch (Exception ex) {
125 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
129 public void updateOrchestrationStatusActiveVolumeGroup(BuildingBlockExecution execution) {
131 GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
133 VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID));
134 CloudRegion cloudRegion = gBBInput.getCloudRegion();
136 aaiVolumeGroupResources.updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.ACTIVE);
137 } catch (Exception ex) {
138 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
142 public void updateOrchestrationStatusCreatedVolumeGroup(BuildingBlockExecution execution) {
144 GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
146 VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID));
147 CloudRegion cloudRegion = gBBInput.getCloudRegion();
149 aaiVolumeGroupResources.updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.CREATED);
150 } catch (Exception ex) {
151 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
155 public void updateHeatStackIdVolumeGroup(BuildingBlockExecution execution) {
157 GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
158 String heatStackId = execution.getVariable("heatStackId");
159 if (heatStackId == null) {
162 VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID));
163 CloudRegion cloudRegion = gBBInput.getCloudRegion();
164 volumeGroup.setHeatStackId(heatStackId);
166 aaiVolumeGroupResources.updateHeatStackIdVolumeGroup(volumeGroup, cloudRegion);
167 } catch (Exception ex) {
168 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
172 public void updateOrchestrationStatusAssignedVfModule(BuildingBlockExecution execution) {
174 VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
175 vfModule.setHeatStackId("");
176 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
177 aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.ASSIGNED);
178 } catch (Exception ex) {
179 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
183 public void updateOrchestrationStatusPendingActivationVfModule(BuildingBlockExecution execution) {
185 VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
186 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
187 aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.PENDING_ACTIVATION);
188 } catch (Exception ex) {
189 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
193 public void updateOrchestrationStatusAssignedOrPendingActivationVfModule(BuildingBlockExecution execution) {
195 VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
196 vfModule.setHeatStackId("");
197 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
198 String multiStageDesign = MULTI_STAGE_DESIGN_OFF;
199 if (vnf.getModelInfoGenericVnf() != null) {
200 multiStageDesign = vnf.getModelInfoGenericVnf().getMultiStageDesign();
202 boolean aLaCarte = (boolean) execution.getVariable(ALACARTE);
203 if (aLaCarte && multiStageDesign != null && multiStageDesign.equalsIgnoreCase(MULTI_STAGE_DESIGN_ON)) {
204 aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.PENDING_ACTIVATION);
207 aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.ASSIGNED);
209 } catch (Exception ex) {
210 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
214 public void updateOrchestrationStatusCreatedVfModule(BuildingBlockExecution execution) {
216 VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
217 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
218 aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.CREATED);
219 } catch (Exception ex) {
220 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
224 public void updateOrchestrationStatusDeactivateVfModule(BuildingBlockExecution execution) {
225 execution.setVariable("aaiDeactivateVfModuleRollback", false);
227 VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
228 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
229 aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.CREATED);
230 execution.setVariable("aaiDeactivateVfModuleRollback", true);
231 } catch (Exception ex) {
232 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
237 * BPMN access method to update status of L3Network to Assigned in AAI
239 * @throws BBObjectNotFoundException
241 public void updateOrchestrationStatusAssignedNetwork(BuildingBlockExecution execution) {
242 updateNetwork(execution, OrchestrationStatus.ASSIGNED);
246 * BPMN access method to update status of L3Network to Active in AAI
248 * @throws BBObjectNotFoundException
250 public void updateOrchestrationStatusActiveNetwork(BuildingBlockExecution execution) {
251 updateNetwork(execution, OrchestrationStatus.ACTIVE);
255 * BPMN access method to update status of L3Network to Created in AAI
257 * @throws BBObjectNotFoundException
259 public void updateOrchestrationStatusCreatedNetwork(BuildingBlockExecution execution) {
260 updateNetwork(execution, OrchestrationStatus.CREATED);
263 protected void updateNetwork(BuildingBlockExecution execution, OrchestrationStatus status) {
265 L3Network l3Network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
266 updateNetworkAAI(l3Network, status);
267 } catch (Exception ex) {
268 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
272 protected void updateNetworkAAI(L3Network l3Network, OrchestrationStatus status) {
273 L3Network copiedl3Network = l3Network.shallowCopyId();
275 copiedl3Network.setOrchestrationStatus(status);
276 l3Network.setOrchestrationStatus(status);
277 aaiNetworkResources.updateNetwork(copiedl3Network);
279 List<Subnet> subnets = l3Network.getSubnets();
280 if (subnets != null){
281 for (Subnet subnet : subnets){
282 Subnet copiedSubnet = subnet.shallowCopyId();
283 copiedSubnet.setOrchestrationStatus(status);
284 aaiNetworkResources.updateSubnet(copiedl3Network, copiedSubnet);
290 * BPMN access method to update status of L3Network Collection to Active in AAI
292 * @throws BBObjectNotFoundException
294 public void updateOrchestrationStatusActiveNetworkCollection(BuildingBlockExecution execution) {
295 execution.setVariable("aaiNetworkCollectionActivateRollback", false);
297 ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
298 Collection networkCollection = serviceInstance.getCollection();
299 Collection copiedNetworkCollection = networkCollection.shallowCopyId();
301 networkCollection.setOrchestrationStatus(OrchestrationStatus.ACTIVE);
302 copiedNetworkCollection.setOrchestrationStatus(OrchestrationStatus.ACTIVE);
303 aaiCollectionResources.updateCollection(copiedNetworkCollection);
304 execution.setVariable("aaiNetworkCollectionActivateRollback", true);
305 } catch (Exception ex) {
306 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
310 public void updateOrchestrationStatusActivateVfModule(BuildingBlockExecution execution) {
311 execution.setVariable("aaiActivateVfModuleRollback", false);
313 VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
314 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
315 aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule, vnf, OrchestrationStatus.ACTIVE);
316 execution.setVariable("aaiActivateVfModuleRollback", true);
317 } catch (Exception ex) {
318 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
322 public void updateHeatStackIdVfModule(BuildingBlockExecution execution) {
324 String heatStackId = execution.getVariable("heatStackId");
325 if (heatStackId == null) {
328 VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
329 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
330 vfModule.setHeatStackId(heatStackId);
331 aaiVfModuleResources.updateHeatStackIdVfModule(vfModule, vnf);
332 } catch (Exception ex) {
333 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
338 * BPMN access method to update L3Network after it was created in AIC
342 public void updateNetworkCreated(BuildingBlockExecution execution) throws Exception {
343 execution.setVariable("aaiNetworkActivateRollback", false);
344 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
345 L3Network copiedl3network = l3network.shallowCopyId();
346 CreateNetworkResponse response = execution.getVariable("createNetworkResponse");
348 if(response.getNetworkFqdn()!=null){
349 l3network.setContrailNetworkFqdn(response.getNetworkFqdn());
351 l3network.setOrchestrationStatus(OrchestrationStatus.CREATED);
352 l3network.setHeatStackId(response.getNetworkStackId());
353 l3network.setNeutronNetworkId(response.getNeutronNetworkId());
355 copiedl3network.setContrailNetworkFqdn(response.getNetworkFqdn());
356 copiedl3network.setOrchestrationStatus(OrchestrationStatus.CREATED);
357 copiedl3network.setHeatStackId(response.getNetworkStackId());
358 copiedl3network.setNeutronNetworkId(response.getNeutronNetworkId());
360 aaiNetworkResources.updateNetwork(copiedl3network);
362 Map<String, String> subnetMap = response.getSubnetMap();
363 List<Subnet> subnets = l3network.getSubnets();
364 if (subnets != null && subnetMap != null){
365 for (Subnet subnet: subnets){
366 Subnet copiedSubnet = subnet.shallowCopyId();
367 copiedSubnet.setNeutronSubnetId(subnetMap.get(copiedSubnet.getSubnetId()));
368 copiedSubnet.setOrchestrationStatus(OrchestrationStatus.CREATED);
369 aaiNetworkResources.updateSubnet(copiedl3network, copiedSubnet);
373 execution.setVariable("aaiNetworkActivateRollback", true);
374 } catch (Exception ex) {
375 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
379 public void updateObjectNetwork(BuildingBlockExecution execution) {
381 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
382 aaiNetworkResources.updateNetwork(l3network);
383 } catch(Exception ex) {
384 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
389 * BPMN access method to update ServiceInstance
392 public void updateServiceInstance(BuildingBlockExecution execution) {
394 ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
395 aaiServiceInstanceResources.updateServiceInstance(serviceInstance);
396 } catch (Exception ex) {
397 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
401 public void updateObjectVnf(BuildingBlockExecution execution) {
403 GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
404 aaiVnfResources.updateObjectVnf(genericVnf);
405 } catch(Exception ex) {
406 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
410 public void updateOrchestrationStatusDeleteVfModule(BuildingBlockExecution execution) {
411 execution.setVariable("aaiDeleteVfModuleRollback", false);
413 VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
414 vfModule.setHeatStackId("");
415 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
417 VfModule copiedVfModule = vfModule.shallowCopyId();
418 copiedVfModule.setHeatStackId("");
419 aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.ASSIGNED);
420 execution.setVariable("aaiDeleteVfModuleRollback", true);
421 } catch (Exception ex) {
422 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
426 public void updateModelVfModule(BuildingBlockExecution execution) {
428 VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
429 GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
430 aaiVfModuleResources.changeAssignVfModule(vfModule, vnf);
431 } catch (Exception ex) {
432 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
435 public void updateOrchestrationStatusActivateFabricConfiguration(BuildingBlockExecution execution) {
437 Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID, execution.getLookupMap().get(ResourceKey.CONFIGURATION_ID));
438 aaiConfigurationResources.updateOrchestrationStatusConfiguration(configuration, OrchestrationStatus.ACTIVE);
439 } catch (Exception ex) {
440 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
444 public void updateOrchestrationStatusDeactivateFabricConfiguration(BuildingBlockExecution execution) {
446 Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID, execution.getLookupMap().get(ResourceKey.CONFIGURATION_ID));
447 aaiConfigurationResources.updateOrchestrationStatusConfiguration(configuration, OrchestrationStatus.ASSIGNED);
448 } catch (Exception ex) {
449 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);