From a3c3cb84d944310f047a834901c38a8b6d5b2954 Mon Sep 17 00:00:00 2001 From: rameshiyer27 Date: Thu, 30 Jun 2022 08:54:30 +0100 Subject: Fix CSIt failure in CLAMP test case Policy participant always updates the state of AC element to PASSIVE, irrespective of success/failure scenarios in policy creation and deployment. This causes inconsistency in AC overall state and CSIT validation fails. Verifying the response code from api and pap before updating the AC element state from policy participant. Issue-ID: POLICY-4270 Signed-off-by: zrrmmua Change-Id: I0ecf770d9803e520401ba49cd47c22ac6e4f9c17 (cherry picked from commit e50b122534039adf8227bae1739793e53c397f64) --- .../AutomationCompositionElementHandler.java | 50 ++++++++++++++-------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandler.java b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandler.java index 42d7526f8..e020d209e 100644 --- a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandler.java +++ b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandler.java @@ -27,7 +27,9 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.UUID; +import javax.ws.rs.core.Response; import lombok.Setter; +import org.apache.http.HttpStatus; import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener; import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi; import org.onap.policy.clamp.acm.participant.policy.client.PolicyApiHttpClient; @@ -98,14 +100,14 @@ public class AutomationCompositionElementHandler implements AutomationCompositio automationCompositionElementId, orderedState, AutomationCompositionState.UNINITIALISED, ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE); } catch (PfModelRuntimeException e) { - LOGGER.debug("Undeploying/Deleting policy failed {}", automationCompositionElementId, e); + LOGGER.error("Undeploying/Deleting policy failed {}", automationCompositionElementId, e); } break; case PASSIVE: try { undeployPolicies(automationCompositionElementId); } catch (PfModelRuntimeException e) { - LOGGER.debug("Undeploying policies failed - no policies to undeploy {}", + LOGGER.error("Undeploying policies failed - no policies to undeploy {}", automationCompositionElementId); } intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, @@ -133,26 +135,30 @@ public class AutomationCompositionElementHandler implements AutomationCompositio apiHttpClient.deletePolicyType(policyType.getKey(), policyType.getValue()); } policyTypeMap.clear(); - intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, - automationCompositionElementId, newState, AutomationCompositionState.UNINITIALISED, - ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE); } private void deployPolicies(ToscaConceptIdentifier automationCompositionId, UUID automationCompositionElementId, AutomationCompositionOrderedState newState) { + var deployFailure = false; // Deploy all policies of this automationComposition from Policy Framework if (!policyMap.entrySet().isEmpty()) { for (Entry policy : policyMap.entrySet()) { - papHttpClient.handlePolicyDeployOrUndeploy(policy.getKey(), policy.getValue(), - DeploymentSubGroup.Action.POST); + var deployPolicyResp = papHttpClient.handlePolicyDeployOrUndeploy(policy.getKey(), policy.getValue(), + DeploymentSubGroup.Action.POST).getStatus(); + if (deployPolicyResp != HttpStatus.SC_ACCEPTED) { + deployFailure = true; + } } - LOGGER.debug("Policies deployed to {} successfully", automationCompositionElementId); + LOGGER.info("Policies deployed to {} successfully", automationCompositionElementId); } else { LOGGER.debug("No policies to deploy to {}", automationCompositionElementId); } - intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, - automationCompositionElementId, newState, AutomationCompositionState.PASSIVE, - ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE); + if (! deployFailure) { + // Update the AC element state + intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, + automationCompositionElementId, newState, AutomationCompositionState.PASSIVE, + ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE); + } } private void undeployPolicies(UUID automationCompositionElementId) { @@ -180,18 +186,18 @@ public class AutomationCompositionElementHandler implements AutomationCompositio AutomationCompositionElement element, ToscaNodeTemplate acElementDefinition) throws PfModelException { - intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, element.getId(), - element.getOrderedState(), - AutomationCompositionState.PASSIVE, ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE); + var createPolicyTypeResp = HttpStatus.SC_OK; + var createPolicyResp = HttpStatus.SC_OK; + ToscaServiceTemplate automationCompositionDefinition = element.getToscaServiceTemplateFragment(); if (automationCompositionDefinition.getToscaTopologyTemplate() != null) { if (automationCompositionDefinition.getPolicyTypes() != null) { for (ToscaPolicyType policyType : automationCompositionDefinition.getPolicyTypes().values()) { policyTypeMap.put(policyType.getName(), policyType.getVersion()); } - LOGGER.debug("Found Policy Types in automation composition definition: {} , Creating Policy Types", + LOGGER.info("Found Policy Types in automation composition definition: {} , Creating Policy Types", automationCompositionDefinition.getName()); - apiHttpClient.createPolicyType(automationCompositionDefinition); + createPolicyTypeResp = apiHttpClient.createPolicyType(automationCompositionDefinition).getStatus(); } if (automationCompositionDefinition.getToscaTopologyTemplate().getPolicies() != null) { for (Map gotPolicyMap : automationCompositionDefinition.getToscaTopologyTemplate() @@ -200,12 +206,18 @@ public class AutomationCompositionElementHandler implements AutomationCompositio policyMap.put(policy.getName(), policy.getVersion()); } } - LOGGER.debug("Found Policies in automation composition definition: {} , Creating Policies", + LOGGER.info("Found Policies in automation composition definition: {} , Creating Policies", automationCompositionDefinition.getName()); - apiHttpClient.createPolicy(automationCompositionDefinition); + createPolicyResp = apiHttpClient.createPolicy(automationCompositionDefinition).getStatus(); + } + if (createPolicyTypeResp == HttpStatus.SC_OK && createPolicyResp == HttpStatus.SC_OK) { + LOGGER.info("PolicyTypes/Policies for the automation composition element : {} are created " + + "successfully", element.getId()); + deployPolicies(automationCompositionId, element.getId(), element.getOrderedState()); + } else { + LOGGER.error("Creation of PolicyTypes/Policies failed. Policies will not be deployed."); } } - deployPolicies(automationCompositionId, element.getId(), element.getOrderedState()); } /** -- cgit 1.2.3-korg