diff --git a/src/main/java/net/geant/nmaas/orchestration/ScaleDirection.java b/src/main/java/net/geant/nmaas/orchestration/ScaleDirection.java new file mode 100644 index 0000000000000000000000000000000000000000..434ac8fa48fcdacb3e5fa88ad08220e916c04902 --- /dev/null +++ b/src/main/java/net/geant/nmaas/orchestration/ScaleDirection.java @@ -0,0 +1,5 @@ +package net.geant.nmaas.orchestration; + +public enum ScaleDirection { + UP, DOWN +} diff --git a/src/main/java/net/geant/nmaas/orchestration/events/app/AppScaleActionEvent.java b/src/main/java/net/geant/nmaas/orchestration/events/app/AppScaleActionEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..4f6f103d8026247f081203eeaaa39d6c74a0500e --- /dev/null +++ b/src/main/java/net/geant/nmaas/orchestration/events/app/AppScaleActionEvent.java @@ -0,0 +1,27 @@ +package net.geant.nmaas.orchestration.events.app; + +import net.geant.nmaas.orchestration.ScaleDirection; +import org.springframework.context.ApplicationEvent; +import net.geant.nmaas.orchestration.Identifier; + + +public class AppScaleActionEvent extends ApplicationEvent { + + private final Identifier deploymentId; + private final ScaleDirection direction; + + public AppScaleActionEvent(Object source, Identifier deploymentId, ScaleDirection direction) { + super(source); + this.deploymentId = deploymentId; + this.direction = direction; + } + + public Identifier getDeploymentId() { + return deploymentId; + } + + public ScaleDirection getDirection() { + return direction; + } + +} diff --git a/src/main/java/net/geant/nmaas/orchestration/tasks/app/AppScaleTask.java b/src/main/java/net/geant/nmaas/orchestration/tasks/app/AppScaleTask.java new file mode 100644 index 0000000000000000000000000000000000000000..6e3a84acfc568b41e0ef5469461e95953342ca93 --- /dev/null +++ b/src/main/java/net/geant/nmaas/orchestration/tasks/app/AppScaleTask.java @@ -0,0 +1,43 @@ +package net.geant.nmaas.orchestration.tasks.app; + +import lombok.RequiredArgsConstructor; +import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KServiceLifecycleManager; +import net.geant.nmaas.orchestration.AppDeploymentRepositoryManager; +import net.geant.nmaas.orchestration.entities.AppDeployment; +import net.geant.nmaas.orchestration.entities.AppDeploymentState; +import net.geant.nmaas.orchestration.events.app.AppScaleActionEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class AppScaleTask { + + private final KServiceLifecycleManager kServiceLifecycleManager; + private final AppDeploymentRepositoryManager appDeploymentRepositoryManager; + + + @EventListener + public void handleScaleEvent(AppScaleActionEvent event) { + + AppDeployment appDeployment = appDeploymentRepositoryManager.load(event.getDeploymentId()); + + switch (event.getDirection()) { + case DOWN: + appDeployment.setState(AppDeploymentState.SCALED_DOWN); + appDeploymentRepositoryManager.update(appDeployment); + + kServiceLifecycleManager.scaleDeployment(event.getDeploymentId(), 0); + + break; + case UP: + appDeployment.setState(AppDeploymentState.APPLICATION_CONFIGURED); + appDeploymentRepositoryManager.update(appDeployment); + + kServiceLifecycleManager.scaleDeployment(event.getDeploymentId(), 1); + + break; + } + + } +}