Skip to content

CM-976: Update the RBAC reconcile logic for istio-csr - #388

Merged
openshift-merge-bot[bot] merged 2 commits into
openshift:masterfrom
chiragkyal:fix-istiocsr-rbac-resource
Apr 2, 2026
Merged

CM-976: Update the RBAC reconcile logic for istio-csr#388
openshift-merge-bot[bot] merged 2 commits into
openshift:masterfrom
chiragkyal:fix-istiocsr-rbac-resource

Conversation

@chiragkyal

@chiragkyal chiragkyal commented Mar 23, 2026

Copy link
Copy Markdown
Member

Summary

  • Fix ClusterRole and ClusterRoleBinding update path to copy the live object's name onto the desired spec before calling UpdateWithRetry, since the desired object is built with GenerateName (for creation) and would otherwise fail the update with a mismatched name.

  • Extract ClusterRoleBinding modification logic into handleClusterRoleBindingModification to correctly handle the immutable RoleRef field.

  • Add comprehensive unit tests covering the new RoleRef-change code path, including delete failure, successful delete-and-recreate, and assertions that the live object name is propagated correctly during updates.

@coderabbitai

coderabbitai Bot commented Mar 23, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 331ace49-411c-4b42-bcc8-91caf95ae7cf

📥 Commits

Reviewing files that changed from the base of the PR and between 3107367 and 95e5fe8.

📒 Files selected for processing (1)
  • pkg/controller/istiocsr/rbacs.go
✅ Files skipped from review due to trivial changes (1)
  • pkg/controller/istiocsr/rbacs.go

Walkthrough

Reconciler now aligns desired RBAC resources with live objects' exact names before in-place updates; ClusterRoleBinding RoleRef immutable changes are detected and trigger delete+recreate. Tests expanded with new roleRef reconciliation cases and assertions on client calls.

Changes

Cohort / File(s) Summary
RBAC reconciliation logic
pkg/controller/istiocsr/rbacs.go
When a live ClusterRole/ClusterRoleBinding differs, the desired object adopts the live metadata.name and clears generateName before UpdateWithRetry. Added handleClusterRoleBindingModification to detect immutable RoleRef changes, delete-and-signal-recreate when needed, and emit the "Reconciled" normal event on successful in-place updates.
RBAC reconciliation tests
pkg/controller/istiocsr/rbacs_test.go
Extended TestCreateOrApplyRBACResource with per-test postAssert hooks, set i.Status.ClusterRole values, mocked client Exists to report a *rbacv1.ClusterRole named cert-manager-istio-csr, and added roleRef scenarios: delete failure, delete+create success, and delete success/create failure. Added helper assertions verifying UpdateWithRetry uses live metadata.name (with empty generateName) and validating delete/create call counts and created object fields.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci
openshift-ci Bot requested review from bharath-b-rh and swghosh March 23, 2026 10:06

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
pkg/controller/istiocsr/rbacs_test.go (1)

166-170: Assert the new update/replace behavior, not just the setup.

These additions only let the reconciler reach the new branch. They still do not verify the behavior this PR is protecting: UpdateWithRetry should see the fetched live name with GenerateName cleared, and a RoleRef mismatch should go through Delete + Create rather than UpdateWithRetry. With the current fakes, the pre-fix behavior would still pass.

Also applies to: 187-188, 197-201, 211-212

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controller/istiocsr/rbacs_test.go` around lines 166 - 170, The tests
currently only exercise the new branch without asserting the new update/replace
semantics: update the rbacs_test.go cases that use testClusterRole() (the ones
setting name "cert-manager-istio-csr") to assert that UpdateWithRetry is invoked
with the live object whose GenerateName has been cleared (i.e., capture the
object passed into the fake client's UpdateWithRetry and assert obj.GenerateName
== ""), and for the RoleRef-mismatch scenario arrange the fake Update to fail so
the reconciler must call Delete followed by Create (assert Delete and Create
were called on the fake client in that order). Locate helpers/tests referencing
testClusterRole(), cert-manager-istio-csr, UpdateWithRetry, GenerateName, and
RoleRef to add these expectations and assertions.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pkg/controller/istiocsr/rbacs.go`:
- Around line 195-203: When you detect an immutable RoleRef change
(rbacRoleBindingRefModified) and delete the old binding (r.Delete(fetched)),
also clear the stored ClusterRoleBinding name in the controller's status (the
field that holds roleBindingName) and persist that status update before
returning so the next reconcile won't look up the stale name and attempt
label-adoption; keep the rest of the flow (set exist = false) but add a status
clear/write step referencing the same status field that holds roleBindingName so
recreation via GenerateName remains idempotent.

---

Nitpick comments:
In `@pkg/controller/istiocsr/rbacs_test.go`:
- Around line 166-170: The tests currently only exercise the new branch without
asserting the new update/replace semantics: update the rbacs_test.go cases that
use testClusterRole() (the ones setting name "cert-manager-istio-csr") to assert
that UpdateWithRetry is invoked with the live object whose GenerateName has been
cleared (i.e., capture the object passed into the fake client's UpdateWithRetry
and assert obj.GenerateName == ""), and for the RoleRef-mismatch scenario
arrange the fake Update to fail so the reconciler must call Delete followed by
Create (assert Delete and Create were called on the fake client in that order).
Locate helpers/tests referencing testClusterRole(), cert-manager-istio-csr,
UpdateWithRetry, GenerateName, and RoleRef to add these expectations and
assertions.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4eec910f-c9e7-4d4d-a741-490af193e158

📥 Commits

Reviewing files that changed from the base of the PR and between 8eb5d9e and 1dad031.

📒 Files selected for processing (2)
  • pkg/controller/istiocsr/rbacs.go
  • pkg/controller/istiocsr/rbacs_test.go

Comment thread pkg/controller/istiocsr/rbacs.go Outdated
Comment on lines +195 to +203
// ClusterRoleBinding.RoleRef is immutable; a new ClusterRole name (e.g. after delete/recreate
// with GenerateName) cannot be applied via Update.
if exist && rbacRoleBindingRefModified(desired, fetched) {
r.log.V(1).Info("clusterrolebinding roleRef changed, deleting for recreation (roleRef is immutable)", "name", roleBindingName)
if err := r.Delete(r.ctx, fetched); err != nil {
return common.FromClientError(err, "failed to delete %s clusterrolebinding to replace roleRef", roleBindingName)
}
exist = false
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Keep the immutable RoleRef replacement path idempotent.

This deletes the old binding and recreates the replacement with GenerateName. If the following status update fails, the next reconcile still looks up the stale old name from status, skips label-based adoption, and creates another generated ClusterRoleBinding. That turns a transient status-write failure into duplicate cluster-scoped RBAC objects.

Suggested fix
 if exist && rbacRoleBindingRefModified(desired, fetched) {
 	r.log.V(1).Info("clusterrolebinding roleRef changed, deleting for recreation (roleRef is immutable)", "name", roleBindingName)
 	if err := r.Delete(r.ctx, fetched); err != nil {
 		return common.FromClientError(err, "failed to delete %s clusterrolebinding to replace roleRef", roleBindingName)
 	}
+	// Reuse the old name so a retry after a status-write failure reconciles
+	// the same binding instead of minting another generated one.
+	desired.SetName(fetched.GetName())
+	desired.SetGenerateName("")
 	exist = false
 }

Also applies to: 210-212

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controller/istiocsr/rbacs.go` around lines 195 - 203, When you detect an
immutable RoleRef change (rbacRoleBindingRefModified) and delete the old binding
(r.Delete(fetched)), also clear the stored ClusterRoleBinding name in the
controller's status (the field that holds roleBindingName) and persist that
status update before returning so the next reconcile won't look up the stale
name and attempt label-adoption; keep the rest of the flow (set exist = false)
but add a status clear/write step referencing the same status field that holds
roleBindingName so recreation via GenerateName remains idempotent.

Comment thread pkg/controller/istiocsr/rbacs.go Outdated
Comment on lines +104 to +106
// desired is built with GenerateName for create; for update the name must match the live object.
desired.SetName(fetched.GetName())
desired.SetGenerateName("")

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bharath-b-rh, since we are reseting the resource name all the time, cannot we hardcode the name instead of using generateName? Why it has to be dynamic?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

istio-csr is designed for multi-tenant, hence the dynamic naming for cluster scoped resources.

@bharath-b-rh

Copy link
Copy Markdown
Contributor

Pre-merge Validations:

  • Delete ClusterRole, and it should be reconciled and ClusterRoleBinding must be recreated.
$ oc get clusterroles.rbac.authorization.k8s.io\,clusterrolebindings.rbac.authorization.k8s.io -l app=cert-manager-istio-csr
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/cert-manager-istio-csr-qg6gw   2026-04-01T08:07:24Z

NAME                                                                        ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-istio-csr-gsmrc   ClusterRole/cert-manager-istio-csr-qg6gw   5h43m
$ oc delete clusterrole.rbac.authorization.k8s.io/cert-manager-istio-csr-qg6gw
clusterrole.rbac.authorization.k8s.io "cert-manager-istio-csr-qg6gw" deleted
$ oc get clusterroles.rbac.authorization.k8s.io\,clusterrolebindings.rbac.authorization.k8s.io -l app=cert-manager-istio-csr
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/cert-manager-istio-csr-4m2k6   2026-04-01T13:51:34Z

NAME                                                                        ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-istio-csr-gsmrc   ClusterRole/cert-manager-istio-csr-4m2k6   25s
I0401 13:51:33.939910       1 controller.go:161] "reconciling" logger="cert-manager-istio-csr-controller" request="istio-csr/default"
I0401 13:51:34.028621       1 recorder.go:104] "clusterrole resource /cert-manager-istio-csr-qg6gw created" logger="operator-manager.events" type="Normal" object={"kind":"IstioCSR","namespace":"istio-csr","name":"default","uid":"4bc83304-2585-4b23-91fd-ce561e4cc21d","apiVersion":"operator.openshift.io/v1alpha1","resourceVersion":"180314"} reason="Reconciled"
I0401 13:51:34.057361       1 rbacs.go:424] "clusterrolebinding has been modified, updating to desired state" logger="cert-manager-istio-csr-controller" name="/cert-manager-istio-csr-gsmrc"
I0401 13:51:34.057483       1 rbacs.go:431] "clusterrolebinding roleRef changed, deleting for recreation (roleRef is immutable)" logger="cert-manager-istio-csr-controller" name="/cert-manager-istio-csr-gsmrc"
I0401 13:51:34.189590       1 recorder.go:104] "clusterrolebinding resource /cert-manager-istio-csr-gsmrc created" logger="operator-manager.events" type="Normal" object={"kind":"IstioCSR","namespace":"istio-csr","name":"default","uid":"4bc83304-2585-4b23-91fd-ce561e4cc21d","apiVersion":"operator.openshift.io/v1alpha1","resourceVersion":"180314"} reason="Reconciled"
I0401 13:51:34.206559       1 controller.go:161] "reconciling" logger="cert-manager-istio-csr-controller" request="istio-csr/default"
  • Delete ClusterRoleBinding, should only reconcile ClusterRoleBinding.
$ oc delete clusterrolebinding.rbac.authorization.k8s.io/cert-manager-istio-csr-gsmrc
clusterrolebinding.rbac.authorization.k8s.io "cert-manager-istio-csr-gsmrc" deleted
$ oc get clusterroles.rbac.authorization.k8s.io\,clusterrolebindings.rbac.authorization.k8s.io -l app=cert-manager-istio-csr
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/cert-manager-istio-csr-4m2k6   2026-04-01T13:51:34Z

NAME                                                                        ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/cert-manager-istio-csr-k54xf   ClusterRole/cert-manager-istio-csr-4m2k6   5s
I0401 13:52:12.226719       1 controller.go:161] "reconciling" logger="cert-manager-istio-csr-controller" request="istio-csr/default"
I0401 13:52:12.302243       1 recorder.go:104] "clusterrolebinding resource /cert-manager-istio-csr-gsmrc created" logger="operator-manager.events" type="Normal" object={"kind":"IstioCSR","namespace":"istio-csr","name":"default","uid":"4bc83304-2585-4b23-91fd-ce561e4cc21d","apiVersion":"operator.openshift.io/v1alpha1","resourceVersion":"183370"} reason="Reconciled"
I0401 13:52:12.322665       1 controller.go:161] "reconciling" logger="cert-manager-istio-csr-controller" request="istio-csr/default"

/label qe-approved

@openshift-ci openshift-ci Bot added the qe-approved Signifies that QE has signed off on this PR label Apr 1, 2026
@chiragkyal
chiragkyal force-pushed the fix-istiocsr-rbac-resource branch from 1dad031 to 21affd7 Compare April 1, 2026 19:26
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Apr 1, 2026
Signed-off-by: chiragkyal <ckyal@redhat.com>
@chiragkyal
chiragkyal force-pushed the fix-istiocsr-rbac-resource branch from 21affd7 to 3107367 Compare April 1, 2026 19:35
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Apr 1, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
pkg/controller/istiocsr/rbacs_test.go (1)

727-776: Tighten these helpers to assert exact CRB replacement counts.

They currently prove only that at least one CRB delete/create happened. A regression that issues duplicate replacements in a single reconcile would still pass. Since the fake client already records Delete and Create args, assert exactly one CRB delete and one CRB create, and validate the deleted binding name too.

As per coding guidelines, focus on major issues impacting performance, readability, maintainability and security. Avoid nitpicks and avoid verbosity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controller/istiocsr/rbacs_test.go` around lines 727 - 776, The helpers
(clusterRoleBindingDeleteCount, assertClusterRoleBindingRoleRefReplaceNoUpdate,
assertClusterRoleBindingRoleRefReplaceUsesDeleteCreate) only assert "at least
one" delete/create; change them to assert exactly one CRB Delete and exactly one
CRB Create and validate the deleted binding name: use m.DeleteCallCount() and
iterate DeleteArgsForCall to ensure exactly one delete target is a
*rbacv1.ClusterRoleBinding and its GetName() equals the expected binding name,
and assert m.CreateCallCount() == 1 and inspect the single CreateArgsForCall to
validate created ClusterRoleBinding metadata.name, empty generateName, and
RoleRef.Name == wantRoleRefName; update
assertClusterRoleBindingRoleRefReplaceNoUpdate to fail if DeleteCallCount() != 1
and assertClusterRoleBindingRoleRefReplaceUsesDeleteCreate to check both counts
== 1 and validate the deleted binding name as well as the created object.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@pkg/controller/istiocsr/rbacs_test.go`:
- Around line 727-776: The helpers (clusterRoleBindingDeleteCount,
assertClusterRoleBindingRoleRefReplaceNoUpdate,
assertClusterRoleBindingRoleRefReplaceUsesDeleteCreate) only assert "at least
one" delete/create; change them to assert exactly one CRB Delete and exactly one
CRB Create and validate the deleted binding name: use m.DeleteCallCount() and
iterate DeleteArgsForCall to ensure exactly one delete target is a
*rbacv1.ClusterRoleBinding and its GetName() equals the expected binding name,
and assert m.CreateCallCount() == 1 and inspect the single CreateArgsForCall to
validate created ClusterRoleBinding metadata.name, empty generateName, and
RoleRef.Name == wantRoleRefName; update
assertClusterRoleBindingRoleRefReplaceNoUpdate to fail if DeleteCallCount() != 1
and assertClusterRoleBindingRoleRefReplaceUsesDeleteCreate to check both counts
== 1 and validate the deleted binding name as well as the created object.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 56d130dd-647b-4ade-a48c-2b28bc70c432

📥 Commits

Reviewing files that changed from the base of the PR and between 1dad031 and 21affd7.

📒 Files selected for processing (2)
  • pkg/controller/istiocsr/rbacs.go
  • pkg/controller/istiocsr/rbacs_test.go

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pkg/controller/istiocsr/rbacs.go`:
- Around line 451-457: When deleting the existing clusterrolebinding in the
block that checks rbacRoleBindingRefModified(desired, fetched), handle the
benign NotFound case returned by r.Delete(r.ctx, fetched) by checking
apierrors.IsNotFound(err) (or equivalent helper) and treating it as success
instead of returning an error; keep other errors wrapped with
common.FromClientError as before. Ensure you reference the same variables:
r.Delete(r.ctx, fetched), fetched, roleBindingName, and recreate flag, so if err
is NotFound set recreate=true and return recreate, nil (or simply continue)
rather than returning a failure.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1a11351e-33dd-4a2d-af46-7bd92b094994

📥 Commits

Reviewing files that changed from the base of the PR and between 21affd7 and 3107367.

📒 Files selected for processing (2)
  • pkg/controller/istiocsr/rbacs.go
  • pkg/controller/istiocsr/rbacs_test.go

Comment thread pkg/controller/istiocsr/rbacs.go
@bharath-b-rh

Copy link
Copy Markdown
Contributor

/retitle NO-JIRA: Update the RBAC reconcile logic for istio-csr

@openshift-ci openshift-ci Bot changed the title Update the RBAC reconcile logic for istio-csr NO-JIRA: Update the RBAC reconcile logic for istio-csr Apr 2, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Apr 2, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@chiragkyal: This pull request explicitly references no jira issue.

Details

In response to this:

Summary

  • Fix ClusterRole and ClusterRoleBinding update path to copy the live object's name onto the desired spec before calling UpdateWithRetry, since the desired object is built with GenerateName (for creation) and would otherwise fail the update with a mismatched name.

  • Extract ClusterRoleBinding modification logic into handleClusterRoleBindingModification to correctly handle the immutable RoleRef field.

  • Add comprehensive unit tests covering the new RoleRef-change code path, including delete failure, successful delete-and-recreate, and assertions that the live object name is propagated correctly during updates.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@chiragkyal

chiragkyal commented Apr 2, 2026

Copy link
Copy Markdown
Member Author

/retitle CM-976: Update the RBAC reconcile logic for istio-csr

@openshift-ci openshift-ci Bot changed the title NO-JIRA: Update the RBAC reconcile logic for istio-csr CM-976: Update the RBAC reconcile logic for istio-csr Apr 2, 2026
@openshift-ci-robot

openshift-ci-robot commented Apr 2, 2026

Copy link
Copy Markdown

@chiragkyal: This pull request references CM-976 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the task to target the "4.22.0" version, but no target version was set.

Details

In response to this:

Summary

  • Fix ClusterRole and ClusterRoleBinding update path to copy the live object's name onto the desired spec before calling UpdateWithRetry, since the desired object is built with GenerateName (for creation) and would otherwise fail the update with a mismatched name.

  • Extract ClusterRoleBinding modification logic into handleClusterRoleBindingModification to correctly handle the immutable RoleRef field.

  • Add comprehensive unit tests covering the new RoleRef-change code path, including delete failure, successful delete-and-recreate, and assertions that the live object name is propagated correctly during updates.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Signed-off-by: chiragkyal <ckyal@redhat.com>
@bharath-b-rh

Copy link
Copy Markdown
Contributor

/lgtm
/label docs-approved
/label px-approved

@openshift-ci openshift-ci Bot added docs-approved Signifies that Docs has signed off on this PR px-approved Signifies that Product Support has signed off on this PR labels Apr 2, 2026
@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Apr 2, 2026
@openshift-ci

openshift-ci Bot commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: bharath-b-rh, chiragkyal

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Apr 2, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD 7255048 and 2 for PR HEAD 95e5fe8 in total

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD 64ddff2 and 1 for PR HEAD 95e5fe8 in total

@openshift-ci

openshift-ci Bot commented Apr 2, 2026

Copy link
Copy Markdown
Contributor

@chiragkyal: all tests passed!

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@openshift-merge-bot
openshift-merge-bot Bot merged commit b50a56a into openshift:master Apr 2, 2026
10 checks passed
@chiragkyal
chiragkyal deleted the fix-istiocsr-rbac-resource branch April 5, 2026 09:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. docs-approved Signifies that Docs has signed off on this PR jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. px-approved Signifies that Product Support has signed off on this PR qe-approved Signifies that QE has signed off on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants