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
Copy link
Copy Markdown
Contributor

@dlaw4608 dlaw4608 commented May 1, 2026

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
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.

1 participant