We are tickled pink to announce the release of: horizon 14.0.0: OpenStack Dashboard This release is part of the rocky release series. Download the package from: https://tarballs.openstack.org/horizon/ For more details, please see below. Changes in horizon 13.0.0.0rc1..14.0.0 -------------------------------------- c424b1a Imported Translations from Zanata 364b815 Revert "Network Topology graph "twitches"" e0133c2 Imported Translations from Zanata e99e206 Imported Translations from Zanata c9c9132 Restores deletion in flat network topology aef9d0b Imported Translations from Zanata f0c1fa1 Make generic group check work with admin table ef21e65 Safer handling of return statement inside of OperationLogMiddleware ad60941 Imported Translations from Zanata cdd7235 Imported Translations from Zanata d7b7bec Imported Translations from Zanata a2bc5bc Imported Translations from Zanata fd4b024 Update UPPER_CONSTRAINTS_FILE for stable/rocky d6b2354 Update .gitreview for stable/rocky 4c9cf5f Hide default_cgsnapshot_type from cinder group types 633897a fix bug of fail to create volume type encryption from dashboard 446abc4 add dns_name and dns_domain into admin column f7eefaa force plain text for header response 48c73d2 Fix typo on release note for bug/1226003 e1e5c79 Add Generic Volume Groups release notes 74d75da Addressed TODO to change project_id to tenant_id 2e2ef6a Delete profiler object when request completes 73b4311 Add create domain action in angular domain panel 2fa872a Remove the redundant "required=True" 9e703ae Add DNS parameters to Floating IP panels 08e0f38 Fix image description field aa7bbac Convert identity.users tests into mock 12af2d4 Adding identity ng-groups edit action 889f05f Drop horizon-openstack-tox-py35dj20 from .zuul.yaml dadcea7 Imported Translations from Zanata 259648b Assign project role to the user when the user is created fc810bc Adding identity ng-groups delete action effc34f Adding identity ng-groups create action e20882d Support can_edit_user and can_edit_role settings in Angularized panels 88fb018 Rework DEFAULT_SERVICE_REGIONS 4767fbd Fix log message formatting a352308 Imported Translations from Zanata bbfa562 [doc] Correct the wrong virtual environment folder name 6f1004b Add release notes link in README 946d15f Imported Translations from Zanata 7b48d51 Modify the 'tox.ini' file b6d52b0 Support volume group when creating a volume ef4d8d6 Show generic group info in volume and volume snapshot pages 47d14a4 integration test fixes acaee4e Add delete action to network_qos panel a9404d5 updated integration tests README.rst 6532be0 Imported Translations from Zanata ce3c963 Imported Translations from Zanata dc51fc5 Remove the "browser support" dead link in the doc 4e0ee57 Replace "derails" with "details" in the doc fe4a1f4 Add Bandit non-voting job 9b6b559 Do not redirect to the /identity tab admin users on login. a384dc5 Fix and reorganize tox env definitions 15574ca Integration test fixes 49479a6 Declare django lower bound 3a579e6 Don't remove last char from profiling cookie path 0a584d6 Fix tox py27integration environment 25f1e90 Imported Translations from Zanata 1ca8555 Fix styling issues in networktopologycommon.js a2a720d Imported Translations from Zanata d257ddb Imported Translations from Zanata 0796adb Change catch type for workflow unregister a98d6d3 Imported Translations from Zanata 50efcb2 Imported Translations from Zanata 32d463a Generic volume group support 0258199 Fixed dropdown menu locator and active class for user & project ee95bf1 Fix selenuim-headless tests 1f80d94 Use default Django test runner instead of nose 0bc2f1b Add python3 django 1.11 job instead of django 2.0 job 4a3ed7e Imported Translations from Zanata a59b2e1 fix tox python3 overrides b369012 Sync Django version with global requirements 8ce6b37 Remove Cinder API v1 compatibility 69f42ae doc: Update apache configuration for WSGI edb1aab Allow keypairs to contain a underscore 61a79a9 Show WEBSSO disclaimer only when it is needed e98d7e6 Image panel: check instance create policy for 'Launch' button 54cfaf0 Imported Translations from Zanata cf06d27 Get flavor list sorted when launching instance b84da5e Fix issue with uploading image to glance on Python3 6517caf Imported Translations from Zanata 71c4880 Sort image list by name when launch instance af4811b Imported Translations from Zanata b1d5758 Heat projects have been migrated to Storyboard b9a1c44 Update attach_volume and detach_volume policy rules 8e39039 Fix mismatched attach_volume rule a3cc062 [trivial] Fixes a typo 4776428 Add reserved status key word to horizon 2a1159b Imported Translations from Zanata 0ca736e Create new wsgi.py file and deprecate old file 3190a5e Convert admin.networks.ports tests into mock 5e012b4 Convert admin.networks tests into mock 8a26bed Convert admin.networks.agents tests into mock 22deb55 Convert admin.flavors tests into mock f9f01d2 Convert admin.overview tests into mock 49470d1 Convert admin.networks.subnets tests into mock 518621f Add a link to the documentation into the README.rst 26fb8f2 Imported Translations from Zanata 8230f2c doc: Fix doc build failure due to dropped UpdateAction d16ed45 Support "Get me a network" in launch instance bff96f0 Imported Translations from Zanata e0e81e2 Add server groups and server group members quota management in Horizon 2c0de43 Imported Translations from Zanata 2280043 Imported Translations from Zanata 0f95d4e Imported Translations from Zanata df780f2 quota: Merge tenant_limit_usages into tenant_quota_usages 2e0a361 Imported Translations from Zanata 09f73b8 Trivial: Update pypi url to new url 5fafd47 Imported Translations from Zanata fa20420 Bug Fix : Local variable 'quota_display' referenced before assignment 96e7c33 Imported Translations from Zanata 850288b Imported Translations from Zanata 2d69444 Add support for application credentials ad25568 Standardize the login form button text dd5f173 Convert identity.projects tests into mock 93bb571 Replace all mentions of get_identity_providers with get_identity_provider 52550be Convert identity.roles tests into mock a61bbec Convert identity.mappings tests into mock 794b101 Convert identity.identity_providers tests into mock 5d46738 Convert identity.domains tests into mock 0a149af Convert identity.groups tests into mock 1bb050a Imported Translations from Zanata 70b9d25 Drop Flavor Edit completely d175d33 Watch field item changes 3adff90 Add "Edit Port Security Groups" action ff5b622 Add instance interfaces tab for easy security group edit eea7626 Imported Translations from Zanata 58019a7 Disable mox usage by default in test helper 06ca3c8 quota: Move targets argument to get_disabled_quotas f897837 usage: Categorize Limit Summary by service b5671a2 usage: Add network resources to Limit Summary b0dc533 usage: move field-specific logic from template to code 7fabda7 usage: Use tenant_quota_usages() for Limit Summary 0a0fa4c Imported Translations from Zanata 656490f Add identity API version discovery e362626 Allow OVA upload for images e1ba5fd Imported Translations from Zanata e5dae9b Network Topology graph "twitches" 7f3fc39 Imported Translations from Zanata 500acb4 Move common SG workflow classes into separate module e50a69d Workflow: Make steps pluggable via horizon plugin config 196ce77 Cinder REST API test: Make list_extensions test work properly 377422b Delete the deprecated Edit Flavor feature f6f39d8 Remove deprecated table.UpdateAction class 3c55bce Add links to trunk parent and subports 34732d2 Redirect back if deleting from image details 3af1d42 Fix navigation from admin/trunks d2963fc Imported Translations from Zanata 0887722 Sort nova availability zones by name 986e902 Exclude nova-network quotas properly f61b3fd Modularize workflow action in quota defaults 386a5b6 Make babel_extract_angular work with python 3 f0f028c Fix E402 warnings 11eb4e9 Fix W503 warnings 08e4cf5 Imported Translations from Zanata 1e2dfc4 Use microversion 2.60 when attaching a multiattach volume f545272 Fix pep8 errors 6f37943 A description can now be added to a security rule c58e5b8 Use items per page setting on Angular tables 061f4b0 Imported Translations from Zanata f783b4e Imported Translations from Zanata 3051dee Ensure to show security groups only from current project 4b304f8 Remove remaining mox usage in tests converted to mock 7b7ace0 Simplify APIMockTestCase dd0eba2 Support simple FIP disassociation (with FIP release) 886852f Rename pull_catalog args from version to branch 0c39d76 Make tests output more verbose c1eab3d Imported Translations from Zanata d0beeb7 Pass whole selected entity to deleteEntity callback 9ca9b5c Imported Translations from Zanata f343212 Improve mocking in REST API tests (test_network) dc9a6a3 Fix unauthorized exception when using member user to access angular users panel c3d6036 Cleanup Plugin Registry da9bfa5 Update lower-constraints to requirements.txt 6aa3c66 Imported Translations from Zanata b0fccd3 The disk format is selected automatically when using file to create image 2ad84cb Support description for instance update/rebuild fd67e0f Only display the bootable volume snapshots when creating instance d00fd5b Imported Translations from Zanata 8275d67 Reproduce navigations on refreshing ngdetails view 8220df7 Update supported browsers list 68167ca Improve mocking in REST API tests (test_neutron) c5cd0b2 Switch Neutron/Network API tests to mock b34dcc8 Imported Translations from Zanata 65f43d2 Improve mocking in REST API tests (test_nova) 2ad9f81 Tabbity quota default update workflow 86709f8 Updated from global requirements fdd3c8b add lower-constraints job eac3eae Follow the new PTI for document build 71993e3 Drop deprecated settings 058c306 Imported Translations from Zanata 63ab360 Delete choice of image source when file is the only option 352f536 Imported Translations from Zanata cc368d4 Convert admin.defaults tests into mock 482e725 Avoid popup blocker after key-pair creation 3e409d8 Improve mocking in REST API tests (test_swift) f819633 Add asterisk to conditionally required fields 0659f9a Drop trove/sahara settings from horizon repo dd7e281 Improve mocking in REST API tests (test_keystone) 474de20 Switch test_quotas to mock fde0095 Imported Translations from Zanata f588b4e Fix wrong setting name for SHOW_KEYSTONE_V2_RC baa0d50 Imported Translations from Zanata 64b67ac Update the doc links to the newest ones d7cab93 Sahara projects have been migrated to Storyboard 1f93e64 Add plugin xstatic modules support d62d6e3 Convert project tests into mock: fip/sg/key_pairs/topology 55ef583 Convert admin.hypervisors.compute tests into mock 38c51a9 Imported Translations from Zanata 940ff11 Add angular server group details page 37647dd Add angular delete server groups action a5f5962 Convert admin.instances tests into mock 68fc1c0 Convert admin.metadata_defs tests into mock 324dce5 Convert admin.info tests into mock 6e29fdd Imported Translations from Zanata f494c6f Fix Angular errors in openstack_auth df857f0 Add angular create server group action 89987c6 Load networks and security groups in parallel e02a192 project: Tabbify project quota update a257b52 project: Split quota update into a separate workflow 0efbb37 Show an asterisk mark for 'switched' conditional filed(required=Flase) a180baf Update RHEL/CentOS horizon install instruction 5e3fc94 Update Django versions in horizon requirements a70e1f4 Convert admin.snapshots tests into mock b122641 Speed up quotas fetching using futurist library d01a505 Updated from global requirements 56ae087 Refactor futurist calls dfa6846 Improve mocking in REST API tests (test_glance) 002eb5f Switch project/admin routers tests to mock c4ead86 Remove deprecated fix_auth_url_version function 58e0194 Imported Translations from Zanata 9fab803 Updated from global requirements 60a78e1 Add swift object copy function f25b924 Convert admin.hypervisors tests into mock 535ecad Fix layout of dialogs for Angularized users panel 0cf4937 Make size of Angular modal form specifiable 2e3e68a Switch horizon UT from mox to mock 64d5ba8 Improve mocking in REST API tests (test_cinder) a987c03 TabGroup: Make tabs pluggable via horizon plugin config ec14dd9 Imported Translations from Zanata d885d9e Update tox.ini 4034f92 Drop FWaaS related SCSS entries a01dfc4 Updated from global requirements ce283b4 Add angular server groups panel e8f1f54 Switch project neworks.ports to mock 835a4bb Update upper-constraints consumption a17a81a Imported Translations from Zanata f4f4972 Tabs may not appear in angular instance wizard 5d81a96 Update bug trackers of octavia/lbaas-dashboard dd560d9 Convert project tests into mock: api_access/backups/overview/snapshots b60bf6d Imported Translations from Zanata 4c084ad Convert admin.floating_ips tests into mock fb9ef26 Allow mox-free horizon plugins to consume horizon test helper f8150ab Convert project tests into mock: cgroups/cg_snapshots 4928df7 Convert admin volume_types tests into mock 4a31e6e Switch project networks tests to mock cc04dda Switch project.networks.subnets.tests to mock 2e66084 Updated from global requirements a72963b Drop Django <= 1.10 support 4dd6037 Fix python 3 related test failures d936ba4 Suppress unnecessary logging output in UTs b017879 Django2: Use new custom template loader interface 3ecda5a django2: adopt New-style middleware be197d1 django2: Drop SessionAuthenticationMiddleware 18684e1 django2: Fix 3-tuple ImproperlyConfigured error 4660b9d Imported Translations from Zanata 38ebec5 Convert admin.aggregates tests into mock 3233de8 Add same launch instance error handling as image to instance 61c7473 Update docstring of test.helpers.create_mocks f4f072f Imported Translations from Zanata b407b07 Start using create_mocks in dashboards/admin/volumes/tests.py ce984d0 Imported Translations from Zanata 7cb2355 Add a warning to user: Unable to remove availability zone from host aggregate 90e8c16 Imported Translations from Zanata e049609 Hide button "delete subnet" on the network topology for shared networks 28fd6b2 Switch project instances tests to mock 7aadd7e Use load-edit directive in import key pair 6667629 Provide a button to center the network topology c32b5c1 Add Esperanto to the list of languages 6a56497 Add assert_mock_multiple_calls_with_same_arguments test helper 61ea0b6 Make create_mocks compatible with create_stubs b70b4e3 Updated from global requirements ebc8d8a Imported Translations from Zanata 21ffefa docs: Update help text for encryption provider d3883a1 Mark other API related tests with mox free 5a82ff9 Switch Keystone API tests to mock 1a252cb django2: is_authenticated/is_anonymous is now property only 826720a django2: Replace assignment_tag with simple_tag e477eaf django2: Replace django.core.urlresolves with django.urls 76fa01b Drop old django tests 5c5159b Switch swift API tests to mock 06a63b4 Add option --version to Zanata pull_catalog a44e67f Imported Translations from Zanata 79ae866 Switch Nova API tests to mock 51378f7 Minor fix on mock migrated tests 1a2c957 Provide a way to disable mox completely 5a68a26 Updated from global requirements c687127 Imported Translations from Zanata a59ebd7 Replaces yaml.load() with yaml.safe_load() 974d05c Imported Translations from Zanata f2bff13 Move test template to more proper directory 0cb96af Admin State is always UP whatever whether router Admin State is checked or not 18d3d5d Imported Translations from Zanata 0039183 Imported Translations from Zanata b068d91 Cache neutron extension list across requests 10ebb64 Update reno for stable/queens 30aba39 Imported Translations from Zanata 5bf92e8 Fix typos in horizon 00ecfcd Filtering networks or routers by non-existing tenants return an empty list a965f42 Tabbify quota default panel dc0bce6 Fix collectstatic in case of theme customization fc64ba9 Enable more hacking-extensions 541426e Fixed popover table colour change on hover 736312b Support specified security groups when creating a port 88d78a4 Refactor the create port form to workflow 7d9dd1c [doc] Add the missing 'API Access' for project tab e97623e table: Show checkbox only when there is BatchAction 61039b0 operation_log: add QUERY_STRING to request_url ab57c09 Fix batch delete key pairs button isn't disabled when the key pair has deleted Diffstat (except docs and test files) ------------------------------------- .gitignore | 1 + .gitreview | 1 + .zuul.yaml | 56 +- README.rst | 6 +- bindep.txt | 5 + .../figures/create_volume_type_encryption.png | Bin 87359 -> 161109 bytes horizon/base.py | 42 +- horizon/browsers/views.py | 3 + horizon/conf/default.py | 3 - horizon/decorators.py | 4 +- horizon/forms/fields.py | 10 +- horizon/loaders.py | 38 +- horizon/locale/ca/LC_MESSAGES/django.po | 9 +- horizon/locale/cs/LC_MESSAGES/django.po | 21 +- horizon/locale/cs/LC_MESSAGES/djangojs.po | 9 +- horizon/locale/de/LC_MESSAGES/django.po | 36 +- horizon/locale/de/LC_MESSAGES/djangojs.po | 14 +- horizon/locale/en_AU/LC_MESSAGES/django.po | 21 +- horizon/locale/en_AU/LC_MESSAGES/djangojs.po | 11 +- horizon/locale/en_GB/LC_MESSAGES/django.po | 29 +- horizon/locale/en_GB/LC_MESSAGES/djangojs.po | 14 +- horizon/locale/eo/LC_MESSAGES/django.po | 39 +- horizon/locale/eo/LC_MESSAGES/djangojs.po | 16 +- horizon/locale/es/LC_MESSAGES/django.po | 27 +- horizon/locale/es/LC_MESSAGES/djangojs.po | 12 +- horizon/locale/es_MX/LC_MESSAGES/django.po | 11 +- horizon/locale/fi_FI/LC_MESSAGES/django.po | 8 +- horizon/locale/fr/LC_MESSAGES/django.po | 40 +- horizon/locale/fr/LC_MESSAGES/djangojs.po | 17 +- horizon/locale/id/LC_MESSAGES/django.po | 32 +- horizon/locale/id/LC_MESSAGES/djangojs.po | 12 +- horizon/locale/it/LC_MESSAGES/django.po | 19 +- horizon/locale/it/LC_MESSAGES/djangojs.po | 9 +- horizon/locale/ja/LC_MESSAGES/django.po | 27 +- horizon/locale/ja/LC_MESSAGES/djangojs.po | 15 +- horizon/locale/ko_KR/LC_MESSAGES/django.po | 30 +- horizon/locale/ko_KR/LC_MESSAGES/djangojs.po | 17 +- horizon/locale/nl_NL/LC_MESSAGES/django.po | 11 +- horizon/locale/nl_NL/LC_MESSAGES/djangojs.po | 11 +- horizon/locale/pa_IN/LC_MESSAGES/django.po | 11 +- horizon/locale/pa_IN/LC_MESSAGES/djangojs.po | 15 +- horizon/locale/pl_PL/LC_MESSAGES/django.po | 23 +- horizon/locale/pl_PL/LC_MESSAGES/djangojs.po | 11 +- horizon/locale/pt/LC_MESSAGES/django.po | 9 +- horizon/locale/pt_BR/LC_MESSAGES/django.po | 32 +- horizon/locale/pt_BR/LC_MESSAGES/djangojs.po | 14 +- horizon/locale/ru/LC_MESSAGES/django.po | 36 +- horizon/locale/ru/LC_MESSAGES/djangojs.po | 36 +- horizon/locale/sl_SI/LC_MESSAGES/django.po | 11 +- horizon/locale/tr_TR/LC_MESSAGES/django.po | 21 +- horizon/locale/tr_TR/LC_MESSAGES/djangojs.po | 11 +- horizon/locale/zh_CN/LC_MESSAGES/django.po | 36 +- horizon/locale/zh_CN/LC_MESSAGES/djangojs.po | 18 +- horizon/locale/zh_TW/LC_MESSAGES/django.po | 19 +- horizon/locale/zh_TW/LC_MESSAGES/djangojs.po | 11 +- horizon/management/commands/pull_catalog.py | 8 +- horizon/middleware/base.py | 15 +- horizon/middleware/operation_log.py | 21 +- horizon/notifications.py | 4 +- horizon/site_urls.py | 2 +- horizon/static/framework/conf/conf.js | 3 + .../conf/resource-type-registry.service.js | 33 + .../framework/util/file/text-download.service.js | 1 - .../util/navigations/navigations.module.js | 19 + .../util/navigations/navigations.service.js | 109 + .../util/navigations/navigations.service.spec.js | 163 + horizon/static/framework/util/util.module.js | 1 + .../details/routed-details-view.controller.js | 46 +- .../details/routed-details-view.controller.spec.js | 33 +- .../framework/widgets/form/modal-form.service.js | 2 +- .../widgets/modal/delete-modal.service.js | 3 +- .../widgets/modal/delete-modal.service.spec.js | 10 +- .../widgets/property/hz-field.directive.js | 8 +- .../table/hz-dynamic-table.directive.spec.js | 11 + .../widgets/table/hz-dynamic-table.spec.js | 11 + .../widgets/table/hz-table-footer.controller.js | 33 + .../widgets/table/hz-table-footer.directive.js | 1 + .../framework/widgets/table/hz-table-footer.html | 7 +- .../static/framework/widgets/table/pagination.html | 13 + .../static/framework/widgets/table/table.module.js | 8 +- .../static/framework/widgets/table/table.spec.js | 35 +- .../framework/widgets/wizard/wizard.controller.js | 4 +- .../static/framework/widgets/wizard/wizard.spec.js | 15 +- horizon/static/horizon/js/horizon.forms.js | 5 + .../horizon/js/horizon.tables_inline_edit.js | 277 -- horizon/static/horizon/js/horizon.tabs.js | 2 - horizon/tables/__init__.py | 2 - horizon/tables/actions.py | 67 +- horizon/tables/base.py | 27 +- horizon/tables/views.py | 4 +- horizon/tabs/base.py | 59 +- horizon/templates/auth/_login_form.html | 5 +- .../templates/horizon/common/_limit_summary.html | 63 +- .../common/_workflow_step_update_members.html | 2 +- horizon/templatetags/branding.py | 4 +- horizon/templatetags/horizon.py | 6 +- horizon/templatetags/shellfilter.py | 6 +- horizon/test/firefox_binary.py | 4 +- horizon/test/helpers.py | 89 +- horizon/test/settings.py | 25 +- horizon/test/templates/angular.html | 0 horizon/test/templates/base.html | 1 - horizon/test/unit/forms/test_fields.py | 2 +- horizon/test/unit/middleware/test_base.py | 24 +- horizon/test/unit/middleware/test_operation_log.py | 47 +- horizon/test/unit/tables/test_tables.py | 266 +- horizon/test/unit/tabs/test_tabs.py | 26 +- horizon/test/unit/test_base.py | 18 +- horizon/test/unit/test_messages.py | 6 +- horizon/test/unit/workflows/test_workflows.py | 57 +- horizon/test/urls.py | 3 +- horizon/themes.py | 50 +- horizon/utils/babel_extract_angular.py | 3 +- horizon/utils/file_discovery.py | 8 +- horizon/utils/memoized.py | 5 +- horizon/workflows/base.py | 45 +- lower-constraints.txt | 160 + openstack_auth/backend.py | 2 +- openstack_auth/forms.py | 2 - openstack_auth/locale/de/LC_MESSAGES/django.po | 15 +- openstack_auth/locale/en_GB/LC_MESSAGES/django.po | 6 +- openstack_auth/locale/eo/LC_MESSAGES/django.po | 22 +- openstack_auth/locale/fr/LC_MESSAGES/django.po | 18 +- openstack_auth/locale/id/LC_MESSAGES/django.po | 11 +- openstack_auth/locale/ko_KR/LC_MESSAGES/django.po | 6 +- openstack_auth/locale/pt_BR/LC_MESSAGES/django.po | 6 +- openstack_auth/locale/ru/LC_MESSAGES/django.po | 80 + openstack_auth/locale/zh_CN/LC_MESSAGES/django.po | 6 +- openstack_auth/plugin/base.py | 4 +- openstack_auth/user.py | 79 +- openstack_auth/utils.py | 70 +- openstack_auth/views.py | 13 +- openstack_dashboard/api/base.py | 10 +- openstack_dashboard/api/cinder.py | 222 +- openstack_dashboard/api/glance.py | 90 +- openstack_dashboard/api/keystone.py | 84 +- openstack_dashboard/api/microversions.py | 7 +- openstack_dashboard/api/neutron.py | 137 +- openstack_dashboard/api/nova.py | 85 +- openstack_dashboard/api/rest/cinder.py | 1 - openstack_dashboard/api/rest/glance.py | 81 +- openstack_dashboard/api/rest/keystone.py | 8 +- openstack_dashboard/api/rest/network.py | 8 +- openstack_dashboard/api/rest/neutron.py | 20 +- openstack_dashboard/api/rest/nova.py | 41 + openstack_dashboard/api/rest/utils.py | 2 +- openstack_dashboard/api/swift.py | 5 +- openstack_dashboard/context_processors.py | 4 +- .../contrib/developer/profiler/middleware.py | 25 +- .../dashboards/admin/aggregates/forms.py | 11 +- .../dashboards/admin/aggregates/views.py | 2 +- .../dashboards/admin/defaults/tables.py | 91 +- .../dashboards/admin/defaults/tabs.py | 65 +- .../dashboards/admin/defaults/views.py | 12 +- .../dashboards/admin/defaults/workflows.py | 178 +- .../dashboards/admin/flavors/tables.py | 23 +- .../dashboards/admin/flavors/views.py | 18 +- .../dashboards/admin/flavors/workflows.py | 162 +- .../dashboards/admin/floating_ips/forms.py | 2 +- .../dashboards/admin/floating_ips/tables.py | 3 +- .../dashboards/admin/floating_ips/views.py | 4 +- .../dashboards/admin/hypervisors/compute/forms.py | 2 +- .../dashboards/admin/hypervisors/compute/views.py | 4 +- .../dashboards/admin/hypervisors/urls.py | 2 +- .../dashboards/admin/images/views.py | 8 +- .../dashboards/admin/info/tables.py | 6 +- .../dashboards/admin/instances/forms.py | 2 +- .../dashboards/admin/instances/tables.py | 16 +- .../dashboards/admin/instances/views.py | 132 +- .../dashboards/admin/metadata_defs/forms.py | 2 +- .../dashboards/admin/metadata_defs/views.py | 4 +- .../dashboards/admin/networks/agents/forms.py | 2 +- .../dashboards/admin/networks/agents/tables.py | 2 +- .../dashboards/admin/networks/agents/views.py | 2 +- .../dashboards/admin/networks/forms.py | 2 +- .../dashboards/admin/networks/ports/forms.py | 82 - .../dashboards/admin/networks/ports/tables.py | 2 +- .../dashboards/admin/networks/ports/views.py | 49 +- .../dashboards/admin/networks/ports/workflows.py | 37 +- .../dashboards/admin/networks/subnets/tables.py | 4 +- .../dashboards/admin/networks/subnets/views.py | 2 +- .../dashboards/admin/networks/subnets/workflows.py | 2 +- .../networks/templates/networks/ports/_create.html | 7 - .../networks/templates/networks/ports/create.html | 7 - .../dashboards/admin/networks/urls.py | 4 +- .../dashboards/admin/networks/views.py | 8 +- .../dashboards/admin/networks/workflows.py | 2 +- .../dashboards/admin/routers/forms.py | 2 +- .../dashboards/admin/routers/views.py | 8 +- .../dashboards/admin/snapshots/forms.py | 2 +- .../dashboards/admin/snapshots/tabs.py | 2 +- .../dashboards/admin/snapshots/views.py | 4 +- .../dashboards/admin/trunks/panel.py | 8 +- .../dashboards/admin/volume_types/extras/forms.py | 2 +- .../dashboards/admin/volume_types/extras/tables.py | 2 +- .../dashboards/admin/volume_types/extras/views.py | 4 +- .../dashboards/admin/volume_types/forms.py | 16 +- .../admin/volume_types/qos_specs/forms.py | 2 +- .../admin/volume_types/qos_specs/tables.py | 2 +- .../admin/volume_types/qos_specs/views.py | 2 +- .../dashboards/admin/volume_types/tables.py | 2 +- .../_create_volume_type_encryption.html | 2 +- .../_update_volume_type_encryption.html | 2 +- .../dashboards/admin/volume_types/urls.py | 4 +- .../dashboards/admin/volume_types/views.py | 4 +- .../dashboards/admin/volumes/forms.py | 4 +- .../dashboards/admin/volumes/views.py | 4 +- .../identity/application_credentials/__init__.py | 0 .../identity/application_credentials/forms.py | 125 + .../identity/application_credentials/panel.py | 34 + .../identity/application_credentials/tables.py | 84 + .../templates/application_credentials/_create.html | 43 + .../application_credentials/_detail_overview.html | 39 + .../application_credentials/_success.html | 35 + .../application_credentials/clouds.yaml.template | 34 + .../templates/application_credentials/create.html | 7 + .../templates/application_credentials/detail.html | 17 + .../templates/application_credentials/index.html | 11 + .../application_credentials/openrc.sh.template | 9 + .../templates/application_credentials/success.html | 7 + .../identity/application_credentials/urls.py | 33 + .../identity/application_credentials/views.py | 195 + .../dashboards/identity/domains/tables.py | 2 +- .../dashboards/identity/domains/views.py | 2 +- .../dashboards/identity/domains/workflows.py | 2 +- .../dashboards/identity/groups/tables.py | 6 +- .../dashboards/identity/groups/views.py | 4 +- .../identity_providers/protocols/tables.py | 2 +- .../identity/identity_providers/protocols/views.py | 2 +- .../dashboards/identity/identity_providers/urls.py | 2 +- .../identity/identity_providers/views.py | 4 +- .../dashboards/identity/mappings/views.py | 4 +- .../dashboards/identity/projects/tables.py | 4 +- .../dashboards/identity/projects/urls.py | 2 + .../dashboards/identity/projects/views.py | 39 +- .../dashboards/identity/projects/workflows.py | 284 +- .../dashboards/identity/roles/views.py | 4 +- .../identity/domains/actions/actions.module.js | 54 + .../domains/actions/actions.module.spec.js | 24 + .../identity/domains/actions/create.service.js | 76 + .../domains/actions/create.service.spec.js | 90 + .../domains/actions/workflow/info.help.html | 1 + .../domains/actions/workflow/workflow.service.js | 112 + .../actions/workflow/workflow.service.spec.js | 42 + .../dashboard/identity/domains/domains.module.js | 4 +- .../identity/groups/actions/actions.module.js | 88 + .../groups/actions/create.action.service.js | 113 + .../groups/actions/create.action.service.spec.js | 132 + .../groups/actions/delete.action.service.js | 120 + .../groups/actions/delete.action.service.spec.js | 157 + .../identity/groups/actions/edit.action.service.js | 106 + .../groups/actions/edit.action.service.spec.js | 101 + .../dashboard/identity/groups/groups.module.js | 16 +- .../static/dashboard/identity/groups/panel.html | 3 +- .../roles/actions/create.action.service.js | 10 +- .../roles/actions/create.action.service.spec.js | 40 +- .../roles/actions/delete.action.service.js | 7 +- .../roles/actions/delete.action.service.spec.js | 8 +- .../identity/roles/actions/edit.action.service.js | 10 +- .../roles/actions/edit.action.service.spec.js | 2 + .../users/actions/create.action.service.js | 21 +- .../users/actions/create.action.service.spec.js | 41 +- .../users/actions/delete.action.service.js | 5 +- .../users/actions/delete.action.service.spec.js | 6 +- .../users/actions/disable.action.service.js | 1 + .../users/actions/disable.action.service.spec.js | 3 + .../users/actions/enable.action.service.js | 1 + .../users/actions/enable.action.service.spec.js | 3 + .../users/actions/password.action.service.js | 5 +- .../users/actions/password.action.service.spec.js | 3 + .../users/actions/update.action.service.js | 5 +- .../users/actions/update.action.service.spec.js | 3 + .../users/actions/workflow/workflow.service.js | 69 +- .../users/actions/workflow/workflow.spec.js | 8 +- .../dashboard/identity/users/users.module.js | 1 + .../dashboard/identity/users/users.service.js | 21 +- .../dashboard/identity/users/users.service.spec.js | 18 +- .../dashboards/identity/users/views.py | 4 +- .../dashboards/project/api_access/views.py | 2 +- .../dashboards/project/backups/forms.py | 2 +- .../dashboards/project/backups/tables.py | 2 +- .../dashboards/project/backups/tabs.py | 2 +- .../dashboards/project/backups/views.py | 4 +- .../dashboards/project/cg_snapshots/forms.py | 2 +- .../dashboards/project/cg_snapshots/panel.py | 24 + .../dashboards/project/cg_snapshots/tabs.py | 2 +- .../dashboards/project/cg_snapshots/views.py | 14 +- .../dashboards/project/cgroups/forms.py | 2 +- .../dashboards/project/cgroups/panel.py | 24 + .../dashboards/project/cgroups/tabs.py | 2 +- .../templates/cgroups/_snapshot_limits.html | 12 +- .../dashboards/project/cgroups/views.py | 24 +- .../dashboards/project/floating_ips/forms.py | 21 +- .../dashboards/project/floating_ips/tables.py | 12 +- .../dashboards/project/floating_ips/views.py | 2 +- .../dashboards/project/floating_ips/workflows.py | 2 +- .../dashboards/project/images/images/forms.py | 100 +- .../dashboards/project/images/images/tables.py | 9 +- .../dashboards/project/images/images/views.py | 14 +- .../dashboards/project/images/snapshots/forms.py | 2 +- .../dashboards/project/images/snapshots/views.py | 4 +- .../dashboards/project/images/urls.py | 8 +- .../dashboards/project/instances/forms.py | 80 +- .../project/instances/interfaces_tables.py | 62 + .../dashboards/project/instances/tables.py | 158 +- .../dashboards/project/instances/tabs.py | 31 +- .../templates/instances/_detail_overview.html | 4 +- .../templates/instances/_disassociate.html | 28 + .../instances/_edit_security_group_help.html | 15 + .../templates/instances/_flavors_and_quotas.html | 40 +- .../templates/instances/disassociate.html | 7 + .../dashboards/project/instances/urls.py | 6 +- .../dashboards/project/instances/utils.py | 22 +- .../dashboards/project/instances/views.py | 306 +- .../project/instances/workflows/__init__.py | 3 + .../project/instances/workflows/create_instance.py | 18 +- .../project/instances/workflows/update_instance.py | 90 +- .../project/instances/workflows/update_port.py | 31 + .../dashboards/project/key_pairs/tables.py | 4 +- .../dashboards/project/key_pairs/views.py | 4 +- .../dashboards/project/network_qos/panel.py | 7 +- .../templates/network_topology/_graph_view.html | 3 + .../network_topology/client_side/_balloon_net.html | 2 + .../templates/network_topology/index.html | 17 + .../dashboards/project/network_topology/views.py | 34 +- .../dashboards/project/networks/forms.py | 4 +- .../extensions/allowed_address_pairs/forms.py | 2 +- .../extensions/allowed_address_pairs/tables.py | 2 +- .../extensions/allowed_address_pairs/views.py | 2 +- .../dashboards/project/networks/ports/forms.py | 220 - .../dashboards/project/networks/ports/sg_base.py | 78 + .../dashboards/project/networks/ports/tables.py | 2 +- .../dashboards/project/networks/ports/views.py | 99 +- .../dashboards/project/networks/ports/workflows.py | 271 +- .../dashboards/project/networks/subnets/tables.py | 4 +- .../dashboards/project/networks/subnets/views.py | 2 +- .../project/networks/subnets/workflows.py | 2 +- .../dashboards/project/networks/tables.py | 21 +- .../networks/templates/networks/ports/_create.html | 11 - .../networks/ports/_create_port_help.html | 8 + .../networks/templates/networks/ports/create.html | 7 - .../dashboards/project/networks/urls.py | 4 +- .../dashboards/project/networks/views.py | 9 +- .../dashboards/project/networks/workflows.py | 4 +- .../routers/extensions/extraroutes/forms.py | 2 +- .../routers/extensions/extraroutes/tables.py | 6 +- .../routers/extensions/extraroutes/views.py | 2 +- .../dashboards/project/routers/forms.py | 9 +- .../dashboards/project/routers/ports/forms.py | 6 +- .../dashboards/project/routers/ports/tables.py | 2 +- .../dashboards/project/routers/ports/tabs.py | 2 +- .../dashboards/project/routers/ports/views.py | 2 +- .../dashboards/project/routers/tables.py | 2 +- .../dashboards/project/routers/views.py | 4 +- .../dashboards/project/security_groups/forms.py | 28 +- .../dashboards/project/security_groups/tables.py | 31 +- .../dashboards/project/security_groups/views.py | 4 +- .../dashboards/project/server_groups/__init__.py | 0 .../dashboards/project/server_groups/panel.py | 41 + .../dashboards/project/server_groups/urls.py | 22 + .../dashboards/project/snapshots/forms.py | 2 +- .../dashboards/project/snapshots/tables.py | 29 +- .../dashboards/project/snapshots/tabs.py | 5 +- .../templates/snapshots/_detail_overview.html | 6 + .../dashboards/project/snapshots/views.py | 35 +- .../containers/check-copy-destination.directive.js | 132 + .../check-copy-destination.directive.spec.js | 135 + .../project/containers/copy-object-controller.js | 36 + .../containers/copy-object-controller.spec.js | 43 + .../project/containers/copy-object-modal.html | 106 + .../containers/objects-row-actions.service.js | 96 + .../containers/objects-row-actions.service.spec.js | 119 +- .../launch-instance/keypair/create-keypair.html | 2 +- .../keypair/import-keypair.controller.js | 1 + .../launch-instance/keypair/import-keypair.html | 16 +- .../launch-instance-model.service.js | 17 +- .../launch-instance-model.service.spec.js | 7 +- .../launch-instance/source/source.controller.js | 3 +- .../dashboards/project/trunks/panel.py | 8 +- .../dashboards/project/vg_snapshots/__init__.py | 0 .../dashboards/project/vg_snapshots/forms.py | 75 + .../dashboards/project/vg_snapshots/panel.py | 49 + .../dashboards/project/vg_snapshots/tables.py | 141 + .../dashboards/project/vg_snapshots/tabs.py | 34 + .../templates/vg_snapshots/_create.html | 9 + .../templates/vg_snapshots/_detail_overview.html | 50 + .../templates/vg_snapshots/create.html | 7 + .../dashboards/project/vg_snapshots/urls.py | 25 + .../dashboards/project/vg_snapshots/views.py | 158 + .../dashboards/project/volume_groups/__init__.py | 0 .../dashboards/project/volume_groups/forms.py | 198 + .../dashboards/project/volume_groups/panel.py | 48 + .../dashboards/project/volume_groups/tables.py | 190 + .../dashboards/project/volume_groups/tabs.py | 34 + .../templates/volume_groups/_clone_group.html | 9 + .../templates/volume_groups/_create_snapshot.html | 10 + .../templates/volume_groups/_delete.html | 9 + .../templates/volume_groups/_detail_overview.html | 42 + .../templates/volume_groups/_remove_vols.html | 7 + .../templates/volume_groups/_snapshot_limits.html | 42 + .../templates/volume_groups/_update.html | 7 + .../templates/volume_groups/clone_group.html | 7 + .../templates/volume_groups/create.html | 7 + .../templates/volume_groups/create_snapshot.html | 7 + .../templates/volume_groups/delete.html | 7 + .../templates/volume_groups/remove_vols.html | 7 + .../templates/volume_groups/update.html | 7 + .../dashboards/project/volume_groups/urls.py | 44 + .../dashboards/project/volume_groups/views.py | 312 ++ .../dashboards/project/volume_groups/workflows.py | 381 ++ .../dashboards/project/volumes/forms.py | 44 +- .../dashboards/project/volumes/tables.py | 49 +- .../dashboards/project/volumes/tabs.py | 31 +- .../templates/volumes/_detail_overview.html | 6 + .../volumes/templates/volumes/_extend_limits.html | 8 +- .../project/volumes/templates/volumes/_limits.html | 22 +- .../templates/volumes/_snapshot_limits.html | 18 +- .../volumes/templates/volumes/_volume_limits.html | 26 +- .../dashboards/project/volumes/views.py | 39 +- .../dashboards/settings/password/views.py | 2 +- .../dashboards/settings/user/views.py | 2 +- .../enabled/_1110_project_server_groups_panel.py | 10 + .../enabled/_1360_project_volume_groups.py | 9 + .../enabled/_1370_project_vg_snapshots.py | 9 + ..._3090_identity_application_credentials_panel.py | 10 + .../local/local_settings.py.example | 46 +- .../locale/as/LC_MESSAGES/django.po | 72 +- .../locale/bn_IN/LC_MESSAGES/django.po | 72 +- .../locale/brx/LC_MESSAGES/django.po | 69 +- .../locale/cs/LC_MESSAGES/django.po | 94 +- .../locale/de/LC_MESSAGES/django.po | 686 ++- .../locale/de/LC_MESSAGES/djangojs.po | 416 +- .../locale/en_AU/LC_MESSAGES/django.po | 100 +- .../locale/en_AU/LC_MESSAGES/djangojs.po | 6 +- .../locale/en_GB/LC_MESSAGES/django.po | 627 ++- .../locale/en_GB/LC_MESSAGES/djangojs.po | 212 +- .../locale/eo/LC_MESSAGES/django.po | 691 ++- .../locale/eo/LC_MESSAGES/djangojs.po | 147 +- .../locale/es/LC_MESSAGES/django.po | 164 +- .../locale/es/LC_MESSAGES/djangojs.po | 317 +- .../locale/fr/LC_MESSAGES/django.po | 406 +- .../locale/fr/LC_MESSAGES/djangojs.po | 360 +- .../locale/gu/LC_MESSAGES/django.po | 70 +- .../locale/hi/LC_MESSAGES/django.po | 65 +- .../locale/id/LC_MESSAGES/django.po | 657 ++- .../locale/id/LC_MESSAGES/djangojs.po | 257 +- .../locale/it/LC_MESSAGES/django.po | 97 +- .../locale/ja/LC_MESSAGES/django.po | 644 ++- .../locale/ja/LC_MESSAGES/djangojs.po | 196 +- .../locale/kn/LC_MESSAGES/django.po | 72 +- .../locale/ko_KR/LC_MESSAGES/django.po | 628 ++- .../locale/ko_KR/LC_MESSAGES/djangojs.po | 348 +- .../locale/kok/LC_MESSAGES/django.po | 68 +- .../locale/ks/LC_MESSAGES/django.po | 70 +- .../locale/mai/LC_MESSAGES/django.po | 71 +- .../locale/mni/LC_MESSAGES/django.po | 74 +- .../locale/mr/LC_MESSAGES/django.po | 67 +- .../locale/ne/LC_MESSAGES/django.po | 68 +- .../locale/nl_NL/LC_MESSAGES/django.po | 61 +- .../locale/pa_IN/LC_MESSAGES/django.po | 75 +- .../locale/pl_PL/LC_MESSAGES/django.po | 92 +- .../locale/pt_BR/LC_MESSAGES/django.po | 214 +- .../locale/pt_BR/LC_MESSAGES/djangojs.po | 127 +- .../locale/ru/LC_MESSAGES/django.po | 105 +- .../locale/ru/LC_MESSAGES/djangojs.po | 37 +- .../locale/sr/LC_MESSAGES/django.po | 64 +- .../locale/ta/LC_MESSAGES/django.po | 72 +- .../locale/tr_TR/LC_MESSAGES/django.po | 98 +- .../locale/tr_TR/LC_MESSAGES/djangojs.po | 6 +- .../locale/ur/LC_MESSAGES/django.po | 73 +- .../locale/zh_CN/LC_MESSAGES/django.po | 598 ++- .../locale/zh_CN/LC_MESSAGES/djangojs.po | 192 +- .../locale/zh_TW/LC_MESSAGES/django.po | 93 +- .../locale/zh_TW/LC_MESSAGES/djangojs.po | 6 +- .../management/commands/make_web_conf.py | 16 +- openstack_dashboard/settings.py | 58 +- openstack_dashboard/static/app/core/core.module.js | 1 + .../app/core/images/actions/edit.action.service.js | 3 +- .../images/actions/edit.action.service.spec.js | 2 +- .../core/images/actions/launch-instance.service.js | 8 +- .../images/actions/launch-instance.service.spec.js | 11 + .../static/app/core/images/images.module.js | 1 + .../static/app/core/images/images.service.js | 6 +- .../images/steps/create-image/create-image.html | 2 +- .../app/core/keypairs/actions/delete.service.js | 6 +- .../static/app/core/keypairs/keypairs.module.js | 1 + .../app/core/network_qos/actions/actions.module.js | 66 + .../network_qos/actions/actions.module.spec.js | 46 + .../network_qos/actions/delete.action.service.js | 117 + .../actions/delete.action.service.spec.js | 233 + .../static/app/core/network_qos/qos.module.js | 10 +- .../static/app/core/network_qos/qos.module.spec.js | 25 + .../core/openstack-service-api/cinder.service.js | 9 +- .../core/openstack-service-api/keystone.service.js | 27 +- .../openstack-service-api/keystone.service.spec.js | 36 +- .../app/core/openstack-service-api/nova.service.js | 62 + .../openstack-service-api/nova.service.spec.js | 32 + .../core/server_groups/actions/actions.module.js | 78 + .../server_groups/actions/actions.module.spec.js | 51 + .../server_groups/actions/create.action.service.js | 88 + .../actions/create.action.service.spec.js | 79 + .../server_groups/actions/delete.action.service.js | 108 + .../actions/delete.action.service.spec.js | 135 + .../actions/workflow/workflow.service.js | 86 + .../actions/workflow/workflow.service.spec.js | 51 + .../core/server_groups/details/details.module.js | 54 + .../server_groups/details/details.module.spec.js | 35 + .../server_groups/details/overview.controller.js | 107 + .../details/overview.controller.spec.js | 80 + .../app/core/server_groups/details/overview.html | 17 + .../static/app/core/server_groups/panel.html | 3 + .../app/core/server_groups/server-groups.module.js | 133 + .../server_groups/server-groups.module.spec.js | 48 + .../core/server_groups/server-groups.service.js | 139 + .../server_groups/server-groups.service.spec.js | 107 + .../app/core/trunks/details/overview.controller.js | 5 +- .../static/app/core/trunks/trunks.module.js | 4 +- .../static/app/core/trunks/trunks.service.js | 35 +- .../static/app/core/trunks/trunks.service.spec.js | 45 + .../static/app/core/workflow/decorator.service.js | 8 +- .../app/core/workflow/decorator.service.spec.js | 15 +- .../static/app/tech-debt/image-form.controller.js | 3 + .../static/dashboard/scss/_util.scss | 4 + .../static/dashboard/scss/_variables.scss | 1 + .../scss/components/_network_topology.scss | 6 + .../scss/components/_resource_topology.scss | 8 +- .../static/dashboard/scss/components/_tables.scss | 16 +- .../static/js/horizon.flatnetworktopology.js | 6 +- .../static/js/horizon.networktopology.js | 33 + openstack_dashboard/templates/angular.html | 1 + .../templates/horizon/_scripts.html | 1 - .../templatetags/context_selection.py | 4 +- openstack_dashboard/templatetags/themes.py | 8 +- openstack_dashboard/test/helpers.py | 184 +- .../pages/admin/compute/__init__.py | 0 .../pages/admin/compute/flavorspage.py | 157 + .../pages/admin/compute/hostaggregatespage.py | 79 + .../pages/admin/compute/hypervisorspage.py | 20 + .../pages/admin/compute/imagespage.py | 18 + .../pages/admin/compute/instancespage.py | 18 + .../pages/admin/network/__init__.py | 0 .../pages/admin/network/floatingipspage.py | 18 + .../pages/admin/network/networkspage.py | 18 + .../pages/admin/network/routerspage.py | 41 + .../pages/admin/system/defaultspage.py | 132 +- .../pages/admin/system/flavorspage.py | 157 - .../pages/admin/system/hostaggregatespage.py | 79 - .../pages/admin/system/instancespage.py | 18 - .../pages/admin/system/overviewpage.py | 19 - .../pages/admin/system/routerspage.py | 41 - .../pages/admin/system/volumes/__init__.py | 0 .../admin/system/volumes/volumesnapshotspage.py | 18 - .../pages/admin/system/volumes/volumespage.py | 18 - .../pages/admin/system/volumes/volumetypespage.py | 135 - .../pages/admin/volume/__init__.py | 0 .../pages/admin/volume/snapshotspage.py | 18 + .../pages/admin/volume/volumespage.py | 18 + .../pages/admin/volume/volumetypespage.py | 135 + .../pages/identity/projectspage.py | 4 +- .../pages/project/apiaccesspage.py | 81 + .../compute/access_and_security/__init__.py | 0 .../compute/access_and_security/apiaccesspage.py | 73 - .../compute/access_and_security/floatingipspage.py | 106 - .../compute/access_and_security/keypairspage.py | 82 - .../compute/access_and_security/managerulespage.py | 74 - .../access_and_security/securitygroupspage.py | 76 - .../pages/project/compute/imagespage.py | 20 +- .../pages/project/compute/instancespage.py | 10 +- .../pages/project/compute/keypairspage.py | 82 + .../pages/project/compute/servergroupspage.py | 20 + .../pages/project/compute/volumes/__init__.py | 0 .../project/compute/volumes/volumesnapshotspage.py | 133 - .../pages/project/compute/volumes/volumespage.py | 269 -- .../pages/project/network/floatingipspage.py | 107 + .../pages/project/network/networkspage.py | 8 +- .../pages/project/network/networktopologypage.py | 20 + .../pages/project/network/routerinterfacespage.py | 8 +- .../pages/project/network/routerspage.py | 9 +- .../project/network/security_groups/__init__.py | 0 .../network/security_groups/managerulespage.py | 74 + .../pages/project/network/securitygroupspage.py | 76 + .../pages/project/volumes/__init__.py | 0 .../pages/project/volumes/snapshotspage.py | 133 + .../pages/project/volumes/volumespage.py | 271 ++ openstack_dashboard/test/settings.py | 86 +- openstack_dashboard/test/test_data/cinder_data.py | 179 +- .../test/test_data/keystone_data.py | 42 + openstack_dashboard/test/test_data/neutron_data.py | 71 +- openstack_dashboard/test/test_data/nova_data.py | 2 + .../panel_config/_10_admin_add_panel.py | 6 + .../test/test_plugins/test_panel.py | 91 + .../test/test_plugins/test_panel_group.py | 87 + .../test/unit/api/rest/test_cinder.py | 484 +- .../test/unit/api/rest/test_config.py | 1 + .../test/unit/api/rest/test_glance.py | 207 +- .../test/unit/api/rest/test_keystone.py | 455 +- .../test/unit/api/rest/test_network.py | 89 +- .../test/unit/api/rest/test_neutron.py | 302 +- .../test/unit/api/rest/test_nova.py | 690 +-- .../test/unit/api/rest/test_swift.py | 192 +- .../test/unit/api/rest/test_utils.py | 12 +- openstack_dashboard/test/unit/api/test_base.py | 4 + openstack_dashboard/test/unit/api/test_cinder.py | 163 +- openstack_dashboard/test/unit/api/test_glance.py | 108 +- openstack_dashboard/test/unit/api/test_keystone.py | 77 +- .../test/unit/api/test_microversions.py | 108 + openstack_dashboard/test/unit/api/test_network.py | 43 +- openstack_dashboard/test/unit/api/test_neutron.py | 1046 +++-- openstack_dashboard/test/unit/api/test_nova.py | 765 +-- openstack_dashboard/test/unit/api/test_swift.py | 226 +- openstack_dashboard/test/unit/test_views.py | 6 + openstack_dashboard/test/unit/usage/test_quotas.py | 478 +- .../test/unit/utils/test_futurist_utils.py | 60 + openstack_dashboard/test/urls.py | 8 +- openstack_dashboard/theme_settings.py | 49 +- openstack_dashboard/urls.py | 12 +- openstack_dashboard/usage/base.py | 95 +- openstack_dashboard/usage/quotas.py | 90 +- openstack_dashboard/usage/tables.py | 4 +- openstack_dashboard/usage/views.py | 127 +- openstack_dashboard/utils/futurist_utils.py | 50 + openstack_dashboard/utils/settings.py | 33 +- openstack_dashboard/views.py | 28 +- openstack_dashboard/wsgi.py | 29 + openstack_dashboard/wsgi/django.wsgi | 9 +- playbooks/horizon-selenium-headless/pre.yaml | 7 + ...r-groups-quota-management-0c1dc5763a3b893c.yaml | 7 + .../admin-redirect-on-login-6a818fe886621a14.yaml | 6 + ...p-application-credentials-26aa907271e467c2.yaml | 6 + ...al-default-service-region-0cafecaafa1af5be.yaml | 16 + .../bp-ng-server-groups-c60849796a273138.yaml | 10 + .../notes/bp-ng-users-01212620d644289f.yaml | 19 + ...simple-fip-disassociation-3c751297b467597e.yaml | 12 + .../notes/bug-1746706-8d2f982c514f22b1.yaml | 6 + .../notes/bug-1755339-2dfa3ce2accb568f.yaml | 9 + .../notes/bug-1779268-44848e4d2c69fddc.yaml | 15 + ...port-with-security-groups-68afba4d26f1eac1.yaml | 5 + ...ete-update-flavor-feature-6ed1e482b91f5e08.yaml | 7 + ...recation-of-old-wsgi-file-7ffdeae78698ff93.yaml | 9 + .../notes/django-2.0-b37c6e91d20519fa.yaml | 6 + ...deprecated-settings-rocky-dd8c853d979d6990.yaml | 15 + ...edit-port-security-groups-f650fc98f5e10eb8.yaml | 8 + ...loating-ip-dns-attributes-d227f98eb5c39396.yaml | 6 + .../generic-volumes-support-407406de8233c912.yaml | 12 + .../notes/get-me-a-network-c979c244fa038258.yaml | 15 + .../notes/image-description-3fc00c02f46a80c7.yaml | 5 + ...er-at-developer-dashboard-da1b1556e30aa858.yaml | 2 +- .../notes/pluggable-tabs-7b7467e7c64d1e5b.yaml | 10 + .../pluggable-workflow-steps-c919cdd8b0cbea55.yaml | 21 + ...ove-cinder-v1-api-support-7cec9a556945a5c5.yaml | 7 + ...move-fix-auth-url-version-e63c52fbbd293838.yaml | 5 + ...emove-table-update-action-d3fc1c5e5e3598b0.yaml | 5 + ...-rule-description-support-37ea7580d3b7c7a9.yaml | 4 + ...wift-object-copy-function-d0fd75cf2bc0e0c7.yaml | 8 + releasenotes/source/index.rst | 1 + .../source/locale/de/LC_MESSAGES/releasenotes.po | 4355 ----------------- .../locale/en_GB/LC_MESSAGES/releasenotes.po | 4864 ------------------- .../source/locale/id/LC_MESSAGES/releasenotes.po | 4950 -------------------- .../source/locale/ja/LC_MESSAGES/releasenotes.po | 4888 ------------------- .../locale/ko_KR/LC_MESSAGES/releasenotes.po | 1101 ----- .../locale/pt_BR/LC_MESSAGES/releasenotes.po | 3829 --------------- .../locale/zh_CN/LC_MESSAGES/releasenotes.po | 508 -- releasenotes/source/queens.rst | 6 + requirements.txt | 21 +- setup.cfg | 10 - test-requirements.txt | 9 +- tox.ini | 122 +- 784 files changed, 37274 insertions(+), 46429 deletions(-) Requirements updates -------------------- diff --git a/requirements.txt b/requirements.txt index 15df13b..a889154 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,3 +13,3 @@ Babel!=2.4.0,>=2.3.4 # BSD -Django<2.0,>=1.8 # BSD -Pint>=0.5 # BSD -django-babel>=0.5.1 # BSD +Django<2,>=1.11;python_version<'3.0' # BSD +Django<2.1,>=1.11;python_version>='3.0' # BSD +django-babel>=0.6.2 # BSD @@ -20 +20 @@ iso8601>=0.1.11 # MIT -keystoneauth1>=3.3.0 # Apache-2.0 +keystoneauth1>=3.4.0 # Apache-2.0 @@ -22,2 +22,2 @@ netaddr>=0.7.18 # BSD -oslo.concurrency>=3.25.0 # Apache-2.0 -oslo.config>=5.1.0 # Apache-2.0 +oslo.concurrency>=3.26.0 # Apache-2.0 +oslo.config>=5.2.0 # Apache-2.0 @@ -28 +28,2 @@ oslo.utils>=3.33.0 # Apache-2.0 -osprofiler>=1.4.0 # Apache-2.0 +osprofiler>=2.3.0 # Apache-2.0 +Pint>=0.5 # BSD @@ -33,2 +34,2 @@ python-glanceclient>=2.8.0 # Apache-2.0 -python-keystoneclient>=3.8.0 # Apache-2.0 -python-neutronclient>=6.3.0 # Apache-2.0 +python-keystoneclient>=3.15.0 # Apache-2.0 +python-neutronclient>=6.7.0 # Apache-2.0 @@ -38 +39 @@ pytz>=2013.6 # MIT -PyYAML>=3.10 # MIT +PyYAML>=3.12 # MIT diff --git a/test-requirements.txt b/test-requirements.txt index 79ecc3d..e94e6e1 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -11,0 +12 @@ hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 +bandit>=1.4.0 # Apache-2.0 @@ -13 +13,0 @@ coverage!=4.4,>=4.0 # Apache-2.0 -django-nose>=1.4.4 # BSD @@ -19,6 +18,0 @@ nodeenv>=0.9.4 # BSD -nose>=1.3.7 # LGPL -nose-exclude>=0.3.0 # LGPL -nosexcover>=1.0.10 # BSD -openstack.nose-plugin>=0.7 # Apache-2.0 -openstackdocstheme>=1.18.1 # Apache-2.0 -reno>=2.5.0 # Apache-2.0 @@ -27 +20,0 @@ selenium>=2.50.1 # Apache-2.0 -sphinx!=1.6.6,>=1.6.2 # BSD
participants (1)
-
no-reply@openstack.org