Skip to content

fix(operator): rollout-restart uses the update verb but the chart RBAC grants only get/patch — restarts 403 #213

Description

@BryanFRD

Found during the 2026-08 FerrVault operator audit.

Problem

triggerRollouts patches the pod-template restart annotation via r.Update(...) (internal/controller/ferrvaultsecret_sync.go:83), which issues an HTTP PUT (the update verb). But the shipped ClusterRole grants only get, patch on deployments/statefulsets/daemonsets (charts/ferrvault-operator/templates/clusterrole.yaml:20-22). So every rollout restart returns 403 Forbidden.

Verified: r.Update(ctx, obj) at sync.go:83; clusterrole apps verbs [get, patch] at line 22.

Impact

Auto-reload of consuming pods — a headline capability for a secret-sync operator — never works with the chart as shipped. The failure is only logged and discarded (see the swallowed-rollout-failure issue), so it's silent: users get rotated secrets that never take effect in running pods.

Fix

Switch triggerRollouts to a client.Patch (strategic-merge/JSON patch on the pod-template annotation — also avoids write conflicts on busy workloads), which the existing patch grant already allows. (Adding update to the ClusterRole would also work but Patch is the safer fix.)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High prioritybugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions