@@ -165,6 +165,12 @@ func (r *KubeadmControlPlaneReconciler) reconcileExternalReference(ctx context.C
165
165
func (r * KubeadmControlPlaneReconciler ) cloneConfigsAndGenerateMachine (ctx context.Context , cluster * clusterv1.Cluster , kcp * controlplanev1.KubeadmControlPlane , bootstrapSpec * bootstrapv1.KubeadmConfigSpec , failureDomain * string ) error {
166
166
var errs []error
167
167
168
+ // Compute desired Machine
169
+ machine , err := r .computeDesiredMachine (kcp , cluster , failureDomain , nil )
170
+ if err != nil {
171
+ return errors .Wrap (err , "failed to create Machine: failed to compute desired Machine" )
172
+ }
173
+
168
174
// Since the cloned resource should eventually have a controller ref for the Machine, we create an
169
175
// OwnerReference here without the Controller field set
170
176
infraCloneOwner := & metav1.OwnerReference {
@@ -179,6 +185,7 @@ func (r *KubeadmControlPlaneReconciler) cloneConfigsAndGenerateMachine(ctx conte
179
185
Client : r .Client ,
180
186
TemplateRef : & kcp .Spec .MachineTemplate .InfrastructureRef ,
181
187
Namespace : kcp .Namespace ,
188
+ Name : machine .Name ,
182
189
OwnerRef : infraCloneOwner ,
183
190
ClusterName : cluster .Name ,
184
191
Labels : internal .ControlPlaneMachineLabelsForCluster (kcp , cluster .Name ),
@@ -190,9 +197,10 @@ func (r *KubeadmControlPlaneReconciler) cloneConfigsAndGenerateMachine(ctx conte
190
197
clusterv1 .ConditionSeverityError , err .Error ())
191
198
return errors .Wrap (err , "failed to clone infrastructure template" )
192
199
}
200
+ machine .Spec .InfrastructureRef = * infraRef
193
201
194
202
// Clone the bootstrap configuration
195
- bootstrapRef , err := r .generateKubeadmConfig (ctx , kcp , cluster , bootstrapSpec )
203
+ bootstrapRef , err := r .generateKubeadmConfig (ctx , kcp , cluster , bootstrapSpec , machine . Name )
196
204
if err != nil {
197
205
conditions .MarkFalse (kcp , controlplanev1 .MachinesCreatedCondition , controlplanev1 .BootstrapTemplateCloningFailedReason ,
198
206
clusterv1 .ConditionSeverityError , err .Error ())
@@ -201,7 +209,9 @@ func (r *KubeadmControlPlaneReconciler) cloneConfigsAndGenerateMachine(ctx conte
201
209
202
210
// Only proceed to generating the Machine if we haven't encountered an error
203
211
if len (errs ) == 0 {
204
- if err := r .createMachine (ctx , kcp , cluster , infraRef , bootstrapRef , failureDomain ); err != nil {
212
+ machine .Spec .Bootstrap .ConfigRef = bootstrapRef
213
+
214
+ if err := r .createMachine (ctx , kcp , machine ); err != nil {
205
215
conditions .MarkFalse (kcp , controlplanev1 .MachinesCreatedCondition , controlplanev1 .MachineGenerationFailedReason ,
206
216
clusterv1 .ConditionSeverityError , err .Error ())
207
217
errs = append (errs , errors .Wrap (err , "failed to create Machine" ))
@@ -241,7 +251,7 @@ func (r *KubeadmControlPlaneReconciler) cleanupFromGeneration(ctx context.Contex
241
251
return kerrors .NewAggregate (errs )
242
252
}
243
253
244
- func (r * KubeadmControlPlaneReconciler ) generateKubeadmConfig (ctx context.Context , kcp * controlplanev1.KubeadmControlPlane , cluster * clusterv1.Cluster , spec * bootstrapv1.KubeadmConfigSpec ) (* corev1.ObjectReference , error ) {
254
+ func (r * KubeadmControlPlaneReconciler ) generateKubeadmConfig (ctx context.Context , kcp * controlplanev1.KubeadmControlPlane , cluster * clusterv1.Cluster , spec * bootstrapv1.KubeadmConfigSpec , name string ) (* corev1.ObjectReference , error ) {
245
255
// Create an owner reference without a controller reference because the owning controller is the machine controller
246
256
owner := metav1.OwnerReference {
247
257
APIVersion : controlplanev1 .GroupVersion .String (),
@@ -252,7 +262,7 @@ func (r *KubeadmControlPlaneReconciler) generateKubeadmConfig(ctx context.Contex
252
262
253
263
bootstrapConfig := & bootstrapv1.KubeadmConfig {
254
264
ObjectMeta : metav1.ObjectMeta {
255
- Name : names . SimpleNameGenerator . GenerateName ( kcp . Name + "-" ) ,
265
+ Name : name ,
256
266
Namespace : kcp .Namespace ,
257
267
Labels : internal .ControlPlaneMachineLabelsForCluster (kcp , cluster .Name ),
258
268
Annotations : kcp .Spec .MachineTemplate .ObjectMeta .Annotations ,
@@ -297,11 +307,7 @@ func (r *KubeadmControlPlaneReconciler) updateExternalObject(ctx context.Context
297
307
return nil
298
308
}
299
309
300
- func (r * KubeadmControlPlaneReconciler ) createMachine (ctx context.Context , kcp * controlplanev1.KubeadmControlPlane , cluster * clusterv1.Cluster , infraRef , bootstrapRef * corev1.ObjectReference , failureDomain * string ) error {
301
- machine , err := r .computeDesiredMachine (kcp , cluster , infraRef , bootstrapRef , failureDomain , nil )
302
- if err != nil {
303
- return errors .Wrap (err , "failed to create Machine: failed to compute desired Machine" )
304
- }
310
+ func (r * KubeadmControlPlaneReconciler ) createMachine (ctx context.Context , kcp * controlplanev1.KubeadmControlPlane , machine * clusterv1.Machine ) error {
305
311
if err := ssa .Patch (ctx , r .Client , kcpManagerName , machine ); err != nil {
306
312
return errors .Wrap (err , "failed to create Machine" )
307
313
}
@@ -312,11 +318,7 @@ func (r *KubeadmControlPlaneReconciler) createMachine(ctx context.Context, kcp *
312
318
}
313
319
314
320
func (r * KubeadmControlPlaneReconciler ) updateMachine (ctx context.Context , machine * clusterv1.Machine , kcp * controlplanev1.KubeadmControlPlane , cluster * clusterv1.Cluster ) (* clusterv1.Machine , error ) {
315
- updatedMachine , err := r .computeDesiredMachine (
316
- kcp , cluster ,
317
- & machine .Spec .InfrastructureRef , machine .Spec .Bootstrap .ConfigRef ,
318
- machine .Spec .FailureDomain , machine ,
319
- )
321
+ updatedMachine , err := r .computeDesiredMachine (kcp , cluster , machine .Spec .FailureDomain , machine )
320
322
if err != nil {
321
323
return nil , errors .Wrap (err , "failed to update Machine: failed to compute desired Machine" )
322
324
}
@@ -336,7 +338,7 @@ func (r *KubeadmControlPlaneReconciler) updateMachine(ctx context.Context, machi
336
338
// There are small differences in how we calculate the Machine depending on if it
337
339
// is a create or update. Example: for a new Machine we have to calculate a new name,
338
340
// while for an existing Machine we have to use the name of the existing Machine.
339
- func (r * KubeadmControlPlaneReconciler ) computeDesiredMachine (kcp * controlplanev1.KubeadmControlPlane , cluster * clusterv1.Cluster , infraRef , bootstrapRef * corev1. ObjectReference , failureDomain * string , existingMachine * clusterv1.Machine ) (* clusterv1.Machine , error ) {
341
+ func (r * KubeadmControlPlaneReconciler ) computeDesiredMachine (kcp * controlplanev1.KubeadmControlPlane , cluster * clusterv1.Cluster , failureDomain * string , existingMachine * clusterv1.Machine ) (* clusterv1.Machine , error ) {
340
342
var machineName string
341
343
var machineUID types.UID
342
344
var version * string
@@ -399,13 +401,9 @@ func (r *KubeadmControlPlaneReconciler) computeDesiredMachine(kcp *controlplanev
399
401
Annotations : map [string ]string {},
400
402
},
401
403
Spec : clusterv1.MachineSpec {
402
- ClusterName : cluster .Name ,
403
- Version : version ,
404
- FailureDomain : failureDomain ,
405
- InfrastructureRef : * infraRef ,
406
- Bootstrap : clusterv1.Bootstrap {
407
- ConfigRef : bootstrapRef ,
408
- },
404
+ ClusterName : cluster .Name ,
405
+ Version : version ,
406
+ FailureDomain : failureDomain ,
409
407
},
410
408
}
411
409
@@ -431,5 +429,10 @@ func (r *KubeadmControlPlaneReconciler) computeDesiredMachine(kcp *controlplanev
431
429
desiredMachine .Spec .NodeDeletionTimeout = kcp .Spec .MachineTemplate .NodeDeletionTimeout
432
430
desiredMachine .Spec .NodeVolumeDetachTimeout = kcp .Spec .MachineTemplate .NodeVolumeDetachTimeout
433
431
432
+ if existingMachine != nil {
433
+ desiredMachine .Spec .InfrastructureRef = existingMachine .Spec .InfrastructureRef
434
+ desiredMachine .Spec .Bootstrap .ConfigRef = existingMachine .Spec .Bootstrap .ConfigRef
435
+ }
436
+
434
437
return desiredMachine , nil
435
438
}
0 commit comments