K8s: RBAC yaml examples [PARKED] - #3724
Draft
kaitlynmichael wants to merge 1 commit into
Draft
Conversation
Contributor
Contributor
🧠 Redis MemoryNo related prior context found — this looks new to the repository's memory. Memory updated at ab8d3f7 |
Contributor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a YAML examples page for RBAC access control, covering all six RBAC custom resources (REACL, REUSER, REROLE, RECROLE, REROLEBINDING, RECROLEBINDING).
The
reference/yaml/section is the established home for generated CRD example embeds — no API reference page carries examples, so this follows the existing pattern rather than making the RBAC reference pages an exception.Changes
reference/yaml/access-control.md(weight 50), structured in dependency order: ACLs → users → roles → cluster roles → role bindings → cluster role bindings.content/embeds/k8s/, generated with the sync workflow's ownformatYamlSnippetfunction so they are byte-identical to what the next API sync will emit.reference/yaml/_index.md— added to the example-categories list.log-collector-rbac.md— weight 50 → 60 to make room.Not in this PR, deliberately: the eight
formatYamlSnippetlines for.github/workflows/k8s_apis_sync.yaml. See the manifest checklist — landing them before the upstream change ships would silently corrupt the embeds.Park manifest
Ticket: DOC-6865
Parked at: 2026-07-28
Trigger to pick up: operator PR redislabsdev/redis-enterprise-operator#6768 merged into
masterand present in a released operator tag newer thanv8.2.0-12— testably, a tag wheredeploy/examples/v1alpha1/reacl_full_access.yamlandreuser_admin.yamlboth exist.Labels: parked, do not merge yet
Pinned sources (state observed at park time)
state: open,merged: false,draft: false,head_sha: 45a6f85e2a49385f350927724510ffb1a2d4aa67,base: master,milestone: null,mergeable_state: blocked,changed_files: 5,updated_at: 2026-07-28T19:49:25Zgh api repos/RedisLabsDev/redis-enterprise-operator/pulls/6768 --jq '{state, merged, head_sha: .head.sha, base: .base.ref, milestone: .milestone.title, updated_at}'v8.2.0-12(Duckburg GA)v8.2.*tag at park time. Contains the pre-fix examples with the four dangling references.git -C <operator> fetch --tags && git tag | grep -E '^v8\.2\.' | sort -V | tail -1Example-file blob SHAs at
v8.2.0-12— the pre-change baseline. On unpark, diff the shipped tag's files against these; any row that changed needs its embed regenerated.deploy/examples/v1alpha1/)v8.2.0-12reacl.yaml1d4022de7513866f4eefadecd2ff88c06c3ebe02reacl_full_access.yamlreuser.yamle9bdb984a9231236a1a745efe356e9c535fcfa5d(modified by #6768)reuser_admin.yamlrerole.yamlebe22de6726d2faf56cb388c0d5adf1a908faa71(modified by #6768)recrole.yamlee92bba9c4e32c54f2f3f43d8fb114573d3863b6(unchanged by #6768)rerolebinding.yamlbbc9dbb4c6126a03e2ba30ac82dc629daa99392c(unchanged by #6768)recrolebinding.yamle9146383d267582381241e0b2c609334d2c42c90(unchanged by #6768)Re-fetch a single blob:
git -C <operator> rev-parse <tag>:deploy/examples/v1alpha1/<file>Observed shape the page assumes
Two different confidence levels apply here, and conflating them would mislead unpark.
CRD field shape and semantics — HIGH. All six RBAC CRDs are GA in Duckburg 8.2.0; nothing on this page documents unreleased behavior. Verified directly against
deploy/crds/*_crd.yamlatv8.2.0-12and the generated API reference pages:RedisEnterpriseRole.spec.managementRoleenum is database-scoped only:DBMember,DBViewer,None; defaults toNonewhen omitted.RedisEnterpriseClusterRole.spec.managementRoleenum is the full set:Admin,ClusterMember,ClusterViewer,DBMember,DBViewer,UserManager,None.RedisEnterpriseUser.spechas no required fields;emailandusernameare both optional, and an omitted username is assigned by the operator and surfaced in status.metadata.name), notspec.username.#spec,#specacl,#specscopes,#specroleref,#specsubjects,#specpasswordsecrets) all exist on the generated pages;npx hugoexits 0.Example manifest content (names, filenames, values) — LOW. #6768 is unmerged and its content has already shifted once during drafting (user emails changed from
@some-company.comto@example.com, and apassword-key comment was added). Specifically provisional:reacl_full_access.yamlandreuser_admin.yaml— the embed filenames and the future workflow lines both hard-code these.full-access,some-db-user,some-admin-user, andrerole's scope targetredb.+@all ~*ACL expression (the integration suite uses the equivalent~* +@all).Deliberate decision — no
bannerTexton the page. The park skill suggests a "not yet released / subject to change" banner, and this page intentionally does not have one. Every manifest embedded here is valid against the current GA release, and all six CRDs shipped in 8.2.0 — what's pending is only whether the operator repo ships two of them as example files. A "not yet released" banner would misinform readers about GA functionality and conflicts with documenting current behavior only. Do not add one on unpark.Re-check checklist
Note: the branch's single commit carries no
/reflecttrailers (no body), so this checklist is seeded from the drafting analysis rather than harvested trailers.formatYamlSnippetlines to.github/workflows/k8s_apis_sync.yaml, and only once the change is in a released tag. The step has noset -e, soformatYamlSnippeton a missing file exits 0 and writes an empty ```yaml fence. Landing the lines early would blankreacl_full_access.mdand `reuser_admin.md`, and revert `reuser.md`/`rerole.md` to the dangling names — with CI green.content/embeds/k8s/against the shipped tag. If any blob SHA differs from the table above (beyond the predicted changes), regenerate that embed with the workflow'sformatYamlSnippet, not by hand.reacl_full_access.yamlorreuser_admin.yaml. Both embed filenames and the workflow lines hard-code them.#docs-k8s2026-07-28). Does Redis Software reject creating aredis_aclwhose rule duplicates a built-in ACL? The newfull-accessexample uses+@all ~*, which matches the built-in Full Access. Not verifiable without a live cluster. If it does reject: the fix widens beyond #6768 — the pre-existingread-onlyexample (+@read ~*) has the same problem, and on the docs side this page's prose plus thereacl.mdandreacl_full_access.mdembeds all change. Resolve before unparking.rerole→redb+read-only;recrole→full-access;rerolebinding→some-db-user;recrolebinding→some-admin-user.@example.com(already changed once mid-draft).alm-examplesstill matchesdeploy/examples/— no tooling syncs the two, and that drift is the root cause of the original bug. Noteredb.yamlsetsreplication: falsewhile the CSV setsreplication: true; pre-existing, left alone.npx hugo— confirm exit 0, all eight embeds render, and no empty code fences.REDticket on #6768; if so, note it on DOC-6865.security/access-control/should switch to these embeds. Out of scope here; they're pedagogically sequenced for their procedures and may be better hand-maintained.On unpark, then
Run
/unpark 3724. It re-fetches each pinned source, diffs against the snapshots above, reports what changed versus what was predicted, reconciles the docs, and then takes this PR through the normal/reflect→/finalizepipeline./finalizeis deferred until then — the episodic notes must survive until the source settles. Thedo not merge yetguard holds until/finalizecompletes.