Skip to content

Keystone: RoleAssignment Controller#774

Open
dlaw4608 wants to merge 2 commits into
k-orc:mainfrom
dlaw4608:role_assignment
Open

Keystone: RoleAssignment Controller#774
dlaw4608 wants to merge 2 commits into
k-orc:mainfrom
dlaw4608:role_assignment

Conversation

@dlaw4608

@dlaw4608 dlaw4608 commented May 1, 2026

Copy link
Copy Markdown
Contributor

Closes #669
Implement RoleAssignment controller treating role assignments as relationships
rather than resources, since OpenStack doesn't assign IDs to role assignments.

Key changes:
- Custom reconciler: Ignores generic framework since role assignments lack
OpenStack resource IDs
- Component-based identification: Uses tuple (roleID, userID/groupID,
projectID/domainID) stored in Status.Resource instead of UIDs
- Status.ID intentionally nil: Components serve as natural identifiers
- Immutable spec: Role assignments can't be modified after creation
(matching Kubernetes RBAC behavior)
- Deletion guards: All dependencies (Role, User/Group, Project/Domain)
protected from deletion while in use

E2E tests cover four actor-scope combinations:
- roleassignment-create-user-project
- roleassignment-create-user-domain
- roleassignment-create-group-project
- roleassignment-create-group-domain

Plus roleassignment-dependency test verifying deletion guard behavior.

Implementation details:
- reconciler.go: Custom reconcile loop handling create/delete lifecycle
- actuator.go: GetResourceByComponents() replaces GetOSResourceByID()

API Ref: https://docs.openstack.org/api-ref/identity/v3/index.html#roles

@github-actions github-actions Bot added the semver:major Breaking change label May 1, 2026
…t Controller

Signed-off-by: Daniel Lawton <dlawton@redhat.com>
@dlaw4608 dlaw4608 force-pushed the role_assignment branch 3 times, most recently from a79310e to 1235e66 Compare May 19, 2026 16:48
@dlaw4608 dlaw4608 marked this pull request as ready for review May 19, 2026 16:48
@dlaw4608 dlaw4608 marked this pull request as draft May 20, 2026 09:31
…ationships

  rather than resources, since OpenStack doesn't assign IDs to role assignments.

  Key changes:
  - Custom reconciler: Ignores generic framework since role assignments lack
    OpenStack resource IDs
  - Component-based identification: Uses tuple (roleID, userID/groupID,
    projectID/domainID) stored in Status.Resource instead of UIDs
  - Status.ID intentionally nil: Components serve as natural identifiers
  - Immutable spec: Role assignments can't be modified after creation
    (matching Kubernetes RBAC behavior)
  - Deletion guards: All dependencies (Role, User/Group, Project/Domain)
    protected from deletion while in use

  E2E tests cover four actor-scope combinations:
  - roleassignment-create-user-project
  - roleassignment-create-user-domain
  - roleassignment-create-group-project
  - roleassignment-create-group-domain

  Plus roleassignment-dependency test verifying deletion guard behavior.

  Implementation details:
  - reconciler.go: Custom reconcile loop handling create/delete lifecycle
  - actuator.go: GetResourceByComponents() replaces GetOSResourceByID()

Signed-off-by: Daniel Lawton <dlawton@redhat.com>
@dlaw4608 dlaw4608 marked this pull request as ready for review May 20, 2026 11:36
@berendt

berendt commented Jun 10, 2026

Copy link
Copy Markdown

@mandre Can you have a look please? We need this one soonish.

@mandre

mandre commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

@mandre Can you have a look please? We need this one soonish.

Will do. We can review this new controller and merge it soon, but I can't promise this will be in a release shortly (we've switched the main branch to v3 development and I'm a bit reluctant about backporting controllers to v2 as). We'll see.

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

Labels

semver:major Breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Keystone Role Assignment Controller

3 participants