[release-announce] horizon 22.0.0 (yoga)
no-reply at openstack.org
no-reply at openstack.org
Wed Mar 23 14:22:26 UTC 2022
We are chuffed to announce the release of:
horizon 22.0.0: OpenStack Dashboard
This release is part of the yoga 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.
22.0.0
^^^^^^
New Features
************
* [:blueprint:`handle-multiple-login-sessions-from-same-user-in-
horizon`] This blueprint allows operators to control if multiple
simultaneous dashboard sessions are allowed or not for a user. A new
setting "SIMULTANEOUS_SESSIONS" controls the behavior. The default
behavior allows multiple dashboard sessions for a user. The new
setting allows operators to configure horizon to disallow multiple
sessions per user. When multiple simultaneous sessions are disabled,
the most recent authenticated session will be considered as the
valid one and the previous session will be invalidated.
* Add Rules CRUD operations to the Network QoS Policy.
Added create, edit, and delete rules operation to the network qos
policy. Rules supported - Bandwidth-Limit, Minimum-Bandwidth, DSCP-
Marking, and Minimum-Packet-Rate.
Upgrade Notes
*************
* The default value of OPENSTACK_KEYSTONE_DEFAULT_ROLE is changed
from _member_ to member to conform with what keystone-bootstrap
creates.
Bug Fixes
*********
* Fixed lack of pagination for the networks page under Project and
Admin Dashboard.
* Previously, ToggleSuspend class checked os-rescue policy for
resume operation. By this fix, the class checks 'os_compute_api:os-
suspend- server:resume' policy to align to resume operation.
Changes in horizon 21.0.0..22.0.0
---------------------------------
05473b765 Sync default policy rules
f2832f3b0 instance UT: Recover mock_server_get.return_value
a7956cd00 Avoid extra flavor_get in resize server form
29da80152 Change to a proper policy for Resume operation
5d6eefa49 Create Horizon session control logic
9f5d659d1 Get ports directly instead of via loop
94e4e2df0 Imported Translations from Zanata
aa83752f2 Add Rules operation to Network QoS Policy
196de449b Implement pagination in admin/proj network tab
3c4accf94 Follow-up: Drop Django launch instance (part 2)
115326769 Integration tests: Allow to run a specific test from tox
d269b1640 Fix for "Resize instance" button
dbaca46d0 Add a unit test for the password change form
569caf0b7 Add Python 3 only classifier
fa29ed8e6 doc: Update setup file examples in the plugin tutorial
5d0b2b74d Replace deprecated imp module
88dd887ad Fix getting defaults from cookie for region field in password form
7052b7f06 Address RemovedInDjango40Warning (7)
00def145d Address RemovedInDjango40Warning (6)
94216e027 Address RemovedInDjango40Warning (5)
e4444e697 Address RemovedInDjango40Warning (4)
d9266fd82 Address RemovedInDjango40Warning (3)
cd7c1b511 Address RemovedInDjango40Warning (2)
b84701208 Mark "Source" tab in the launch instance form as required
e2bb7d833 Fix Project Limits for resize instance dialog
b430d5aa4 Follow-up: Drop Django based implementation of launch instance
e34e0ea73 fix ValueError: invalid content length with swift over UWSGI
a9d5273f3 Address RemovedInDjango40Warning (1)
0bba95f19 Make stack template page handle session expiration
029de21c1 Add a Note Under Install and configure Section in documentation
a375c5418 Update default value of OPENSTACK_KEYSTONE_DEFAULT_ROLE
e9ca00162 Modified the image page to use CSS class
Diffstat (except docs and test files)
-------------------------------------
.../contributor/topics/ini-based-configuration.rst | 2 +-
.../locale/en_GB/LC_MESSAGES/doc-configuration.po | 101 +-
.../locale/en_GB/LC_MESSAGES/doc-contributor.po | 97 +-
.../locale/id/LC_MESSAGES/doc-configuration.po | 96 +-
.../locale/id/LC_MESSAGES/doc-contributor.po | 98 +-
horizon/base.py | 16 +-
horizon/browsers/base.py | 2 +-
horizon/browsers/views.py | 2 +-
horizon/conf/default.py | 2 +-
horizon/conf/panel_template/urls.py.tmpl | 4 +-
horizon/decorators.py | 2 +-
horizon/defaults.py | 5 +-
horizon/exceptions.py | 12 +-
horizon/forms/fields.py | 23 +-
horizon/forms/views.py | 7 +-
horizon/messages.py | 12 +-
horizon/middleware/__init__.py | 2 +
horizon/middleware/base.py | 7 +-
horizon/middleware/simultaneous_sessions.py | 50 +
horizon/notifications.py | 2 +-
horizon/site_urls.py | 30 +-
horizon/static/horizon/js/horizon.heattop.js | 5 +
horizon/tables/actions.py | 2 +-
horizon/tables/base.py | 15 +-
horizon/tabs/views.py | 3 +-
.../horizon/common/_data_table_table_actions.html | 2 +-
horizon/templatetags/horizon.py | 12 +-
horizon/templatetags/sizeformat.py | 12 +-
horizon/test/helpers.py | 4 +-
horizon/test/test_dashboards/cats/kittens/urls.py | 4 +-
horizon/test/test_dashboards/cats/tigers/urls.py | 4 +-
.../test/test_dashboards/dogs/puppies/tables.py | 6 +-
horizon/test/test_dashboards/dogs/puppies/urls.py | 6 +-
.../unit/middleware/test_simultaneous_sessions.py | 61 +
horizon/test/unit/tables/test_tables.py | 14 +-
horizon/test/unit/test_base.py | 2 +-
horizon/test/unit/test_exceptions.py | 8 +-
horizon/test/unit/test_messages.py | 6 +-
horizon/test/unit/test_views.py | 2 +-
horizon/test/urls.py | 22 +-
horizon/utils/filters.py | 2 +-
horizon/utils/functions.py | 7 +-
horizon/utils/http.py | 28 +
horizon/utils/lazy_encoder.py | 4 +-
horizon/utils/validators.py | 2 +-
horizon/views.py | 4 +-
horizon/workflows/base.py | 15 +-
horizon/workflows/views.py | 12 +-
lower-constraints.txt | 24 +-
openstack_auth/backend.py | 2 +-
openstack_auth/forms.py | 5 +-
openstack_auth/locale/ru/LC_MESSAGES/django.po | 12 +-
openstack_auth/plugin/base.py | 2 +-
openstack_auth/plugin/k2k.py | 2 +-
openstack_auth/urls.py | 39 +-
openstack_auth/views.py | 33 +-
openstack_dashboard/api/cinder.py | 2 +-
openstack_dashboard/api/glance.py | 2 +-
openstack_dashboard/api/keystone.py | 2 +-
openstack_dashboard/api/neutron.py | 595 +++++++-
openstack_dashboard/api/nova.py | 2 +-
openstack_dashboard/api/rest/cinder.py | 2 +-
openstack_dashboard/api/rest/json_encoder.py | 2 +-
openstack_dashboard/api/rest/neutron.py | 156 ++-
openstack_dashboard/api/rest/nova.py | 9 +-
openstack_dashboard/api/rest/swift.py | 7 +-
openstack_dashboard/api/rest/urls.py | 5 +-
openstack_dashboard/api/rest/utils.py | 3 +-
openstack_dashboard/api/swift.py | 2 +-
openstack_dashboard/conf/cinder_policy.yaml | 1229 ++++++++++++++--
.../conf/default_policies/cinder.yaml | 914 ++++++++++--
.../conf/default_policies/glance.yaml | 573 +++++---
.../conf/default_policies/keystone.yaml | 793 +++++------
.../conf/default_policies/neutron.yaml | 900 ++++++------
.../conf/default_policies/nova.yaml | 1439 +++++--------------
openstack_dashboard/conf/glance_policy.yaml | 212 ++-
openstack_dashboard/conf/keystone_policy.yaml | 33 +-
openstack_dashboard/conf/neutron_policy.yaml | 1478 +++++++++++---------
openstack_dashboard/conf/nova_policy.yaml | 841 +++++------
openstack_dashboard/contrib/developer/dashboard.py | 2 +-
.../contrib/developer/form_builder/panel.py | 2 +-
.../contrib/developer/form_builder/urls.py | 4 +-
.../contrib/developer/profiler/middleware.py | 2 +-
.../contrib/developer/profiler/panel.py | 2 +-
.../contrib/developer/profiler/urls.py | 4 +-
.../contrib/developer/profiler/views.py | 2 +-
.../contrib/developer/resource_browser/panel.py | 2 +-
.../contrib/developer/resource_browser/urls.py | 4 +-
.../contrib/developer/theme_preview/panel.py | 2 +-
.../contrib/developer/theme_preview/urls.py | 4 +-
.../contrib/developer/theme_preview/views.py | 2 +-
.../dashboards/admin/aggregates/forms.py | 2 +-
.../dashboards/admin/aggregates/panel.py | 2 +-
.../dashboards/admin/aggregates/tables.py | 8 +-
.../dashboards/admin/aggregates/urls.py | 18 +-
.../dashboards/admin/aggregates/views.py | 2 +-
.../dashboards/admin/aggregates/workflows.py | 2 +-
.../dashboards/admin/backups/forms.py | 2 +-
.../dashboards/admin/backups/tables.py | 8 +-
.../dashboards/admin/backups/urls.py | 22 +-
.../dashboards/admin/backups/views.py | 2 +-
openstack_dashboard/dashboards/admin/dashboard.py | 2 +-
.../dashboards/admin/defaults/panel.py | 2 +-
.../dashboards/admin/defaults/tables.py | 2 +-
.../dashboards/admin/defaults/tabs.py | 2 +-
.../dashboards/admin/defaults/urls.py | 8 +-
.../dashboards/admin/defaults/views.py | 2 +-
.../dashboards/admin/defaults/workflows.py | 2 +-
.../dashboards/admin/flavors/panel.py | 2 +-
.../dashboards/admin/flavors/tables.py | 8 +-
.../dashboards/admin/flavors/urls.py | 23 +-
.../dashboards/admin/flavors/views.py | 2 +-
.../dashboards/admin/flavors/workflows.py | 2 +-
.../dashboards/admin/floating_ips/forms.py | 2 +-
.../dashboards/admin/floating_ips/panel.py | 2 +-
.../dashboards/admin/floating_ips/tables.py | 2 +-
.../dashboards/admin/floating_ips/urls.py | 10 +-
.../dashboards/admin/floating_ips/views.py | 2 +-
.../dashboards/admin/group_types/forms.py | 2 +-
.../dashboards/admin/group_types/panel.py | 2 +-
.../dashboards/admin/group_types/specs/forms.py | 2 +-
.../dashboards/admin/group_types/specs/tables.py | 8 +-
.../dashboards/admin/group_types/specs/urls.py | 10 +-
.../dashboards/admin/group_types/specs/views.py | 2 +-
.../dashboards/admin/group_types/tables.py | 8 +-
.../dashboards/admin/group_types/urls.py | 18 +-
.../dashboards/admin/group_types/views.py | 2 +-
.../dashboards/admin/hypervisors/compute/forms.py | 2 +-
.../dashboards/admin/hypervisors/compute/tables.py | 8 +-
.../dashboards/admin/hypervisors/compute/tabs.py | 2 +-
.../dashboards/admin/hypervisors/compute/urls.py | 20 +-
.../dashboards/admin/hypervisors/compute/views.py | 2 +-
.../dashboards/admin/hypervisors/panel.py | 2 +-
.../dashboards/admin/hypervisors/tables.py | 2 +-
.../dashboards/admin/hypervisors/tabs.py | 2 +-
.../dashboards/admin/hypervisors/urls.py | 12 +-
.../dashboards/admin/hypervisors/views.py | 2 +-
.../dashboards/admin/images/panel.py | 2 +-
.../dashboards/admin/images/tables.py | 2 +-
.../dashboards/admin/images/urls.py | 22 +-
.../dashboards/admin/images/views.py | 2 +-
openstack_dashboard/dashboards/admin/info/panel.py | 2 +-
.../dashboards/admin/info/tables.py | 2 +-
openstack_dashboard/dashboards/admin/info/tabs.py | 2 +-
openstack_dashboard/dashboards/admin/info/urls.py | 4 +-
openstack_dashboard/dashboards/admin/info/views.py | 2 +-
.../dashboards/admin/instances/forms.py | 2 +-
.../dashboards/admin/instances/panel.py | 2 +-
.../dashboards/admin/instances/tables.py | 8 +-
.../dashboards/admin/instances/urls.py | 25 +-
.../dashboards/admin/instances/views.py | 2 +-
.../dashboards/admin/metadata_defs/forms.py | 2 +-
.../dashboards/admin/metadata_defs/panel.py | 2 +-
.../dashboards/admin/metadata_defs/tables.py | 8 +-
.../dashboards/admin/metadata_defs/tabs.py | 2 +-
.../dashboards/admin/metadata_defs/urls.py | 14 +-
.../dashboards/admin/metadata_defs/views.py | 2 +-
.../dashboards/admin/networks/agents/forms.py | 2 +-
.../dashboards/admin/networks/agents/tables.py | 8 +-
.../dashboards/admin/networks/agents/tabs.py | 2 +-
.../dashboards/admin/networks/agents/views.py | 2 +-
.../dashboards/admin/networks/forms.py | 2 +-
.../dashboards/admin/networks/panel.py | 2 +-
.../dashboards/admin/networks/ports/tables.py | 2 +-
.../dashboards/admin/networks/ports/urls.py | 10 +-
.../dashboards/admin/networks/ports/views.py | 2 +-
.../dashboards/admin/networks/ports/workflows.py | 2 +-
.../dashboards/admin/networks/subnets/tables.py | 2 +-
.../dashboards/admin/networks/subnets/urls.py | 4 +-
.../dashboards/admin/networks/subnets/workflows.py | 2 +-
.../dashboards/admin/networks/tables.py | 2 +-
.../dashboards/admin/networks/urls.py | 46 +-
.../dashboards/admin/networks/views.py | 19 +-
.../dashboards/admin/ngflavors/panel.py | 2 +-
.../dashboards/admin/ngflavors/urls.py | 4 +-
.../dashboards/admin/overview/panel.py | 2 +-
.../dashboards/admin/overview/urls.py | 4 +-
.../dashboards/admin/overview/views.py | 2 +-
.../dashboards/admin/rbac_policies/forms.py | 2 +-
.../dashboards/admin/rbac_policies/panel.py | 2 +-
.../dashboards/admin/rbac_policies/tables.py | 8 +-
.../dashboards/admin/rbac_policies/tabs.py | 2 +-
.../dashboards/admin/rbac_policies/urls.py | 18 +-
.../dashboards/admin/rbac_policies/views.py | 2 +-
.../admin/routers/extensions/extraroutes/tables.py | 2 +-
.../dashboards/admin/routers/forms.py | 2 +-
.../dashboards/admin/routers/panel.py | 2 +-
.../dashboards/admin/routers/ports/tables.py | 2 +-
.../dashboards/admin/routers/ports/urls.py | 4 +-
.../dashboards/admin/routers/tables.py | 2 +-
.../dashboards/admin/routers/urls.py | 24 +-
.../dashboards/admin/routers/views.py | 2 +-
.../dashboards/admin/snapshots/forms.py | 2 +-
.../dashboards/admin/snapshots/panel.py | 2 +-
.../dashboards/admin/snapshots/tables.py | 2 +-
.../dashboards/admin/snapshots/tabs.py | 2 +-
.../dashboards/admin/snapshots/urls.py | 16 +-
.../dashboards/admin/snapshots/views.py | 2 +-
.../dashboards/admin/trunks/panel.py | 2 +-
.../dashboards/admin/trunks/urls.py | 10 +-
.../dashboards/admin/vg_snapshots/tables.py | 2 +-
.../dashboards/admin/vg_snapshots/urls.py | 10 +-
.../dashboards/admin/vg_snapshots/views.py | 2 +-
.../dashboards/admin/volume_groups/tables.py | 2 +-
.../dashboards/admin/volume_groups/urls.py | 28 +-
.../dashboards/admin/volume_groups/views.py | 2 +-
.../dashboards/admin/volume_types/extras/forms.py | 2 +-
.../dashboards/admin/volume_types/extras/tables.py | 8 +-
.../dashboards/admin/volume_types/extras/urls.py | 8 +-
.../dashboards/admin/volume_types/extras/views.py | 2 +-
.../dashboards/admin/volume_types/forms.py | 2 +-
.../dashboards/admin/volume_types/panel.py | 2 +-
.../admin/volume_types/qos_specs/forms.py | 2 +-
.../admin/volume_types/qos_specs/tables.py | 8 +-
.../admin/volume_types/qos_specs/urls.py | 13 +-
.../admin/volume_types/qos_specs/views.py | 2 +-
.../dashboards/admin/volume_types/tables.py | 16 +-
.../dashboards/admin/volume_types/urls.py | 60 +-
.../dashboards/admin/volume_types/views.py | 2 +-
.../dashboards/admin/volumes/forms.py | 2 +-
.../dashboards/admin/volumes/panel.py | 2 +-
.../dashboards/admin/volumes/tables.py | 2 +-
.../dashboards/admin/volumes/urls.py | 38 +-
.../dashboards/admin/volumes/views.py | 2 +-
.../identity/application_credentials/forms.py | 2 +-
.../identity/application_credentials/panel.py | 2 +-
.../identity/application_credentials/tables.py | 8 +-
.../identity/application_credentials/urls.py | 26 +-
.../identity/application_credentials/views.py | 2 +-
.../dashboards/identity/dashboard.py | 2 +-
.../dashboards/identity/domains/panel.py | 2 +-
.../dashboards/identity/domains/tables.py | 16 +-
.../dashboards/identity/domains/urls.py | 15 +-
.../dashboards/identity/domains/views.py | 2 +-
.../dashboards/identity/domains/workflows.py | 2 +-
.../dashboards/identity/groups/forms.py | 2 +-
.../dashboards/identity/groups/panel.py | 2 +-
.../dashboards/identity/groups/tables.py | 16 +-
.../dashboards/identity/groups/urls.py | 20 +-
.../dashboards/identity/groups/views.py | 2 +-
.../identity/identity_providers/forms.py | 2 +-
.../identity/identity_providers/panel.py | 2 +-
.../identity/identity_providers/protocols/forms.py | 2 +-
.../identity_providers/protocols/tables.py | 8 +-
.../identity/identity_providers/protocols/urls.py | 4 +-
.../identity/identity_providers/protocols/views.py | 2 +-
.../identity/identity_providers/tables.py | 8 +-
.../dashboards/identity/identity_providers/tabs.py | 2 +-
.../dashboards/identity/identity_providers/urls.py | 26 +-
.../identity/identity_providers/views.py | 2 +-
.../dashboards/identity/mappings/forms.py | 2 +-
.../dashboards/identity/mappings/panel.py | 2 +-
.../dashboards/identity/mappings/tables.py | 8 +-
.../dashboards/identity/mappings/urls.py | 10 +-
.../dashboards/identity/mappings/views.py | 2 +-
.../dashboards/identity/projects/groups/tables.py | 2 +-
.../dashboards/identity/projects/panel.py | 2 +-
.../dashboards/identity/projects/tables.py | 8 +-
.../dashboards/identity/projects/tabs.py | 2 +-
.../dashboards/identity/projects/urls.py | 22 +-
.../dashboards/identity/projects/users/tables.py | 2 +-
.../dashboards/identity/projects/views.py | 2 +-
.../dashboards/identity/projects/workflows.py | 2 +-
.../dashboards/identity/roles/forms.py | 2 +-
.../dashboards/identity/roles/panel.py | 2 +-
.../dashboards/identity/roles/tables.py | 8 +-
.../dashboards/identity/roles/urls.py | 14 +-
.../dashboards/identity/roles/views.py | 2 +-
.../dashboards/identity/users/forms.py | 2 +-
.../dashboards/identity/users/groups/tables.py | 2 +-
.../dashboards/identity/users/panel.py | 2 +-
.../identity/users/role_assignments/tables.py | 2 +-
.../dashboards/identity/users/tables.py | 16 +-
.../dashboards/identity/users/tabs.py | 2 +-
.../dashboards/identity/users/urls.py | 22 +-
.../dashboards/identity/users/views.py | 2 +-
.../dashboards/project/api_access/forms.py | 2 +-
.../dashboards/project/api_access/panel.py | 2 +-
.../dashboards/project/api_access/tables.py | 2 +-
.../dashboards/project/api_access/urls.py | 21 +-
.../dashboards/project/api_access/views.py | 2 +-
.../dashboards/project/backups/forms.py | 2 +-
.../dashboards/project/backups/panel.py | 2 +-
.../dashboards/project/backups/tables.py | 8 +-
.../dashboards/project/backups/tabs.py | 2 +-
.../dashboards/project/backups/urls.py | 16 +-
.../dashboards/project/backups/views.py | 2 +-
.../dashboards/project/containers/panel.py | 2 +-
.../dashboards/project/containers/urls.py | 12 +-
.../dashboards/project/containers/utils.py | 2 +-
.../dashboards/project/dashboard.py | 2 +-
.../dashboards/project/floating_ips/forms.py | 2 +-
.../dashboards/project/floating_ips/panel.py | 2 +-
.../dashboards/project/floating_ips/tables.py | 8 +-
.../dashboards/project/floating_ips/urls.py | 8 +-
.../dashboards/project/floating_ips/views.py | 2 +-
.../dashboards/project/floating_ips/workflows.py | 2 +-
.../dashboards/project/images/images/forms.py | 2 +-
.../dashboards/project/images/images/tables.py | 8 +-
.../dashboards/project/images/images/tabs.py | 2 +-
.../dashboards/project/images/images/urls.py | 19 +-
.../dashboards/project/images/images/views.py | 2 +-
.../dashboards/project/images/panel.py | 2 +-
.../dashboards/project/images/snapshots/forms.py | 2 +-
.../dashboards/project/images/snapshots/urls.py | 8 +-
.../dashboards/project/images/snapshots/views.py | 2 +-
.../dashboards/project/images/urls.py | 16 +-
.../dashboards/project/images/utils.py | 2 +-
.../dashboards/project/images/views.py | 2 +-
.../dashboards/project/instances/audit_tables.py | 2 +-
.../dashboards/project/instances/console.py | 2 +-
.../dashboards/project/instances/forms.py | 2 +-
.../project/instances/interfaces_tables.py | 2 +-
.../dashboards/project/instances/panel.py | 2 +-
.../dashboards/project/instances/tables.py | 66 +-
.../dashboards/project/instances/tabs.py | 2 +-
.../templates/instances/_flavors_and_quotas.html | 40 +-
.../templates/instances/_launch_advanced_help.html | 2 -
.../templates/instances/_launch_details_help.html | 7 -
.../templates/instances/_launch_network_help.html | 3 -
.../instances/_launch_network_ports_help.html | 7 -
.../templates/instances/_launch_volumes_help.html | 3 -
.../templates/instances/_update_networks.html | 36 -
.../dashboards/project/instances/urls.py | 65 +-
.../dashboards/project/instances/utils.py | 66 +-
.../dashboards/project/instances/views.py | 19 +-
.../project/instances/workflows/resize_instance.py | 46 +-
.../project/instances/workflows/update_instance.py | 2 +-
.../dashboards/project/key_pairs/forms.py | 2 +-
.../dashboards/project/key_pairs/panel.py | 2 +-
.../dashboards/project/key_pairs/tables.py | 8 +-
.../dashboards/project/key_pairs/urls.py | 21 +-
.../dashboards/project/key_pairs/views.py | 2 +-
.../dashboards/project/network_qos/panel.py | 2 +-
.../dashboards/project/network_qos/urls.py | 6 +-
.../project/network_topology/instances/tables.py | 2 +-
.../project/network_topology/networks/tables.py | 2 +-
.../dashboards/project/network_topology/panel.py | 2 +-
.../project/network_topology/ports/tables.py | 2 +-
.../project/network_topology/routers/tables.py | 2 +-
.../project/network_topology/subnets/tables.py | 2 +-
.../dashboards/project/network_topology/tabs.py | 2 +-
.../dashboards/project/network_topology/urls.py | 38 +-
.../dashboards/project/network_topology/views.py | 2 +-
.../dashboards/project/networks/forms.py | 2 +-
.../dashboards/project/networks/panel.py | 2 +-
.../extensions/allowed_address_pairs/forms.py | 2 +-
.../extensions/allowed_address_pairs/tables.py | 8 +-
.../ports/extensions/allowed_address_pairs/tabs.py | 2 +-
.../extensions/allowed_address_pairs/views.py | 2 +-
.../dashboards/project/networks/ports/sg_base.py | 2 +-
.../dashboards/project/networks/ports/tables.py | 8 +-
.../dashboards/project/networks/ports/tabs.py | 2 +-
.../dashboards/project/networks/ports/urls.py | 10 +-
.../dashboards/project/networks/ports/views.py | 2 +-
.../dashboards/project/networks/ports/workflows.py | 2 +-
.../dashboards/project/networks/subnets/tables.py | 8 +-
.../dashboards/project/networks/subnets/tabs.py | 2 +-
.../dashboards/project/networks/subnets/urls.py | 4 +-
.../dashboards/project/networks/subnets/utils.py | 2 +-
.../dashboards/project/networks/subnets/views.py | 2 +-
.../project/networks/subnets/workflows.py | 2 +-
.../dashboards/project/networks/tables.py | 8 +-
.../dashboards/project/networks/tabs.py | 2 +-
.../dashboards/project/networks/urls.py | 42 +-
.../dashboards/project/networks/views.py | 25 +-
.../dashboards/project/networks/workflows.py | 2 +-
.../dashboards/project/overview/panel.py | 2 +-
.../dashboards/project/overview/urls.py | 6 +-
.../dashboards/project/overview/views.py | 2 +-
.../routers/extensions/extraroutes/forms.py | 2 +-
.../routers/extensions/extraroutes/tables.py | 8 +-
.../project/routers/extensions/extraroutes/tabs.py | 2 +-
.../routers/extensions/extraroutes/views.py | 2 +-
.../dashboards/project/routers/forms.py | 2 +-
.../dashboards/project/routers/panel.py | 2 +-
.../dashboards/project/routers/ports/forms.py | 2 +-
.../dashboards/project/routers/ports/tables.py | 8 +-
.../dashboards/project/routers/ports/tabs.py | 2 +-
.../dashboards/project/routers/ports/urls.py | 4 +-
.../dashboards/project/routers/ports/views.py | 2 +-
.../dashboards/project/routers/tables.py | 12 +-
.../dashboards/project/routers/tabs.py | 2 +-
.../dashboards/project/routers/urls.py | 36 +-
.../dashboards/project/routers/views.py | 2 +-
.../dashboards/project/security_groups/forms.py | 2 +-
.../dashboards/project/security_groups/panel.py | 2 +-
.../dashboards/project/security_groups/tables.py | 12 +-
.../dashboards/project/security_groups/urls.py | 24 +-
.../dashboards/project/security_groups/views.py | 2 +-
.../dashboards/project/server_groups/panel.py | 2 +-
.../dashboards/project/server_groups/urls.py | 6 +-
.../dashboards/project/snapshots/forms.py | 2 +-
.../dashboards/project/snapshots/panel.py | 2 +-
.../dashboards/project/snapshots/tables.py | 8 +-
.../dashboards/project/snapshots/tabs.py | 2 +-
.../dashboards/project/snapshots/urls.py | 16 +-
.../dashboards/project/snapshots/views.py | 2 +-
.../workflow/launch-instance/source/source.html | 1 +
.../dashboards/project/trunks/panel.py | 2 +-
.../dashboards/project/trunks/urls.py | 10 +-
.../dashboards/project/vg_snapshots/forms.py | 2 +-
.../dashboards/project/vg_snapshots/panel.py | 2 +-
.../dashboards/project/vg_snapshots/tables.py | 8 +-
.../dashboards/project/vg_snapshots/tabs.py | 2 +-
.../dashboards/project/vg_snapshots/urls.py | 16 +-
.../dashboards/project/vg_snapshots/views.py | 2 +-
.../dashboards/project/volume_groups/forms.py | 2 +-
.../dashboards/project/volume_groups/panel.py | 2 +-
.../dashboards/project/volume_groups/tables.py | 2 +-
.../dashboards/project/volume_groups/tabs.py | 2 +-
.../dashboards/project/volume_groups/urls.py | 52 +-
.../dashboards/project/volume_groups/views.py | 2 +-
.../dashboards/project/volume_groups/workflows.py | 2 +-
.../dashboards/project/volumes/forms.py | 2 +-
.../dashboards/project/volumes/panel.py | 2 +-
.../dashboards/project/volumes/tables.py | 8 +-
.../dashboards/project/volumes/tabs.py | 2 +-
.../dashboards/project/volumes/urls.py | 96 +-
.../dashboards/project/volumes/views.py | 7 +-
.../dashboards/settings/dashboard.py | 2 +-
.../dashboards/settings/password/forms.py | 2 +-
.../dashboards/settings/password/panel.py | 2 +-
.../dashboards/settings/password/urls.py | 4 +-
.../dashboards/settings/password/views.py | 2 +-
.../dashboards/settings/user/forms.py | 4 +-
.../dashboards/settings/user/panel.py | 2 +-
.../dashboards/settings/user/urls.py | 4 +-
.../dashboards/settings/user/views.py | 2 +-
openstack_dashboard/defaults.py | 4 +-
.../enabled/_1010_compute_panel_group.py | 2 +-
.../enabled/_1310_volumes_panel_group.py | 2 +-
.../enabled/_1410_network_panel_group.py | 2 +-
.../enabled/_1910_object_store_panel_group.py | 2 +-
.../enabled/_2110_admin_compute_panel_group.py | 2 +-
.../enabled/_2210_admin_volume_panel_group.py | 2 +-
.../enabled/_2300_admin_network_panel_group.py | 2 +-
.../enabled/_2810_admin_system_panel_group.py | 2 +-
.../enabled/_3060_federation_panel_group.py | 2 +-
.../local/local_settings.py.example | 2 +-
.../locale/as/LC_MESSAGES/django.po | 261 +---
.../locale/bn_IN/LC_MESSAGES/django.po | 257 +---
.../locale/brx/LC_MESSAGES/django.po | 255 +---
.../locale/cs/LC_MESSAGES/django.po | 315 +----
.../locale/de/LC_MESSAGES/django.po | 326 +----
.../locale/en_AU/LC_MESSAGES/django.po | 321 +----
.../locale/en_GB/LC_MESSAGES/django.po | 335 +----
.../locale/eo/LC_MESSAGES/django.po | 318 +----
.../locale/es/LC_MESSAGES/django.po | 338 +----
.../locale/fr/LC_MESSAGES/django.po | 329 +----
.../locale/gu/LC_MESSAGES/django.po | 257 +---
.../locale/hi/LC_MESSAGES/django.po | 190 +--
.../locale/id/LC_MESSAGES/django.po | 326 +----
.../locale/it/LC_MESSAGES/django.po | 307 +---
.../locale/ja/LC_MESSAGES/django.po | 337 +----
.../locale/kn/LC_MESSAGES/django.po | 263 +---
.../locale/ko_KR/LC_MESSAGES/django.po | 318 +----
.../locale/kok/LC_MESSAGES/django.po | 253 +---
.../locale/ks/LC_MESSAGES/django.po | 253 +---
.../locale/mai/LC_MESSAGES/django.po | 255 +---
.../locale/mni/LC_MESSAGES/django.po | 263 +---
.../locale/mr/LC_MESSAGES/django.po | 252 +---
.../locale/ne/LC_MESSAGES/django.po | 256 +---
.../locale/pa_IN/LC_MESSAGES/django.po | 264 +---
.../locale/pl_PL/LC_MESSAGES/django.po | 270 +---
.../locale/pt_BR/LC_MESSAGES/django.po | 325 +----
.../locale/ru/LC_MESSAGES/django.po | 351 +----
.../locale/ta/LC_MESSAGES/django.po | 261 +---
.../locale/tr_TR/LC_MESSAGES/django.po | 322 +----
.../locale/ur/LC_MESSAGES/django.po | 264 +---
.../locale/zh_Hans/LC_MESSAGES/django.po | 296 +---
.../locale/zh_Hant/LC_MESSAGES/django.po | 300 +---
.../management/commands/migrate_settings.py | 13 +-
.../management/commands/upgrade_check.py | 2 +-
openstack_dashboard/settings.py | 3 +-
.../app/core/network_qos/actions/actions.module.js | 34 +
.../network_qos/actions/actions.module.spec.js | 15 +
.../network_qos/actions/add-rule.action.service.js | 182 +++
.../actions/add-rule.action.service.spec.js | 154 ++
.../network_qos/actions/add-rule.controller.js | 74 +
.../actions/add-rule.controller.spec.js | 130 ++
.../app/core/network_qos/actions/add-rule.html | 98 ++
.../actions/delete-rule.action.service.js | 117 ++
.../actions/delete-rule.action.service.spec.js | 224 +++
.../actions/edit-rule.action.service.js | 173 +++
.../actions/edit-rule.action.service.spec.js | 244 ++++
.../network_qos/actions/edit-rule.controller.js | 104 ++
.../actions/edit-rule.controller.spec.js | 161 +++
.../app/core/network_qos/actions/edit-rule.html | 106 ++
.../core/network_qos/actions/rule.description.html | 18 +
.../workflow/delete-rule.workflow.service.js | 118 ++
.../workflow/delete-rule.workflow.service.spec.js | 97 ++
.../network_qos/details/overview.controller.js | 58 +-
.../app/core/network_qos/details/overview.html | 37 +-
.../core/openstack-service-api/neutron.service.js | 366 ++++-
.../openstack-service-api/neutron.service.spec.js | 108 ++
.../static/dashboard/scss/_util.scss | 3 +-
openstack_dashboard/test/error_pages_urls.py | 4 +-
openstack_dashboard/test/extensible_header_urls.py | 4 +-
openstack_dashboard/test/helpers.py | 13 +-
.../pages/admin/network/networkspage.py | 22 +-
.../pages/project/network/networkspage.py | 14 +-
openstack_dashboard/test/test_data/neutron_data.py | 298 +++-
openstack_dashboard/test/test_data/swift_data.py | 8 +-
.../test/test_panels/another_panel/urls.py | 4 +-
.../test/test_panels/another_panel/views.py | 2 +-
.../test/test_panels/nonloading_panel/urls.py | 4 +-
.../test/test_panels/plugin_panel/urls.py | 4 +-
.../test/test_panels/second_panel/urls.py | 4 +-
.../test/unit/api/rest/test_cinder.py | 2 +-
.../test/unit/api/rest/test_config.py | 2 +-
.../test/unit/api/rest/test_glance.py | 2 +-
.../test/unit/api/rest/test_keystone.py | 2 +-
.../test/unit/api/rest/test_network.py | 4 +-
.../test/unit/api/rest/test_neutron.py | 16 +-
.../test/unit/api/rest/test_nova.py | 2 +-
.../test/unit/api/rest/test_policy.py | 11 +-
.../test/unit/api/rest/test_swift.py | 2 +-
.../test/unit/api/rest/test_utils.py | 4 +-
openstack_dashboard/test/unit/api/test_neutron.py | 1054 +++++++++++++-
openstack_dashboard/test/unit/usage/test_quotas.py | 4 +-
openstack_dashboard/test/urls.py | 20 +-
openstack_dashboard/urls.py | 20 +-
openstack_dashboard/usage/base.py | 2 +-
openstack_dashboard/usage/quotas.py | 2 +-
openstack_dashboard/usage/tables.py | 2 +-
openstack_dashboard/usage/views.py | 2 +-
openstack_dashboard/utils/config_types.py | 4 +-
openstack_dashboard/views.py | 4 +-
.../add-networks-pagination-4c05d784998fafb2.yaml | 5 +
...from-same-user-in-horizon-448baa6534a8a451.yaml | 11 +
...652_fix_policy_for_resume-a719efb23054c708.yaml | 6 +
...nge-keystone-default-role-3f95b6af11aed63b.yaml | 5 +
...ango-launch-instance-form-c6543e1d52786b79.yaml | 4 +-
.../notes/network_qos_rules-cd103f9383b6cdf9.yaml | 8 +
.../source/locale/fr/LC_MESSAGES/releasenotes.po | 280 ----
requirements.txt | 18 +-
setup.cfg | 1 +
tox.ini | 2 +-
575 files changed, 11737 insertions(+), 15355 deletions(-)
Requirements updates
--------------------
diff --git a/requirements.txt b/requirements.txt
index 151359316..f1f245993 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -23,8 +23,8 @@ netaddr>=0.7.18 # BSD
-oslo.concurrency>=3.26.0 # Apache-2.0
-oslo.config>=5.2.0 # Apache-2.0
-oslo.i18n>=5.0.1 # Apache-2.0
-oslo.policy>=3.2.0 # Apache-2.0
-oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
-oslo.upgradecheck>=0.1.1 # Apache-2.0
-oslo.utils>=4.8.0 # Apache-2.0
-osprofiler>=2.3.0 # Apache-2.0
+oslo.concurrency>=4.5.0 # Apache-2.0
+oslo.config>=8.8.0 # Apache-2.0
+oslo.i18n>=5.1.0 # Apache-2.0
+oslo.policy>=3.11.0 # Apache-2.0
+oslo.serialization>=4.3.0 # Apache-2.0
+oslo.upgradecheck>=1.5.0 # Apache-2.0
+oslo.utils>=4.12.0 # Apache-2.0
+osprofiler>=3.4.2 # Apache-2.0
@@ -40 +40 @@ pytz>=2013.6 # MIT
-PyYAML>=3.12 # MIT
+PyYAML>=6.0 # MIT
More information about the Release-announce
mailing list