@@ -17,6 +17,7 @@ limitations under the License.
1717package machinedeployment
1818
1919import (
20+ "cmp"
2021 "context"
2122 "fmt"
2223 "strings"
@@ -31,8 +32,8 @@ import (
3132 clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
3233 runtimehooksv1 "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1"
3334 "sigs.k8s.io/cluster-api/controllers/external"
34- "sigs.k8s.io/cluster-api/internal/controllers/machinedeployment/mdutil"
3535 "sigs.k8s.io/cluster-api/internal/util/compare"
36+ "sigs.k8s.io/cluster-api/internal/util/inplace"
3637 "sigs.k8s.io/cluster-api/internal/util/patch"
3738)
3839
@@ -236,10 +237,10 @@ func matchesMachineSet(req *runtimehooksv1.CanUpdateMachineSetRequest) (bool, []
236237 if req .Current .BootstrapConfigTemplate .Object != nil && req .Desired .BootstrapConfigTemplate .Object != nil {
237238 match , diff , err = matchesUnstructuredSpec (req .Current .BootstrapConfigTemplate , req .Desired .BootstrapConfigTemplate )
238239 if err != nil {
239- return false , nil , errors .Wrapf (err , "failed to match BootstrapConfigTemplate" )
240+ return false , nil , errors .Wrapf (err , "failed to match %s" , req . Current . BootstrapConfigTemplate . Object . GetObjectKind (). GroupVersionKind (). Kind )
240241 }
241242 if ! match {
242- reasons = append (reasons , fmt .Sprintf ("BootstrapConfigTemplate cannot be updated in-place: %s" , diff ))
243+ reasons = append (reasons , fmt .Sprintf ("%s cannot be updated in-place: %s" , req . Current . BootstrapConfigTemplate . Object . GetObjectKind (). GroupVersionKind (). Kind , diff ))
243244 }
244245 }
245246 match , diff , err = matchesUnstructuredSpec (req .Current .InfrastructureMachineTemplate , req .Desired .InfrastructureMachineTemplate )
@@ -259,29 +260,21 @@ func matchesMachineSet(req *runtimehooksv1.CanUpdateMachineSetRequest) (bool, []
259260
260261func matchesMachineSetSpec (patched , desired * clusterv1.MachineSet ) (equal bool , diff string , matchErr error ) {
261262 // Note: Wrapping MachineSet specs in a MachineSet for proper formatting of the diff.
262- cleanedUpPatchedMachineSet := & clusterv1.MachineSet {
263- Spec : clusterv1.MachineSetSpec {
264- Template : clusterv1.MachineTemplateSpec {
265- Spec : patched .Spec .Template .Spec ,
263+ return compare .Diff (
264+ & clusterv1.MachineSet {
265+ Spec : clusterv1.MachineSetSpec {
266+ Template : clusterv1.MachineTemplateSpec {
267+ Spec : * inplace .CleanupMachineSpecForDiff (& patched .Spec .Template .Spec ),
268+ },
266269 },
267- },
268- }
269- cleanedUpDesiredMachineSet := & clusterv1.MachineSet {
270- Spec : clusterv1.MachineSetSpec {
271- Template : clusterv1.MachineTemplateSpec {
272- Spec : desired .Spec .Template .Spec ,
270+ }, & clusterv1.MachineSet {
271+ Spec : clusterv1.MachineSetSpec {
272+ Template : clusterv1.MachineTemplateSpec {
273+ Spec : * inplace .CleanupMachineSpecForDiff (& desired .Spec .Template .Spec ),
274+ },
273275 },
274276 },
275- }
276-
277- // Cleanup fields that are not the responsibility of the in-place update extension.
278- // Remove in-place mutable fields.
279- cleanedUpPatchedMachineSet .Spec .Template = * mdutil .MachineTemplateDeepCopyRolloutFields (& cleanedUpPatchedMachineSet .Spec .Template )
280- cleanedUpDesiredMachineSet .Spec .Template = * mdutil .MachineTemplateDeepCopyRolloutFields (& cleanedUpDesiredMachineSet .Spec .Template )
281- // Set refs equal.
282- cleanedUpPatchedMachineSet .Spec .Template .Spec .Bootstrap .ConfigRef = cleanedUpDesiredMachineSet .Spec .Template .Spec .Bootstrap .ConfigRef
283- cleanedUpPatchedMachineSet .Spec .Template .Spec .InfrastructureRef = cleanedUpDesiredMachineSet .Spec .Template .Spec .InfrastructureRef
284- return compare .Diff (cleanedUpPatchedMachineSet , cleanedUpDesiredMachineSet )
277+ )
285278}
286279
287280func matchesUnstructuredSpec (patched , desired runtime.RawExtension ) (equal bool , diff string , matchErr error ) {
@@ -335,23 +328,23 @@ func (p *rolloutPlanner) getTemplateObjects(ctx context.Context, oldMS, newMS *c
335328
336329 templateObjects .CurrentInfraMachineTemplate , err = external .GetObjectFromContractVersionedRef (ctx , p .Client , oldMS .Spec .Template .Spec .InfrastructureRef , oldMS .Namespace )
337330 if err != nil {
338- return nil , errors .Wrapf (err , "failed to get InfrastructureMachineTemplate from MachineSet %s" , oldMS .Name )
331+ return nil , errors .Wrapf (err , "failed to get %s from MachineSet %s" , cmp . Or ( oldMS . Spec . Template . Spec . InfrastructureRef . Kind , "InfrastructureMachineTemplate" ) , oldMS .Name )
339332 }
340333 templateObjects .DesiredInfraMachineTemplate , err = external .GetObjectFromContractVersionedRef (ctx , p .Client , newMS .Spec .Template .Spec .InfrastructureRef , newMS .Namespace )
341334 if err != nil {
342- return nil , errors .Wrapf (err , "failed to get InfrastructureMachineTemplate from MachineSet %s" , newMS .Name )
335+ return nil , errors .Wrapf (err , "failed to get %s from MachineSet %s" , cmp . Or ( newMS . Spec . Template . Spec . InfrastructureRef . Kind , "InfrastructureMachineTemplate" ) , newMS .Name )
343336 }
344337
345338 if oldMS .Spec .Template .Spec .Bootstrap .ConfigRef .IsDefined () {
346339 templateObjects .CurrentBootstrapConfigTemplate , err = external .GetObjectFromContractVersionedRef (ctx , p .Client , oldMS .Spec .Template .Spec .Bootstrap .ConfigRef , oldMS .Namespace )
347340 if err != nil {
348- return nil , errors .Wrapf (err , "failed to get BootstrapConfigTemplate from MachineSet %s" , oldMS .Name )
341+ return nil , errors .Wrapf (err , "failed to get %s from MachineSet %s" , cmp . Or ( oldMS . Spec . Template . Spec . Bootstrap . ConfigRef . Kind , "BootstrapConfigTemplate" ) , oldMS .Name )
349342 }
350343 }
351344 if newMS .Spec .Template .Spec .Bootstrap .ConfigRef .IsDefined () {
352345 templateObjects .DesiredBootstrapConfigTemplate , err = external .GetObjectFromContractVersionedRef (ctx , p .Client , newMS .Spec .Template .Spec .Bootstrap .ConfigRef , newMS .Namespace )
353346 if err != nil {
354- return nil , errors .Wrapf (err , "failed to get BootstrapConfigTemplate from MachineSet %s" , newMS .Name )
347+ return nil , errors .Wrapf (err , "failed to get %s from MachineSet %s" , cmp . Or ( newMS . Spec . Template . Spec . Bootstrap . ConfigRef . Kind , "BootstrapConfigTemplate" ) , newMS .Name )
355348 }
356349 }
357350
0 commit comments