@@ -28,6 +28,7 @@ import (
28
28
29
29
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
30
30
controlplanev1 "sigs.k8s.io/cluster-api/controlplane/kubeadm/api/v1beta1"
31
+ expv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1"
31
32
"sigs.k8s.io/cluster-api/test/framework/internal/log"
32
33
"sigs.k8s.io/cluster-api/util/patch"
33
34
)
@@ -59,19 +60,21 @@ func GetClusterClassByName(ctx context.Context, input GetClusterClassByNameInput
59
60
60
61
// UpgradeClusterTopologyAndWaitForUpgradeInput is the input type for UpgradeClusterTopologyAndWaitForUpgrade.
61
62
type UpgradeClusterTopologyAndWaitForUpgradeInput struct {
62
- ClusterProxy ClusterProxy
63
- Cluster * clusterv1.Cluster
64
- ControlPlane * controlplanev1.KubeadmControlPlane
65
- EtcdImageTag string
66
- DNSImageTag string
67
- MachineDeployments []* clusterv1.MachineDeployment
68
- KubernetesUpgradeVersion string
69
- WaitForMachinesToBeUpgraded []interface {}
70
- WaitForKubeProxyUpgrade []interface {}
71
- WaitForDNSUpgrade []interface {}
72
- WaitForEtcdUpgrade []interface {}
73
- PreWaitForControlPlaneToBeUpgraded func ()
74
- PreWaitForMachineDeploymentToBeUpgraded func ()
63
+ ClusterProxy ClusterProxy
64
+ Cluster * clusterv1.Cluster
65
+ ControlPlane * controlplanev1.KubeadmControlPlane
66
+ EtcdImageTag string
67
+ DNSImageTag string
68
+ MachineDeployments []* clusterv1.MachineDeployment
69
+ MachinePools []* expv1.MachinePool
70
+ KubernetesUpgradeVersion string
71
+ WaitForMachinesToBeUpgraded []interface {}
72
+ WaitForMachinePoolToBeUpgraded []interface {}
73
+ WaitForKubeProxyUpgrade []interface {}
74
+ WaitForDNSUpgrade []interface {}
75
+ WaitForEtcdUpgrade []interface {}
76
+ PreWaitForControlPlaneToBeUpgraded func ()
77
+ PreWaitForWorkersToBeUpgraded func ()
75
78
}
76
79
77
80
// UpgradeClusterTopologyAndWaitForUpgrade upgrades a Cluster topology and waits for it to be upgraded.
@@ -82,6 +85,7 @@ func UpgradeClusterTopologyAndWaitForUpgrade(ctx context.Context, input UpgradeC
82
85
Expect (input .Cluster ).ToNot (BeNil (), "Invalid argument. input.Cluster can't be nil when calling UpgradeClusterTopologyAndWaitForUpgrade" )
83
86
Expect (input .ControlPlane ).ToNot (BeNil (), "Invalid argument. input.ControlPlane can't be nil when calling UpgradeClusterTopologyAndWaitForUpgrade" )
84
87
Expect (input .MachineDeployments ).ToNot (BeEmpty (), "Invalid argument. input.MachineDeployments can't be empty when calling UpgradeClusterTopologyAndWaitForUpgrade" )
88
+ Expect (input .MachinePools ).ToNot (BeEmpty (), "Invalid argument. input.MachinePools can't be empty when calling UpgradeClusterTopologyAndWaitForUpgrade" )
85
89
Expect (input .KubernetesUpgradeVersion ).ToNot (BeNil (), "Invalid argument. input.KubernetesUpgradeVersion can't be empty when calling UpgradeClusterTopologyAndWaitForUpgrade" )
86
90
87
91
mgmtClient := input .ClusterProxy .GetClient ()
@@ -150,12 +154,12 @@ func UpgradeClusterTopologyAndWaitForUpgrade(ctx context.Context, input UpgradeC
150
154
}, input .WaitForEtcdUpgrade ... )
151
155
}
152
156
153
- // Once the ControlPlane is upgraded we can run PreWaitForMachineDeploymentToBeUpgraded .
157
+ // Once the ControlPlane is upgraded we can run PreWaitForWorkersToBeUpgraded .
154
158
// Note: This can e.g. be used to verify the AfterControlPlaneUpgrade lifecycle hook is executed
155
159
// and blocking correctly.
156
- if input .PreWaitForMachineDeploymentToBeUpgraded != nil {
157
- log .Logf ("Calling PreWaitForMachineDeploymentToBeUpgraded " )
158
- input .PreWaitForMachineDeploymentToBeUpgraded ()
160
+ if input .PreWaitForWorkersToBeUpgraded != nil {
161
+ log .Logf ("Calling PreWaitForWorkersToBeUpgraded " )
162
+ input .PreWaitForWorkersToBeUpgraded ()
159
163
}
160
164
161
165
for _ , deployment := range input .MachineDeployments {
@@ -171,4 +175,19 @@ func UpgradeClusterTopologyAndWaitForUpgrade(ctx context.Context, input UpgradeC
171
175
}, input .WaitForMachinesToBeUpgraded ... )
172
176
}
173
177
}
178
+
179
+ for _ , pool := range input .MachinePools {
180
+ if * pool .Spec .Replicas > 0 {
181
+ log .Logf ("Waiting for Kubernetes versions of machines in MachinePool %s to be upgraded to %s" ,
182
+ klog .KObj (pool ), input .KubernetesUpgradeVersion )
183
+ WaitForMachinePoolInstancesToBeUpgraded (ctx , WaitForMachinePoolInstancesToBeUpgradedInput {
184
+ Getter : mgmtClient ,
185
+ WorkloadClusterGetter : input .ClusterProxy .GetWorkloadCluster (ctx , input .Cluster .Namespace , input .Cluster .Name ).GetClient (),
186
+ Cluster : input .Cluster ,
187
+ MachineCount : int (* pool .Spec .Replicas ),
188
+ KubernetesUpgradeVersion : input .KubernetesUpgradeVersion ,
189
+ MachinePool : pool ,
190
+ }, input .WaitForMachinePoolToBeUpgraded ... )
191
+ }
192
+ }
174
193
}
0 commit comments