b059a776416f327ca3713c8db0789d5e39a41875
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / bpmn / infrastructure / aai / tasks / AAIUpdateTasks.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.aai.tasks;
22
23 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
24 import org.onap.so.bpmn.common.BuildingBlockExecution;
25 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
26 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
27 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
28 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
29 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
30 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
31 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
32 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
33 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
34 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
35 import org.onap.so.client.exception.BBObjectNotFoundException;
36 import org.onap.so.client.exception.ExceptionBuilder;
37 import org.onap.so.client.orchestration.AAICollectionResources;
38 import org.onap.so.client.orchestration.AAINetworkResources;
39 import org.onap.so.client.orchestration.AAIServiceInstanceResources;
40 import org.onap.so.client.orchestration.AAIVfModuleResources;
41 import org.onap.so.client.orchestration.AAIVnfResources;
42 import org.onap.so.client.orchestration.AAIVolumeGroupResources;
43 import org.onap.so.db.catalog.beans.OrchestrationStatus;
44 import org.onap.so.logger.MsoLogger;
45 import org.springframework.beans.factory.annotation.Autowired;
46 import org.springframework.stereotype.Component;
47
48 @Component
49 public class AAIUpdateTasks {
50         private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, AAIUpdateTasks.class);
51         @Autowired
52         private AAIServiceInstanceResources aaiServiceInstanceResources;
53         @Autowired
54         private AAIVnfResources aaiVnfResources;
55         @Autowired
56         private AAIVfModuleResources aaiVfModuleResources;
57         @Autowired
58         private ExceptionBuilder exceptionUtil;
59         @Autowired
60         private ExtractPojosForBB extractPojosForBB;
61         @Autowired
62         private AAIVolumeGroupResources aaiVolumeGroupResources;
63         @Autowired
64         private AAINetworkResources aaiNetworkResources;
65         @Autowired
66         private AAICollectionResources aaiCollectionResources;
67         
68         public void updateOrchestrationStatusAssignedService(BuildingBlockExecution execution) {
69                 try {
70                         ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
71                         aaiServiceInstanceResources.updateOrchestrationStatusServiceInstance(serviceInstance, OrchestrationStatus.ASSIGNED);
72                         execution.setVariable("aaiServiceInstanceRollback", true);
73                 } catch (Exception ex) {
74                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
75                 }
76         }
77         
78         public void updateOrchestrationStatusActiveService(BuildingBlockExecution execution) {
79                 try {
80                         ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
81                         aaiServiceInstanceResources.updateOrchestrationStatusServiceInstance(serviceInstance, OrchestrationStatus.ACTIVE);
82                 } catch (Exception ex) {
83                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
84                 }
85         }
86
87         public void updateOrchestrationStatusAssignedVnf(BuildingBlockExecution execution) {
88                 try {
89                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
90                         aaiVnfResources.updateOrchestrationStatusVnf(vnf,OrchestrationStatus.ASSIGNED);
91                 } catch (Exception ex) {
92                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
93                 }
94         }
95         
96         public void updateOrchestrationStatusActiveVnf(BuildingBlockExecution execution) {
97                 try {
98                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
99                         aaiVnfResources.updateOrchestrationStatusVnf(vnf,OrchestrationStatus.ACTIVE);
100                 } catch (Exception ex) {
101                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
102                 }
103         }
104         
105         public void updateOrchestrationStatusAssignedVolumeGroup(BuildingBlockExecution execution) {
106                 try {
107                         GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
108                         
109                         VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID));
110                         CloudRegion cloudRegion = gBBInput.getCloudRegion();
111                         volumeGroup.setHeatStackId("");
112                         aaiVolumeGroupResources.updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.ASSIGNED);
113                 } catch (Exception ex) {
114                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
115                 }
116         }
117         
118         public void updateOrchestrationStatusActiveVolumeGroup(BuildingBlockExecution execution) {
119                 try {
120                         GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
121                         
122                         VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID));
123                         CloudRegion cloudRegion = gBBInput.getCloudRegion();
124                         
125                         aaiVolumeGroupResources.updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.ACTIVE);
126                 } catch (Exception ex) {
127                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
128                 }
129         }
130         
131         public void updateOrchestrationStatusCreatedVolumeGroup(BuildingBlockExecution execution) {
132                 try {
133                         GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
134                         
135                         VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID));
136                         CloudRegion cloudRegion = gBBInput.getCloudRegion();
137                         
138                         aaiVolumeGroupResources.updateOrchestrationStatusVolumeGroup(volumeGroup, cloudRegion, OrchestrationStatus.CREATED);
139                 } catch (Exception ex) {
140                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
141                 }
142         }
143         
144         public void updateHeatStackIdVolumeGroup(BuildingBlockExecution execution) {
145                 try {
146                         GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
147                         String heatStackId = execution.getVariable("heatStackId");
148                         
149                         VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID));
150                         CloudRegion cloudRegion = gBBInput.getCloudRegion();
151                         volumeGroup.setHeatStackId(heatStackId);
152                         
153                         aaiVolumeGroupResources.updateHeatStackIdVolumeGroup(volumeGroup, cloudRegion);
154                 } catch (Exception ex) {
155                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
156                 }
157         }
158         
159         public void updateOrchestrationStatusAssignedVfModule(BuildingBlockExecution execution) {
160                 try {
161                         VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
162                         vfModule.setHeatStackId("");
163                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
164                         aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.ASSIGNED);
165                 } catch (Exception ex) {                        
166                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
167                 }
168         }
169         
170         public void updateOrchestrationStatusPendingActivationVfModule(BuildingBlockExecution execution) {
171                 try {
172                         VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
173                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
174                         aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.PENDING_ACTIVATION);
175                 } catch (Exception ex) {
176                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
177                 }
178         }
179         
180         public void updateOrchestrationStatusCreatedVfModule(BuildingBlockExecution execution) {                
181                 try {
182                         VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
183                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
184                         aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.CREATED);                       
185                 } catch (Exception ex) {
186                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
187                 }
188         }       
189         
190         public void updateOrchestrationStatusDeactivateVfModule(BuildingBlockExecution execution) {     
191                 execution.setVariable("aaiDeactivateVfModuleRollback", false);
192                 try {
193                         VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
194                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
195                         aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.CREATED);
196                         execution.setVariable("aaiDeactivateVfModuleRollback", true);
197                 } catch (Exception ex) {
198                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
199                 }
200         }
201         
202         /**
203          * BPMN access method to update status of L3Network to Assigned in AAI
204          * @param execution
205          * @throws BBObjectNotFoundException 
206          */
207         public void updateOrchestrationStatusAssignedNetwork(BuildingBlockExecution execution) {
208                 execution.setVariable("aaiNetworkAssignRollback", false);
209                 try {
210                         L3Network l3network =  extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
211                         L3Network copiedl3network = l3network.shallowCopyId();
212
213
214                         l3network.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
215                         l3network.setHeatStackId("");
216
217                         copiedl3network.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
218                         copiedl3network.setHeatStackId("");
219                         aaiNetworkResources.updateNetwork(copiedl3network);
220                         execution.setVariable("aaiNetworkAssignRollback", true);
221                 } catch (Exception ex) {
222                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
223                 }
224         }
225         
226         /**
227          * BPMN access method to update status of L3Network to Active in AAI
228          * @param execution
229          * @throws BBObjectNotFoundException 
230          */
231         public void updateOrchestrationStatusActiveNetwork(BuildingBlockExecution execution) {
232                 execution.setVariable("aaiNetworkActivateRollback", false);
233                 try {
234                         L3Network l3network =  extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
235                         L3Network copiedl3network = l3network.shallowCopyId();
236
237                         copiedl3network.setOrchestrationStatus(OrchestrationStatus.ACTIVE);
238                         l3network.setOrchestrationStatus(OrchestrationStatus.ACTIVE);
239                         aaiNetworkResources.updateNetwork(copiedl3network);
240                         execution.setVariable("aaiNetworkActivateRollback", true);
241                 } catch (Exception ex) {
242                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
243                 }
244         }
245         
246         /**
247          * BPMN access method to update status of L3Network to Created in AAI
248          * @param execution
249          * @throws BBObjectNotFoundException 
250          */
251         public void updateOrchestrationStatusCreatedNetwork(BuildingBlockExecution execution) {
252                 execution.setVariable("aaiNetworkActivateRollback", false);
253                 try {
254                         L3Network l3network =  extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
255                         L3Network copiedl3network = l3network.shallowCopyId();
256
257                         copiedl3network.setOrchestrationStatus(OrchestrationStatus.CREATED);
258                         l3network.setOrchestrationStatus(OrchestrationStatus.CREATED);
259                         aaiNetworkResources.updateNetwork(copiedl3network);
260                         execution.setVariable("aaiNetworkActivateRollback", true);
261                 } catch (Exception ex) {
262                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
263                 }
264         }
265         
266         /**
267          * BPMN access method to update status of L3Network Collection to Active in AAI
268          * @param execution
269          * @throws BBObjectNotFoundException 
270          */
271         public void updateOrchestrationStatusActiveNetworkCollection(BuildingBlockExecution execution) {
272                 execution.setVariable("aaiNetworkCollectionActivateRollback", false);
273                 try {
274                         ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
275                         Collection networkCollection = serviceInstance.getCollection();
276                         Collection copiedNetworkCollection = networkCollection.shallowCopyId();
277
278                         networkCollection.setOrchestrationStatus(OrchestrationStatus.ACTIVE);
279                         copiedNetworkCollection.setOrchestrationStatus(OrchestrationStatus.ACTIVE);
280                         aaiCollectionResources.updateCollection(copiedNetworkCollection);
281                         execution.setVariable("aaiNetworkCollectionActivateRollback", true);
282                 } catch (Exception ex) {
283                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
284                 }
285         }
286         
287         public void updateOrchestrationStatusActivateVfModule(BuildingBlockExecution execution) {
288                 execution.setVariable("aaiActivateVfModuleRollback", false);
289                 try {
290                         VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
291                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
292                         aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule, vnf, OrchestrationStatus.ACTIVE);
293                         execution.setVariable("aaiActivateVfModuleRollback", true);
294                 } catch (Exception ex) {
295                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
296                 }
297         }
298         
299         public void updateHeatStackIdVfModule(BuildingBlockExecution execution) {               
300                 try {
301                         String heatStackId = execution.getVariable("heatStackId");
302                         VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
303                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
304                         vfModule.setHeatStackId(heatStackId);
305                         aaiVfModuleResources.updateHeatStackIdVfModule(vfModule, vnf);                  
306                 } catch (Exception ex) {
307                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
308                 }
309         }
310         
311         /**
312          * BPMN access method to update L3Network after it was created in AIC
313          * @param execution
314          * @throws Exception
315          */
316         public void updateNetworkCreated(BuildingBlockExecution execution) throws Exception {
317                 execution.setVariable("aaiNetworkActivateRollback", false);
318                 L3Network l3network =  extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
319                 L3Network copiedl3network = l3network.shallowCopyId();
320                 CreateNetworkResponse response = execution.getVariable("createNetworkResponse");
321                 try {
322                         if(response.getNetworkFqdn()!=null){
323                         l3network.setContrailNetworkFqdn(response.getNetworkFqdn());
324                         }
325                         l3network.setOrchestrationStatus(OrchestrationStatus.CREATED);
326                         l3network.setHeatStackId(response.getNetworkStackId());
327                         l3network.setNeutronNetworkId(response.getNeutronNetworkId());
328
329                         copiedl3network.setContrailNetworkFqdn(response.getNetworkFqdn());
330                         copiedl3network.setOrchestrationStatus(OrchestrationStatus.CREATED);
331                         copiedl3network.setHeatStackId(response.getNetworkStackId());
332                         copiedl3network.setNeutronNetworkId(response.getNeutronNetworkId());
333
334                         aaiNetworkResources.updateNetwork(copiedl3network);
335                         execution.setVariable("aaiNetworkActivateRollback", true);
336                 } catch (Exception ex) {
337                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
338                 }
339         }
340         
341         public void updateObjectNetwork(BuildingBlockExecution execution) {
342                 try {
343                         L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
344                         aaiNetworkResources.updateNetwork(l3network);
345                 } catch(Exception ex) {
346                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
347                 }
348         }
349         
350         /**
351          * BPMN access method to update ServiceInstance
352          * @param execution
353          */
354         public void updateServiceInstance(BuildingBlockExecution execution) {
355                 try {
356                         ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
357                         aaiServiceInstanceResources.updateServiceInstance(serviceInstance);
358                 } catch (Exception ex) {
359                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
360                 }
361         }
362         
363         public void updateObjectVnf(BuildingBlockExecution execution) {
364                 try {
365                         GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
366                         aaiVnfResources.updateObjectVnf(genericVnf);
367                 } catch(Exception ex) {
368                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
369                 }
370         }
371         
372         public void updateOrchestrationStatusDeleteVfModule(BuildingBlockExecution execution) { 
373                 execution.setVariable("aaiDeleteVfModuleRollback", false);
374                 try {
375                         VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
376                         vfModule.setHeatStackId("");
377                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
378
379                         VfModule copiedVfModule = vfModule.shallowCopyId();
380                         copiedVfModule.setHeatStackId("");
381                         aaiVfModuleResources.updateOrchestrationStatusVfModule(vfModule,vnf,OrchestrationStatus.ASSIGNED);
382                         execution.setVariable("aaiDeleteVfModuleRollback", true);
383                 } catch (Exception ex) {
384                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
385                 }
386         }
387
388         public void updateModelVfModule(BuildingBlockExecution execution) {
389                 try {
390                         VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
391                         GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
392                         aaiVfModuleResources.changeAssignVfModule(vfModule, vnf);
393                 } catch (Exception ex) {
394                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
395                 }
396         }
397 }