[SRU] Horizon Identity Domain Panel is broken in Caracal+
Affects | Status | Importance | Assigned to | Milestone | ||
---|---|---|---|---|---|---|
OpenStack Dashboard (Horizon) |
Fix Released
|
Undecided
|
Unassigned | |||
Ubuntu Cloud Archive | Status tracked in Flamingo | |||||
Caracal |
New
|
Undecided
|
Unassigned | |||
Dalmatian |
New
|
Undecided
|
Unassigned | |||
Epoxy |
Fix Released
|
Undecided
|
Unassigned | |||
Flamingo |
Fix Released
|
Undecided
|
Unassigned | |||
horizon (Ubuntu) | Status tracked in Questing | |||||
Noble |
New
|
Undecided
|
Unassigned | |||
Oracular |
New
|
Undecided
|
Unassigned | |||
Plucky |
Fix Released
|
Undecided
|
Unassigned | |||
Questing |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
[Impact]
Since Caracal, when using domain-scoped token, keystone only returns the domain the token is scoped to when listing domains.
Since Horizon does some behind-the-scenes swap of token scope when doing some requests to Keystone, this breaks the Identity->Domains panel for admins.
The fix forces the domain_list call to always use the original auth scope, w/o a swap to the domain-scoped token.
[Test Case]
This issue can be easily reproduced by following these steps:
1, Set up an openstack Caracal env with horizon
2, Log in to horizon dashboard as an admin user
3, Navigate to the 'Identity->Domains' panel
You will notice that only the admin user is listed - https:/
other domains can be listed after applying the fix - https:/
[Where problems could occur]
We are changing the domain_list call to always use the original auth scope, so any regression issues will be limited to 'Identity->Domains' panel only.
[Other info]
This issue started with Caracal release, and this was fixed upstream by:
$ git tag --contains 964623e16baaf8d
25.2.0
25.3.0
25.4.0
$ git branch -r --contains 23d0b9525f7c112
origin/
$ git tag --contains 23d0b9525f7c112
<empty>
$ git tag --contains b06ce1c2a1baa6b
24.0.1
For UA, the fix is already in Questing(ubuntu 25.10, 4:25.3.0-0ubuntu1), Plucky(ubuntu 25.04, 4:25.3.0-0ubuntu1), backporting is still required for: oracular(ubuntu 24.10, 4:25.1.
For UCA, the fix is already in flamingo(2025.2, 4:25.3.
== ORIGINAL DESCRIPTION ==
Starting with Caracal release, Identity Domains Panel is broken, as it only ever lists that domain that the user belongs to.
Devstack/Master, logged as admin (devstack-admin creds in /etc/openstack/
With default Horizon settings, I only ever see Default domain, even if I manually create some more. And I do not have an option to create domains from UI as well. This is because AFAIU the ability to create domains is tied to OPENSTACK_
When I enable the OPENSTACK_
I tracked it to this piece of code that replaces the scope to the domain one for admins
https:/
plus a recent change in Keystone https:/
Related branches
- Ubuntu Sponsors: Pending requested
- Ubuntu OpenStack uploaders: Pending requested
-
Diff: 42017 lines (+3386/-2073)74 files modifiedAUTHORS (+3/-0)
ChangeLog (+22/-0)
PKG-INFO (+117/-58)
debian/changelog (+7/-2)
debian/patches/series (+0/-1)
dev/null (+0/-508)
doc/source/locale/en_GB/LC_MESSAGES/doc-configuration.po (+21/-3)
doc/source/locale/en_GB/LC_MESSAGES/doc-contributor.po (+16/-3)
doc/source/locale/en_GB/LC_MESSAGES/doc-install.po (+13/-3)
horizon.egg-info/PKG-INFO (+117/-58)
horizon.egg-info/SOURCES.txt (+1/-7)
horizon.egg-info/entry_points.txt (+0/-1)
horizon.egg-info/pbr.json (+1/-1)
horizon.egg-info/requires.txt (+33/-33)
openstack_auth/policy.py (+5/-2)
openstack_dashboard/api/keystone.py (+1/-1)
openstack_dashboard/api/neutron.py (+2/-1)
openstack_dashboard/api/placement.py (+51/-25)
openstack_dashboard/conf/default_policies/cinder.yaml (+483/-206)
openstack_dashboard/conf/default_policies/glance.yaml (+228/-70)
openstack_dashboard/conf/default_policies/keystone.yaml (+463/-314)
openstack_dashboard/conf/default_policies/neutron.yaml (+820/-458)
openstack_dashboard/conf/default_policies/nova.yaml (+700/-150)
openstack_dashboard/dashboards/admin/backups/tables.py (+3/-1)
openstack_dashboard/dashboards/admin/backups/templates/backups/_detail_overview.html (+2/-0)
openstack_dashboard/dashboards/identity/projects/tabs.py (+9/-4)
openstack_dashboard/dashboards/identity/projects/tests.py (+17/-10)
openstack_dashboard/dashboards/project/backups/tables.py (+3/-0)
openstack_dashboard/dashboards/project/backups/templates/backups/_detail_overview.html (+2/-0)
openstack_dashboard/dashboards/project/floating_ips/tables.py (+1/-3)
openstack_dashboard/dashboards/project/networks/ports/extensions/allowed_address_pairs/tables.py (+2/-2)
openstack_dashboard/dashboards/project/networks/ports/tests.py (+2/-2)
openstack_dashboard/dashboards/project/volumes/forms.py (+5/-2)
openstack_dashboard/locale/as/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/bn_IN/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/brx/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/cs/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/de/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/en_AU/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/en_GB/LC_MESSAGES/django.po (+72/-5)
openstack_dashboard/locale/en_GB/LC_MESSAGES/djangojs.po (+35/-2)
openstack_dashboard/locale/eo/LC_MESSAGES/django.po (+72/-5)
openstack_dashboard/locale/es/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/fr/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/gu/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/hi/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/id/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/it/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/ja/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/ka_GE/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/kn/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/ko_KR/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/kok/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/ks/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/mai/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/mni/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/mr/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/ne/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/pa_IN/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/pl_PL/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/pt_BR/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/ru/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/ta/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/tr_TR/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/ur/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/zh_Hans/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/locale/zh_Hant/LC_MESSAGES/django.po (+1/-4)
openstack_dashboard/management/commands/dump_default_policies.py (+2/-2)
openstack_dashboard/static/app/core/metadata/metadata.service.js (+1/-1)
openstack_dashboard/static/app/core/openstack-service-api/common-test.mock.js (+8/-1)
openstack_dashboard/static/app/core/openstack-service-api/swift.service.js (+1/-0)
openstack_dashboard/static/app/core/openstack-service-api/swift.service.spec.js (+6/-2)
releasenotes/notes/change-metadef-for-cinder-volume-type-f65dd215d2a3ce75.yaml (+6/-0)
tox.ini (+2/-2)
summary: |
- Horizon Identity Domain Panel is broken with new Keystone policies + Horizon Identity Domain Panel is broken in Caracal+ |
Changed in horizon: | |
status: | New → In Progress |
no longer affects: | openstack-dashboard (Ubuntu) |
Changed in horizon (Ubuntu Questing): | |
status: | New → Fix Released |
Changed in horizon (Ubuntu Plucky): | |
status: | New → Fix Released |
Changed in horizon (Ubuntu Jammy): | |
status: | New → Won't Fix |
no longer affects: | horizon (Ubuntu Jammy) |
description: | updated |
Did you figure out a workaround for this issue other than just falling back to the CLI for cross-domain user administrative activities? It's looking like that keystone change you posted got cherry backed into bobcat and antelope, so now all current supported releases are bugged :( . Debating playing around with reverting the keystone diff but I have no idea what else in the system might get hosed by that.