From 0cc25ed17c390687e89abf89d6a24a5b46e214fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernardo=20De=20Marco=20Gon=C3=A7alves?= Date: Mon, 8 Sep 2025 14:13:43 -0300 Subject: [PATCH 1/3] add new k8s cluster transition --- .../java/com/cloud/kubernetes/cluster/KubernetesCluster.java | 4 ++++ .../cluster/actionworkers/KubernetesClusterScaleWorker.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java index 591da077aec6..4731b5c16888 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java @@ -58,6 +58,7 @@ enum State { Stopping("Resources for the Kubernetes cluster are being destroyed"), Stopped("All resources for the Kubernetes cluster are destroyed, Kubernetes cluster may still have ephemeral resource like persistent volumes provisioned"), Scaling("Transient state in which resources are either getting scaled up/down"), + ScalingOfferingOfStoppedCluster("Transient state in which the service offerings of stopped clusters are getting scaled"), Upgrading("Transient state in which cluster is getting upgraded"), Alert("State to represent Kubernetes clusters which are not in expected desired state (operationally in active control place, stopped cluster VM's etc)."), Recovering("State in which Kubernetes cluster is recovering from alert state"), @@ -89,8 +90,11 @@ enum State { s_fsm.addTransition(State.Running, Event.AutoscaleRequested, State.Scaling); s_fsm.addTransition(State.Running, Event.ScaleUpRequested, State.Scaling); s_fsm.addTransition(State.Running, Event.ScaleDownRequested, State.Scaling); + s_fsm.addTransition(State.Stopped, Event.ScaleUpRequested, State.ScalingOfferingOfStoppedCluster); s_fsm.addTransition(State.Scaling, Event.OperationSucceeded, State.Running); s_fsm.addTransition(State.Scaling, Event.OperationFailed, State.Alert); + s_fsm.addTransition(State.ScalingOfferingOfStoppedCluster, Event.OperationSucceeded, State.Stopped); + s_fsm.addTransition(State.ScalingOfferingOfStoppedCluster, Event.OperationFailed, State.Alert); s_fsm.addTransition(State.Running, Event.UpgradeRequested, State.Upgrading); s_fsm.addTransition(State.Upgrading, Event.OperationSucceeded, State.Running); diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java index 4d50ef7e1f85..f7c2d4ba56a8 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java @@ -284,7 +284,8 @@ private void validateKubernetesClusterScaleSizeParameters() throws CloudRuntimeE private void scaleKubernetesClusterOffering() throws CloudRuntimeException { validateKubernetesClusterScaleOfferingParameters(); - if (!kubernetesCluster.getState().equals(KubernetesCluster.State.Scaling)) { + List scalingStates = List.of(KubernetesCluster.State.Scaling, KubernetesCluster.State.ScalingOfferingOfStoppedCluster); + if (!scalingStates.contains(kubernetesCluster.getState())) { stateTransitTo(kubernetesCluster.getId(), KubernetesCluster.Event.ScaleUpRequested); } if (KubernetesCluster.State.Created.equals(originalState)) { From 97b75358b1e33035597f874fa43e1b0bebd91d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernardo=20De=20Marco=20Gon=C3=A7alves?= Date: Tue, 9 Sep 2025 08:36:18 -0300 Subject: [PATCH 2/3] apply suggestion --- .../com/cloud/kubernetes/cluster/KubernetesCluster.java | 8 ++++---- .../actionworkers/KubernetesClusterScaleWorker.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java index 4731b5c16888..379a0db2ccd7 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesCluster.java @@ -58,7 +58,7 @@ enum State { Stopping("Resources for the Kubernetes cluster are being destroyed"), Stopped("All resources for the Kubernetes cluster are destroyed, Kubernetes cluster may still have ephemeral resource like persistent volumes provisioned"), Scaling("Transient state in which resources are either getting scaled up/down"), - ScalingOfferingOfStoppedCluster("Transient state in which the service offerings of stopped clusters are getting scaled"), + ScalingStoppedCluster("Transient state in which the service offerings of stopped clusters are getting scaled"), Upgrading("Transient state in which cluster is getting upgraded"), Alert("State to represent Kubernetes clusters which are not in expected desired state (operationally in active control place, stopped cluster VM's etc)."), Recovering("State in which Kubernetes cluster is recovering from alert state"), @@ -90,11 +90,11 @@ enum State { s_fsm.addTransition(State.Running, Event.AutoscaleRequested, State.Scaling); s_fsm.addTransition(State.Running, Event.ScaleUpRequested, State.Scaling); s_fsm.addTransition(State.Running, Event.ScaleDownRequested, State.Scaling); - s_fsm.addTransition(State.Stopped, Event.ScaleUpRequested, State.ScalingOfferingOfStoppedCluster); + s_fsm.addTransition(State.Stopped, Event.ScaleUpRequested, State.ScalingStoppedCluster); s_fsm.addTransition(State.Scaling, Event.OperationSucceeded, State.Running); s_fsm.addTransition(State.Scaling, Event.OperationFailed, State.Alert); - s_fsm.addTransition(State.ScalingOfferingOfStoppedCluster, Event.OperationSucceeded, State.Stopped); - s_fsm.addTransition(State.ScalingOfferingOfStoppedCluster, Event.OperationFailed, State.Alert); + s_fsm.addTransition(State.ScalingStoppedCluster, Event.OperationSucceeded, State.Stopped); + s_fsm.addTransition(State.ScalingStoppedCluster, Event.OperationFailed, State.Alert); s_fsm.addTransition(State.Running, Event.UpgradeRequested, State.Upgrading); s_fsm.addTransition(State.Upgrading, Event.OperationSucceeded, State.Running); diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java index f7c2d4ba56a8..6fb15088e9b6 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java @@ -284,7 +284,7 @@ private void validateKubernetesClusterScaleSizeParameters() throws CloudRuntimeE private void scaleKubernetesClusterOffering() throws CloudRuntimeException { validateKubernetesClusterScaleOfferingParameters(); - List scalingStates = List.of(KubernetesCluster.State.Scaling, KubernetesCluster.State.ScalingOfferingOfStoppedCluster); + List scalingStates = List.of(KubernetesCluster.State.Scaling, KubernetesCluster.State.ScalingStoppedCluster); if (!scalingStates.contains(kubernetesCluster.getState())) { stateTransitTo(kubernetesCluster.getId(), KubernetesCluster.Event.ScaleUpRequested); } From 6dd54e68a2939c1b07ec04bf64ffc33da9d40d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernardo=20De=20Marco=20Gon=C3=A7alves?= Date: Wed, 10 Sep 2025 12:08:31 -0300 Subject: [PATCH 3/3] apply suggestion --- .../cluster/actionworkers/KubernetesClusterScaleWorker.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java index 6fb15088e9b6..f6828e3b2039 100644 --- a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java +++ b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterScaleWorker.java @@ -476,6 +476,8 @@ public boolean scaleCluster() throws CloudRuntimeException { scaleKubernetesClusterOffering(); } else if (clusterSizeScalingNeeded) { scaleKubernetesClusterSize(); + } else { + return true; } stateTransitTo(kubernetesCluster.getId(), KubernetesCluster.Event.OperationSucceeded); return true;