Skip to content

Commit f66a0a0

Browse files
Updates InfraMachine watch_filters
1 parent aa6f9a1 commit f66a0a0

File tree

9 files changed

+1155
-922
lines changed

9 files changed

+1155
-922
lines changed

pkg/controllers/machinemigration/suite_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import (
2929
"k8s.io/apimachinery/pkg/api/meta"
3030
"k8s.io/client-go/rest"
3131
"k8s.io/klog/v2"
32-
"k8s.io/klog/v2/textlogger"
3332

33+
ctrl "sigs.k8s.io/controller-runtime"
3434
"sigs.k8s.io/controller-runtime/pkg/client"
3535
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
3636
"sigs.k8s.io/controller-runtime/pkg/envtest"
@@ -54,7 +54,8 @@ func TestMachineMigration(t *testing.T) {
5454
var _ = BeforeSuite(func() {
5555
klog.SetOutput(GinkgoWriter)
5656

57-
logf.SetLogger(textlogger.NewLogger(textlogger.NewConfig()))
57+
logf.SetLogger(GinkgoLogr)
58+
ctrl.SetLogger(GinkgoLogr)
5859

5960
By("bootstrapping test environment")
6061
var err error

pkg/controllers/machinesetmigration/suite_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import (
2929
"k8s.io/apimachinery/pkg/api/meta"
3030
"k8s.io/client-go/rest"
3131
"k8s.io/klog/v2"
32-
"k8s.io/klog/v2/textlogger"
3332

33+
ctrl "sigs.k8s.io/controller-runtime"
3434
"sigs.k8s.io/controller-runtime/pkg/client"
3535
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
3636
"sigs.k8s.io/controller-runtime/pkg/envtest"
@@ -54,7 +54,8 @@ func TestMachineSetMigration(t *testing.T) {
5454
var _ = BeforeSuite(func() {
5555
klog.SetOutput(GinkgoWriter)
5656

57-
logf.SetLogger(textlogger.NewLogger(textlogger.NewConfig()))
57+
logf.SetLogger(GinkgoLogr)
58+
ctrl.SetLogger(GinkgoLogr)
5859

5960
By("bootstrapping test environment")
6061
var err error

pkg/controllers/machinesetsync/machineset_sync_controller.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@ var (
8686

8787
// errMachineAPIMachineSetOwnerReferenceConversionUnsupported.
8888
errMachineAPIMachineSetOwnerReferenceConversionUnsupported = errors.New("could not convert Machine API machine set owner references to Cluster API")
89+
90+
// errInvalidInfraClusterReference is returned when the cluster name is empty in CAPI machineset spec.
91+
errInvalidInfraClusterReference = errors.New("cluster name is empty in Cluster API machine set spec")
92+
93+
// errInvalidInfraMachineTemplateReference is returned when the infrastructure machine template reference is invalid or incomplete.
94+
errInvalidInfraMachineTemplateReference = errors.New("infrastructure machine template reference is invalid or incomplete")
8995
)
9096

9197
const (
@@ -104,6 +110,8 @@ const (
104110
messageSuccessfullySynchronizedMAPItoCAPI = "Successfully synchronized MAPI MachineSet to CAPI"
105111

106112
controllerName string = "MachineSetSyncController"
113+
114+
terminalConfigurationErrorLog string = "Detected terminal configuration error - cluster name or infrastructure machine template reference is empty, not requeuing"
107115
)
108116

109117
// MachineSetSyncReconciler reconciles CAPI and MAPI MachineSets.
@@ -234,6 +242,18 @@ func (r *MachineSetSyncReconciler) fetchCAPIInfraResources(ctx context.Context,
234242
Name: infraMachineTemplateRef.Name,
235243
}
236244

245+
// Validate that required references are not empty to avoid nil pointer issues later.
246+
// These are terminal configuration errors that require user intervention.
247+
if capiMachineSet.Spec.ClusterName == "" {
248+
return nil, nil, fmt.Errorf("machine set %s/%s: %w",
249+
capiMachineSet.Namespace, capiMachineSet.Name, errInvalidInfraClusterReference)
250+
}
251+
252+
if infraMachineTemplateRef.Name == "" || infraMachineTemplateRef.Namespace == "" {
253+
return nil, nil, fmt.Errorf("machine %s/%s: %w",
254+
capiMachineSet.Namespace, capiMachineSet.Name, errInvalidInfraMachineTemplateReference)
255+
}
256+
237257
infraMachineTemplate, infraCluster, err := controllers.InitInfraMachineTemplateAndInfraClusterFromProvider(r.Platform)
238258
if err != nil {
239259
return nil, nil, fmt.Errorf("unable to devise CAPI infra resources: %w", err)
@@ -340,6 +360,12 @@ func (r *MachineSetSyncReconciler) reconcileMAPIMachineSetToCAPIMachineSet(ctx c
340360
restoreCAPIFields(existingCAPIMachineSet, convertedCAPIMachineSet, r.CAPINamespace, authoritativeAPI, clusterOwnerRefence)
341361

342362
if err := r.ensureCAPIInfraMachineTemplate(ctx, sourceMAPIMachineSet, convertedCAPIMachineSet, convertedCAPIInfraMachineTemplate, clusterOwnerRefence); err != nil {
363+
// Don't requeue for terminal configuration errors
364+
if isTerminalConfigurationError(err) {
365+
logger.Error(err, terminalConfigurationErrorLog)
366+
return ctrl.Result{}, nil
367+
}
368+
343369
return ctrl.Result{}, fmt.Errorf("unable to ensure CAPI infra machine template: %w", err)
344370
}
345371

@@ -571,6 +597,14 @@ func (r *MachineSetSyncReconciler) reconcileCAPIMachineSetToMAPIMachineSet(ctx c
571597
if err != nil {
572598
fetchErr := fmt.Errorf("failed to fetch CAPI infra resources: %w", err)
573599

600+
// Don't requeue for terminal configuration errors
601+
if isTerminalConfigurationError(err) {
602+
logger.Error(err, terminalConfigurationErrorLog)
603+
r.Recorder.Event(sourceCAPIMachineSet, corev1.EventTypeWarning, "SynchronizationError", fetchErr.Error())
604+
605+
return ctrl.Result{}, nil
606+
}
607+
574608
if condErr := r.applySynchronizedConditionWithPatch(
575609
ctx, existingMAPIMachineSet, corev1.ConditionFalse, reasonFailedToGetCAPIInfraResources, fetchErr.Error(), nil); condErr != nil {
576610
return ctrl.Result{}, utilerrors.NewAggregate([]error{fetchErr, condErr})
@@ -1531,3 +1565,13 @@ func hasSpecOrMetadataOrProviderSpecChanges(diff map[string]any) bool {
15311565

15321566
return ok1 || ok2 || ok3
15331567
}
1568+
1569+
// isTerminalConfigurationError returns true if the provided error is
1570+
// errInvalidClusterInfraReference or errInvalidInfraMachineTemplateReference.
1571+
func isTerminalConfigurationError(err error) bool {
1572+
if errors.Is(err, errInvalidInfraClusterReference) || errors.Is(err, errInvalidInfraMachineTemplateReference) {
1573+
return true
1574+
}
1575+
1576+
return false
1577+
}

0 commit comments

Comments
 (0)