horizon 25.5.0 (flamingo)
We eagerly announce the release of: horizon 25.5.0 This release is part of the flamingo release series. The source is available from: https://opendev.org/openstack/horizon Download the package from: https://tarballs.openstack.org/horizon/ Please report issues through: https://bugs.launchpad.net/horizon/+bugs For more details, please see below. 25.5.0 ^^^^^^ New Features ************ * Introducing detail pages for entries in Identity → User Credentials. For credentials of type TOTP, the detail page now displays a generated QR code that can be scanned by an authenticator app to easily set up a new TOTP entry. * Cold migration action is now available in project dashboard for non- admin users. * Added support for configuring the default value of the "Delete Volume on Instance Delete" option during instance creation. This setting can now be predefined in the Horizon local_settings.py file, allowing administrators to control the default behavior for volume deletion when an instance is deleted. * When launching instance using 'create volume from image' functionality, it is now possible to specify the type of the volume to be created. The default choice is the default volume type as returned by Cinder API. Upgrade Notes ************* * The customization script limit now matches the Nova API (64 kB Base64-encoded). This means the actual usable size in Horizon is 48 KB. * Region and domain selection fields are now always visible on the login screen, even when using SAML or OIDC authentication methods. This change supports setups where multiple regions or domains are used alongside these authentication methods. * The following features are no longer supported. These have been disabled unless EC2-API service is deployed, but EC2-API project was already retired. * Download EC2 credentials * Recreate EC2 credentials Bug Fixes ********* * [:bug:`2116927`] Fixed issue with the subnet creation UI displaying incorrect minimum and maximum prefix lengths beyond the allowed range. * [:bug:`2120790`] Fixed a bug where the *Admin state* of **Routers**, **Networks**, and **Ports** in the overview detail views was displayed as raw boolean values (*True* / *False*) instead of (*UP* / *DOWN*). * All current volumes statuses are now supported, including previously missing such as *Error Backing Up*, *Downloading*, *Uploading* and *Retyping*. * All current vNIC types for Neutron Ports are now supported, including previously missing types such as *smart-nic*, *vdpa*, *accelerator-direct*, *accelerator-direct-physical* and *remote- managed*. * [:bug:`1996108`] Fixed bug, where all ports on a shared network were shown during instance launch regardless of their project ownership. Changes in horizon 25.4.0..25.5.0 --------------------------------- 0700d1254 Revert "SDK: Remove remaining neutronclient calls" 488694475 Remove remaining job with Ubuntu Jammy (22.04) 3d8e2088e Imported Translations from Zanata dc868dc53 Fix port listing for trunks case 933667d07 SDK: Remove remaining neutronclient calls 3ae2a7d13 Add missing release notes for recent changes 62ed47d66 Update Admin State display in routers and ports overview 8287a6510 pytest-based tests change volume_launch_as_instance timeout f50b6d124 Imported Translations from Zanata 6056b9922 Imported Translations from Zanata 05986ed45 Bump the maximum customization script size to 64kB 0155e6b5a pylint: remove outdated code 84056af91 Imported Translations from Zanata 3b63226dc Imported Translations from Zanata 6ca2c873f fix forgot space in phrases 4fe2b29b6 docs: fix small mistake with Key Pair ab7f10db8 docs: fix small mistake with Volume Snapshots tab 27d3e1e15 docs: remove double point efdf40fb4 pytest-based tests individual timeout for message check f0615b233 docs: remove outdated glossary c7b66c1f5 pytest-based tests fix HEADLESS run setting e2edb40c6 SDK subnetpools: change prefixlen fields as SDK calls them 58375a9e5 pytest-based tests fix login fixture fb8bacac6 pytest-based selenium test fix test import path 722526b58 Use systemctl command to manage service 55b969921 Imported Translations from Zanata 14ce3f383 pytest-based selenium test wait for angular timeout e3c2e81b7 Imported Translations from Zanata 44d6691d5 Drop EC2 credential download/recreation b39d6f618 Deprecation of distutils module 69dad6e6d Bump hacking 6aeaeaa02 Make integration tests stop on first failure 589fd2da8 Remove unicode prefix from code ed59416e2 Added missing statuses for volumes 08c33c7df Replace outdated URL in code comment 102517af2 SDK for Neutron RBAC policies 9e51f9607 Don't create image property "architecture" if it's empty e998d811d Remove Neutron LBaaS device owner code b6e47527c Add keycloak OIDC based federation tests bfcec735a SDK for Neutron QoS d9959504c Added support for all Neutron port VNIC types c0275f852 pytest-based UI tests add new 2FA panel into browse test f0f44795c Revert "Revert "pytest-based selenium tests for 2FA"" f0ea8b153 Make "Delete Volume on Instance Delete" configurable e8d2260c9 Correct "Update Defaults" button 0a109cfb7 fix small mistake in text error bcd27e511 SDK for Neutron Security Groups 46038351b Revert "pytest-based selenium tests for 2FA" 79ae38125 Don't hide region and domain on login screen when using other auth methods 1c146a7e6 Add release note about instances cold migration. d75dc4a9d pytest-based selenium tests for 2FA a3061ad53 Add credential details with QR code for TOTP b9499a28a Replace deprecated django.utils.datetime_safe 42f30a4f7 Drop unused logger override for pyScss b2dd0fe5d Make role name validation case insensitive f976b59ae Make keypair name validation case insensitive a98e0ade5 Language selection in config 38e17a3aa Run Neutron API requests in parallel 6f78d7d1d add pyproject.toml to support pip 23.1 739d9f0ed Remove tags from README 5e1f085c4 Release notes - update structure for old files d66f9d1c6 List ports with project_id. 8dbaf2ab2 Fix security group renderring in port overview (4) afed0c742 Fix title in Compute - Overview page 84439db87 Allow non-admins to cold migrate instances 283cfa427 Support choice of volume type in instance create Diffstat (except docs and test files) ------------------------------------- .zuul.d/project.yaml | 2 - .zuul.d/tempest-and-integrated.yaml | 8 - README.rst | 7 +- .../locale/en_GB/LC_MESSAGES/doc-configuration.po | 20 +- .../locale/en_GB/LC_MESSAGES/doc-contributor.po | 33 +- .../locale/id/LC_MESSAGES/doc-configuration.po | 21 +- .../locale/id/LC_MESSAGES/doc-contributor.po | 33 +- horizon/locale/cs/LC_MESSAGES/django.po | 5 +- horizon/locale/de/LC_MESSAGES/django.po | 5 +- horizon/locale/en_AU/LC_MESSAGES/django.po | 5 +- horizon/locale/en_GB/LC_MESSAGES/django.po | 5 +- horizon/locale/eo/LC_MESSAGES/django.po | 5 +- horizon/locale/es/LC_MESSAGES/django.po | 17 +- horizon/locale/fi_FI/LC_MESSAGES/django.po | 5 +- horizon/locale/fr/LC_MESSAGES/django.po | 5 +- horizon/locale/hi/LC_MESSAGES/django.po | 5 +- horizon/locale/id/LC_MESSAGES/django.po | 5 +- horizon/locale/it/LC_MESSAGES/django.po | 5 +- horizon/locale/ja/LC_MESSAGES/django.po | 5 +- horizon/locale/ka_GE/LC_MESSAGES/django.po | 5 +- horizon/locale/ko_KR/LC_MESSAGES/django.po | 5 +- horizon/locale/pa_IN/LC_MESSAGES/django.po | 5 +- horizon/locale/pl_PL/LC_MESSAGES/django.po | 5 +- horizon/locale/pt/LC_MESSAGES/django.po | 5 +- horizon/locale/pt_BR/LC_MESSAGES/django.po | 5 +- horizon/locale/ru/LC_MESSAGES/django.po | 14 +- horizon/locale/ru/LC_MESSAGES/djangojs.po | 30 +- horizon/locale/sl_SI/LC_MESSAGES/django.po | 5 +- horizon/locale/tr_TR/LC_MESSAGES/django.po | 5 +- horizon/locale/zh_Hans/LC_MESSAGES/django.po | 5 +- horizon/locale/zh_Hant/LC_MESSAGES/django.po | 5 +- horizon/middleware/base.py | 2 +- .../static/auth/login/login-finder.directive.js | 6 - horizon/static/horizon/js/horizon.forms.js | 6 +- horizon/test/settings.py | 5 +- horizon/utils/babel_extract_angular.py | 2 +- openstack_auth/locale/ru/LC_MESSAGES/django.po | 16 +- openstack_dashboard/api/keystone.py | 31 +- openstack_dashboard/api/microversions.py | 7 +- openstack_dashboard/api/neutron.py | 251 +-- openstack_dashboard/api/nova.py | 1 + openstack_dashboard/api/rest/neutron.py | 12 +- openstack_dashboard/api/swift.py | 4 +- openstack_dashboard/context_processors.py | 2 +- .../dashboards/admin/defaults/tables.py | 2 +- .../dashboards/admin/defaults/workflows.py | 2 +- .../dashboards/admin/instances/tables.py | 35 +- .../dashboards/identity/credentials/tables.py | 2 + .../templates/credentials/_detail_overview.html | 24 + .../credentials/templates/credentials/detail.html | 17 + .../dashboards/identity/credentials/urls.py | 2 + .../dashboards/identity/credentials/views.py | 61 + .../dashboards/identity/projects/workflows.py | 6 +- .../roles/actions/create.action.service.js | 4 +- .../dashboards/project/api_access/forms.py | 68 - .../dashboards/project/api_access/tables.py | 44 +- .../templates/api_access/_credentials.html | 74 +- .../templates/api_access/ec2rc.sh.template | 15 - .../templates/api_access/recreate_credentials.html | 5 - .../dashboards/project/api_access/urls.py | 4 - .../dashboards/project/api_access/views.py | 88 - .../floating_ip_portforwardings/workflows.py | 2 +- .../dashboards/project/floating_ips/tables.py | 2 - .../dashboards/project/floating_ips/workflows.py | 2 +- .../dashboards/project/instances/tables.py | 33 + .../dashboards/project/network_topology/views.py | 19 +- .../dashboards/project/networks/ports/tabs.py | 22 +- .../dashboards/project/networks/ports/views.py | 25 +- .../dashboards/project/networks/tabs.py | 2 +- .../dashboards/project/networks/workflows.py | 6 +- .../project/overview/templates/overview/usage.html | 2 +- .../dashboards/project/routers/views.py | 6 +- .../configuration/configuration.controller.js | 3 +- .../configuration/configuration.controller.spec.js | 2 +- .../launch-instance-model.service.js | 38 + .../launch-instance-model.service.spec.js | 24 +- .../launch-instance/source/source.controller.js | 1 - .../source/source.controller.spec.js | 2 - .../launch-instance/source/source.help.html | 2 +- .../workflow/launch-instance/source/source.html | 16 + .../dashboards/project/volumes/tables.py | 13 + openstack_dashboard/hooks.py | 26 - .../local/local_settings.py.example | 30 +- .../locale/as/LC_MESSAGES/django.po | 87 +- .../locale/bn_IN/LC_MESSAGES/django.po | 87 +- .../locale/brx/LC_MESSAGES/django.po | 87 +- .../locale/cs/LC_MESSAGES/django.po | 142 +- .../locale/cs/LC_MESSAGES/djangojs.po | 60 +- .../locale/de/LC_MESSAGES/django.po | 151 +- .../locale/de/LC_MESSAGES/djangojs.po | 84 +- .../locale/en_AU/LC_MESSAGES/django.po | 140 +- .../locale/en_AU/LC_MESSAGES/djangojs.po | 61 +- .../locale/en_GB/LC_MESSAGES/django.po | 186 +- .../locale/en_GB/LC_MESSAGES/djangojs.po | 126 +- .../locale/eo/LC_MESSAGES/django.po | 177 +- .../locale/eo/LC_MESSAGES/djangojs.po | 125 +- .../locale/es/LC_MESSAGES/django.po | 148 +- .../locale/es/LC_MESSAGES/djangojs.po | 85 +- .../locale/fr/LC_MESSAGES/django.po | 163 +- .../locale/fr/LC_MESSAGES/djangojs.po | 85 +- .../locale/gu/LC_MESSAGES/django.po | 87 +- .../locale/hi/LC_MESSAGES/django.po | 69 +- .../locale/id/LC_MESSAGES/django.po | 150 +- .../locale/id/LC_MESSAGES/djangojs.po | 81 +- .../locale/it/LC_MESSAGES/django.po | 136 +- .../locale/it/LC_MESSAGES/djangojs.po | 25 +- .../locale/ja/LC_MESSAGES/django.po | 160 +- .../locale/ja/LC_MESSAGES/djangojs.po | 126 +- .../locale/ka_GE/LC_MESSAGES/django.po | 129 +- .../locale/ka_GE/LC_MESSAGES/djangojs.po | 115 +- .../locale/kn/LC_MESSAGES/django.po | 87 +- .../locale/ko_KR/LC_MESSAGES/django.po | 162 +- .../locale/ko_KR/LC_MESSAGES/djangojs.po | 127 +- .../locale/kok/LC_MESSAGES/django.po | 87 +- .../locale/ks/LC_MESSAGES/django.po | 87 +- .../locale/mai/LC_MESSAGES/django.po | 87 +- .../locale/mni/LC_MESSAGES/django.po | 87 +- .../locale/mr/LC_MESSAGES/django.po | 87 +- .../locale/ne/LC_MESSAGES/django.po | 86 +- .../locale/pa_IN/LC_MESSAGES/django.po | 90 +- .../locale/pl_PL/LC_MESSAGES/django.po | 117 +- .../locale/pt_BR/LC_MESSAGES/django.po | 144 +- .../locale/pt_BR/LC_MESSAGES/djangojs.po | 70 +- .../locale/ru/LC_MESSAGES/django.po | 1630 ++++++++------- .../locale/ru/LC_MESSAGES/djangojs.po | 956 +++++---- .../locale/ta/LC_MESSAGES/django.po | 87 +- .../locale/tr_TR/LC_MESSAGES/django.po | 143 +- .../locale/tr_TR/LC_MESSAGES/djangojs.po | 70 +- .../locale/ur/LC_MESSAGES/django.po | 87 +- .../locale/zh_Hans/LC_MESSAGES/django.po | 141 +- .../locale/zh_Hans/LC_MESSAGES/djangojs.po | 74 +- .../locale/zh_Hant/LC_MESSAGES/django.po | 141 +- .../locale/zh_Hant/LC_MESSAGES/djangojs.po | 77 +- .../management/commands/extract_messages.py | 4 +- .../app/core/keypairs/actions/create.service.js | 4 +- .../app/core/keypairs/actions/import.service.js | 4 +- .../core/openstack-service-api/glance.service.js | 5 + .../pages/admin/system/metadatadefinitionspage.py | 4 +- openstack_dashboard/test/selenium/conftest.py | 37 +- .../test/selenium/integration/conftest.py | 2 +- .../test/selenium/integration/test_credentials.py | 16 +- .../test/selenium/integration/test_defaults.py | 18 +- .../selenium/integration/test_federation_login.py | 64 + .../test/selenium/integration/test_flavors.py | 4 +- .../test/selenium/integration/test_floatingips.py | 29 +- .../test/selenium/integration/test_groups.py | 22 +- .../test/selenium/integration/test_grouptypes.py | 12 +- .../selenium/integration/test_host_aggregates.py | 12 +- .../test/selenium/integration/test_images.py | 46 +- .../test/selenium/integration/test_instances.py | 16 +- .../test/selenium/integration/test_keypairs.py | 10 +- .../integration/test_metadata_definitions.py | 16 +- .../test/selenium/integration/test_networks.py | 14 +- .../test/selenium/integration/test_projects.py | 28 +- .../test/selenium/integration/test_routers.py | 50 +- .../selenium/integration/test_security_groups.py | 28 +- .../selenium/integration/test_user_credentials.py | 174 ++ .../test/selenium/integration/test_users.py | 8 +- .../selenium/integration/test_volume_snapshots.py | 70 +- .../test/selenium/integration/test_volumes.py | 58 +- .../test/selenium/integration/test_volumetypes.py | 66 +- .../test/selenium/ui/test_actions.py | 15 +- .../test/selenium/ui/test_browse.py | 5 +- .../test/selenium/ui/test_hypervisors.py | 32 +- .../test/selenium/ui/test_settings.py | 7 +- openstack_dashboard/test/selenium/widgets.py | 7 +- .../test/test_data/keystone_data.py | 28 +- openstack_dashboard/test/test_data/neutron_data.py | 85 +- .../test/unit/api/rest/test_neutron.py | 10 +- openstack_dashboard/test/unit/api/test_keystone.py | 10 +- openstack_dashboard/test/unit/api/test_neutron.py | 410 ++-- openstack_dashboard/test/unit/api/test_nova.py | 9 +- pyproject.toml | 3 + .../notes/{bug => }/1637490-c29444e4eb458087.yaml | 0 .../notes/add-credentials-totp-with-qr.yaml | 7 + .../notes/allow-non-admins-cold-migrate.yaml | 5 + releasenotes/notes/bump-script-size.yaml | 6 + releasenotes/notes/change-prefixlen-field.yaml | 5 + releasenotes/notes/configurable-volume-delete.yaml | 8 + releasenotes/notes/do-not-hide-region.yaml | 7 + .../{bp => }/enhance-tox-26f73a048b88df2f.yaml | 0 releasenotes/notes/fix-admin-state-status.yaml | 7 + .../horizon-vendor-split-e16aa3d81dea9708.yaml | 0 .../instance-volume-type-e79d607de15e1a24.yaml | 6 + .../notes/missing-volumes-statuses-added.yaml | 6 + .../navigation-improvements-ab101299eb1a8d54.yaml | 0 .../new-vnic-types-supported-ef211ff036712ce3.yaml | 6 + .../notes/remove-ec2-creds-7869cba1e7e13af1.yaml | 9 + ...anise-access-and-security-ea7780aa9e7b83e7.yaml | 0 .../notes/show-ports-from-all-projects.yaml | 5 + .../source/locale/fr/LC_MESSAGES/releasenotes.po | 280 --- .../source/locale/id/LC_MESSAGES/releasenotes.po | 241 ++- requirements.txt | 2 + setup.cfg | 4 - tox.ini | 21 +- 243 files changed, 6973 insertions(+), 9413 deletions(-) Requirements updates -------------------- diff --git a/requirements.txt b/requirements.txt index 581d29ff3..21dc565b1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,0 +24 @@ libsass>=0.23.0 # MIT +Pillow>=9.1.0 # PIL License @@ -30,0 +32 @@ PyYAML>=6.0 # MIT +qrcode>=8.2 # BSD
participants (1)
-
no-reply@openstack.org