1 package org.onap.so.adapters.tasks.orchestration;
3 import java.io.ByteArrayInputStream;
4 import java.io.StringReader;
5 import java.util.HashMap;
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;
29 public class RollbackService extends ExternalTaskUtils {
31 private static final Logger logger = LoggerFactory.getLogger(RollbackService.class);
34 private MsoVnfAdapterImpl vnfAdapterImpl;
37 private MsoNetworkAdapterImpl networkAdapterImpl;
40 private VnfAdapterUtils vnfAdapterUtils;
43 private MsoVnfPluginAdapterImpl vnfPluginImpl;
46 private AuditMDCSetup mdcSetup;
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;
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());
64 vnfAdapterImpl.deleteVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
65 req.getVolumeGroupName(), null, req.getMsoRequest(), new Holder<>());
66 pollRollbackStatus = true;
69 vnfPluginImpl.deleteVnf(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
70 req.getVolumeGroupName(), req.getMsoRequest());
71 pollRollbackStatus = false;
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());
80 vnfAdapterImpl.deleteVfModule(req.getCloudSiteId(), req.getCloudOwner(), req.getTenantId(),
81 req.getVfModuleName(), req.getModelCustomizationUuid(), req.getMsoRequest(),
83 pollRollbackStatus = true;
86 pollRollbackStatus = false;
89 } else if ("createNetworkRequest".equals(requestType.get())) {
90 logger.debug("Executing External Task Rollback Service for Create Network");
91 CreateNetworkRequest req = JAXB.unmarshal(new StringReader(xmlRequest), CreateNetworkRequest.class);
92 networkAdapterImpl.deleteNetwork(req.getCloudSiteId(), req.getTenantId(), req.getNetworkType(),
93 req.getModelCustomizationUuid(), req.getNetworkName(), req.getMsoRequest());
94 pollRollbackStatus = true;
98 } catch (Exception e) {
99 logger.error("Error during External Task Rollback Service", e);
101 variables.put("OpenstackRollbackSuccess", success);
102 variables.put("rollbackPerformed", true);
103 variables.put("PollRollbackStatus", pollRollbackStatus);
105 externalTaskService.complete(externalTask, variables);
106 logger.debug("The External Task Id: {} Successful", externalTask.getId());
108 logger.debug("The External Task Id: {} Failed. Not Retrying", externalTask.getId());
109 externalTaskService.complete(externalTask, variables);
113 protected Optional<String> findRequestType(String xmlString) {
115 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
116 DocumentBuilder builder = factory.newDocumentBuilder();
117 org.w3c.dom.Document doc;
118 doc = builder.parse(new ByteArrayInputStream(xmlString.getBytes("UTF-8")));
119 return Optional.of(doc.getDocumentElement().getNodeName());
120 } catch (Exception e) {
121 logger.error("Error Finding Request Type", e);
122 return Optional.empty();