@@ -135,7 +135,25 @@ def setUpClass(cls):
135135 cls .apiclient ,
136136 cks_offering_data
137137 )
138+ cks_offering_data ["name" ] = 'CKS-Worker-Offering-' + random_gen ()
139+ cls .cks_worker_nodes_offering = ServiceOffering .create (
140+ cls .apiclient ,
141+ cks_offering_data
142+ )
143+ cks_offering_data ["name" ] = 'CKS-Control-Offering-' + random_gen ()
144+ cls .cks_control_nodes_offering = ServiceOffering .create (
145+ cls .apiclient ,
146+ cks_offering_data
147+ )
148+ cks_offering_data ["name" ] = 'CKS-Etcd-Offering-' + random_gen ()
149+ cls .cks_etcd_nodes_offering = ServiceOffering .create (
150+ cls .apiclient ,
151+ cks_offering_data
152+ )
138153 cls ._cleanup .append (cls .cks_service_offering )
154+ cls ._cleanup .append (cls .cks_worker_nodes_offering )
155+ cls ._cleanup .append (cls .cks_control_nodes_offering )
156+ cls ._cleanup .append (cls .cks_etcd_nodes_offering )
139157 cls .domain = get_domain (cls .apiclient )
140158 cls .account = Account .create (
141159 cls .apiclient ,
@@ -644,6 +662,30 @@ def test_11_test_unmanaged_cluster_lifecycle(self):
644662 self .deleteKubernetesClusterAndVerify (cluster .id )
645663 return
646664
665+ @attr (tags = ["advanced" , "smoke" , "nicolocal" ], required_hardware = "true" )
666+ def test_12_test_deploy_cluster_different_offerings_per_node_type (self ):
667+ """Test creating a CKS cluster with different offerings per node type
668+
669+ # Validate the following:
670+ """
671+ cluster = self .getValidKubernetesCluster (worker_offering = self .cks_worker_nodes_offering ,
672+ control_offering = self .cks_control_nodes_offering )
673+ self .assertEqual (
674+ cluster .workerofferingid ,
675+ self .cks_worker_nodes_offering .id ,
676+ "Check Worker Nodes Offering {}, {}" .format (cluster .workerofferingid , self .cks_worker_nodes_offering .id )
677+ )
678+ self .assertEqual (
679+ cluster .controlofferingid ,
680+ self .cks_control_nodes_offering .id ,
681+ "Check Control Nodes Offering {}, {}" .format (cluster .workerofferingid , self .cks_worker_nodes_offering .id )
682+ )
683+ self .assertEqual (
684+ cluster .etcdnodes ,
685+ 0 ,
686+ "No Etcd Nodes expected but got {}" .format (cluster .etcdnodes )
687+ )
688+
647689 def addVirtualMachinesToKubernetesCluster (self , cluster_id , vm_list ):
648690 cmd = addVirtualMachinesToKubernetesCluster .addVirtualMachinesToKubernetesClusterCmd ()
649691 cmd .id = cluster_id
@@ -658,8 +700,8 @@ def removeVirtualMachinesFromKubernetesCluster(self, cluster_id, vm_list):
658700
659701 return self .apiclient .removeVirtualMachinesFromKubernetesCluster (cmd )
660702
661-
662- def createKubernetesCluster ( self , name , version_id , size = 1 , control_nodes = 1 , cluster_type = 'CloudManaged' ):
703+ def createKubernetesCluster ( self , name , version_id , size = 1 , control_nodes = 1 , etcd_nodes = 0 , cluster_type = 'CloudManaged' ,
704+ workers_offering = None , control_offering = None , etcd_offering = None ):
663705 createKubernetesClusterCmd = createKubernetesCluster .createKubernetesClusterCmd ()
664706 createKubernetesClusterCmd .name = name
665707 createKubernetesClusterCmd .description = name + "-description"
@@ -672,6 +714,22 @@ def createKubernetesCluster(self, name, version_id, size=1, control_nodes=1, clu
672714 createKubernetesClusterCmd .account = self .account .name
673715 createKubernetesClusterCmd .domainid = self .domain .id
674716 createKubernetesClusterCmd .clustertype = cluster_type
717+ if workers_offering :
718+ createKubernetesClusterCmd .nodeofferings .append ({
719+ "node" : "WORKER" ,
720+ "offering" : workers_offering .id
721+ })
722+ if control_offering :
723+ createKubernetesClusterCmd .nodeofferings .append ({
724+ "node" : "CONTROL" ,
725+ "offering" : control_offering .id
726+ })
727+ if etcd_nodes > 0 and etcd_offering :
728+ createKubernetesClusterCmd .etcdnodes = etcd_nodes
729+ createKubernetesClusterCmd .nodeofferings .append ({
730+ "node" : "ETCD" ,
731+ "offering" : etcd_offering .id
732+ })
675733 if self .default_network :
676734 createKubernetesClusterCmd .networkid = self .default_network .id
677735 clusterResponse = self .apiclient .createKubernetesCluster (createKubernetesClusterCmd )
@@ -735,15 +793,18 @@ def waitForAutoscalerPodInRunningState(self, cluster_id, retries=5, interval=60)
735793 retries = retries - 1
736794 return False
737795
738- def getValidKubernetesCluster (self , size = 1 , control_nodes = 1 , version = {}):
796+ def getValidKubernetesCluster (self , size = 1 , control_nodes = 1 , version = {}, etcd_nodes = 0 ,
797+ worker_offering = None , control_offering = None , etcd_offering = None ):
739798 cluster = k8s_cluster
740799
741800 # Does a cluster already exist ?
742801 if cluster == None or cluster .id == None :
743802 if not version :
744803 version = self .kubernetes_version_v2
745804 self .debug ("No existing cluster available, k8s_cluster: %s" % cluster )
746- return self .createNewKubernetesCluster (version , size , control_nodes )
805+ return self .createNewKubernetesCluster (version , size , control_nodes , etcd_nodes = etcd_nodes ,
806+ worker_offering = worker_offering , control_offering = control_offering ,
807+ etcd_offering = etcd_offering )
747808
748809 # Is the existing cluster what is needed ?
749810 valid = cluster .size == size and cluster .controlnodes == control_nodes
@@ -759,7 +820,9 @@ def getValidKubernetesCluster(self, size=1, control_nodes=1, version={}):
759820 if cluster == None :
760821 # Looks like the cluster disappeared !
761822 self .debug ("Existing cluster, k8s_cluster ID: %s not returned by list API" % cluster_id )
762- return self .createNewKubernetesCluster (version , size , control_nodes )
823+ return self .createNewKubernetesCluster (version , size , control_nodes , etcd_nodes = etcd_nodes ,
824+ worker_offering = worker_offering , control_offering = control_offering ,
825+ etcd_offering = etcd_offering )
763826
764827 if valid :
765828 try :
@@ -775,13 +838,18 @@ def getValidKubernetesCluster(self, size=1, control_nodes=1, version={}):
775838 self .deleteKubernetesClusterAndVerify (cluster .id , False , True )
776839
777840 self .debug ("No valid cluster, need to deploy a new one" )
778- return self .createNewKubernetesCluster (version , size , control_nodes )
841+ return self .createNewKubernetesCluster (version , size , control_nodes , etcd_nodes = etcd_nodes ,
842+ worker_offering = worker_offering , control_offering = control_offering ,
843+ etcd_offering = etcd_offering )
779844
780- def createNewKubernetesCluster (self , version , size , control_nodes ) :
845+ def createNewKubernetesCluster (self , version , size , control_nodes , etcd_nodes = 0 ,
846+ worker_offering = None , control_offering = None , etcd_offering = None ):
781847 name = 'testcluster-' + random_gen ()
782848 self .debug ("Creating for Kubernetes cluster with name %s" % name )
783849 try :
784- cluster = self .createKubernetesCluster (name , version .id , size , control_nodes )
850+ cluster = self .createKubernetesCluster (name , version .id , size , control_nodes , etcd_nodes = etcd_nodes ,
851+ workers_offering = worker_offering , control_offering = control_offering ,
852+ etcd_offering = etcd_offering )
785853 self .verifyKubernetesCluster (cluster , name , version .id , size , control_nodes )
786854 except Exception as ex :
787855 cluster = self .listKubernetesCluster (cluster_name = name )
0 commit comments