From d58c0ca04ae993702b2c399afd52b01e503ec0fe Mon Sep 17 00:00:00 2001 From: FrancescoFioraEst Date: Fri, 2 Jun 2023 12:36:45 +0100 Subject: Add Failure handling support in all ACM-participants MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In any transition (like deploy, undeploy,  lock, unlock, update, delete) a participant should respond with the final state of transition, a status indicator (stateChaneResult) indicating if error has occurred and a message. Issue-ID: POLICY-4706 Change-Id: I424bc6d620f476392baee8904e21d3a6c7aa8d6b Signed-off-by: FrancescoFioraEst --- .../AutomationCompositionElementHandler.java | 47 +++++++++++++++++++++- .../AutomationCompositionElementHandlerTest.java | 38 +++++++++++++++++ 2 files changed, 83 insertions(+), 2 deletions(-) (limited to 'participant/participant-impl/participant-impl-kubernetes/src') diff --git a/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandler.java b/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandler.java index 2f1abe1c0..95ff1e8c3 100644 --- a/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandler.java +++ b/participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandler.java @@ -23,6 +23,7 @@ package org.onap.policy.clamp.acm.participant.kubernetes.handler; import java.io.IOException; import java.lang.invoke.MethodHandles; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -40,7 +41,11 @@ import org.onap.policy.clamp.acm.participant.kubernetes.helm.PodStatusValidator; import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo; import org.onap.policy.clamp.acm.participant.kubernetes.service.ChartService; import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy; +import org.onap.policy.clamp.models.acm.concepts.AcTypeState; +import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition; import org.onap.policy.clamp.models.acm.concepts.DeployState; +import org.onap.policy.clamp.models.acm.concepts.LockState; +import org.onap.policy.clamp.models.acm.concepts.StateChangeResult; import org.onap.policy.common.utils.coder.Coder; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; @@ -93,7 +98,8 @@ public class AutomationCompositionElementHandler implements AutomationCompositio try { chartService.uninstallChart(chart); intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, - automationCompositionElementId, DeployState.UNDEPLOYED, null, "Undeployed"); + automationCompositionElementId, DeployState.UNDEPLOYED, null, StateChangeResult.NO_ERROR, + "Undeployed"); chartMap.remove(automationCompositionElementId); podStatusMap.remove(chart.getReleaseName()); } catch (ServiceException se) { @@ -148,7 +154,44 @@ public class AutomationCompositionElementHandler implements AutomationCompositio if (!result.get().isEmpty()) { LOGGER.info("Pod Status Validator Completed: {}", result.isDone()); intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, elementId, - DeployState.DEPLOYED, null, "Deployed"); + DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Deployed"); } } + + @Override + public void lock(UUID instanceId, UUID elementId) throws PfModelException { + intermediaryApi.updateAutomationCompositionElementState(instanceId, elementId, null, LockState.LOCKED, + StateChangeResult.NO_ERROR, "Locked"); + } + + @Override + public void unlock(UUID instanceId, UUID elementId) throws PfModelException { + intermediaryApi.updateAutomationCompositionElementState(instanceId, elementId, null, LockState.UNLOCKED, + StateChangeResult.NO_ERROR, "Unlocked"); + } + + @Override + public void delete(UUID instanceId, UUID elementId) throws PfModelException { + intermediaryApi.updateAutomationCompositionElementState(instanceId, elementId, DeployState.DELETED, null, + StateChangeResult.NO_ERROR, "Deleted"); + } + + @Override + public void update(UUID instanceId, AcElementDeploy element, Map properties) + throws PfModelException { + intermediaryApi.updateAutomationCompositionElementState(instanceId, element.getId(), DeployState.DEPLOYED, null, + StateChangeResult.NO_ERROR, "Update not supported"); + } + + @Override + public void prime(UUID compositionId, List elementDefinitionList) + throws PfModelException { + intermediaryApi.updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR, "Primed"); + } + + @Override + public void deprime(UUID compositionId) throws PfModelException { + intermediaryApi.updateCompositionState(compositionId, AcTypeState.COMMISSIONED, StateChangeResult.NO_ERROR, + "Deprimed"); + } } diff --git a/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandlerTest.java b/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandlerTest.java index ee0039c3f..d9702abc5 100644 --- a/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandlerTest.java +++ b/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandlerTest.java @@ -32,6 +32,7 @@ import static org.mockito.Mockito.doThrow; import java.io.File; import java.io.IOException; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; @@ -157,4 +158,41 @@ class AutomationCompositionElementHandlerTest { () -> automationCompositionElementHandler.checkPodStatus(automationCompositionId, element.getId(), chartInfo, 1, 1)); } + + @Test + void testUpdate() throws PfModelException { + var elementId1 = UUID.randomUUID(); + var element = new AcElementDeploy(); + element.setId(elementId1); + element.setDefinition(new ToscaConceptIdentifier(KEY_NAME, "1.0.1")); + element.setOrderedState(DeployOrder.DEPLOY); + var automationCompositionId = commonTestData.getAutomationCompositionId(); + assertDoesNotThrow( + () -> automationCompositionElementHandler.update(automationCompositionId, element, Map.of())); + } + + @Test + void testLock() throws PfModelException { + assertDoesNotThrow(() -> automationCompositionElementHandler.lock(UUID.randomUUID(), UUID.randomUUID())); + } + + @Test + void testUnlock() throws PfModelException { + assertDoesNotThrow(() -> automationCompositionElementHandler.unlock(UUID.randomUUID(), UUID.randomUUID())); + } + + @Test + void testDelete() throws PfModelException { + assertDoesNotThrow(() -> automationCompositionElementHandler.delete(UUID.randomUUID(), UUID.randomUUID())); + } + + @Test + void testPrime() throws PfModelException { + assertDoesNotThrow(() -> automationCompositionElementHandler.prime(UUID.randomUUID(), List.of())); + } + + @Test + void testDeprime() throws PfModelException { + assertDoesNotThrow(() -> automationCompositionElementHandler.deprime(UUID.randomUUID())); + } } -- cgit 1.2.3-korg