From 0793cecdbf0441dac5ba8d2752a203d32596d2da Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Wed, 21 May 2025 09:52:36 +0200 Subject: [PATCH 1/2] some changes --- .../kubernetes/KServiceLifecycleManager.java | 3 ++ .../components/helm/HelmCommandExecutor.java | 15 +++++++++ .../components/helm/HelmKServiceManager.java | 21 +++++++++---- .../helm/commands/HelmUpgradeCommand.java | 25 +++++++++++++++ .../orchestration/AppLifecycleManager.java | 3 ++ .../DefaultAppLifecycleManager.java | 31 +++++++++++++++++++ .../AppLifecycleManagerRestController.java | 24 ++++++++------ .../entities/AppDeploymentState.java | 6 ++++ 8 files changed, 113 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KServiceLifecycleManager.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KServiceLifecycleManager.java index 8a521c7eb..87cc2328b 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KServiceLifecycleManager.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KServiceLifecycleManager.java @@ -2,6 +2,7 @@ package net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.entities.KubernetesTemplate; import net.geant.nmaas.orchestration.Identifier; +import net.geant.nmaas.orchestration.entities.AppDeployment; public interface KServiceLifecycleManager { @@ -15,4 +16,6 @@ public interface KServiceLifecycleManager { void updateHelmRepo(); + void scaleDeployment(AppDeployment deployment, int replicas); + } diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandExecutor.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandExecutor.java index 01a3fd9b4..2ecfd4a0e 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandExecutor.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmCommandExecutor.java @@ -169,5 +169,20 @@ public class HelmCommandExecutor { throw new CommandExecutionException("Failed to execute helm repository add command -> " + e.getMessage()); } } + public void executeScaleCommand(String namespace, String releaseName, int replicas) { + try { + HelmUpgradeCommand command = HelmUpgradeCommand.commandWithSetValues( + helmVersion, + namespace, + releaseName, + List.of("replicaCount=" + replicas), + enableTls + ); + + commandExecutor.execute(command); + } catch (CommandExecutionException e) { + throw new CommandExecutionException("Failed to execute helm scale command -> " + e.getMessage()); + } + } } diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java index 753891c45..c89387d25 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java @@ -15,10 +15,11 @@ import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.en import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.entities.ServiceStorageVolume; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.exceptions.KServiceManipulationException; import net.geant.nmaas.orchestration.Identifier; +import net.geant.nmaas.orchestration.entities.AppDeployment; import net.geant.nmaas.orchestration.repositories.DomainTechDetailsRepository; +import net.geant.nmaas.utils.bash.CommandExecutionException; import net.geant.nmaas.utils.logging.LogLevel; import net.geant.nmaas.utils.logging.Loggable; -import net.geant.nmaas.utils.bash.CommandExecutionException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -114,12 +115,12 @@ public class HelmKServiceManager implements KServiceLifecycleManager { static Map<String, String> removeRedundantParameters(Map<String, String> additionalParameters) { return additionalParameters.entrySet().stream().filter(entry -> - !entry.getKey().contains(RANDOM_ARGUMENT_EXPRESSION_PREFIX) - && !entry.getKey().contains(PUBLIC_ACCESS_SELECTOR_ARGUMENT_EXPRESSION_PREFIX) - ).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + !entry.getKey().contains(RANDOM_ARGUMENT_EXPRESSION_PREFIX) + && !entry.getKey().contains(PUBLIC_ACCESS_SELECTOR_ARGUMENT_EXPRESSION_PREFIX) + ).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } - private Map<String, String> getIngressVariables(IngressResourceConfigOption ingressResourceConfigOption, Set<ServiceAccessMethod> externalAccessMethods, String domain){ + private Map<String, String> getIngressVariables(IngressResourceConfigOption ingressResourceConfigOption, Set<ServiceAccessMethod> externalAccessMethods, String domain) { return HelmChartVariables.ingressVariablesMap( DEPLOY_FROM_CHART.equals(ingressResourceConfigOption), externalAccessMethods, @@ -131,7 +132,7 @@ public class HelmKServiceManager implements KServiceLifecycleManager { ); } - private String getIngressClass(String domain){ + private String getIngressClass(String domain) { if (Boolean.TRUE.equals(ingressManager.getIngressPerDomain())) { return domainTechDetailsRepository.findByDomainCodename(domain).orElseThrow(() -> new IllegalArgumentException("DomainTechDetails cannot be found for domain " + domain)).getKubernetesIngressClass(); } @@ -191,4 +192,12 @@ public class HelmKServiceManager implements KServiceLifecycleManager { } } + @Override + public void scaleDeployment(AppDeployment deployment, int replicas) { + KubernetesNmServiceInfo serviceInfo = repositoryManager.loadService(deployment.getDeploymentId()); + String namespace = namespaceService.namespace(serviceInfo.getDomain()); + String releaseName = deployment.getDeploymentId().value(); + + helmCommandExecutor.executeScaleCommand(namespace, releaseName, replicas); + } } \ No newline at end of file diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java index 0b0cbb3cd..1f64a1a04 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java @@ -3,6 +3,7 @@ package net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.c import com.google.common.base.Strings; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.components.helm.HelmCommand; +import java.util.List; import java.util.function.Predicate; public class HelmUpgradeCommand extends HelmCommand { @@ -78,4 +79,28 @@ public class HelmUpgradeCommand extends HelmCommand { return o -> !o.startsWith("Error"); } + public static HelmUpgradeCommand commandWithSetValues(String helmVersion, String namespace, String releaseName, List<String> setValues, boolean enableTls) { + if (!HELM_VERSION_3.equals(helmVersion)) { + throw new IllegalArgumentException("Upgrades are not supported for Helm v2"); + } + if (releaseName == null || releaseName.isEmpty()) { + throw new IllegalArgumentException("Name of the release can't be null or empty"); + } + + StringBuilder sb = new StringBuilder(); + sb.append(HELM) + .append(SPACE).append(UPGRADE) + .append(SPACE).append(OPTION_NAMESPACE).append(SPACE).append(namespace) + .append(SPACE).append(releaseName) + .append(SPACE).append(releaseName); + + for (String setValue : setValues) { + sb.append(SPACE).append("--set").append(SPACE).append(setValue); + } + + addTlsOptionIfRequired(helmVersion, enableTls, sb); + return new HelmUpgradeCommand(sb.toString()); + } + + } diff --git a/src/main/java/net/geant/nmaas/orchestration/AppLifecycleManager.java b/src/main/java/net/geant/nmaas/orchestration/AppLifecycleManager.java index 94dbad6d4..f4410a934 100644 --- a/src/main/java/net/geant/nmaas/orchestration/AppLifecycleManager.java +++ b/src/main/java/net/geant/nmaas/orchestration/AppLifecycleManager.java @@ -90,4 +90,7 @@ public interface AppLifecycleManager { * @param deploymentId unique identifier of the deployed user application */ void updateApplicationStatus(Identifier deploymentId); + + void scaleDown(Identifier deploymentId); + void scaleUp(Identifier deploymentId); } diff --git a/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java b/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java index 922afaeb1..dc78257a6 100644 --- a/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java +++ b/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import net.geant.nmaas.nmservice.NmServiceDeploymentStateChangeEvent; import net.geant.nmaas.nmservice.configuration.exceptions.UserConfigHandlingException; import net.geant.nmaas.nmservice.deployment.NmServiceRepositoryManager; +import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KServiceLifecycleManager; import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.components.janitor.JanitorService; import net.geant.nmaas.nmservice.deployment.entities.NmServiceDeploymentState; import net.geant.nmaas.orchestration.api.model.AppConfigurationView; @@ -54,6 +55,9 @@ public class DefaultAppLifecycleManager implements AppLifecycleManager { private final ApplicationEventPublisher eventPublisher; private final NmServiceRepositoryManager serviceRepositoryManager; private final JanitorService janitorService; + private final KServiceLifecycleManager kServiceLifecycleManager; + + private final AppTermsAcceptanceService appTermsAcceptanceService; private final ConfigurationManager configurationManager; @@ -277,5 +281,32 @@ public class DefaultAppLifecycleManager implements AppLifecycleManager { public void updateApplicationStatus(Identifier deploymentId) { eventPublisher.publishEvent(new AppVerifyServiceActionEvent(this, deploymentId)); } + @Override + @Loggable(LogLevel.INFO) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void scaleDown(Identifier deploymentId) { + AppDeployment appDeployment = deploymentRepositoryManager.load(deploymentId); + + kServiceLifecycleManager.scaleDeployment(appDeployment, 0); + + appDeployment.setState(AppDeploymentState.SCALED_DOWN); + deploymentRepositoryManager.update(appDeployment); + + log.info("Scaled down deployment [{}]", deploymentId.value()); + } + @Override + @Loggable(LogLevel.INFO) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void scaleUp(Identifier deploymentId) { + AppDeployment appDeployment = deploymentRepositoryManager.load(deploymentId); + + int replicas = 1; + + kServiceLifecycleManager.scaleDeployment(appDeployment, replicas); + + deploymentRepositoryManager.update(appDeployment); + + log.info("Scaled up deployment [{}]", deploymentId.value()); + } } diff --git a/src/main/java/net/geant/nmaas/orchestration/api/AppLifecycleManagerRestController.java b/src/main/java/net/geant/nmaas/orchestration/api/AppLifecycleManagerRestController.java index 315e0c157..e8caf8514 100644 --- a/src/main/java/net/geant/nmaas/orchestration/api/AppLifecycleManagerRestController.java +++ b/src/main/java/net/geant/nmaas/orchestration/api/AppLifecycleManagerRestController.java @@ -11,16 +11,9 @@ import net.geant.nmaas.orchestration.exceptions.InvalidDeploymentIdException; import net.geant.nmaas.portal.persistent.entity.Application; import net.geant.nmaas.portal.persistent.repositories.ApplicationRepository; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.security.Principal; @@ -116,4 +109,17 @@ public class AppLifecycleManagerRestController { return ex.getMessage(); } + + @PutMapping("/{deploymentId}/scale-down") + public ResponseEntity<Void> scaleDownApp(@PathVariable String deploymentId) { + lifecycleManager.scaleDown(new Identifier(deploymentId)); + return ResponseEntity.ok().build(); + } + + @PutMapping("/{deploymentId}/scale-up") + public ResponseEntity<Void> scaleUpApp(@PathVariable String deploymentId) { + lifecycleManager.scaleUp(new Identifier(deploymentId)); + return ResponseEntity.ok().build(); + } + } diff --git a/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java b/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java index b35e07d63..21d54f0d3 100644 --- a/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java +++ b/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java @@ -541,6 +541,12 @@ public enum AppDeploymentState { @Override public boolean isInFailedState() { return true; } + }, + SCALED_DOWN { + @Override + public AppLifecycleState lifecycleState() { + return null; + } }; public abstract AppLifecycleState lifecycleState(); -- GitLab From 29454fa725caf7eb60bcb93f8e6b9cf2c7c39b23 Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Mon, 26 May 2025 10:06:32 +0200 Subject: [PATCH 2/2] some changes --- .../components/helm/HelmKServiceManager.java | 2 +- .../helm/commands/HelmUpgradeCommand.java | 1 - .../orchestration/AppLifecycleState.java | 4 + .../entities/AppDeploymentState.java | 98 ++++++++++++++----- 4 files changed, 78 insertions(+), 27 deletions(-) diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java index c89387d25..7271bfce1 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/HelmKServiceManager.java @@ -196,7 +196,7 @@ public class HelmKServiceManager implements KServiceLifecycleManager { public void scaleDeployment(AppDeployment deployment, int replicas) { KubernetesNmServiceInfo serviceInfo = repositoryManager.loadService(deployment.getDeploymentId()); String namespace = namespaceService.namespace(serviceInfo.getDomain()); - String releaseName = deployment.getDeploymentId().value(); + String releaseName = serviceInfo.getDescriptiveDeploymentId().getValue(); helmCommandExecutor.executeScaleCommand(namespace, releaseName, replicas); } diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java index 1f64a1a04..63b681985 100644 --- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java +++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/components/helm/commands/HelmUpgradeCommand.java @@ -91,7 +91,6 @@ public class HelmUpgradeCommand extends HelmCommand { sb.append(HELM) .append(SPACE).append(UPGRADE) .append(SPACE).append(OPTION_NAMESPACE).append(SPACE).append(namespace) - .append(SPACE).append(releaseName) .append(SPACE).append(releaseName); for (String setValue : setValues) { diff --git a/src/main/java/net/geant/nmaas/orchestration/AppLifecycleState.java b/src/main/java/net/geant/nmaas/orchestration/AppLifecycleState.java index 1a0543a6b..cd031bab5 100644 --- a/src/main/java/net/geant/nmaas/orchestration/AppLifecycleState.java +++ b/src/main/java/net/geant/nmaas/orchestration/AppLifecycleState.java @@ -218,6 +218,10 @@ public enum AppLifecycleState { APPLICATION_CONFIGURATION_REMOVAL_FAILED { @Override public String getUserFriendlyState() { return "APP_INSTANCE.PROGRESS.APP_CONF_REMOVE_ERROR"; } + }, + APPLICATION_SCALED_DOWN{ + @Override + public String getUserFriendlyState(){ return "APP_INSTANCE.PROGRESS.APP_SCALED_DOWN"; } }; public abstract String getUserFriendlyState(); diff --git a/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java b/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java index 21d54f0d3..0964c3095 100644 --- a/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java +++ b/src/main/java/net/geant/nmaas/orchestration/entities/AppDeploymentState.java @@ -167,7 +167,8 @@ public enum AppDeploymentState { case DEPLOYMENT_FAILED: return APPLICATION_DEPLOYMENT_FAILED; default: - return nextStateForNotMatchingNmServiceDeploymentState(this, state); } + return nextStateForNotMatchingNmServiceDeploymentState(this, state); + } } }, APPLICATION_CONFIGURATION_FAILED { @@ -264,7 +265,7 @@ public enum AppDeploymentState { @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { - if (NmServiceDeploymentState.UPGRADE_INITIATED.equals(state)) { + if (NmServiceDeploymentState.UPGRADE_INITIATED.equals(state)) { return APPLICATION_UPGRADE_IN_PROGRESS; } return nextStateForNotMatchingNmServiceDeploymentState(this, state); @@ -277,7 +278,9 @@ public enum AppDeploymentState { }, APPLICATION_DEPLOYMENT_VERIFICATION_FAILED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_DEPLOYMENT_VERIFICATION_FAILED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_DEPLOYMENT_VERIFICATION_FAILED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -285,7 +288,9 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, APPLICATION_RESTART_IN_PROGRESS { @Override @@ -333,7 +338,9 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, APPLICATION_UPGRADE_IN_PROGRESS { @Override @@ -388,11 +395,15 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, APPLICATION_REMOVAL_IN_PROGRESS { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_REMOVAL_IN_PROGRESS; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_REMOVAL_IN_PROGRESS; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -408,7 +419,9 @@ public enum AppDeploymentState { }, APPLICATION_REMOVED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_REMOVED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_REMOVED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -418,7 +431,7 @@ public enum AppDeploymentState { case CONFIGURATION_REMOVAL_INITIATED: return APPLICATION_CONFIGURATION_REMOVAL_IN_PROGRESS; default: - return nextStateForNotMatchingNmServiceDeploymentState(this, state); + return nextStateForNotMatchingNmServiceDeploymentState(this, state); } } @@ -430,7 +443,9 @@ public enum AppDeploymentState { }, APPLICATION_REMOVAL_FAILED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_REMOVAL_FAILED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_REMOVAL_FAILED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -438,11 +453,15 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, APPLICATION_CONFIGURATION_REMOVAL_IN_PROGRESS { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVAL_IN_PROGRESS; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVAL_IN_PROGRESS; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -458,11 +477,13 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_REMOVED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { - if (NmServiceDeploymentState.FAILED_APPLICATION_REMOVED.equals(state)) { + if (NmServiceDeploymentState.FAILED_APPLICATION_REMOVED.equals(state)) { return FAILED_APPLICATION_REMOVED; } return nextStateForNotMatchingNmServiceDeploymentState(this, state); @@ -470,7 +491,9 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_REMOVAL_FAILED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVAL_FAILED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_REMOVAL_FAILED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -479,7 +502,9 @@ public enum AppDeploymentState { }, FAILED_APPLICATION_REMOVED { @Override - public AppLifecycleState lifecycleState() {return AppLifecycleState.FAILED_APPLICATION_REMOVED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.FAILED_APPLICATION_REMOVED; + } @Override public boolean isInEndState() { @@ -488,7 +513,9 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_UPDATE_IN_PROGRESS { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATE_IN_PROGRESS; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATE_IN_PROGRESS; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -504,7 +531,9 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_UPDATED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -520,7 +549,9 @@ public enum AppDeploymentState { }, APPLICATION_CONFIGURATION_UPDATE_FAILED { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATE_FAILED; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.APPLICATION_CONFIGURATION_UPDATE_FAILED; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -528,11 +559,15 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, INTERNAL_ERROR { @Override - public AppLifecycleState lifecycleState() { return AppLifecycleState.INTERNAL_ERROR; } + public AppLifecycleState lifecycleState() { + return AppLifecycleState.INTERNAL_ERROR; + } @Override public AppDeploymentState nextState(NmServiceDeploymentState state) { @@ -540,12 +575,25 @@ public enum AppDeploymentState { } @Override - public boolean isInFailedState() { return true; } + public boolean isInFailedState() { + return true; + } }, SCALED_DOWN { @Override public AppLifecycleState lifecycleState() { - return null; + return AppLifecycleState.APPLICATION_SCALED_DOWN; + } + + @Override + public AppDeploymentState nextState(NmServiceDeploymentState state) { + //TODO + return APPLICATION_CONFIGURED; + } + + @Override + public boolean isInRunningState() { + return true; } }; @@ -569,7 +617,7 @@ public enum AppDeploymentState { if (!currentAppDeploymentState.isInEndState() && newNmServiceState.equals(NmServiceDeploymentState.REMOVAL_INITIATED)) { return APPLICATION_REMOVAL_IN_PROGRESS; } - if(currentAppDeploymentState.isInFailedState()) { + if (currentAppDeploymentState.isInFailedState()) { switch (newNmServiceState) { case INIT: return REQUESTED; @@ -582,7 +630,7 @@ public enum AppDeploymentState { default: } } - if(currentAppDeploymentState.isInRunningState()) { + if (currentAppDeploymentState.isInRunningState()) { switch (newNmServiceState) { case RESTART_INITIATED: return APPLICATION_RESTART_IN_PROGRESS; -- GitLab