This is an automated email from the ASF dual-hosted git repository.

nvazquez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 2c8c476  CKS: Support deployment of CKS clusters on Advanced zones 
with security groups (#6132)
2c8c476 is described below

commit 2c8c4766562987f4396439226b87758ee5dc6ccd
Author: Pearl Dsilva <[email protected]>
AuthorDate: Fri Apr 1 21:49:54 2022 +0530

    CKS: Support deployment of CKS clusters on Advanced zones with security 
groups (#6132)
    
    * CKS: Support deployment of CKS clusters on Advanced zones with security 
groups
    
    * use available constant
    
    * address comments -
    - Ingress sg rule for port 22 & 6443
    - Use constant to define securityGroup Name
    - rename variable name from type -> vmType
    
    * unique name for security group + foreign key
    
    * use constants
---
 .../network/security/SecurityGroupService.java     |  4 +++
 api/src/main/java/com/cloud/vm/UserVmService.java  | 12 ++------
 .../resources/META-INF/db/schema-41610to41700.sql  |  3 ++
 .../kubernetes/cluster/KubernetesCluster.java      |  1 +
 .../cluster/KubernetesClusterManagerImpl.java      | 30 ++++++++++++++++++
 .../kubernetes/cluster/KubernetesClusterVO.java    | 11 +++++++
 .../KubernetesClusterActionWorker.java             |  3 ++
 ...ernetesClusterResourceModifierActionWorker.java | 18 ++++++++---
 .../KubernetesClusterStartWorker.java              | 36 +++++++++++++++++-----
 .../com/cloud/network/as/AutoScaleManagerImpl.java |  4 +--
 .../network/security/SecurityGroupManagerImpl.java |  2 +-
 .../main/java/com/cloud/vm/UserVmManagerImpl.java  | 25 ++++++++-------
 12 files changed, 111 insertions(+), 38 deletions(-)

diff --git 
a/api/src/main/java/com/cloud/network/security/SecurityGroupService.java 
b/api/src/main/java/com/cloud/network/security/SecurityGroupService.java
index dce7b3d..ee32c0b 100644
--- a/api/src/main/java/com/cloud/network/security/SecurityGroupService.java
+++ b/api/src/main/java/com/cloud/network/security/SecurityGroupService.java
@@ -17,6 +17,7 @@
 package com.cloud.network.security;
 
 import java.util.List;
+import java.util.Map;
 
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.PermissionDeniedException;
@@ -48,6 +49,9 @@ public interface SecurityGroupService {
 
     public List<? extends SecurityRule> 
authorizeSecurityGroupIngress(AuthorizeSecurityGroupIngressCmd cmd);
 
+    List<? extends SecurityRule> authorizeSecurityGroupRule(final Long 
securityGroupId, String protocol, Integer startPort,
+        Integer endPort, Integer icmpType, Integer icmpCode, final 
List<String> cidrList, Map groupList, final SecurityRule.SecurityRuleType 
ruleType);
+
     public List<? extends SecurityRule> 
authorizeSecurityGroupEgress(AuthorizeSecurityGroupEgressCmd cmd);
 
     public boolean securityGroupRulesForVmSecIp(long nicId, String 
secondaryIp, boolean ruleAction);
diff --git a/api/src/main/java/com/cloud/vm/UserVmService.java 
b/api/src/main/java/com/cloud/vm/UserVmService.java
index 2f6888a..e4927bf 100644
--- a/api/src/main/java/com/cloud/vm/UserVmService.java
+++ b/api/src/main/java/com/cloud/vm/UserVmService.java
@@ -264,9 +264,6 @@ public interface UserVmService {
      *            base64 encoded before adding it to the request. Currently 
only
      *            HTTP GET is supported. Using HTTP GET (via querystring), you
      *            can send up to 2KB of data after base64 encoding
-     * @param sshKeyPair
-     *            - name of the ssh key pair used to login to the virtual
-     *            machine
      * @param requestedIps
      *            TODO
      * @param defaultIps
@@ -274,8 +271,6 @@ public interface UserVmService {
      * @param displayVm
      *            - Boolean flag whether to the display the vm to the end user 
or not
      * @param affinityGroupIdList
-     * @param memory
-     * @param cpuNumber
      * @param customId
      * @param dhcpOptionMap
      *             - Maps the dhcp option code and the dhcp value to the 
network uuid
@@ -284,6 +279,7 @@ public interface UserVmService {
      *             an optional parameter that creates additional data disks 
for the virtual machine
      *             For each of the templates in the map, a data disk will be 
created from the corresponding
      *             disk offering obtained from the map
+     * @param type
      * @return UserVm object if successful.
      *
      * @throws InsufficientCapacityException
@@ -299,9 +295,7 @@ public interface UserVmService {
         List<Long> securityGroupIdList, Account owner, String hostName, String 
displayName, Long diskOfferingId, Long diskSize, String group, HypervisorType 
hypervisor,
         HTTPMethod httpmethod, String userData, List<String> sshKeyPairs, 
Map<Long, IpAddresses> requestedIps, IpAddresses defaultIps, Boolean displayVm, 
String keyboard,
         List<Long> affinityGroupIdList, Map<String, String> customParameters, 
String customId, Map<String, Map<Integer, String>> dhcpOptionMap,
-        Map<Long, DiskOffering> dataDiskTemplateToDiskOfferingMap,
-        Map<String, String> userVmOVFProperties, boolean 
dynamicScalingEnabled, Long overrideDiskOfferingId) throws 
InsufficientCapacityException,
-        ConcurrentOperationException, ResourceUnavailableException, 
StorageUnavailableException, ResourceAllocationException;
+        Map<Long, DiskOffering> dataDiskTemplateToDiskOfferingMap, Map<String, 
String> userVmOVFProperties, boolean dynamicScalingEnabled, Long 
overrideDiskOfferingId, String vmType) throws InsufficientCapacityException, 
ConcurrentOperationException, ResourceUnavailableException, 
StorageUnavailableException, ResourceAllocationException;
 
     /**
      * Creates a User VM in Advanced Zone (Security Group feature is disabled)
@@ -379,7 +373,7 @@ public interface UserVmService {
         String hostName, String displayName, Long diskOfferingId, Long 
diskSize, String group, HypervisorType hypervisor, HTTPMethod httpmethod, 
String userData,
         List<String> sshKeyPairs, Map<Long, IpAddresses> requestedIps, 
IpAddresses defaultIps, Boolean displayVm, String keyboard, List<Long> 
affinityGroupIdList,
         Map<String, String> customParameters, String customId, Map<String, 
Map<Integer, String>> dhcpOptionMap, Map<Long, DiskOffering> 
dataDiskTemplateToDiskOfferingMap,
-        Map<String, String> templateOvfPropertiesMap, boolean 
dynamicScalingEnabled, String type, Long overrideDiskOfferingId)
+        Map<String, String> templateOvfPropertiesMap, boolean 
dynamicScalingEnabled, String vmType, Long overrideDiskOfferingId)
 
         throws InsufficientCapacityException, ConcurrentOperationException, 
ResourceUnavailableException, StorageUnavailableException, 
ResourceAllocationException;
 
diff --git 
a/engine/schema/src/main/resources/META-INF/db/schema-41610to41700.sql 
b/engine/schema/src/main/resources/META-INF/db/schema-41610to41700.sql
index fc53758..a28f1cc 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-41610to41700.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41610to41700.sql
@@ -652,3 +652,6 @@ INSERT INTO `cloud`.`user_vm_details`(`vm_id`, `name`, 
`value`)
         INNER JOIN `cloud`.`vm_instance` ON vm_instance.id = 
user_vm_details.vm_id
         WHERE ssh_keypairs.account_id = vm_instance.account_id;
 
+ALTER TABLE `cloud`.`kubernetes_cluster` ADD COLUMN `security_group_id` bigint 
unsigned DEFAULT NULL,
+ADD CONSTRAINT `fk_kubernetes_cluster__security_group_id` FOREIGN KEY 
`fk_kubernetes_cluster__security_group_id`(`security_group_id`) REFERENCES 
`security_group`(`id`) ON DELETE CASCADE;
+
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 3be959b..b8f399b 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
@@ -136,4 +136,5 @@ public interface KubernetesCluster extends 
ControlledEntity, com.cloud.utils.fsm
     boolean getAutoscalingEnabled();
     Long getMinSize();
     Long getMaxSize();
+    Long getSecurityGroupId();
 }
diff --git 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java
 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java
index e4e2a7d..ce1e511 100644
--- 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java
+++ 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java
@@ -70,6 +70,10 @@ import com.cloud.network.dao.NetworkVO;
 import com.cloud.network.dao.PhysicalNetworkDao;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.network.rules.FirewallRuleVO;
+import com.cloud.network.security.SecurityGroupManager;
+import com.cloud.network.security.SecurityGroupService;
+import com.cloud.network.security.SecurityGroupVO;
+import com.cloud.network.security.SecurityRule;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.offering.ServiceOffering;
 import com.cloud.offerings.NetworkOfferingServiceMapVO;
@@ -234,6 +238,10 @@ public class KubernetesClusterManagerImpl extends 
ManagerBase implements Kuberne
     protected FirewallRulesDao firewallRulesDao;
     @Inject
     private AnnotationDao annotationDao;
+    @Inject
+    private SecurityGroupManager securityGroupManager;
+    @Inject
+    public SecurityGroupService securityGroupService;
 
     private void logMessage(final Level logLevel, final String message, final 
Exception e) {
         if (logLevel == Level.WARN) {
@@ -1036,17 +1044,39 @@ public class KubernetesClusterManagerImpl extends 
ManagerBase implements Kuberne
             logAndThrow(Level.ERROR, String.format("Creating Kubernetes 
cluster failed due to error while finding suitable deployment plan for cluster 
in zone : %s", zone.getName()));
         }
 
+        SecurityGroupVO securityGroupVO = null;
+        if (zone.isSecurityGroupEnabled()) {
+            securityGroupVO = 
securityGroupManager.createSecurityGroup(KubernetesClusterActionWorker.CKS_CLUSTER_SECURITY_GROUP_NAME.concat(Long.toHexString(System.currentTimeMillis())),
 "Security group for CKS nodes", owner.getDomainId(), owner.getId(), 
owner.getAccountName());
+            if (securityGroupVO == null) {
+                throw new CloudRuntimeException(String.format("Failed to 
create security group: %s", 
KubernetesClusterActionWorker.CKS_CLUSTER_SECURITY_GROUP_NAME));
+            }
+            List<String> cidrList = new ArrayList<>();
+            cidrList.add(NetUtils.ALL_IP4_CIDRS);
+            
securityGroupService.authorizeSecurityGroupRule(securityGroupVO.getId(), 
NetUtils.TCP_PROTO,
+                    
KubernetesClusterActionWorker.CLUSTER_NODES_DEFAULT_SSH_PORT_SG, 
KubernetesClusterActionWorker.CLUSTER_NODES_DEFAULT_SSH_PORT_SG,
+                    null, null, cidrList, null, 
SecurityRule.SecurityRuleType.IngressRule);
+            
securityGroupService.authorizeSecurityGroupRule(securityGroupVO.getId(), 
NetUtils.TCP_PROTO,
+                    KubernetesClusterActionWorker.CLUSTER_API_PORT, 
KubernetesClusterActionWorker.CLUSTER_API_PORT,
+                    null, null, cidrList, null, 
SecurityRule.SecurityRuleType.IngressRule);
+            
securityGroupService.authorizeSecurityGroupRule(securityGroupVO.getId(), 
NetUtils.ALL_PROTO,
+                    null, null, null, null, cidrList, null, 
SecurityRule.SecurityRuleType.EgressRule);
+        }
+
         final Network defaultNetwork = 
getKubernetesClusterNetworkIfMissing(cmd.getName(), zone, owner, 
(int)controlNodeCount, (int)clusterSize, 
cmd.getExternalLoadBalancerIpAddress(), cmd.getNetworkId());
         final VMTemplateVO finalTemplate = getKubernetesServiceTemplate(zone, 
deployDestination.getCluster().getHypervisorType());
         final long cores = serviceOffering.getCpu() * (controlNodeCount + 
clusterSize);
         final long memory = serviceOffering.getRamSize() * (controlNodeCount + 
clusterSize);
 
+        SecurityGroupVO finalSecurityGroupVO = securityGroupVO;
         final KubernetesClusterVO cluster = Transaction.execute(new 
TransactionCallback<KubernetesClusterVO>() {
             @Override
             public KubernetesClusterVO doInTransaction(TransactionStatus 
status) {
                 KubernetesClusterVO newCluster = new 
KubernetesClusterVO(cmd.getName(), cmd.getDisplayName(), zone.getId(), 
clusterKubernetesVersion.getId(),
                         serviceOffering.getId(), finalTemplate.getId(), 
defaultNetwork.getId(), owner.getDomainId(),
                         owner.getAccountId(), controlNodeCount, clusterSize, 
KubernetesCluster.State.Created, cmd.getSSHKeyPairName(), cores, memory, 
cmd.getNodeRootDiskSize(), "");
+                if (zone.isSecurityGroupEnabled()) {
+                    
newCluster.setSecurityGroupId(finalSecurityGroupVO.getId());
+                }
                 kubernetesClusterDao.persist(newCluster);
                 return newCluster;
             }
diff --git 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterVO.java
 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterVO.java
index 90b368d..1b30b1b 100644
--- 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterVO.java
+++ 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterVO.java
@@ -111,6 +111,9 @@ public class KubernetesClusterVO implements 
KubernetesCluster {
     @Column(name = "gc")
     private boolean checkForGc;
 
+    @Column(name = "security_group_id")
+    private Long securityGroupId;
+
     @Override
     public long getId() {
         return id;
@@ -339,6 +342,14 @@ public class KubernetesClusterVO implements 
KubernetesCluster {
         this.maxSize = maxSize;
     }
 
+    public void setSecurityGroupId(Long securityGroupId) {
+        this.securityGroupId = securityGroupId;
+    }
+
+    public Long getSecurityGroupId() {
+        return securityGroupId;
+    }
+
     public KubernetesClusterVO() {
         this.uuid = UUID.randomUUID().toString();
     }
diff --git 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterActionWorker.java
 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterActionWorker.java
index 0272ade..048eb0b 100644
--- 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterActionWorker.java
+++ 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterActionWorker.java
@@ -92,6 +92,9 @@ public class KubernetesClusterActionWorker {
     public static final String CLUSTER_NODE_VM_USER = "cloud";
     public static final int CLUSTER_API_PORT = 6443;
     public static final int CLUSTER_NODES_DEFAULT_START_SSH_PORT = 2222;
+    public static final int CLUSTER_NODES_DEFAULT_SSH_PORT_SG = 22;
+
+    public static final String CKS_CLUSTER_SECURITY_GROUP_NAME = 
"CKSSecurityGroup";
 
     protected static final Logger LOGGER = 
Logger.getLogger(KubernetesClusterActionWorker.class);
 
diff --git 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java
 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java
index 1c147e2..c76c607 100644
--- 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java
+++ 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java
@@ -375,15 +375,25 @@ public class 
KubernetesClusterResourceModifierActionWorker extends KubernetesClu
         } catch (IOException e) {
             logAndThrow(Level.ERROR, "Failed to read Kubernetes node 
configuration file", e);
         }
+
         String base64UserData = 
Base64.encodeBase64String(k8sNodeConfig.getBytes(com.cloud.utils.StringUtils.getPreferredCharset()));
         List<String> keypairs = new ArrayList<String>();
         if (StringUtils.isNotBlank(kubernetesCluster.getKeyPair())) {
             keypairs.add(kubernetesCluster.getKeyPair());
         }
-        nodeVm = userVmService.createAdvancedVirtualMachine(zone, 
serviceOffering, clusterTemplate, networkIds, owner,
-                hostName, hostName, null, null, null,
-                Hypervisor.HypervisorType.None, BaseCmd.HTTPMethod.POST, 
base64UserData, keypairs,
-                null, addrs, null, null, null, customParameterMap, null, null, 
null, null, true, UserVmManager.CKS_NODE, null);
+        if (zone.isSecurityGroupEnabled()) {
+            List<Long> securityGroupIds = new ArrayList<>();
+            securityGroupIds.add(kubernetesCluster.getSecurityGroupId());
+            nodeVm = 
userVmService.createAdvancedSecurityGroupVirtualMachine(zone, serviceOffering, 
clusterTemplate, networkIds, securityGroupIds, owner,
+                    hostName, hostName, null, null, null, 
Hypervisor.HypervisorType.None, BaseCmd.HTTPMethod.POST,base64UserData, 
keypairs,
+                    null, addrs, null, null, null, customParameterMap, null, 
null, null,
+                    null, true, null, UserVmManager.CKS_NODE);
+        } else {
+            nodeVm = userVmService.createAdvancedVirtualMachine(zone, 
serviceOffering, clusterTemplate, networkIds, owner,
+                    hostName, hostName, null, null, null,
+                    Hypervisor.HypervisorType.None, BaseCmd.HTTPMethod.POST, 
base64UserData, keypairs,
+                    null, addrs, null, null, null, customParameterMap, null, 
null, null, null, true, UserVmManager.CKS_NODE, null);
+        }
         if (LOGGER.isInfoEnabled()) {
             LOGGER.info(String.format("Created node VM : %s, %s in the 
Kubernetes cluster : %s", hostName, nodeVm.getUuid(), 
kubernetesCluster.getName()));
         }
diff --git 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java
 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java
index 57daa6d..6612a76 100644
--- 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java
+++ 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java
@@ -217,10 +217,19 @@ public class KubernetesClusterStartWorker extends 
KubernetesClusterResourceModif
         if (StringUtils.isNotBlank(kubernetesCluster.getKeyPair())) {
             keypairs.add(kubernetesCluster.getKeyPair());
         }
-        controlVm = userVmService.createAdvancedVirtualMachine(zone, 
serviceOffering, clusterTemplate, networkIds, owner,
-                hostName, hostName, null, null, null,
-                Hypervisor.HypervisorType.None, BaseCmd.HTTPMethod.POST, 
base64UserData, keypairs,
-                requestedIps, addrs, null, null, null, customParameterMap, 
null, null, null, null, true, UserVmManager.CKS_NODE, null);
+        if (zone.isSecurityGroupEnabled()) {
+            List<Long> securityGroupIds = new ArrayList<>();
+            securityGroupIds.add(kubernetesCluster.getSecurityGroupId());
+            controlVm = 
userVmService.createAdvancedSecurityGroupVirtualMachine(zone, serviceOffering, 
clusterTemplate, networkIds, securityGroupIds, owner,
+            hostName, hostName, null, null, null, 
Hypervisor.HypervisorType.None, BaseCmd.HTTPMethod.POST,base64UserData, 
keypairs,
+                    requestedIps, addrs, null, null, null, customParameterMap, 
null, null, null,
+                    null, true, null, UserVmManager.CKS_NODE);
+        } else {
+            controlVm = userVmService.createAdvancedVirtualMachine(zone, 
serviceOffering, clusterTemplate, networkIds, owner,
+                    hostName, hostName, null, null, null,
+                    Hypervisor.HypervisorType.None, BaseCmd.HTTPMethod.POST, 
base64UserData, keypairs,
+                    requestedIps, addrs, null, null, null, customParameterMap, 
null, null, null, null, true, UserVmManager.CKS_NODE, null);
+        }
         if (LOGGER.isInfoEnabled()) {
             LOGGER.info(String.format("Created control VM ID: %s, %s in the 
Kubernetes cluster : %s", controlVm.getUuid(), hostName, 
kubernetesCluster.getName()));
         }
@@ -276,15 +285,26 @@ public class KubernetesClusterStartWorker extends 
KubernetesClusterResourceModif
         } catch (IOException e) {
             logAndThrow(Level.ERROR, "Failed to read Kubernetes control 
configuration file", e);
         }
+
         String base64UserData = 
Base64.encodeBase64String(k8sControlNodeConfig.getBytes(com.cloud.utils.StringUtils.getPreferredCharset()));
         List<String> keypairs = new ArrayList<String>();
         if (StringUtils.isNotBlank(kubernetesCluster.getKeyPair())) {
             keypairs.add(kubernetesCluster.getKeyPair());
         }
-        additionalControlVm = userVmService.createAdvancedVirtualMachine(zone, 
serviceOffering, clusterTemplate, networkIds, owner,
-                hostName, hostName, null, null, null,
-                Hypervisor.HypervisorType.None, BaseCmd.HTTPMethod.POST, 
base64UserData, keypairs,
-                null, addrs, null, null, null, customParameterMap, null, null, 
null, null, true, UserVmManager.CKS_NODE, null);
+        if (zone.isSecurityGroupEnabled()) {
+            List<Long> securityGroupIds = new ArrayList<>();
+            securityGroupIds.add(kubernetesCluster.getSecurityGroupId());
+            additionalControlVm = 
userVmService.createAdvancedSecurityGroupVirtualMachine(zone, serviceOffering, 
clusterTemplate, networkIds, securityGroupIds, owner,
+                    hostName, hostName, null, null, null, 
Hypervisor.HypervisorType.None, BaseCmd.HTTPMethod.POST,base64UserData, 
keypairs,
+                    null, addrs, null, null, null, customParameterMap, null, 
null, null,
+                    null, true, null, UserVmManager.CKS_NODE);
+        } else {
+            additionalControlVm = 
userVmService.createAdvancedVirtualMachine(zone, serviceOffering, 
clusterTemplate, networkIds, owner,
+                    hostName, hostName, null, null, null,
+                    Hypervisor.HypervisorType.None, BaseCmd.HTTPMethod.POST, 
base64UserData, keypairs,
+                    null, addrs, null, null, null, customParameterMap, null, 
null, null, null, true, UserVmManager.CKS_NODE, null);
+        }
+
         if (LOGGER.isInfoEnabled()) {
             LOGGER.info(String.format("Created control VM ID : %s, %s in the 
Kubernetes cluster : %s", additionalControlVm.getUuid(), hostName, 
kubernetesCluster.getName()));
         }
diff --git 
a/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java 
b/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
index ec46b8c..d03e2ce 100644
--- a/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
@@ -1336,9 +1336,7 @@ public class AutoScaleManagerImpl<Type> extends 
ManagerBase implements AutoScale
                 if (zone.isSecurityGroupEnabled()) {
                     vm = 
_userVmService.createAdvancedSecurityGroupVirtualMachine(zone, serviceOffering, 
template, null, null,
                         owner, "autoScaleVm-" + asGroup.getId() + "-" + 
getCurrentTimeStampString(),
-                        "autoScaleVm-" + asGroup.getId() + "-" + 
getCurrentTimeStampString(), null, null, null, HypervisorType.XenServer, 
HTTPMethod.GET, null, null,
-                        null, null, true, null, null, null, null, null, null, 
null, true, null);
-
+                        "autoScaleVm-" + asGroup.getId() + "-" + 
getCurrentTimeStampString(), null, null, null, HypervisorType.XenServer, 
HTTPMethod.GET, null, null,null, null, true, null, null, null, null, null, 
null, null, true, null, null);
                 } else {
                     vm = _userVmService.createAdvancedVirtualMachine(zone, 
serviceOffering, template, null, owner, "autoScaleVm-" + asGroup.getId() + "-" +
                         getCurrentTimeStampString(), "autoScaleVm-" + 
asGroup.getId() + "-" + getCurrentTimeStampString(),
diff --git 
a/server/src/main/java/com/cloud/network/security/SecurityGroupManagerImpl.java 
b/server/src/main/java/com/cloud/network/security/SecurityGroupManagerImpl.java
index 9e5dd4e..a80cfa3 100644
--- 
a/server/src/main/java/com/cloud/network/security/SecurityGroupManagerImpl.java
+++ 
b/server/src/main/java/com/cloud/network/security/SecurityGroupManagerImpl.java
@@ -612,7 +612,7 @@ public class SecurityGroupManagerImpl extends ManagerBase 
implements SecurityGro
         return authorizeSecurityGroupRule(securityGroupId, protocol, 
startPort, endPort, icmpType, icmpCode, cidrList, groupList, 
SecurityRuleType.IngressRule);
     }
 
-    private List<SecurityGroupRuleVO> authorizeSecurityGroupRule(final Long 
securityGroupId, String protocol, Integer startPort, Integer endPort, Integer 
icmpType,
+    public List<SecurityGroupRuleVO> authorizeSecurityGroupRule(final Long 
securityGroupId, String protocol, Integer startPort, Integer endPort, Integer 
icmpType,
             Integer icmpCode, final List<String> cidrList, Map groupList, 
final SecurityRuleType ruleType) {
         Integer startPortOrType = null;
         Integer endPortOrCode = null;
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java 
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index d66d96e..2fac76e 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -3478,8 +3478,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
             List<Long> securityGroupIdList, Account owner, String hostName, 
String displayName, Long diskOfferingId, Long diskSize, String group, 
HypervisorType hypervisor,
             HTTPMethod httpmethod, String userData, List<String> sshKeyPairs, 
Map<Long, IpAddresses> requestedIps, IpAddresses defaultIps, Boolean displayVm, 
String keyboard,
             List<Long> affinityGroupIdList, Map<String, String> 
customParameters, String customId, Map<String, Map<Integer, String>> 
dhcpOptionMap,
-            Map<Long, DiskOffering> dataDiskTemplateToDiskOfferingMap, 
Map<String, String> userVmOVFProperties, boolean dynamicScalingEnabled, Long 
overrideDiskOfferingId) throws InsufficientCapacityException, 
ConcurrentOperationException,
-    ResourceUnavailableException, StorageUnavailableException, 
ResourceAllocationException {
+            Map<Long, DiskOffering> dataDiskTemplateToDiskOfferingMap, 
Map<String, String> userVmOVFProperties, boolean dynamicScalingEnabled, Long 
overrideDiskOfferingId, String vmType) throws InsufficientCapacityException, 
ConcurrentOperationException, ResourceUnavailableException, 
StorageUnavailableException, ResourceAllocationException {
 
         Account caller = CallContext.current().getCallingAccount();
         List<NetworkVO> networkList = new ArrayList<NetworkVO>();
@@ -3579,7 +3578,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
 
         return createVirtualMachine(zone, serviceOffering, template, hostName, 
displayName, owner, diskOfferingId, diskSize, networkList, securityGroupIdList, 
group, httpmethod,
                 userData, sshKeyPairs, hypervisor, caller, requestedIps, 
defaultIps, displayVm, keyboard, affinityGroupIdList, customParameters, 
customId, dhcpOptionMap, dataDiskTemplateToDiskOfferingMap,
-                userVmOVFProperties, dynamicScalingEnabled, null, 
overrideDiskOfferingId);
+                userVmOVFProperties, dynamicScalingEnabled, vmType, 
overrideDiskOfferingId);
     }
 
     @Override
@@ -3588,7 +3587,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
             String hostName, String displayName, Long diskOfferingId, Long 
diskSize, String group, HypervisorType hypervisor, HTTPMethod httpmethod, 
String userData,
             List<String> sshKeyPairs, Map<Long, IpAddresses> requestedIps, 
IpAddresses defaultIps, Boolean displayvm, String keyboard, List<Long> 
affinityGroupIdList,
             Map<String, String> customParametrs, String customId, Map<String, 
Map<Integer, String>> dhcpOptionsMap, Map<Long, DiskOffering> 
dataDiskTemplateToDiskOfferingMap,
-            Map<String, String> userVmOVFPropertiesMap, boolean 
dynamicScalingEnabled, String type, Long overrideDiskOfferingId) throws 
InsufficientCapacityException, ConcurrentOperationException, 
ResourceUnavailableException,
+            Map<String, String> userVmOVFPropertiesMap, boolean 
dynamicScalingEnabled, String vmType, Long overrideDiskOfferingId) throws 
InsufficientCapacityException, ConcurrentOperationException, 
ResourceUnavailableException,
     StorageUnavailableException, ResourceAllocationException {
 
         Account caller = CallContext.current().getCallingAccount();
@@ -3639,7 +3638,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
         verifyExtraDhcpOptionsNetwork(dhcpOptionsMap, networkList);
         return createVirtualMachine(zone, serviceOffering, template, hostName, 
displayName, owner, diskOfferingId, diskSize, networkList, null, group, 
httpmethod, userData,
                 sshKeyPairs, hypervisor, caller, requestedIps, defaultIps, 
displayvm, keyboard, affinityGroupIdList, customParametrs, customId, 
dhcpOptionsMap,
-                dataDiskTemplateToDiskOfferingMap, userVmOVFPropertiesMap, 
dynamicScalingEnabled, type, overrideDiskOfferingId);
+                dataDiskTemplateToDiskOfferingMap, userVmOVFPropertiesMap, 
dynamicScalingEnabled, vmType, overrideDiskOfferingId);
     }
 
     private NetworkVO getNetworkToAddToNetworkList(VirtualMachineTemplate 
template, Account owner, HypervisorType hypervisor,
@@ -3758,7 +3757,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
                                         List<String> sshKeyPairs, 
HypervisorType hypervisor, Account caller, Map<Long, IpAddresses> requestedIps, 
IpAddresses defaultIps, Boolean isDisplayVm, String keyboard,
                                         List<Long> affinityGroupIdList, 
Map<String, String> customParameters, String customId, Map<String, Map<Integer, 
String>> dhcpOptionMap,
                                         Map<Long, DiskOffering> 
datadiskTemplateToDiskOfferringMap,
-                                        Map<String, String> 
userVmOVFPropertiesMap, boolean dynamicScalingEnabled, String type, Long 
overrideDiskOfferingId) throws InsufficientCapacityException, 
ResourceUnavailableException,
+                                        Map<String, String> 
userVmOVFPropertiesMap, boolean dynamicScalingEnabled, String vmType, Long 
overrideDiskOfferingId) throws InsufficientCapacityException, 
ResourceUnavailableException,
     ConcurrentOperationException, StorageUnavailableException, 
ResourceAllocationException {
 
         _accountMgr.checkAccess(caller, null, true, owner);
@@ -3938,7 +3937,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
             }
         }
 
-        if (template.getTemplateType().equals(TemplateType.SYSTEM) && 
!CKS_NODE.equals(type)) {
+        if (template.getTemplateType().equals(TemplateType.SYSTEM) && 
!CKS_NODE.equals(vmType)) {
             throw new InvalidParameterValueException("Unable to use system 
template " + template.getId() + " to deploy a user vm");
         }
         List<VMTemplateZoneVO> listZoneTemplate = 
_templateZoneDao.listByZoneTemplate(zone.getId(), template.getId());
@@ -4129,7 +4128,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
 
         UserVmVO vm = commitUserVm(zone, template, hostName, displayName, 
owner, diskOfferingId, diskSize, userData, caller, isDisplayVm, keyboard, 
accountId, userId, offering,
                 isIso, sshPublicKeys, networkNicMap, id, instanceName, 
uuidName, hypervisorType, customParameters, dhcpOptionMap,
-                datadiskTemplateToDiskOfferringMap, userVmOVFPropertiesMap, 
dynamicScalingEnabled, type, rootDiskOfferingId, keypairnames);
+                datadiskTemplateToDiskOfferringMap, userVmOVFPropertiesMap, 
dynamicScalingEnabled, vmType, rootDiskOfferingId, keypairnames);
 
         // Assign instance to the group
         try {
@@ -4266,7 +4265,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
                                   final long accountId, final long userId, 
final ServiceOffering offering, final boolean isIso, final String 
sshPublicKeys, final LinkedHashMap<String, List<NicProfile>> networkNicMap,
                                   final long id, final String instanceName, 
final String uuidName, final HypervisorType hypervisorType, final Map<String, 
String> customParameters,
                                   final Map<String, Map<Integer, String>> 
extraDhcpOptionMap, final Map<Long, DiskOffering> 
dataDiskTemplateToDiskOfferingMap,
-                                  final Map<String, String> 
userVmOVFPropertiesMap, final VirtualMachine.PowerState powerState, final 
boolean dynamicScalingEnabled, String type, final Long rootDiskOfferingId, 
String sshkeypairs) throws InsufficientCapacityException {
+                                  final Map<String, String> 
userVmOVFPropertiesMap, final VirtualMachine.PowerState powerState, final 
boolean dynamicScalingEnabled, String vmType, final Long rootDiskOfferingId, 
String sshkeypairs) throws InsufficientCapacityException {
         return Transaction.execute(new 
TransactionCallbackWithException<UserVmVO, InsufficientCapacityException>() {
             @Override
             public UserVmVO doInTransaction(TransactionStatus status) throws 
InsufficientCapacityException {
@@ -4357,7 +4356,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
                     }
                 }
 
-                vm.setUserVmType(type);
+                vm.setUserVmType(vmType);
                 _vmDao.persist(vm);
                 for (String key : customParameters.keySet()) {
                     // BIOS was explicitly passed as the boot type, so honour 
it
@@ -4474,13 +4473,13 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
             final long accountId, final long userId, final ServiceOfferingVO 
offering, final boolean isIso, final String sshPublicKeys, final 
LinkedHashMap<String, List<NicProfile>> networkNicMap,
             final long id, final String instanceName, final String uuidName, 
final HypervisorType hypervisorType, final Map<String, String> 
customParameters, final Map<String,
             Map<Integer, String>> extraDhcpOptionMap, final Map<Long, 
DiskOffering> dataDiskTemplateToDiskOfferingMap,
-            Map<String, String> userVmOVFPropertiesMap, final boolean 
dynamicScalingEnabled, String type, final Long rootDiskOfferingId, String 
sshkeypairs) throws InsufficientCapacityException {
+            Map<String, String> userVmOVFPropertiesMap, final boolean 
dynamicScalingEnabled, String vmType, final Long rootDiskOfferingId, String 
sshkeypairs) throws InsufficientCapacityException {
         return commitUserVm(false, zone, null, null, template, hostName, 
displayName, owner,
                 diskOfferingId, diskSize, userData, caller, isDisplayVm, 
keyboard,
                 accountId, userId, offering, isIso, sshPublicKeys, 
networkNicMap,
                 id, instanceName, uuidName, hypervisorType, customParameters,
                 extraDhcpOptionMap, dataDiskTemplateToDiskOfferingMap,
-                userVmOVFPropertiesMap, null, dynamicScalingEnabled, type, 
rootDiskOfferingId, sshkeypairs);
+                userVmOVFPropertiesMap, null, dynamicScalingEnabled, vmType, 
rootDiskOfferingId, sshkeypairs);
     }
 
     public void validateRootDiskResize(final HypervisorType hypervisorType, 
Long rootDiskSize, VMTemplateVO templateVO, UserVmVO vm, final Map<String, 
String> customParameters) throws InvalidParameterValueException
@@ -5727,7 +5726,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
                 vm = createAdvancedSecurityGroupVirtualMachine(zone, 
serviceOffering, template, networkIds, getSecurityGroupIdList(cmd), owner, name,
                         displayName, diskOfferingId, size, group, 
cmd.getHypervisor(), cmd.getHttpMethod(), userData, sshKeyPairNames, 
cmd.getIpToNetworkMap(), addrs, displayVm, keyboard,
                         cmd.getAffinityGroupIdList(), cmd.getDetails(), 
cmd.getCustomId(), cmd.getDhcpOptionsMap(),
-                        dataDiskTemplateToDiskOfferingMap, 
userVmOVFProperties, dynamicScalingEnabled, overrideDiskOfferingId);
+                        dataDiskTemplateToDiskOfferingMap, 
userVmOVFProperties, dynamicScalingEnabled, overrideDiskOfferingId, null);
 
             } else {
                 if (cmd.getSecurityGroupIdList() != null && 
!cmd.getSecurityGroupIdList().isEmpty()) {

Reply via email to