d6d22642178fc7b14f7402298405d8670f6d7617
[so.git] /
1 package org.onap.so.adapters.tasks.orchestration;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.StringReader;
5 import java.util.HashMap;
6 import java.util.Map;
7 import java.util.Optional;
8 import javax.xml.bind.JAXB;
9 import javax.xml.parsers.DocumentBuilder;
10 import javax.xml.parsers.DocumentBuilderFactory;
11 import javax.xml.ws.Holder;
12 import org.camunda.bpm.client.task.ExternalTask;
13 import org.camunda.bpm.client.task.ExternalTaskService;
14 import org.onap.so.adapters.network.MsoNetworkAdapterImpl;
15 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
16 import org.onap.so.adapters.vnf.MsoVnfAdapterImpl;
17 import org.onap.so.adapters.vnf.MsoVnfPluginAdapterImpl;
18 import org.onap.so.adapters.vnf.VnfAdapterUtils;
19 import org.onap.so.adapters.vnfrest.CreateVfModuleRequest;
20 import org.onap.so.adapters.vnfrest.CreateVolumeGroupRequest;
21 import org.onap.so.logging.tasks.AuditMDCSetup;
22 import org.onap.so.utils.ExternalTaskUtils;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25 import org.springframework.beans.factory.annotation.Autowired;
26 import org.springframework.stereotype.Component;
27
28 @Component
29 public class RollbackService extends ExternalTaskUtils {
30
31     private static final Logger logger = LoggerFactory.getLogger(RollbackService.class);
32
33     @Autowired
34     private MsoVnfAdapterImpl vnfAdapterImpl;
35
36     @Autowired
37     private MsoNetworkAdapterImpl networkAdapterImpl;
38
39     @Autowired
40     private VnfAdapterUtils vnfAdapterUtils;
41
42     @Autowired
43     private MsoVnfPluginAdapterImpl vnfPluginImpl;
44
45     @Autowired
46     private AuditMDCSetup mdcSetup;
47
48     public void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
49         mdcSetup.setupMDC(externalTask);
50         logger.debug("Starting External Task Rollback Service");
51         Map<String, Object> variables = new HashMap<>();
52         boolean success = false;
53         boolean pollRollbackStatus = false;
54         try {
55             String xmlRequest = externalTask.getVariable("openstackAdapterTaskRequest");
56             if (xmlRequest != null) {
57                 Optional<String> requestType = findRequestType(xmlRequest);
58                 if ("createVolumeGroupRequest".equals(requestType.get())) {
59                     logger.debug("Executing External Task Rollback Service for Create Volume Group");
60                     CreateVolumeGroupRequest req =
61                             JAXB.unmarshal(new StringReader(xmlRequest), CreateVolumeGroupRequest.class);
62                     boolean isMulticloud = vnfAdapterUtils.isMulticloudMode(null, req.getCloudSiteId());
63                     if (!isMulticloud) {
64                         vnfAdapterImpl.deleteVnf(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
65                                 req.getVolumeGroupName(), req.getMsoRequest(), false);
66                         pollRollbackStatus = true;
67                         success = true;
68                     } else {
69                         vnfPluginImpl.deleteVnf(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
70                                 req.getVolumeGroupName(), req.getMsoRequest());
71                         pollRollbackStatus = false;
72                         success = true;
73                     }
74                 } else if ("createVfModuleRequest".equals(requestType.get())) {
75                     logger.debug("Executing External Task Rollback Service for Create Vf Module");
76                     CreateVfModuleRequest req =
77                             JAXB.unmarshal(new StringReader(xmlRequest), CreateVfModuleRequest.class);
78                     boolean isMulticloud = vnfAdapterUtils.isMulticloudMode(null, req.getCloudSiteId());
79                     if (!isMulticloud) {
80                         vnfAdapterImpl.deleteVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
81                                 req.getVfModuleName(), req.getVnfId(), req.getVfModuleId(),
82                                 req.getModelCustomizationUuid(), req.getMsoRequest(), new Holder<>());
83                         pollRollbackStatus = true;
84                         success = true;
85                     } else {
86                         /*
87                          * vnfPluginImpl.deleteVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
88                          * req.getVfModuleName(),req.getMsoRequest(), new Holder<>()); TODO: Figure out how to properly
89                          * rollback
90                          */
91                         pollRollbackStatus = false;
92                         success = true;
93                     }
94                 } else if ("createNetworkRequest".equals(requestType.get())) {
95                     logger.debug("Executing External Task Rollback Service for Create Network");
96                     Holder<Boolean> networkDeleted = new Holder<>();
97                     CreateNetworkRequest req = JAXB.unmarshal(new StringReader(xmlRequest), CreateNetworkRequest.class);
98                     networkAdapterImpl.deleteNetwork(req.getCloudSiteId(), req.getTenantId(), req.getNetworkType(),
99                             req.getModelCustomizationUuid(), req.getNetworkName(), req.getMsoRequest(), networkDeleted,
100                             false);
101                     pollRollbackStatus = true;
102                     success = true;
103                 }
104             }
105         } catch (Exception e) {
106             logger.error("Error during External Task Rollback Service", e);
107         }
108         variables.put("OpenstackRollbackSuccess", success);
109         variables.put("rollbackPerformed", true);
110         variables.put("PollRollbackStatus", pollRollbackStatus);
111         if (success) {
112             externalTaskService.complete(externalTask, variables);
113             logger.debug("The External Task Id: {}  Successful", externalTask.getId());
114         } else {
115             logger.debug("The External Task Id: {}  Failed. Not Retrying", externalTask.getId());
116             externalTaskService.complete(externalTask, variables);
117         }
118     }
119
120     protected Optional<String> findRequestType(String xmlString) {
121         try {
122             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
123             DocumentBuilder builder = factory.newDocumentBuilder();
124             org.w3c.dom.Document doc;
125             doc = builder.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8")));
126             return Optional.of(doc.getDocumentElement().getNodeName());
127         } catch (Exception e) {
128             logger.error("Error Finding Request Type", e);
129             return Optional.empty();
130         }
131     }
132
133 }