nvazquez commented on code in PR #9102:
URL: https://github.com/apache/cloudstack/pull/9102#discussion_r2110706602


##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -1041,37 +1251,53 @@ private void 
validateKubernetesClusterScaleParameters(ScaleKubernetesClusterCmd
             }
         }
 
-        ServiceOffering serviceOffering = null;
-        if (serviceOfferingId != null) {
-            serviceOffering = serviceOfferingDao.findById(serviceOfferingId);
-            if (serviceOffering == null) {
-                throw new InvalidParameterValueException("Failed to find 
service offering ID: " + serviceOfferingId);
-            } else {
-                if (serviceOffering.isDynamic()) {
-                    throw new 
InvalidParameterValueException(String.format("Custom service offerings are not 
supported for Kubernetes clusters. Kubernetes cluster : %s, service offering : 
%s", kubernetesCluster.getName(), serviceOffering.getName()));
-                }
-                if (serviceOffering.getCpu() < MIN_KUBERNETES_CLUSTER_NODE_CPU 
|| serviceOffering.getRamSize() < MIN_KUBERNETES_CLUSTER_NODE_RAM_SIZE) {
-                    throw new 
InvalidParameterValueException(String.format("Kubernetes cluster : %s cannot be 
scaled with service offering : %s, Kubernetes cluster template(CoreOS) needs 
minimum %d vCPUs and %d MB RAM",
-                            kubernetesCluster.getName(), 
serviceOffering.getName(), MIN_KUBERNETES_CLUSTER_NODE_CPU, 
MIN_KUBERNETES_CLUSTER_NODE_RAM_SIZE));
-                }
-                if (serviceOffering.getCpu() < clusterVersion.getMinimumCpu()) 
{
-                    throw new 
InvalidParameterValueException(String.format("Kubernetes cluster : %s cannot be 
scaled with service offering : %s, associated Kubernetes version : %s needs 
minimum %d vCPUs",
-                            kubernetesCluster.getName(), 
serviceOffering.getName(), clusterVersion.getName(), 
clusterVersion.getMinimumCpu()));
+        validateServiceOfferingsForNodeTypesScale(serviceOfferingNodeTypeMap, 
defaultServiceOfferingId, kubernetesCluster, clusterVersion);
+
+        validateKubernetesClusterScaleSize(kubernetesCluster, clusterSize, 
maxClusterSize, zone);
+    }
+
+    protected void validateServiceOfferingsForNodeTypesScale(Map<String, Long> 
map, Long defaultServiceOfferingId, KubernetesClusterVO kubernetesCluster, 
KubernetesSupportedVersion clusterVersion) {
+        for (String key : CLUSTER_NODES_TYPES_LIST) {
+            Long serviceOfferingId = map.getOrDefault(key, 
defaultServiceOfferingId);
+            if (serviceOfferingId != null) {
+                ServiceOffering serviceOffering = 
serviceOfferingDao.findById(serviceOfferingId);
+                if (serviceOffering == null) {
+                    throw new InvalidParameterValueException("Failed to find 
service offering ID: " + serviceOfferingId);
                 }
-                if (serviceOffering.getRamSize() < 
clusterVersion.getMinimumRamSize()) {
-                    throw new 
InvalidParameterValueException(String.format("Kubernetes cluster : %s cannot be 
scaled with service offering : %s, associated Kubernetes version : %s needs 
minimum %d MB RAM",
-                            kubernetesCluster.getName(), 
serviceOffering.getName(), clusterVersion.getName(), 
clusterVersion.getMinimumRamSize()));
+                checkServiceOfferingForNodesScale(serviceOffering, 
kubernetesCluster, clusterVersion);
+                final ServiceOffering existingServiceOffering = 
serviceOfferingDao.findById(kubernetesCluster.getServiceOfferingId());
+                if 
(KubernetesCluster.State.Running.equals(kubernetesCluster.getState()) && 
(serviceOffering.getRamSize() < existingServiceOffering.getRamSize() ||
+                        serviceOffering.getCpu() * serviceOffering.getSpeed() 
< existingServiceOffering.getCpu() * existingServiceOffering.getSpeed())) {
+                    logAndThrow(Level.WARN, String.format("Kubernetes cluster 
cannot be scaled down for service offering. Service offering : %s offers lesser 
resources as compared to service offering : %s of Kubernetes cluster : %s",
+                            serviceOffering.getName(), 
existingServiceOffering.getName(), kubernetesCluster.getName()));

Review Comment:
   Thanks, fixed



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@cloudstack.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to