@@ -91,6 +91,8 @@ func (r *RuleReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager)
9191// +kubebuilder:rbac:groups=readiness.node.x-k8s.io,resources=nodereadinessrules/status,verbs=get;update;patch
9292// +kubebuilder:rbac:groups=readiness.node.x-k8s.io,resources=nodereadinessrules/finalizers,verbs=update
9393// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch
94+ // +kubebuilder:rbac:groups="",resources=configmaps,verbs=get;list;watch;create;update;patch;delete
95+ // +kubebuilder:rbac:groups="",resources=nodes,verbs=get;list;watch;create;update;patch;delete
9496
9597func (r * RuleReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
9698 log := ctrl .LoggerFrom (ctx )
@@ -180,6 +182,7 @@ func (r *RuleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.
180182// 1. Deletes the taints associated with the rule.
181183// 2. Remove the rule from the cache.
182184// 3. Remove the finalizer from the rule.
185+ // 4. Sync the Taints ConfigMap.
183186func (r * RuleReconciler ) reconcileDelete (ctx context.Context , rule * readinessv1alpha1.NodeReadinessRule ) (ctrl.Result , error ) {
184187 log := ctrl .LoggerFrom (ctx )
185188
@@ -203,6 +206,13 @@ func (r *RuleReconciler) reconcileDelete(ctx context.Context, rule *readinessv1a
203206 if err != nil {
204207 return ctrl.Result {}, err
205208 }
209+
210+ // Sync taints to ConfigMap for MutatingAdmissionPolicy
211+ if err := r .Controller .syncTaintsConfigMap (ctx ); err != nil {
212+ log .Error (err , "Failed to sync taints configmap" , "rule" , rule .Name )
213+ // Don't fail reconciliation for this - log and continue
214+ }
215+
206216 return ctrl.Result {}, nil
207217}
208218
@@ -697,6 +707,10 @@ func (r *RuleReadinessController) syncTaintsConfigMap(ctx context.Context) error
697707 // Extract unique taint keys with readiness.k8s.io/ prefix and NoSchedule effect
698708 taintKeysSet := make (map [string ]struct {})
699709 for _ , rule := range ruleList .Items {
710+ // Skip rules that are being deleted
711+ if ! rule .DeletionTimestamp .IsZero () {
712+ continue
713+ }
700714 if rule .Spec .Taint .Key != "" &&
701715 strings .HasPrefix (rule .Spec .Taint .Key , "readiness.k8s.io/" ) &&
702716 rule .Spec .Taint .Effect == corev1 .TaintEffectNoSchedule {
@@ -740,7 +754,7 @@ func (r *RuleReadinessController) syncTaintsConfigMap(ctx context.Context) error
740754 } else {
741755 // Update existing ConfigMap
742756 log .V (1 ).Info ("Updating readiness-taints ConfigMap" , "taintCount" , len (taintKeys ))
743- patch := client .MergeFrom (existingCM )
757+ patch := client .MergeFrom (existingCM . DeepCopy () )
744758 existingCM .Data = cm .Data
745759 if err := r .Patch (ctx , existingCM , patch ); err != nil {
746760 return fmt .Errorf ("failed to update configmap: %w" , err )
0 commit comments