Code & Workflow Enhancements for CNF - Upgrade
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / bpmn / infrastructure / adapter / cnf / tasks / CnfAdapterCreateTasks.java
index 93d3051..5e3b781 100644 (file)
@@ -35,6 +35,8 @@ import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
 import org.onap.so.client.adapter.cnf.CnfAdapterClient;
+import org.onap.so.client.adapter.cnf.entities.CnfAaiUpdateRequest;
+import org.onap.so.client.adapter.cnf.entities.CnfAaiUpdateResponse;
 import org.onap.so.client.adapter.cnf.entities.InstanceRequest;
 import org.onap.so.client.adapter.cnf.entities.InstanceResponse;
 import org.onap.so.client.adapter.vnf.mapper.AttributeNameValue;
@@ -47,6 +49,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
@@ -54,6 +57,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 public class CnfAdapterCreateTasks {
     private static final Logger logger = LoggerFactory.getLogger(CnfAdapterCreateTasks.class);
     public static final String SDNCQUERY_RESPONSE = "SDNCQueryResponse_";
+    private static final String CNF_ADAPTER_MESSAGE_TYPE = "CNFCallback";
+    private static final String CNF_ADAPTER_CALLBACK_TIMEOUT = "PT30M";
 
     @Autowired
     private ExtractPojosForBB extractPojosForBB;
@@ -109,13 +114,104 @@ public class CnfAdapterCreateTasks {
     protected InstanceRequest createInstanceRequest(VfModule vfModule, CloudRegion cloudRegion,
             Map<String, String> sdncDirectives) {
         InstanceRequest request = new InstanceRequest();
-        request.setRbName(vfModule.getModelInfoVfModule().getModelInvariantUUID());
-        request.setRbVersion(vfModule.getModelInfoVfModule().getModelUUID());
+        request.setModelInvariantId(vfModule.getModelInfoVfModule().getModelInvariantUUID());
+        request.setModelVersionId(vfModule.getModelInfoVfModule().getModelUUID());
+        request.setModelCustomizationId(vfModule.getModelInfoVfModule().getModelCustomizationUUID());
         request.setCloudRegion(cloudRegion.getLcpCloudRegionId());
-        request.setReleaseName(vfModule.getVfModuleId());
+        request.setVfModuleUUID(vfModule.getVfModuleId());
         request.setProfileName(sdncDirectives.get("k8s-rb-profile-name"));
+        request.setReleaseName(sdncDirectives.get("k8s-rb-instance-release-name"));
+        if (sdncDirectives.containsKey("k8s-rb-instance-status-check"))
+            request.setStatusCheck(sdncDirectives.get("k8s-rb-instance-status-check").equalsIgnoreCase("true"));
         request.setOverrideValues(sdncDirectives);
         return request;
     }
 
+    public void prepareForCnfUpdateOrDelete(BuildingBlockExecution execution) {
+
+        GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
+        GenericVnf genericVnfId = null;
+        VfModule vfModuleId = null;
+        try {
+            genericVnfId = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
+            vfModuleId = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
+        } catch (Exception ex) {
+            logger.error("Exception occurred", ex);
+        }
+
+        String heatStackId = execution.getVariable("heatStackId");
+
+        logger.debug("heatStackId: {}", heatStackId);
+        CloudRegion cloudRegion = gBBInput.getCloudRegion();
+        String requestId = execution.getVariable("mso-request-id");
+
+        String callbackUrl =
+                "http://so-bpmn-infra.onap:8081/mso/WorkflowMessage/" + CNF_ADAPTER_MESSAGE_TYPE + "/" + requestId;
+
+        CnfAaiUpdateRequest aaiRequest =
+                createCnfAaiUpdateRequest(heatStackId, cloudRegion, callbackUrl, genericVnfId, vfModuleId);
+
+        logger.debug("aaiRequest: {}", aaiRequest);
+
+        String cnfRequestPayload = "";
+        try {
+            cnfRequestPayload = mapper.writeValueAsString(aaiRequest);
+        } catch (JsonProcessingException e) {
+            logger.error("Exception occurred", e);
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e);
+        }
+
+        // Prepare values to pass in execution variable for CNF Adapter async Handling
+        execution.setVariable("messageType", CNF_ADAPTER_MESSAGE_TYPE);
+        execution.setVariable("correlator", requestId);
+        execution.setVariable("timeout", CNF_ADAPTER_CALLBACK_TIMEOUT);
+
+        String currentFlow = execution.getFlowToBeCalled();
+        logger.debug("currentFlow: {}", currentFlow);
+
+        String apiPath = "http://so-cnf-adapter:8090";
+        if ("CreateVfModuleBB".equals(currentFlow) || ("UpgradeVfModuleBB".equals(currentFlow))) {
+            apiPath = apiPath + "/api/cnf-adapter/v1/aai-update/";
+        } else if ("DeleteVfModuleBB".equals(currentFlow)) {
+            apiPath = apiPath + "/api/cnf-adapter/v1/aai-delete/";
+        }
+
+        // Set variables in execution variable\
+        execution.setVariable("apiPath", apiPath);
+        execution.setVariable("cnfRequestPayload", cnfRequestPayload);
+    }
+
+    public void processCnfUpdateOrDeleteAsyncResponse(BuildingBlockExecution execution) {
+
+        String asyncResponse = execution.getVariable("asyncCallbackResponse");
+
+        CnfAaiUpdateResponse response = new CnfAaiUpdateResponse();
+
+        logger.debug("asyncResponse: {}", asyncResponse);
+
+        try {
+            response = mapper.readValue(asyncResponse, CnfAaiUpdateResponse.class);
+        } catch (JsonProcessingException e) {
+            logger.error("Error in parsing Cnf AAI update Response");
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e);
+        }
+
+        if (!"COMPLETED".equalsIgnoreCase(response.getStatus())) {
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, new RuntimeException("Cannot update in AAI"));
+        }
+    }
+
+    protected CnfAaiUpdateRequest createCnfAaiUpdateRequest(String heatStackId, CloudRegion cloudRegion,
+            String callbackUrl, GenericVnf genericVnfId, VfModule vfModuleId) {
+        CnfAaiUpdateRequest request = new CnfAaiUpdateRequest();
+        request.setCallbackUrl(callbackUrl);
+        request.setCloudOwner(cloudRegion.getCloudOwner());
+        request.setCloudRegion(cloudRegion.getLcpCloudRegionId());
+        request.setTenantId(cloudRegion.getTenantId());
+        request.setInstanceId(heatStackId);
+        request.setGenericVnfId(genericVnfId.getVnfId());
+        request.setVfModuleId(vfModuleId.getVfModuleId());
+        return request;
+    }
+
 }