horizon 22.0.0 (yoga)
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
participants (1)
-
no-reply@openstack.org