@@ -80,6 +80,14 @@ def _update_control_plane_nodegroup_status(self, cluster, nodegroup):
80
80
81
81
kcp_spec = kcp .get ("spec" , {}) if kcp else {}
82
82
kcp_status = kcp .get ("status" , {}) if kcp else {}
83
+
84
+ # The control plane object is what controls the Kubernetes version
85
+ # If it is known, report it
86
+ kube_version = kcp_status .get ("version" , kcp_spec .get ("version" ))
87
+ if cluster .coe_version != kube_version :
88
+ cluster .coe_version = kube_version
89
+ cluster .save ()
90
+
83
91
kcp_true_conditions = {
84
92
cond ["type" ]
85
93
for cond in kcp_status .get ("conditions" , [])
@@ -676,10 +684,32 @@ def resize_cluster(
676
684
LOG .warning ("Removing specific nodes is not currently supported" )
677
685
self ._update_helm_release (context , cluster )
678
686
679
- def upgrade_cluster (self , context , cluster , cluster_template ,
680
- max_batch_size , nodegroup , scale_manager = None ,
681
- rollback = False ):
682
- raise Exception ("don't support upgrade yet" )
687
+ def upgrade_cluster (
688
+ self ,
689
+ context ,
690
+ cluster ,
691
+ cluster_template ,
692
+ max_batch_size ,
693
+ nodegroup ,
694
+ scale_manager = None ,
695
+ rollback = False ,
696
+ ):
697
+ # TODO(mkjpryor) check that the upgrade is viable
698
+ # e.g. not a downgrade, not an upgrade by more than one minor version
699
+
700
+ # Updating the template will likely apply for all nodegroups
701
+ # So mark them all as having an update in progress
702
+ for nodegroup in cluster .nodegroups :
703
+ nodegroup .status = fields .ClusterStatus .UPDATE_IN_PROGRESS
704
+ nodegroup .save ()
705
+
706
+ # Move the cluster to the new template
707
+ cluster .cluster_template_id = cluster_template .uuid
708
+ cluster .status = fields .ClusterStatus .UPDATE_IN_PROGRESS
709
+ cluster .save ()
710
+ cluster .refresh ()
711
+
712
+ self ._update_helm_release (context , cluster )
683
713
684
714
def create_nodegroup (self , context , cluster , nodegroup ):
685
715
nodegroup .status = fields .ClusterStatus .CREATE_IN_PROGRESS
@@ -702,9 +732,7 @@ def delete_nodegroup(self, context, cluster, nodegroup):
702
732
self ._update_helm_release (
703
733
context ,
704
734
cluster ,
705
- list (
706
- [ng for ng in cluster .nodegroups if ng .name != nodegroup .name ]
707
- ),
735
+ [ng for ng in cluster .nodegroups if ng .name != nodegroup .name ]
708
736
)
709
737
710
738
def create_federation (self , context , federation ):
0 commit comments