Skip to content

feat(domain-config): Add configuration API - #1201

Merged
gtema merged 1 commit into
mainfrom
feat/domain-config-api
Sep 3, 2026
Merged

gtema merged 1 commit into
mainfrom
feat/domain-config-api

Conversation

@gtema

@gtema gtema commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

What

Issue #954 phase 4 (#959): the REST surface for per-domain identity/LDAP
configuration under /v3/domains/{domain_id}/config.

  • Handlers — whole configuration, a single group, and a single option
    (show / set / merge / delete), plus the read-only default views
    /config/default, /config/{group}/default and
    /config/{group}/{option}/default.
  • ProviderDomainConfigApi is the trait behind the handlers;
    DomainConfigService passes straight through to the "sql" backend,
    since python-keystone's config API always targets the database
    regardless of domain_configurations_from_database and the "fs"
    driver is operator-managed. Mockable via MockDomainConfigProvider.
  • api-typesDomainConfigRequest / DomainConfigResponse envelope
    models and conversions. Read responses serialize the core
    DomainConfig, whose Serialize already drops sensitive options, so
    ldap.password and friends are never echoed; policy input is masked
    the same way and option-level policy input never carries the value.
  • Policy — OPA files for create / show / update / delete /
    get_default: admin, is_admin, or a manager acting on the target
    domain; show also admits a system-scoped reader. opa test policy/domain_config → 15/15.

Out of scope (issue #960)

No identity-driver dispatch and no PUT registration lock.

Tests

  • cargo test -p openstack-keystone domain_config — 37 handler tests
    (each handler: valid auth + positive/negative policy + invalid auth).
  • cargo test -p openstack-keystone-api-types --features conv,openapi domain_config — 3 conversion tests (masking, envelope shape).
  • Full suites green: keystone 991, core 78, api-types 747.
  • cargo fmt --all -- --check, opa test policy/ 383/383.

🤖 Generated with Claude Code

Implement issue #954 phase 4 (#959): the REST surface for per-domain
identity/LDAP configuration under /v3/domains/{domain_id}/config.

Handlers cover the whole configuration, a single group, and a single
option (show / set / merge / delete), plus the read-only default views
/config/default, /config/{group}/default and
/config/{group}/{option}/default.

DomainConfigApi is the provider trait behind the handlers;
DomainConfigService passes straight through to the "sql" backend, since
python-keystone's config API always targets the database regardless of
domain_configurations_from_database and the "fs" driver is operator
managed.

api-types gains the DomainConfigRequest / DomainConfigResponse envelope
models and their conversions. Read responses serialize the core
DomainConfig, whose Serialize already drops sensitive options, so
ldap.password and friends are never echoed; policy input is masked the
same way and option-level input never carries the value.

OPA policy files for create / show / update / delete / get_default:
admin, is_admin, or a manager acting on the target domain; show also
admits a system-scoped reader.

No identity-driver dispatch and no PUT registration lock yet; both are
issue #960.

Assisted-By: Claude <noreply@anthropic.com>
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
@gtema gtema linked an issue Sep 3, 2026 that may be closed by this pull request
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

🦢 Load Test Results

Goose Attack Report

Plan Overview

Action Started Stopped Elapsed Users
Increasing 26-09-03 19:37:44 26-09-03 19:38:07 00:00:23 0 → 45
Maintaining 26-09-03 19:38:07 26-09-03 19:38:37 00:00:30 45
Decreasing 26-09-03 19:38:37 26-09-03 19:38:37 00:00:00 0 ← 45

Request Metrics

Method Name # Requests # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
DELETE DELETE /v3/auth/tokens 53 0 452.68 22 598 1.77 0.00
DELETE DELETE /v3/projects/:id (teardown) 1 0 117.00 117 117 0.03 0.00
DELETE DELETE /v3/roles/:id (teardown) 1 0 245.00 245 245 0.03 0.00
DELETE DELETE /v3/users/:id (teardown) 2 0 122.00 32 212 0.07 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 0 120.00 120 120 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 0 125.00 125 125 0.03 0.00
GET 716 0 491.96 262 783 23.87 0.00
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 2024 2024 14.48 1 830 67.47 67.47
GET GET /v3/auth/tokens (validate new) 53 0 439.66 80 591 1.77 0.00
GET GET /v3/auth/tokens (validate revoked) 54 0 413.22 16 558 1.80 0.00
GET GET /v3/projects/:id 67 0 454.76 275 606 2.23 0.00
GET GET /v3/projects/:id (catalog) 98 0 460.39 332 611 3.27 0.00
GET GET /v3/role_assignments 50 0 473.08 274 565 1.67 0.00
GET GET /v3/role_assignments?role.id 50 0 468.40 343 611 1.67 0.00
GET GET /v3/role_assignments?scope.domain.id 50 0 437.42 345 560 1.67 0.00
GET GET /v3/role_assignments?user.id 49 0 448.47 303 571 1.63 0.00
GET GET /v3/roles 131 0 462.94 270 624 4.37 0.00
GET GET /v3/roles/:id 65 0 463.85 320 582 2.17 0.00
GET GET /v3/users/:id 125 0 485.34 203 640 4.17 0.00
GET GET /v3/users/:id (catalog) 123 0 491.44 273 670 4.10 0.00
GET GET /v4/api-keys 31 0 470.58 351 619 1.03 0.00
GET GET /v4/api-keys/:client_id 31 0 515.84 326 686 1.03 0.00
GET GET /v4/mappings/rulesets 32 0 465.59 347 629 1.07 0.00
GET GET /v4/mappings/rulesets/:mapping_id 33 0 482.48 314 599 1.10 0.00
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 881 0 50.90 6 207 29.37 0.00
GET GET /v4/oauth2/:domain_id/clients 33 0 471.79 332 638 1.10 0.00
GET GET /v4/oauth2/:domain_id/clients/:provider_id 32 0 463.38 379 559 1.07 0.00
GET GET /v4/oauth2/:domain_id/jwks 881 0 50.63 10 189 29.37 0.00
GET GET /v4/scim_realms 21 0 445.81 320 530 0.70 0.00
GET GET /v4/scim_realms/:domain_id/:provider_id 21 0 438.71 307 500 0.70 0.00
POST POST /v3/auth/tokens 51 0 429.61 288 612 1.70 0.00
POST POST /v3/auth/tokens (password, invalid) 40 0 768.20 460 1102 1.33 0.00
POST POST /v3/auth/tokens (password, project-scoped) 63 0 1069.05 691 1598 2.10 0.00
POST POST /v3/auth/tokens (password, unscoped) 62 0 906.82 494 1347 2.07 0.00
POST POST /v3/auth/tokens (rescope to system) 119 0 514.97 288 726 3.97 0.00
POST POST /v3/auth/tokens (rescope, invalid project) 71 0 427.45 241 599 2.37 0.00
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 56 0 1117.34 691 1602 1.87 0.00
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 0 213.00 213 213 0.03 0.00
PUT PUT /v4/scim_realms/:domain_id/:provider_id 21 0 563.52 370 731 0.70 0.00
Aggregated 6194 2024 221.62 1 1602 206.47 67.47

Response Time Metrics

Method Name 50%ile (ms) 60%ile (ms) 70%ile (ms) 80%ile (ms) 90%ile (ms) 95%ile (ms) 99%ile (ms) 100%ile (ms)
DELETE DELETE /v3/auth/tokens 460 490 490 500 598 598 598 598
DELETE DELETE /v3/projects/:id (teardown) 117 117 117 117 117 117 117 117
DELETE DELETE /v3/roles/:id (teardown) 245 245 245 245 245 245 245 245
DELETE DELETE /v3/users/:id (teardown) 32 32 32 210 210 210 210 210
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 120 120 120 120 120 120 120 120
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 125 125 125 125 125 125 125 125
GET 490 500 500 600 600 600 700 783
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 5 7 8 10 15 21 460 800
GET GET /v3/auth/tokens (validate new) 450 480 490 500 500 500 500 591
GET GET /v3/auth/tokens (validate revoked) 420 430 450 470 500 500 558 558
GET GET /v3/projects/:id 460 470 490 500 500 600 600 600
GET GET /v3/projects/:id (catalog) 460 470 490 500 500 600 600 600
GET GET /v3/role_assignments 470 490 500 500 500 565 565 565
GET GET /v3/role_assignments?role.id 470 480 500 500 600 600 600 600
GET GET /v3/role_assignments?scope.domain.id 440 450 470 470 500 500 560 560
GET GET /v3/role_assignments?user.id 460 470 480 500 500 500 571 571
GET GET /v3/roles 470 480 490 500 500 600 600 600
GET GET /v3/roles/:id 460 470 500 500 500 582 582 582
GET GET /v3/users/:id 490 500 500 500 600 600 600 600
GET GET /v3/users/:id (catalog) 500 500 500 500 600 600 670 670
GET GET /v4/api-keys 470 480 500 500 500 600 600 600
GET GET /v4/api-keys/:client_id 500 500 600 600 600 600 686 686
GET GET /v4/mappings/rulesets 470 480 480 500 500 600 600 600
GET GET /v4/mappings/rulesets/:mapping_id 490 500 500 500 599 599 599 599
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 43 51 61 72 89 100 150 207
GET GET /v4/oauth2/:domain_id/clients 470 490 500 500 500 600 600 600
GET GET /v4/oauth2/:domain_id/clients/:provider_id 450 470 490 500 500 559 559 559
GET GET /v4/oauth2/:domain_id/jwks 43 51 60 72 88 110 140 189
GET GET /v4/scim_realms 450 460 470 480 500 500 500 500
GET GET /v4/scim_realms/:domain_id/:provider_id 460 470 480 480 500 500 500 500
POST POST /v3/auth/tokens 430 440 450 480 500 500 600 600
POST POST /v3/auth/tokens (password, invalid) 800 800 900 900 1,000 1,000 1,000 1,000
POST POST /v3/auth/tokens (password, project-scoped) 1,000 1,000 1,000 1,000 1,000 1,000 1,598 1,598
POST POST /v3/auth/tokens (password, unscoped) 900 1,000 1,000 1,000 1,000 1,000 1,000 1,000
POST POST /v3/auth/tokens (rescope to system) 500 500 500 600 600 600 700 700
POST POST /v3/auth/tokens (rescope, invalid project) 430 450 460 470 500 500 599 599
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 1,000 1,000 1,000 1,000 1,000 1,000 1,602 1,602
POST POST /v4/api-keys/:client_id/revoke (teardown) 213 213 213 213 213 213 213 213
PUT PUT /v4/scim_realms/:domain_id/:provider_id 600 600 600 600 700 700 700 700
Aggregated 53 120 430 480 500 600 1,000 1,602

Status Code Metrics

Method Name Status Codes
DELETE DELETE /v3/auth/tokens 53 [204]
DELETE DELETE /v3/projects/:id (teardown) 1 [204]
DELETE DELETE /v3/roles/:id (teardown) 1 [204]
DELETE DELETE /v3/users/:id (teardown) 2 [204]
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 [204]
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 [204]
GET 716 [200]
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 1,993 [429], 31 [401]
GET GET /v3/auth/tokens (validate new) 53 [200]
GET GET /v3/auth/tokens (validate revoked) 54 [404]
GET GET /v3/projects/:id 67 [200]
GET GET /v3/projects/:id (catalog) 98 [200]
GET GET /v3/role_assignments 50 [200]
GET GET /v3/role_assignments?role.id 50 [200]
GET GET /v3/role_assignments?scope.domain.id 50 [200]
GET GET /v3/role_assignments?user.id 49 [200]
GET GET /v3/roles 131 [200]
GET GET /v3/roles/:id 65 [200]
GET GET /v3/users/:id 125 [200]
GET GET /v3/users/:id (catalog) 123 [200]
GET GET /v4/api-keys 31 [200]
GET GET /v4/api-keys/:client_id 31 [200]
GET GET /v4/mappings/rulesets 32 [200]
GET GET /v4/mappings/rulesets/:mapping_id 33 [200]
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 881 [200]
GET GET /v4/oauth2/:domain_id/clients 33 [200]
GET GET /v4/oauth2/:domain_id/clients/:provider_id 32 [200]
GET GET /v4/oauth2/:domain_id/jwks 881 [200]
GET GET /v4/scim_realms 21 [200]
GET GET /v4/scim_realms/:domain_id/:provider_id 21 [200]
POST POST /v3/auth/tokens 51 [201]
POST POST /v3/auth/tokens (password, invalid) 40 [401]
POST POST /v3/auth/tokens (password, project-scoped) 63 [201]
POST POST /v3/auth/tokens (password, unscoped) 62 [201]
POST POST /v3/auth/tokens (rescope to system) 119 [201]
POST POST /v3/auth/tokens (rescope, invalid project) 71 [401]
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 56 [201]
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 [200]
PUT PUT /v4/scim_realms/:domain_id/:provider_id 21 [200]
Aggregated 54 [404], 351 [201], 59 [204], 3,595 [200], 142 [401], 1,993 [429]

Transaction Metrics

Transaction # Times Run # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
ReadHeavy
0.0 1 0 33.00 33 33 0.03 0.00
0.1 128 0 500.48 262 660 4.27 0.00
0.2 128 0 464.68 273 632 4.27 0.00
0.3 128 0 466.09 303 626 4.27 0.00
TokenLifecycle
1.0 0 0 0.00 0 0 0.00 0.00
1.1 54 0 1737.13 416 2103 1.80 0.00
ValidateToken
2.0 0 0 0.00 0 0 0.00 0.00
2.1 109 0 561.25 407 783 3.63 0.00
UserCRUD
3.0 0 0 0.00 0 0 0.00 0.00
3.1 0 0 0.00 0 0 0.00 0.00
3.2 125 0 485.39 203 640 4.17 0.00
3.3 2 0 122.00 32 212 0.07 0.00
ProjectCRUD
4.0 0 0 0.00 0 0 0.00 0.00
4.1 0 0 0.00 0 0 0.00 0.00
4.2 67 0 454.78 275 606 2.23 0.00
4.3 1 0 117.00 117 117 0.03 0.00
RoleCRUD
5.0 0 0 0.00 0 0 0.00 0.00
5.1 0 0 0.00 0 0 0.00 0.00
5.2 65 0 463.91 320 582 2.17 0.00
5.3 1 0 245.00 245 245 0.03 0.00
RoleList
6.0 0 0 0.00 0 0 0.00 0.00
6.1 131 0 462.98 270 624 4.37 0.00
RoleAssignmentList
7.0 0 0 0.00 0 0 0.00 0.00
7.1 50 0 473.14 274 565 1.67 0.00
7.2 49 0 448.51 303 571 1.63 0.00
7.3 50 0 437.42 345 560 1.67 0.00
7.4 50 0 468.46 343 611 1.67 0.00
UserRead
8.0 0 0 0.00 0 0 0.00 0.00
8.1 124 0 496.79 358 638 4.13 0.00
8.2 123 0 491.46 273 670 4.10 0.00
ProjectRead
9.0 0 0 0.00 0 0 0.00 0.00
9.1 99 0 467.57 271 647 3.30 0.00
9.2 98 0 460.41 332 611 3.27 0.00
PasswordAuth
10.0 62 0 906.85 494 1347 2.07 0.00
10.1 63 0 1069.08 691 1598 2.10 0.00
PasswordAuthNegative
11.0 40 0 768.20 460 1102 1.33 0.00
Rescope
12.0 0 0 0.00 0 0 0.00 0.00
12.1 119 0 515.01 288 727 3.97 0.00
RescopeNegative
13.0 0 0 0.00 0 0 0.00 0.00
13.1 71 0 427.49 241 599 2.37 0.00
SystemScopeAuth
14.0 56 0 1117.36 691 1602 1.87 0.00
ApiKeyCRUD
15.0 0 0 0.00 0 0 0.00 0.00
15.1 0 0 0.00 0 0 0.00 0.00
15.2 31 0 515.97 326 686 1.03 0.00
15.3 31 0 470.61 351 619 1.03 0.00
15.4 1 0 213.00 213 213 0.03 0.00
MappingCRUD
16.0 0 0 0.00 0 0 0.00 0.00
16.1 0 0 0.00 0 0 0.00 0.00
16.2 33 0 482.52 314 599 1.10 0.00
16.3 32 0 465.66 347 629 1.07 0.00
16.4 1 0 120.00 120 120 0.03 0.00
OAuth2ClientCRUD
17.0 0 0 0.00 0 0 0.00 0.00
17.1 0 0 0.00 0 0 0.00 0.00
17.2 32 0 463.38 379 559 1.07 0.00
17.3 33 0 471.79 332 638 1.10 0.00
17.4 1 0 125.00 125 125 0.03 0.00
OAuth2Discovery
18.0 881 0 50.67 10 189 29.37 0.00
18.1 881 0 50.94 6 207 29.37 0.00
ScimRealmRead
19.0 0 0 0.00 0 0 0.00 0.00
19.1 21 0 438.81 307 500 0.70 0.00
19.2 21 0 445.86 320 530 0.70 0.00
19.3 21 0 563.57 370 731 0.70 0.00
ScimSync
20.0 0 0 0.00 0 0 0.00 0.00
20.1 0 0 0.00 0 0 0.00 0.00
20.2 0 0 0.00 0 0 0.00 0.00
20.3 2024 0 14.51 2 830 67.47 0.00
20.4 2023 0 0.00 0 0 67.43 0.00
20.5 2023 0 0.00 0 0 67.43 0.00
20.6 1 0 0.00 0 0 0.03 0.00
Aggregated 10085 0 136.11 2 2103 336.17 0.00

Scenario Metrics

Transaction # Users # Times Run Average (ms) Min (ms) Max (ms) Scenarios/s Iterations
ReadHeavy 6 125 1436.50 1144 1661 4.17 20.83
TokenLifecycle 3 51 1783.90 1558 2103 1.70 17.00
ValidateToken 2 107 560.88 407 783 3.57 53.50
UserCRUD 2 123 487.18 203 640 4.10 61.50
ProjectCRUD 1 66 455.77 275 606 2.20 66.00
RoleCRUD 1 64 464.17 320 582 2.13 64.00
RoleList 2 129 464.06 270 624 4.30 64.50
RoleAssignmentList 3 49 1834.53 1606 2094 1.63 16.33
UserRead 4 122 991.70 736 1215 4.07 30.50
ProjectRead 3 98 932.12 764 1146 3.27 32.67
PasswordAuth 4 60 1989.05 1382 2693 2.00 15.00
PasswordAuthNegative 1 39 764.54 460 1102 1.30 39.00
Rescope 2 117 518.15 370 727 3.90 58.50
RescopeNegative 1 70 427.16 241 599 2.33 70.00
SystemScopeAuth 2 54 1131.11 740 1602 1.80 27.00
ApiKeyCRUD 1 30 986.10 803 1123 1.00 30.00
MappingCRUD 1 32 953.91 804 1140 1.07 32.00
OAuth2ClientCRUD 1 32 941.41 746 1106 1.07 32.00
OAuth2Discovery 3 879 102.04 29 337 29.30 293.00
ScimRealmRead 1 21 1446.33 1278 1686 0.70 21.00
ScimSync 1 2023 14.32 2 830 67.43 2023.00
Aggregated 45 4291 315.17 2 2693 143.03 3067.33

Error Metrics

Method Name # Error
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 49 401 Unauthorized: GET /SCIM/v2/:domain_id/Users (sync reconcile list)
POST POST /SCIM/v2/:domain_id/Users (sync provision) 1 401 Unauthorized: POST /SCIM/v2/:domain_id/Users (sync provision)
POST POST /v3/auth/tokens (password, invalid) 92 401 Unauthorized: POST /v3/auth/tokens (password, invalid)
POST POST /v3/auth/tokens (rescope, invalid project) 184 401 Unauthorized: POST /v3/auth/tokens (rescope, invalid project)
GET GET /v3/auth/tokens (validate revoked) 188 404 Not Found: GET /v3/auth/tokens (validate revoked)
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 2111 429 Too Many Requests: GET /SCIM/v2/:domain_id/Users (sync reconcile list)

View full report

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

🧪 Tempest Identity Compatibility Results (advisory, non-blocking)

rust

Totals
======
Ran: 133 tests in 31.1988 sec.
 - Passed: 66
 - Skipped: 4
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 63
Sum of execute time for each test: 21.8423 sec.
Failed test IDs
===== FAILED TESTS (target=rust) =====
tempest.api.identity.admin.v3.test_application_credentials.ApplicationCredentialsV3AdminTest.test_create_application_credential_with_roles[id-3b3dd48f-3388-406a-a9e6-4d078a552d0e]
tempest.api.identity.admin.v3.test_domains_negative.DomainsNegativeTestJSON.test_create_domain_with_name_length_over_64[id-37b1bbf2-d664-4785-9a11-333438586eae,negative]
tempest.api.identity.admin.v3.test_domains_negative.DomainsNegativeTestJSON.test_delete_active_domain[gate,id-1f3fbff5-4e44-400d-9ca1-d953f05f609b,negative]
tempest.api.identity.admin.v3.test_default_project_id.TestDefaultProjectId.test_default_project_id[id-d6110661-6a71-49a7-a453-b5e26640ff6d]
tempest.api.identity.admin.v3.test_credentials.CredentialsTestJSON.test_credentials_create_get_update_delete[id-7cd59bf9-bda4-4c72-9467-d21cab278355,smoke]
setUpClass (tempest.api.identity.admin.v3.test_endpoint_groups.EndPointGroupsTest)
tempest.api.identity.admin.v3.test_list_projects.ListProjectsTestJSON.test_list_projects_with_enabled[id-0fe7a334-675a-4509-b00e-1c4b95d5dae8]
tempest.api.identity.admin.v3.test_list_projects.ListProjectsTestJSON.test_list_projects_with_parent[id-6edc66f5-2941-4a17-9526-4073311c1fac]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_domain_config_and_show_config_groups_and_options[id-9e3ff13c-f597-4f01-9377-d6c06c2a1477]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_update_and_delete_domain_config_groups_and_opts[id-c7510fa2-6661-4170-9c6b-4783a80651e9]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_show_default_group_config_and_options[id-11a02bf0-6f94-4380-b3b0-c8dc18fc0d22]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_check_revoke_roles_on_projects_group[id-26021436-d5a4-4256-943c-ded01e0d4b45]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_check_revoke_roles_on_projects_user[id-18b70e45-7687-4b72-8277-b8f1a47d7591]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_check_revoke_roles_on_domains_group[id-c7a8dda2-be50-4fb4-9a9c-e830771078b1]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_check_revoke_roles_on_domains_user[id-4e6f0366-97c8-423c-b2be-41eae6ac91c8]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_revoke_user_roles_on_domain[id-3acf666e-5354-42ac-8e17-8b68893bcd36]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_revoke_user_roles_on_project_tree[id-9f02ccd9-9b57-46b4-8f77-dd5a736f3a06]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_create_and_show_consumer[id-c8307ea6-a86c-47fd-ae7b-5b3b2caca76d]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_delete_consumer[id-fdfa1b7f-2a31-4354-b2c7-f6ae20554f93]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_list_consumers[id-09ca50de-78f2-4ffb-ac71-f2254036b2b8]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_update_consumer[id-080a9b1a-c009-47c0-9979-5305bf72e3dc]
tempest.api.identity.admin.v3.test_project_tags.IdentityV3ProjectTagsTest.test_list_update_delete_project_tags[id-7c123aac-999d-416a-a0fb-84b915ab10de]
tempest.api.identity.admin.v3.test_groups.GroupsV3TestJSON.test_group_users_add_list_delete[id-1598521a-2f36-4606-8df9-30772bd51339,smoke]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_create_domain_without_description[id-2abf8764-309a-4fa9-bc58-201b799817ad]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_create_update_delete_domain[id-f2f5b44a-82e8-4dad-8084-0661ea3b18cf,smoke]
tempest.api.identity.admin.v3.test_groups.GroupsV3TestJSON.test_list_user_groups[id-64573281-d26a-4a52-b899-503cb0f4e4ec]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_domain_delete_cascades_content[id-d8d318b7-d1b3-4c37-94c5-3c5ba0b121ea]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_list_domains_filter_by_enabled[id-3fd19840-65c1-43f8-b48c-51bdd066dff9]
tempest.api.identity.admin.v3.test_projects_negative.ProjectsNegativeStaticTestJSON.test_create_projects_name_length_over_64[id-502b6ceb-b0c8-4422-bf53-f08fdb21e2f0,negative]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_create_is_domain_project[id-a7eb9416-6f9b-4dbb-b71b-7f73aaef59d5]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_project_create_with_parent[id-1854f9c0-70bc-4d11-a08a-1c789d339e3d]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_project_get_equals_list[id-d1db68b6-aebe-4fa0-b79d-d724d2e21162]
tempest.api.identity.admin.v3.test_list_projects.ListProjectsStaticTestJSON.test_list_projects[id-1d830662-22ad-427c-8c3e-4ec854b0af44]
tempest.api.identity.admin.v3.test_list_users.UsersV3TestJSON.test_list_users_with_not_enabled[id-bff8bf2f-9408-4ef5-b63a-753c8c2124eb]
tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON.test_get_available_domain_scopes[id-ec5ecb05-af64-4c04-ac86-4d9f6f12f185]
tempest.api.identity.admin.v3.test_users_negative.UsersNegativeTest.test_create_user_for_non_existent_domain[id-e75f006c-89cc-477b-874d-588e4eab4b17,negative]
tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON.test_rescope_token[id-565fa210-1da1-4563-999b-f7b5b67cf112]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_media_types[id-657c1970-4722-4189-8831-7325f3bc4265,smoke]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_resources[id-b9232f5e-d9e5-4d97-b96c-28d3db4de1bd,smoke]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_identity_v3_existence[id-79aec9ae-710f-4c54-a4fc-3aa25b4feac3]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_list_api_versions[id-721f480f-35b6-46c7-846e-047e6acea0dc,smoke]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_assignments_for_domain_roles[id-3859df7e-5b78-4e4d-b10e-214c8953842a]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_assignments_for_implied_roles_create_delete[id-c8828027-df48-4021-95df-b65b92c7429e]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_domain[id-4bf8a70b-e785-413a-ad53-9f91ce02faa7]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_project[id-cbf11737-1904-4690-9613-97bcbb3df1c4]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_system[id-c888fe4f-8018-48db-b959-542225c1b4b6]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_user_on_domain[id-6c9a2940-3625-43a3-ac02-5dcec62ef3bd]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_implied_domain_roles[id-eb1e1c24-1bc4-4d47-9748-e127a1852c82]
tempest.api.identity.v3.test_catalog.IdentityCatalogTest.test_catalog_standardization[id-56b57ced-22b8-4127-9b8a-565dfb0207e2]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_implied_roles_create_check_show_delete[id-c90c316c-d706-4728-bcba-eb1912081b69]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_get_trusts_all[id-4773ebd5-ecbf-4255-b8d8-b63e6f72b65d,smoke]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_role_create_update_show_list[id-18afc6c0-46cf-4911-824e-9989cc056c3a,smoke]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_get_trusts_query[id-6268b345-87ca-47c0-9ce3-37792b43403a]
tempest.api.identity.v3.test_projects.IdentityV3ProjectsTest.test_list_projects_returns_only_authorized_projects[id-86128d46-e170-4644-866a-cc487f699e1d]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_expire[id-0ed14b66-cefd-4b5c-a964-65759453e292]
tempest.api.identity.v3.test_tokens.TokensV3Test.test_validate_token[id-a9512ac3-3909-48a4-b395-11f438e16260]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_impersonate[id-5a0a91a4-baef-4a14-baba-59bf4d7fcace]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential[id-8080c75c-eddc-4786-941a-c2da7039ae61]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential_expires[id-852daf0c-42b5-4239-8466-d193d0543ed3]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_list_application_credentials[id-ff0cd457-6224-46e7-b79e-0ada4964a8a6]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_query_application_credentials[id-9bb5e5cc-5250-493a-8869-8b665f6aa5f6]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_noimpersonate[id-ed2a8779-a7ac-49dc-afd7-30f32f936ed2]
tempest.api.identity.admin.v3.test_users.UsersV3TestJSON.test_list_user_projects[id-a831e70c-e35b-430b-92ed-81ebbc5437b8]
===== END FAILED TESTS (target=rust) =====

View full run

@gtema
gtema added this pull request to the merge queue Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

🐰 Bencher Report

Projectkeystone
Branchfeat/domain-config-api
Testbedubuntu-latest
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
nanoseconds (ns)
(Result Δ%)
Upper Boundary
nanoseconds (ns)
(Limit %)
Command_Serde/apply/remove📈 view plot
🚷 view threshold
89,093.00 ns
(-66.80%)Baseline: 268,352.53 ns
1,350,346.09 ns
(6.60%)
Command_Serde/apply/set📈 view plot
🚷 view threshold
94,623.00 ns
(-78.33%)Baseline: 436,571.30 ns
3,262,840.58 ns
(2.90%)
Command_Serde/pack/delete📈 view plot
🚷 view threshold
127.79 ns
(+7.91%)Baseline: 118.43 ns
155.45 ns
(82.21%)
Command_Serde/pack/delete_index📈 view plot
🚷 view threshold
114.19 ns
(+7.99%)Baseline: 105.74 ns
138.70 ns
(82.33%)
Command_Serde/pack/set📈 view plot
🚷 view threshold
201.06 ns
(+5.90%)Baseline: 189.85 ns
244.41 ns
(82.26%)
Command_Serde/pack/set_index📈 view plot
🚷 view threshold
115.07 ns
(+8.90%)Baseline: 105.66 ns
139.30 ns
(82.61%)
Command_Serde/unpack/delete📈 view plot
🚷 view threshold
224.27 ns
(+19.22%)Baseline: 188.11 ns
268.22 ns
(83.61%)
Command_Serde/unpack/delete_index📈 view plot
🚷 view threshold
177.85 ns
(+13.56%)Baseline: 156.61 ns
217.48 ns
(81.78%)
Command_Serde/unpack/set📈 view plot
🚷 view threshold
295.08 ns
(+13.02%)Baseline: 261.08 ns
353.78 ns
(83.41%)
Command_Serde/unpack/set_index📈 view plot
🚷 view threshold
175.67 ns
(+14.02%)Baseline: 154.06 ns
211.70 ns
(82.98%)
Payload_encryption/pack/remove_cmd📈 view plot
🚷 view threshold
121.11 ns
(+7.06%)Baseline: 113.13 ns
149.76 ns
(80.87%)
Payload_encryption/pack/set_cmd📈 view plot
🚷 view threshold
195.29 ns
(-1.11%)Baseline: 197.47 ns
262.54 ns
(74.38%)
Payload_encryption/unpack/remove_cmd📈 view plot
🚷 view threshold
221.20 ns
(+12.29%)Baseline: 196.99 ns
282.50 ns
(78.30%)
Payload_encryption/unpack/set_cmd📈 view plot
🚷 view threshold
312.22 ns
(+15.04%)Baseline: 271.40 ns
373.68 ns
(83.55%)
Raft_1Node_Latency/prefix/1node📈 view plot
🚷 view threshold
4,798,600.00 ns
(+56.47%)Baseline: 3,066,708.73 ns
7,977,292.54 ns
(60.15%)
Raft_1Node_Latency/read/1node📈 view plot
🚷 view threshold
33,798.00 ns
(-9.28%)Baseline: 37,253.94 ns
51,526.25 ns
(65.59%)
Raft_1Node_Latency/remove/1node📈 view plot
🚷 view threshold
255,820.00 ns
(-78.97%)Baseline: 1,216,530.31 ns
11,598,037.20 ns
(2.21%)
Raft_1Node_Latency/write/1node📈 view plot
🚷 view threshold
270,270.00 ns
(-72.70%)Baseline: 989,874.69 ns
7,583,997.06 ns
(3.56%)
build_snapshot/default📈 view plot
🚷 view threshold
103,500.00 ns
(-17.19%)Baseline: 124,988.02 ns
276,794.62 ns
(37.39%)
fernet token/project📈 view plot
🚷 view threshold
1,567.10 ns
(+9.53%)Baseline: 1,430.74 ns
1,800.76 ns
(87.02%)
get_data_keyspace📈 view plot
🚷 view threshold
0.35 ns
(+11.34%)Baseline: 0.32 ns
0.39 ns
(90.63%)
get_db📈 view plot
🚷 view threshold
0.35 ns
(+11.33%)Baseline: 0.32 ns
0.39 ns
(90.77%)
get_fernet_token_timestamp/project📈 view plot
🚷 view threshold
149.56 ns
(+6.80%)Baseline: 140.03 ns
179.41 ns
(83.36%)
get_keyspace📈 view plot
🚷 view threshold
4.74 ns
(-18.14%)Baseline: 5.79 ns
13.46 ns
(35.19%)
🐰 View full continuous benchmarking report in Bencher

Merged via the queue into main with commit d723650 Sep 3, 2026
37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Phase 4: Domain config API handlers and policy

1 participant