Pearl1594 commented on code in PR #7515:
URL: https://github.com/apache/cloudstack/pull/7515#discussion_r1191250311


##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -600,8 +609,66 @@ private void validateEndpointUrl() {
             throw new InvalidParameterValueException(error);
         }
     }
+    private void validateUnmanagedKubernetesClusterCreateParameters(final 
CreateKubernetesClusterCmd cmd) throws CloudRuntimeException {
+        final String name = cmd.getName();
+        final Long zoneId = cmd.getZoneId();
+        final Account owner = 
accountService.getActiveAccountById(cmd.getEntityOwnerId());
+        final Long networkId = cmd.getNetworkId();
+        final String sshKeyPair = cmd.getSSHKeyPairName();
+        final String dockerRegistryUserName = cmd.getDockerRegistryUserName();
+        final String dockerRegistryPassword = cmd.getDockerRegistryPassword();
+        final String dockerRegistryUrl = cmd.getDockerRegistryUrl();
+        final Long nodeRootDiskSize = cmd.getNodeRootDiskSize();
+        final String externalLoadBalancerIpAddress = 
cmd.getExternalLoadBalancerIpAddress();
+
+        if (name == null || name.isEmpty()) {
+            throw new InvalidParameterValueException("Invalid name for the 
Kubernetes cluster name:" + name);
+        }
+
+        DataCenter zone = dataCenterDao.findById(zoneId);
+        if (zone == null) {
+            throw new InvalidParameterValueException("Unable to find zone by 
ID: " + zoneId);
+        }
+
+        if (zone.getAllocationState() == Grouping.AllocationState.Disabled) {
+            throw new PermissionDeniedException(String.format("Cannot perform 
this operation, zone ID: %s is currently disabled", zone.getUuid()));
+        }
+
+        if (sshKeyPair != null && !sshKeyPair.isEmpty()) {
+            SSHKeyPairVO sshKeyPairVO = 
sshKeyPairDao.findByName(owner.getAccountId(), owner.getDomainId(), sshKeyPair);
+            if (sshKeyPairVO == null) {
+                throw new InvalidParameterValueException(String.format("Given 
SSH key pair with name: %s was not found for the account %s", sshKeyPair, 
owner.getAccountName()));
+            }
+        }
+
+        if (nodeRootDiskSize != null && nodeRootDiskSize <= 0) {
+            throw new InvalidParameterValueException(String.format("Invalid 
value for %s", ApiConstants.NODE_ROOT_DISK_SIZE));
+        }
 
-    private void validateKubernetesClusterCreateParameters(final 
CreateKubernetesClusterCmd cmd) throws CloudRuntimeException {
+        validateDockerRegistryParams(dockerRegistryUserName, 
dockerRegistryPassword, dockerRegistryUrl);
+
+        Network network = null;
+        if (networkId != null) {
+            network = networkService.getNetwork(networkId);
+            if (network == null) {
+                throw new InvalidParameterValueException("Unable to find 
network with given ID");
+            }
+        }
+
+        if (StringUtils.isNotEmpty(externalLoadBalancerIpAddress)) {
+            if (!NetUtils.isValidIp4(externalLoadBalancerIpAddress) && 
!NetUtils.isValidIp6(externalLoadBalancerIpAddress)) {
+                throw new InvalidParameterValueException("Invalid external 
load balancer IP address");
+            }
+            if (network == null) {
+                throw new InvalidParameterValueException(String.format("%s 
parameter must be specified along with %s parameter", 
ApiConstants.EXTERNAL_LOAD_BALANCER_IP_ADDRESS, ApiConstants.NETWORK_ID));
+            }
+            if (Network.GuestType.Shared.equals(network.getGuestType())) {
+                throw new InvalidParameterValueException(String.format("%s 
parameter must be specified along with %s type of network", 
ApiConstants.EXTERNAL_LOAD_BALANCER_IP_ADDRESS, 
Network.GuestType.Shared.toString()));
+            }

Review Comment:
   Correct me if I'm wrong, but should this check be negated or the exception 
should be different?



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -600,8 +609,66 @@ private void validateEndpointUrl() {
             throw new InvalidParameterValueException(error);
         }
     }
+    private void validateUnmanagedKubernetesClusterCreateParameters(final 
CreateKubernetesClusterCmd cmd) throws CloudRuntimeException {
+        final String name = cmd.getName();
+        final Long zoneId = cmd.getZoneId();
+        final Account owner = 
accountService.getActiveAccountById(cmd.getEntityOwnerId());
+        final Long networkId = cmd.getNetworkId();
+        final String sshKeyPair = cmd.getSSHKeyPairName();
+        final String dockerRegistryUserName = cmd.getDockerRegistryUserName();
+        final String dockerRegistryPassword = cmd.getDockerRegistryPassword();
+        final String dockerRegistryUrl = cmd.getDockerRegistryUrl();
+        final Long nodeRootDiskSize = cmd.getNodeRootDiskSize();
+        final String externalLoadBalancerIpAddress = 
cmd.getExternalLoadBalancerIpAddress();
+
+        if (name == null || name.isEmpty()) {
+            throw new InvalidParameterValueException("Invalid name for the 
Kubernetes cluster name:" + name);

Review Comment:
   nit: May be we could just say missing cluster name or something around those 
lines, coz this would just print null for the name



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -1019,12 +1093,64 @@ protected boolean stateTransitTo(long 
kubernetesClusterId, KubernetesCluster.Eve
     }
 
     @Override
-    public KubernetesCluster 
createKubernetesCluster(CreateKubernetesClusterCmd cmd) throws 
CloudRuntimeException {
+    public KubernetesCluster 
createUnmanagedKubernetesCluster(CreateKubernetesClusterCmd cmd) throws 
CloudRuntimeException {
+        if (!KubernetesServiceEnabled.value()) {
+            logAndThrow(Level.ERROR, "Kubernetes Service plugin is disabled");
+        }
+
+        validateUnmanagedKubernetesClusterCreateParameters(cmd);
+
+        final DataCenter zone = dataCenterDao.findById(cmd.getZoneId());
+        final long controlNodeCount = cmd.getControlNodes();
+        final long clusterSize = 
Objects.requireNonNullElse(cmd.getClusterSize(), 0L);
+        final ServiceOffering serviceOffering = 
serviceOfferingDao.findById(cmd.getServiceOfferingId());
+        final Account owner = 
accountService.getActiveAccountById(cmd.getEntityOwnerId());
+        final KubernetesSupportedVersion clusterKubernetesVersion = 
kubernetesSupportedVersionDao.findById(cmd.getKubernetesVersionId());
+
+        final Network network = networkDao.findById(cmd.getNetworkId());
+        long cores;
+        long memory;
+        Long serviceOfferingId = null;
+        if (serviceOffering != null) {
+            serviceOfferingId = serviceOffering.getId();
+            cores = serviceOffering.getCpu() * (controlNodeCount + 
clusterSize);
+            memory = serviceOffering.getRamSize() * (controlNodeCount + 
clusterSize);
+        } else {
+            cores = 0;
+            memory = 0;
+        }
+
+        final Long finalServiceOfferingId = serviceOfferingId;
+        final Long defaultNetworkId = network == null ? null : network.getId();
+        final Long clusterKubernetesVersionId = clusterKubernetesVersion == 
null ? null : clusterKubernetesVersion.getId();
+        final KubernetesClusterVO cluster = Transaction.execute(new 
TransactionCallback<KubernetesClusterVO>() {
+            @Override
+            public KubernetesClusterVO doInTransaction(TransactionStatus 
status) {
+                KubernetesClusterVO newCluster = new 
KubernetesClusterVO(cmd.getName(), cmd.getDisplayName(), zone.getId(), 
clusterKubernetesVersionId,
+                        finalServiceOfferingId, null, defaultNetworkId, 
owner.getDomainId(),
+                        owner.getAccountId(), controlNodeCount, clusterSize, 
KubernetesCluster.State.Running, cmd.getSSHKeyPairName(), cores, memory,
+                        cmd.getNodeRootDiskSize(), "", false);
+                kubernetesClusterDao.persist(newCluster);
+                return newCluster;
+            }
+        });
+
+        addKubernetesClusterDetails(cluster, network, cmd);
+
+        if (LOGGER.isInfoEnabled()) {
+            LOGGER.info(String.format("Kubernetes cluster name: %s and ID: %s 
has been created", cluster.getName(), cluster.getUuid()));

Review Comment:
   ```suggestion
               LOGGER.info(String.format("Kubernetes cluster with name: %s and 
ID: %s has been created", cluster.getName(), cluster.getUuid()));
   ```



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -1111,6 +1238,10 @@ public boolean startKubernetesCluster(long 
kubernetesClusterId, boolean onCreate
         if (kubernetesCluster == null) {
             throw new InvalidParameterValueException("Failed to find 
Kubernetes cluster with given ID");
         }
+        if (!kubernetesCluster.getManaged()) {
+            LOGGER.debug(String.format("Kubernetes cluster : %s is not managed 
by CloudStack", kubernetesCluster.getName()));
+            return true;

Review Comment:
   can we add what operation is not supported for un-managed clusters



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -1329,6 +1479,82 @@ public boolean 
upgradeKubernetesCluster(UpgradeKubernetesClusterCmd cmd) throws
         return upgradeWorker.upgradeCluster();
     }
 
+    @Override
+    public boolean addVmsToCluster(AddVmsToKubernetesClusterCmd cmd) {
+        if (!KubernetesServiceEnabled.value()) {
+            logAndThrow(Level.ERROR, "Kubernetes Service plugin is disabled");
+        }
+        List<Long> vmIds = cmd.getVmIds();
+        Long clusterId = cmd.getId();
+
+        if (vmIds == null || vmIds.isEmpty() || clusterId == null) {
+            throw new InvalidParameterValueException("Invalid parameters 
specified");
+        }
+
+        KubernetesClusterVO kubernetesCluster = 
kubernetesClusterDao.findById(clusterId);
+        if (kubernetesCluster == null) {
+            throw new InvalidParameterValueException("Invalid Kubernetes 
cluster ID specified");
+        }
+        // User should have access to both VM and Kubernetes cluster
+        accountManager.checkAccess(CallContext.current().getCallingAccount(), 
SecurityChecker.AccessType.OperateEntry, false, kubernetesCluster);
+        for (Long vmId : vmIds) {
+            VMInstanceVO vmInstance = vmInstanceDao.findById(vmId);
+            if (vmInstance == null) {
+                throw new InvalidParameterValueException("Invalid VM ID 
specified");
+            }
+            
accountManager.checkAccess(CallContext.current().getCallingAccount(), 
SecurityChecker.AccessType.OperateEntry, false, vmInstance);
+        }
+
+        if (kubernetesCluster.getManaged()) {
+            throw new InvalidParameterValueException("VM cannot be added to a 
managed Kubernetes cluster");
+        }
+
+        KubernetesClusterVmMapVO clusterVmMap = null;
+        List<KubernetesClusterVmMapVO> clusterVmMapList = 
kubernetesClusterVmMapDao.listByClusterIdAndVmIdsIn(clusterId, vmIds);
+        ArrayList<Long> alreadyExistingVmIds = new ArrayList<>();
+        for (KubernetesClusterVmMapVO clusterVmMapVO : clusterVmMapList) {
+            alreadyExistingVmIds.add(clusterVmMapVO.getVmId());
+        }
+
+        for (Long vmId : vmIds) {
+            if (alreadyExistingVmIds.contains(vmId)) {
+                continue;
+            }
+            clusterVmMap = new KubernetesClusterVmMapVO(clusterId, vmId, 
cmd.isControlNode());
+            kubernetesClusterVmMapDao.persist(clusterVmMap);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean removeVmsFromCluster(RemoveVmsFromKubernetesClusterCmd cmd) 
{
+        if (!KubernetesServiceEnabled.value()) {
+            logAndThrow(Level.ERROR, "Kubernetes Service plugin is disabled");
+        }
+        List<Long> vmIds = cmd.getVmIds();
+        Long clusterId = cmd.getId();
+
+        if (vmIds == null || vmIds.isEmpty() || clusterId == null) {
+            throw new InvalidParameterValueException("Invalid parameters 
specified");
+        }

Review Comment:
   same here, may be worth specifying what argument is missing 



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -832,6 +900,9 @@ private void 
validateKubernetesClusterScaleParameters(ScaleKubernetesClusterCmd
 
         Account caller = CallContext.current().getCallingAccount();
         accountManager.checkAccess(caller, 
SecurityChecker.AccessType.OperateEntry, false, kubernetesCluster);
+        if (!kubernetesCluster.getManaged()) {
+            throw new InvalidParameterValueException(String.format("Kubernetes 
cluster %s is not managed by Apache CloudStack", kubernetesCluster.getName()));

Review Comment:
   Should we move this check right up, so as to first check if it's a managed 
cluster or not and then proceed with checking other params? Also, would it make 
sense to add that Scaling an unmanaged cluster is not supported via Cloudstack?



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -1329,6 +1479,82 @@ public boolean 
upgradeKubernetesCluster(UpgradeKubernetesClusterCmd cmd) throws
         return upgradeWorker.upgradeCluster();
     }
 
+    @Override
+    public boolean addVmsToCluster(AddVmsToKubernetesClusterCmd cmd) {
+        if (!KubernetesServiceEnabled.value()) {
+            logAndThrow(Level.ERROR, "Kubernetes Service plugin is disabled");
+        }
+        List<Long> vmIds = cmd.getVmIds();
+        Long clusterId = cmd.getId();
+
+        if (vmIds == null || vmIds.isEmpty() || clusterId == null) {
+            throw new InvalidParameterValueException("Invalid parameters 
specified");
+        }
+
+        KubernetesClusterVO kubernetesCluster = 
kubernetesClusterDao.findById(clusterId);
+        if (kubernetesCluster == null) {
+            throw new InvalidParameterValueException("Invalid Kubernetes 
cluster ID specified");
+        }
+        // User should have access to both VM and Kubernetes cluster
+        accountManager.checkAccess(CallContext.current().getCallingAccount(), 
SecurityChecker.AccessType.OperateEntry, false, kubernetesCluster);
+        for (Long vmId : vmIds) {
+            VMInstanceVO vmInstance = vmInstanceDao.findById(vmId);
+            if (vmInstance == null) {
+                throw new InvalidParameterValueException("Invalid VM ID 
specified");
+            }
+            
accountManager.checkAccess(CallContext.current().getCallingAccount(), 
SecurityChecker.AccessType.OperateEntry, false, vmInstance);
+        }
+
+        if (kubernetesCluster.getManaged()) {
+            throw new InvalidParameterValueException("VM cannot be added to a 
managed Kubernetes cluster");
+        }
+
+        KubernetesClusterVmMapVO clusterVmMap = null;
+        List<KubernetesClusterVmMapVO> clusterVmMapList = 
kubernetesClusterVmMapDao.listByClusterIdAndVmIdsIn(clusterId, vmIds);
+        ArrayList<Long> alreadyExistingVmIds = new ArrayList<>();
+        for (KubernetesClusterVmMapVO clusterVmMapVO : clusterVmMapList) {
+            alreadyExistingVmIds.add(clusterVmMapVO.getVmId());
+        }
+
+        for (Long vmId : vmIds) {

Review Comment:
   nit: maybe we could use vmIds.removeAll(alreadyExistingVmIds) to get the VMs 
that aren't existing 



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -1329,6 +1479,82 @@ public boolean 
upgradeKubernetesCluster(UpgradeKubernetesClusterCmd cmd) throws
         return upgradeWorker.upgradeCluster();
     }
 
+    @Override
+    public boolean addVmsToCluster(AddVmsToKubernetesClusterCmd cmd) {
+        if (!KubernetesServiceEnabled.value()) {
+            logAndThrow(Level.ERROR, "Kubernetes Service plugin is disabled");
+        }
+        List<Long> vmIds = cmd.getVmIds();
+        Long clusterId = cmd.getId();
+
+        if (vmIds == null || vmIds.isEmpty() || clusterId == null) {
+            throw new InvalidParameterValueException("Invalid parameters 
specified");

Review Comment:
   could be helpful to specify what parameter wasn't passed, i.e., vmIDs or 
clusterID



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -1019,12 +1093,64 @@ protected boolean stateTransitTo(long 
kubernetesClusterId, KubernetesCluster.Eve
     }
 
     @Override
-    public KubernetesCluster 
createKubernetesCluster(CreateKubernetesClusterCmd cmd) throws 
CloudRuntimeException {
+    public KubernetesCluster 
createUnmanagedKubernetesCluster(CreateKubernetesClusterCmd cmd) throws 
CloudRuntimeException {
+        if (!KubernetesServiceEnabled.value()) {
+            logAndThrow(Level.ERROR, "Kubernetes Service plugin is disabled");
+        }
+
+        validateUnmanagedKubernetesClusterCreateParameters(cmd);
+
+        final DataCenter zone = dataCenterDao.findById(cmd.getZoneId());
+        final long controlNodeCount = cmd.getControlNodes();
+        final long clusterSize = 
Objects.requireNonNullElse(cmd.getClusterSize(), 0L);
+        final ServiceOffering serviceOffering = 
serviceOfferingDao.findById(cmd.getServiceOfferingId());
+        final Account owner = 
accountService.getActiveAccountById(cmd.getEntityOwnerId());
+        final KubernetesSupportedVersion clusterKubernetesVersion = 
kubernetesSupportedVersionDao.findById(cmd.getKubernetesVersionId());
+
+        final Network network = networkDao.findById(cmd.getNetworkId());
+        long cores;
+        long memory;
+        Long serviceOfferingId = null;
+        if (serviceOffering != null) {
+            serviceOfferingId = serviceOffering.getId();
+            cores = serviceOffering.getCpu() * (controlNodeCount + 
clusterSize);
+            memory = serviceOffering.getRamSize() * (controlNodeCount + 
clusterSize);
+        } else {

Review Comment:
   nit: can we initialize cores and memory to 0, and do away with the else 
block?



##########
plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/cluster/CreateKubernetesClusterCmd.java:
##########
@@ -76,13 +76,13 @@ public class CreateKubernetesClusterCmd extends 
BaseAsyncCreateCmd {
             description = "availability zone in which Kubernetes cluster to be 
launched")
     private Long zoneId;
 
-    @Parameter(name = ApiConstants.KUBERNETES_VERSION_ID, type = 
CommandType.UUID, entityType = KubernetesSupportedVersionResponse.class, 
required = true,
+    @Parameter(name = ApiConstants.KUBERNETES_VERSION_ID, type = 
CommandType.UUID, entityType = KubernetesSupportedVersionResponse.class,

Review Comment:
   I believe we can add since to parameters too.. 



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -1329,6 +1479,82 @@ public boolean 
upgradeKubernetesCluster(UpgradeKubernetesClusterCmd cmd) throws
         return upgradeWorker.upgradeCluster();
     }
 
+    @Override
+    public boolean addVmsToCluster(AddVmsToKubernetesClusterCmd cmd) {
+        if (!KubernetesServiceEnabled.value()) {
+            logAndThrow(Level.ERROR, "Kubernetes Service plugin is disabled");
+        }
+        List<Long> vmIds = cmd.getVmIds();
+        Long clusterId = cmd.getId();
+
+        if (vmIds == null || vmIds.isEmpty() || clusterId == null) {
+            throw new InvalidParameterValueException("Invalid parameters 
specified");
+        }
+
+        KubernetesClusterVO kubernetesCluster = 
kubernetesClusterDao.findById(clusterId);
+        if (kubernetesCluster == null) {
+            throw new InvalidParameterValueException("Invalid Kubernetes 
cluster ID specified");
+        }
+        // User should have access to both VM and Kubernetes cluster
+        accountManager.checkAccess(CallContext.current().getCallingAccount(), 
SecurityChecker.AccessType.OperateEntry, false, kubernetesCluster);
+        for (Long vmId : vmIds) {
+            VMInstanceVO vmInstance = vmInstanceDao.findById(vmId);
+            if (vmInstance == null) {
+                throw new InvalidParameterValueException("Invalid VM ID 
specified");
+            }
+            
accountManager.checkAccess(CallContext.current().getCallingAccount(), 
SecurityChecker.AccessType.OperateEntry, false, vmInstance);
+        }
+
+        if (kubernetesCluster.getManaged()) {
+            throw new InvalidParameterValueException("VM cannot be added to a 
managed Kubernetes cluster");

Review Comment:
   can we move this check before the VM ids check, to fail faster, in case the 
cluster is of managed type



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -600,8 +609,66 @@ private void validateEndpointUrl() {
             throw new InvalidParameterValueException(error);
         }
     }
+    private void validateUnmanagedKubernetesClusterCreateParameters(final 
CreateKubernetesClusterCmd cmd) throws CloudRuntimeException {
+        final String name = cmd.getName();
+        final Long zoneId = cmd.getZoneId();
+        final Account owner = 
accountService.getActiveAccountById(cmd.getEntityOwnerId());
+        final Long networkId = cmd.getNetworkId();
+        final String sshKeyPair = cmd.getSSHKeyPairName();
+        final String dockerRegistryUserName = cmd.getDockerRegistryUserName();
+        final String dockerRegistryPassword = cmd.getDockerRegistryPassword();
+        final String dockerRegistryUrl = cmd.getDockerRegistryUrl();
+        final Long nodeRootDiskSize = cmd.getNodeRootDiskSize();
+        final String externalLoadBalancerIpAddress = 
cmd.getExternalLoadBalancerIpAddress();
+
+        if (name == null || name.isEmpty()) {
+            throw new InvalidParameterValueException("Invalid name for the 
Kubernetes cluster name:" + name);
+        }
+
+        DataCenter zone = dataCenterDao.findById(zoneId);
+        if (zone == null) {
+            throw new InvalidParameterValueException("Unable to find zone by 
ID: " + zoneId);
+        }
+
+        if (zone.getAllocationState() == Grouping.AllocationState.Disabled) {
+            throw new PermissionDeniedException(String.format("Cannot perform 
this operation, zone ID: %s is currently disabled", zone.getUuid()));
+        }
+
+        if (sshKeyPair != null && !sshKeyPair.isEmpty()) {

Review Comment:
   Strings.isNullOrEmpty()
   ```suggestion
           if (!Strings.isNullOrEmpty(sshKeyPair)) {
   ```



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -1178,6 +1309,9 @@ public boolean stopKubernetesCluster(long 
kubernetesClusterId) throws CloudRunti
         if (kubernetesCluster == null) {
             throw new InvalidParameterValueException("Failed to find 
Kubernetes cluster with given ID");
         }
+        if (!kubernetesCluster.getManaged()) {
+            throw new InvalidParameterValueException(String.format("Kubernetes 
cluster : %s is not managed by CloudStack", kubernetesCluster.getName()));
+        }

Review Comment:
   can we add what operation is not supported for un-managed clusters



##########
plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java:
##########
@@ -961,6 +1032,9 @@ private void 
validateKubernetesClusterUpgradeParameters(UpgradeKubernetesCluster
             throw new InvalidParameterValueException("Invalid Kubernetes 
cluster ID");
         }
         accountManager.checkAccess(CallContext.current().getCallingAccount(), 
SecurityChecker.AccessType.OperateEntry, false, kubernetesCluster);
+        if (!kubernetesCluster.getManaged()) {
+            throw new InvalidParameterValueException(String.format("Kubernetes 
cluster : %s is not managed by Apache CloudStack", 
kubernetesCluster.getName()));
+        }

Review Comment:
   Same here, Should we move this check right up, so as to first check if it's 
a managed cluster or not and then proceed with checking other params? Also, may 
be worth adding the operation that isn't supported via CloudStack for unmanaged 
clusters?
    



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to