diff --git a/bootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.go b/bootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.go index a95fe89beb67..8731e5f7eb1e 100644 --- a/bootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.go +++ b/bootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.go @@ -54,6 +54,7 @@ import ( expv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1" "sigs.k8s.io/cluster-api/feature" "sigs.k8s.io/cluster-api/internal/util/taints" + "sigs.k8s.io/cluster-api/pkg/standby" "sigs.k8s.io/cluster-api/util" "sigs.k8s.io/cluster-api/util/conditions" v1beta2conditions "sigs.k8s.io/cluster-api/util/conditions/v1beta2" @@ -145,7 +146,13 @@ func (r *KubeadmConfigReconciler) SetupWithManager(ctx context.Context, mgr ctrl ), ).WatchesRawSource(r.ClusterCache.GetClusterSource("kubeadmconfig", r.ClusterToKubeadmConfigs)) - if err := b.Complete(r); err != nil { + if err := b.Complete(standby.WrapClusterNamedReconcilerWithConfigMapDetector( + mgr.GetAPIReader(), + "kubeadmconfig", + func() client.Object { return &bootstrapv1.KubeadmConfig{} }, + func(obj client.Object) string { return obj.GetLabels()[clusterv1.ClusterNameLabel] }, + r, + )); err != nil { return errors.Wrap(err, "failed setting up with a controller manager") } return nil diff --git a/controlplane/kubeadm/config/rbac/role.yaml b/controlplane/kubeadm/config/rbac/role.yaml index ba9d19f28edb..8430ce9f1cea 100644 --- a/controlplane/kubeadm/config/rbac/role.yaml +++ b/controlplane/kubeadm/config/rbac/role.yaml @@ -4,6 +4,12 @@ kind: ClusterRole metadata: name: manager-role rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get - apiGroups: - "" resources: diff --git a/controlplane/kubeadm/internal/controllers/controller.go b/controlplane/kubeadm/internal/controllers/controller.go index 8b735bab4dd6..b87c2ecafb0f 100644 --- a/controlplane/kubeadm/internal/controllers/controller.go +++ b/controlplane/kubeadm/internal/controllers/controller.go @@ -50,6 +50,7 @@ import ( "sigs.k8s.io/cluster-api/feature" "sigs.k8s.io/cluster-api/internal/contract" "sigs.k8s.io/cluster-api/internal/util/ssa" + "sigs.k8s.io/cluster-api/pkg/standby" "sigs.k8s.io/cluster-api/util" "sigs.k8s.io/cluster-api/util/collections" "sigs.k8s.io/cluster-api/util/conditions" @@ -69,6 +70,7 @@ const ( ) // +kubebuilder:rbac:groups=core,resources=events,verbs=create;patch +// +kubebuilder:rbac:groups=core,resources=configmaps,verbs=get // +kubebuilder:rbac:groups=core,resources=secrets,verbs=get;list;watch;create;update;patch // +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io;bootstrap.cluster.x-k8s.io;controlplane.cluster.x-k8s.io,resources=*,verbs=get;list;watch;create;update;patch;delete // +kubebuilder:rbac:groups=cluster.x-k8s.io,resources=clusters;clusters/status,verbs=get;list;watch @@ -133,7 +135,13 @@ func (r *KubeadmControlPlaneReconciler) SetupWithManager(ctx context.Context, mg ). WatchesRawSource(r.ClusterCache.GetClusterSource("kubeadmcontrolplane", r.ClusterToKubeadmControlPlane, clustercache.WatchForProbeFailure(r.RemoteConditionsGracePeriod))). - Build(r) + Build(standby.WrapClusterNamedReconcilerWithConfigMapDetector( + mgr.GetAPIReader(), + "kubeadmcontrolplane", + func() client.Object { return &controlplanev1.KubeadmControlPlane{} }, + func(obj client.Object) string { return obj.GetLabels()[clusterv1.ClusterNameLabel] }, + r, + )) if err != nil { return errors.Wrap(err, "failed setting up with a controller manager") }