magnum-ui 15.0.0.0rc1__tar.gz → 16.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/AUTHORS +1 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/ChangeLog +14 -2
- magnum_ui-16.0.0/PKG-INFO +98 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/api/magnum.py +5 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/api/rest/magnum.py +20 -8
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/create/create.service.js +4 -1
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/resize/resize.service.js +12 -7
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/resize/resize.service.spec.js +17 -4
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.js +7 -4
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.controller.spec.js +12 -5
- magnum_ui-16.0.0/magnum_ui/static/dashboard/container-infra/clusters/workflow/network.help.html +13 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/workflow/workflow.service.js +56 -16
- magnum_ui-16.0.0/magnum_ui.egg-info/PKG-INFO +98 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui.egg-info/SOURCES.txt +2 -0
- magnum_ui-16.0.0/magnum_ui.egg-info/pbr.json +1 -0
- magnum_ui-16.0.0/releasenotes/notes/lb_floating_ip-ca6039444f88a968.yaml +8 -0
- magnum_ui-16.0.0/releasenotes/source/2023.1.rst +8 -0
- magnum-ui-15.0.0.0rc1/releasenotes/source/2023.1.rst → magnum_ui-16.0.0/releasenotes/source/2024.2.rst +2 -2
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/index.rst +1 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/yoga.rst +1 -1
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/zed.rst +1 -1
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/test-requirements.txt +1 -1
- magnum-ui-15.0.0.0rc1/PKG-INFO +0 -95
- magnum-ui-15.0.0.0rc1/magnum_ui/static/dashboard/container-infra/clusters/workflow/network.help.html +0 -4
- magnum-ui-15.0.0.0rc1/magnum_ui.egg-info/PKG-INFO +0 -95
- magnum-ui-15.0.0.0rc1/magnum_ui.egg-info/pbr.json +0 -1
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/.eslintrc +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/.zuul.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/CONTRIBUTING.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/LICENSE +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/README.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/babel-django.cfg +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/babel-djangojs.cfg +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/bindep.txt +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/devstack/plugin.sh +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/devstack/settings +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/doc/Makefile +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/doc/requirements.txt +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/doc/source/conf.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/doc/source/configuration/index.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/doc/source/contributor/api.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/doc/source/contributor/index.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/doc/source/index.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/doc/source/install/index.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/api/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/api/heat.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/api/rest/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/cluster_templates/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/cluster_templates/panel.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/cluster_templates/tests.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/cluster_templates/urls.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/clusters/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/clusters/panel.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/clusters/tests.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/clusters/urls.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/container_infra/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/container_infra/quotas/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/container_infra/quotas/panel.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/content/container_infra/quotas/urls.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/enabled/_1370_project_container_infra_panel_group.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/enabled/_1371_project_container_infra_clusters_panel.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/enabled/_1372_project_container_infra_cluster_templates_panel.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/enabled/_2370_admin_container_infra_panel_group.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/enabled/_2371_admin_container_infra_quotas_panel.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/enabled/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/karma.conf.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/cs/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/cs/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/de/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/de/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/en_AU/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/en_GB/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/en_GB/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/fr/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/fr/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/id/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/id/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/ja/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/ja/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/ko_KR/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/ko_KR/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/pt_BR/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/pt_BR/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/ru/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/ru/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/tr_TR/LC_MESSAGES/django.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/locale/tr_TR/LC_MESSAGES/djangojs.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/actions.module.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/actions.module.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/cluster-templates.module.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/cluster-templates.module.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/cluster-templates.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/cluster-templates.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/create/create.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/create/create.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/delete/delete.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/delete/delete.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/details/details.module.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/details/drawer.controller.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/details/drawer.controller.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/details/drawer.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/details/overview.controller.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/details/overview.controller.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/details/overview.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/panel.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/update/update.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/update/update.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/workflow/info.help.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/workflow/labels.help.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/workflow/network.help.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/workflow/spec.help.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/workflow/workflow.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/cluster-templates/workflow/workflow.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/actions.module.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/actions.module.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/cluster-stats.controller.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/cluster-stats.controller.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/clusters.module.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/clusters.module.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/clusters.scss +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/clusters.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/clusters.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/clusters.utils.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/clusters.utils.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/config/config.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/config/config.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/create/create.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/delete/delete.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/delete/delete.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/details/details.module.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/details/drawer.controller.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/details/drawer.controller.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/details/drawer.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/details/overview.controller.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/details/overview.controller.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/details/overview.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/panel.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/rolling-upgrade/upgrade.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/rolling-upgrade/upgrade.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/rotate-certificate/rotate-certificate.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/rotate-certificate/rotate-certificate.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/show-certificate/show-certificate.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/show-certificate/show-certificate.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/sign-certificate/sign-certificate-modal.controller.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/sign-certificate/sign-certificate-modal.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/sign-certificate/sign-certificate-model.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/sign-certificate/sign-certificate-model.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/sign-certificate/sign-certificate.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/sign-certificate/sign-certificate.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/workflow/advanced.help.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/workflow/cluster-template.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/workflow/details.help.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/workflow/management.help.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/workflow/size.help.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/clusters/workflow/workflow.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/container-infra.module.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/container-infra.module.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/container-infra.scss +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/magnum.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/magnum.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/actions.module.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/actions.module.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/create/create.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/create/create.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/delete/delete.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/delete/delete.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/panel.html +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/quotas.module.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/quotas.module.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/quotas.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/quotas.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/update/update.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/update/update.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/workflow/workflow.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/quotas/workflow/workflow.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/utils.service.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/static/dashboard/container-infra/utils.service.spec.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/test/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/test/api_tests/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/test/api_tests/test_rest_api.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/test/helpers.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/test/integration_tests/__init__.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/test/settings.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/test/test_data.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui/version.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui.egg-info/dependency_links.txt +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui.egg-info/not-zip-safe +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui.egg-info/requires.txt +2 -2
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/magnum_ui.egg-info/top_level.txt +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/manage.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/package.json +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/Workflow-updates-for-Create-Cluster-65e4fe510b4d1a4c.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/add-fedora-coreos-7882a33d801371fe.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/add-reno-7d46796dbf41c247.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/bugfix-cluster-template-hidden-arg-38909eaa92bd8d56.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/bugfix-set-floating_ip_enabled-default_in-cluster-template-true-ce06118f0e6064ba.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/improve-cluster-launch-dfc514b51cfa7f0e.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/newton-dac21adfe6c6b8ee.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/ocata-b08d6b024c63296b.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/ocata-summary-a717111a782c7a68.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/pike-b1af664f1033a131.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/queens-f99244e9db54ccf3.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/resize-actions-1436a2a0dccbd13b.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/rocky-56165675d959b593.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/show-health-status-ff92b2fe2bfad5ae.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/stein-a6adf485dbbbbd1a.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/update-actions-02db7b9f8e5d36b6.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/notes/upgrade-actions-adf2f749ec0cc817.yaml +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/2023.2.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/2024.1.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/conf.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/locale/ja/LC_MESSAGES/releasenotes.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/locale/pt_BR/LC_MESSAGES/releasenotes.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/newton.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/ocata.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/pike.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/queens.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/rocky.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/stein.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/train.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/unreleased.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/ussuri.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/victoria.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/wallaby.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/releasenotes/source/xena.rst +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/requirements.txt +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/setup.cfg +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/setup.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/test-shim.js +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/tools/install_venv.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/tools/install_venv_common.py +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/tools/with_venv.sh +0 -0
- {magnum-ui-15.0.0.0rc1 → magnum_ui-16.0.0}/tox.ini +0 -0
@@ -4,6 +4,7 @@ Andreas Jaeger <aj@suse.com>
|
|
4
4
|
Andreas Jaeger <aj@suse.de>
|
5
5
|
Andrei Nistor <andrei_nistor@smart-x.net>
|
6
6
|
Andrew Bogott <abogott@wikimedia.org>
|
7
|
+
Andrew Bonney <andrew.bonney@bbc.co.uk>
|
7
8
|
Bharat Kunwar <bharat@stackhpc.com>
|
8
9
|
Bharat Kunwar <brtknr@bath.edu>
|
9
10
|
Bradley Jones <jones.bradley@me.com>
|
@@ -1,10 +1,22 @@
|
|
1
1
|
CHANGES
|
2
2
|
=======
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
16.0.0
|
5
|
+
------
|
6
|
+
|
7
|
+
* reno: Update master for unmaintained/2023.1
|
8
|
+
* reno: Update master for unmaintained/zed
|
9
|
+
* Fix resize for CAPI clusters
|
10
|
+
* Bump hacking
|
11
|
+
* Fix indexing into subnet list during cluster creation
|
12
|
+
* Update master for stable/2024.2
|
13
|
+
* reno: Update master for unmaintained/yoga
|
14
|
+
|
15
|
+
15.0.0
|
16
|
+
------
|
6
17
|
|
7
18
|
* Imported Translations from Zanata
|
19
|
+
* Change floating\_ip to use master\_lb\_floating\_ip\_enabled
|
8
20
|
* Workflow updates for Create Cluster
|
9
21
|
* Restrict actions based on cluster state
|
10
22
|
* Fix all lint warnings
|
@@ -0,0 +1,98 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: magnum-ui
|
3
|
+
Version: 16.0.0
|
4
|
+
Summary: Magnum User Interface
|
5
|
+
Home-page: https://docs.openstack.org/developer/magnum-ui/
|
6
|
+
Author: OpenStack
|
7
|
+
Author-email: openstack-discuss@lists.openstack.org
|
8
|
+
Classifier: Environment :: OpenStack
|
9
|
+
Classifier: Intended Audience :: Information Technology
|
10
|
+
Classifier: Intended Audience :: System Administrators
|
11
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
12
|
+
Classifier: Operating System :: POSIX :: Linux
|
13
|
+
Classifier: Programming Language :: Python
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
15
|
+
Classifier: Programming Language :: Python :: 3.6
|
16
|
+
Classifier: Programming Language :: Python :: 3.7
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
21
|
+
License-File: LICENSE
|
22
|
+
Requires-Dist: pbr!=2.1.0,>=2.0.0
|
23
|
+
Requires-Dist: python-magnumclient>=4.2.0
|
24
|
+
Requires-Dist: python-heatclient>=1.18.0
|
25
|
+
Requires-Dist: horizon>=17.1.0
|
26
|
+
|
27
|
+
========================
|
28
|
+
Team and repository tags
|
29
|
+
========================
|
30
|
+
|
31
|
+
.. image:: https://governance.openstack.org/tc/badges/magnum-ui.svg
|
32
|
+
:target: https://governance.openstack.org/tc/reference/tags/index.html
|
33
|
+
|
34
|
+
.. Change things from this point on
|
35
|
+
|
36
|
+
=========
|
37
|
+
Magnum UI
|
38
|
+
=========
|
39
|
+
|
40
|
+
Horizon plugin for Magnum
|
41
|
+
|
42
|
+
* Free software: Apache license
|
43
|
+
* Source: https://opendev.org/openstack/magnum-ui
|
44
|
+
* Bugs: https://bugs.launchpad.net/magnum-ui
|
45
|
+
* Documentation: https://docs.openstack.org/magnum-ui/latest/
|
46
|
+
* Release notes: https://docs.openstack.org/releasenotes/magnum-ui/
|
47
|
+
|
48
|
+
Enabling in DevStack
|
49
|
+
--------------------
|
50
|
+
|
51
|
+
Add this repo as an external repository into your ``local.conf`` file::
|
52
|
+
|
53
|
+
[[local|localrc]]
|
54
|
+
enable_plugin magnum-ui https://github.com/openstack/magnum-ui
|
55
|
+
|
56
|
+
Manual Installation
|
57
|
+
-------------------
|
58
|
+
|
59
|
+
Begin by cloning the Horizon and Magnum UI repositories::
|
60
|
+
|
61
|
+
git clone https://github.com/openstack/horizon
|
62
|
+
git clone https://github.com/openstack/magnum-ui
|
63
|
+
|
64
|
+
Create a virtual environment and install Horizon dependencies::
|
65
|
+
|
66
|
+
cd horizon
|
67
|
+
python tools/install_venv.py
|
68
|
+
|
69
|
+
Set up your ``local_settings.py`` file::
|
70
|
+
|
71
|
+
cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py
|
72
|
+
|
73
|
+
Open up the copied ``local_settings.py`` file in your preferred text
|
74
|
+
editor. You will want to customize several settings:
|
75
|
+
|
76
|
+
- ``OPENSTACK_HOST`` should be configured with the hostname of your
|
77
|
+
OpenStack server. Verify that the ``OPENSTACK_KEYSTONE_URL`` and
|
78
|
+
``OPENSTACK_KEYSTONE_DEFAULT_ROLE`` settings are correct for your
|
79
|
+
environment. (They should be correct unless you modified your
|
80
|
+
OpenStack server to change them.)
|
81
|
+
|
82
|
+
Install Magnum UI with all dependencies in your virtual environment::
|
83
|
+
|
84
|
+
tools/with_venv.sh pip install -e ../magnum-ui/
|
85
|
+
|
86
|
+
And enable it in Horizon::
|
87
|
+
|
88
|
+
cp ../magnum-ui/magnum_ui/enabled/_1370_project_container_infra_panel_group.py openstack_dashboard/local/enabled
|
89
|
+
cp ../magnum-ui/magnum_ui/enabled/_1371_project_container_infra_clusters_panel.py openstack_dashboard/local/enabled
|
90
|
+
cp ../magnum-ui/magnum_ui/enabled/_1372_project_container_infra_cluster_templates_panel.py openstack_dashboard/local/enabled
|
91
|
+
|
92
|
+
To run horizon with the newly enabled Magnum UI plugin run::
|
93
|
+
|
94
|
+
python manage.py runserver 0.0.0.0:8080
|
95
|
+
|
96
|
+
to have the application start on port 8080 and the horizon dashboard will be
|
97
|
+
available in your browser at http://localhost:8080/
|
98
|
+
|
@@ -289,3 +289,8 @@ def quotas_update(request, project_id, resource, **kwargs):
|
|
289
289
|
|
290
290
|
def quotas_delete(request, project_id, resource):
|
291
291
|
return magnumclient(request).quotas.delete(project_id, resource)
|
292
|
+
|
293
|
+
|
294
|
+
def nodegroup_list(request, cluster_id=None, limit=None, marker=None):
|
295
|
+
return magnumclient(request).nodegroups.list(cluster_id, limit=limit,
|
296
|
+
marker=marker)
|
@@ -25,6 +25,7 @@ from django.views import generic
|
|
25
25
|
from magnum_ui.api import heat
|
26
26
|
from magnum_ui.api import magnum
|
27
27
|
|
28
|
+
from heatclient import exc as heatexc
|
28
29
|
from openstack_dashboard import api
|
29
30
|
from openstack_dashboard.api import neutron
|
30
31
|
from openstack_dashboard.api.rest import urls
|
@@ -237,18 +238,29 @@ class ClusterResize(generic.View):
|
|
237
238
|
print(e)
|
238
239
|
return HttpResponseNotFound()
|
239
240
|
|
240
|
-
|
241
|
-
|
242
|
-
|
241
|
+
try:
|
242
|
+
ngs = magnum.nodegroup_list(request, cluster_id)
|
243
|
+
nodegroups = [n.to_dict() for n in ngs]
|
244
|
+
except AttributeError:
|
245
|
+
return HttpResponseNotFound()
|
243
246
|
|
247
|
+
try:
|
248
|
+
stack = heat.stack_get(request, cluster["stack_id"])
|
249
|
+
except heatexc.HTTPNotFound:
|
250
|
+
stack = None
|
244
251
|
worker_nodes = []
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
252
|
+
if stack:
|
253
|
+
search_opts = {"name": "%s-" % stack.stack_name}
|
254
|
+
servers = api.nova.server_list(request, search_opts=search_opts)[0]
|
255
|
+
|
256
|
+
for server in servers:
|
257
|
+
if (server.name.startswith("%s-minion" % stack.stack_name) or
|
258
|
+
server.name.startswith("%s-node" % stack.stack_name)):
|
259
|
+
worker_nodes.append({"name": server.name, "id": server.id})
|
249
260
|
|
250
261
|
return {"cluster": change_to_id(cluster),
|
251
|
-
"worker_nodes": worker_nodes
|
262
|
+
"worker_nodes": worker_nodes,
|
263
|
+
"nodegroups": nodegroups}
|
252
264
|
|
253
265
|
@rest_utils.ajax(data_required=True)
|
254
266
|
def post(self, request, cluster_id):
|
@@ -99,7 +99,6 @@
|
|
99
99
|
name: model.name,
|
100
100
|
cluster_template_id: model.cluster_template_id,
|
101
101
|
keypair: model.keypair,
|
102
|
-
floating_ip_enabled: model.floating_ip_enabled,
|
103
102
|
labels: requestLabels,
|
104
103
|
master_lb_enabled: model.master_lb_enabled
|
105
104
|
};
|
@@ -126,6 +125,10 @@
|
|
126
125
|
requestLabels.availability_zone = model.availability_zone;
|
127
126
|
requestLabels.auto_scaling_enabled = model.auto_scaling_enabled;
|
128
127
|
requestLabels.auto_healing_enabled = model.auto_healing_enabled;
|
128
|
+
requestLabels.master_lb_floating_ip_enabled = model.master_lb_floating_ip_enabled;
|
129
|
+
if (model.api_master_lb_allowed_cidrs !== '') {
|
130
|
+
requestLabels.api_master_lb_allowed_cidrs = model.api_master_lb_allowed_cidrs;
|
131
|
+
}
|
129
132
|
|
130
133
|
if (model.auto_scaling_enabled) {
|
131
134
|
requestLabels.min_node_count = model.min_node_count;
|
@@ -70,7 +70,7 @@
|
|
70
70
|
formModel = getFormModelDefaults();
|
71
71
|
formModel.id = selected.id;
|
72
72
|
|
73
|
-
modalConfig = constructModalConfig(response.data.worker_nodes);
|
73
|
+
modalConfig = constructModalConfig(response.data.nodegroups, response.data.worker_nodes);
|
74
74
|
|
75
75
|
deferred.resolve(modal.open(modalConfig).then(onModalSubmit));
|
76
76
|
$scope.model = formModel;
|
@@ -91,9 +91,13 @@
|
|
91
91
|
return $qExtensions.booleanAsPromise(true);
|
92
92
|
}
|
93
93
|
|
94
|
-
function constructModalConfig(workerNodesList) {
|
95
|
-
|
96
|
-
|
94
|
+
function constructModalConfig(nodegroups, workerNodesList) {
|
95
|
+
var defaultWorker = nodegroups.filter(function(ng) {
|
96
|
+
return ng.name === 'default-worker';
|
97
|
+
})[0];
|
98
|
+
formModel.original_node_count = defaultWorker.node_count;
|
99
|
+
formModel.node_count = defaultWorker.node_count;
|
100
|
+
formModel.worker_nodes = workerNodesList;
|
97
101
|
|
98
102
|
return {
|
99
103
|
title: gettext('Resize Cluster'),
|
@@ -116,8 +120,8 @@
|
|
116
120
|
form: [
|
117
121
|
{
|
118
122
|
key: 'node_count',
|
119
|
-
title: gettext('Node Count'),
|
120
|
-
placeholder: gettext('The
|
123
|
+
title: gettext('Node Count (default-worker)'),
|
124
|
+
placeholder: gettext('The default-worker nodegroup node_count.'),
|
121
125
|
required: true,
|
122
126
|
validationMessage: {
|
123
127
|
101: gettext('You cannot resize to fewer than zero worker nodes.')
|
@@ -129,7 +133,8 @@
|
|
129
133
|
type: 'checkboxes',
|
130
134
|
title: gettext('Choose nodes to remove (Optional)'),
|
131
135
|
titleMap: generateNodesTitleMap(workerNodesList),
|
132
|
-
condition: 'model.node_count < model.original_node_count'
|
136
|
+
condition: 'model.node_count < model.original_node_count && ' +
|
137
|
+
'model.worker_nodes.length > 0',
|
133
138
|
onChange: validateNodeRemovalCount,
|
134
139
|
validationMessage: {
|
135
140
|
nodeRemovalCountExceeded: gettext('You may only select as many nodes ' +
|
@@ -67,10 +67,23 @@
|
|
67
67
|
|
68
68
|
it('should open the modal, hide the loading spinner and check the form model',
|
69
69
|
inject(function($timeout) {
|
70
|
-
|
70
|
+
// 2 nodegroups, default-worker and another-nodegroup, with 2 and 3
|
71
|
+
// nodes respectively. cluster.node_count will be total nodes in all
|
72
|
+
// nodegroups
|
73
|
+
var mockDefaultWorker = {name: 'default-worker', node_count: 2};
|
74
|
+
var mockNodegroups = [mockDefaultWorker,
|
75
|
+
{name: 'default-master', node_count: 1},
|
76
|
+
{name: 'another-nodegroup', node_count: 3}];
|
77
|
+
var mockCluster = {node_count: 5};
|
78
|
+
|
79
|
+
// only populated with heat, [] for capi
|
80
|
+
var mockWorkerNodes = [{id: "456", name: "Worker Node 1"},
|
81
|
+
{id: "457", name: "Worker Node 2"}];
|
71
82
|
|
72
83
|
deferred = $q.defer();
|
73
|
-
deferred.resolve({data: {cluster:
|
84
|
+
deferred.resolve({data: {cluster: mockCluster,
|
85
|
+
worker_nodes: mockWorkerNodes,
|
86
|
+
nodegroups: mockNodegroups}});
|
74
87
|
spyOn(magnum, 'getClusterNodes').and.returnValue(deferred.promise);
|
75
88
|
|
76
89
|
service.perform(selected, $scope);
|
@@ -82,8 +95,8 @@
|
|
82
95
|
|
83
96
|
// Check if the form's model skeleton is correct
|
84
97
|
expect(modalConfig.model.id).toBe(selected.id);
|
85
|
-
expect(modalConfig.model.original_node_count).toBe(
|
86
|
-
expect(modalConfig.model.node_count).toBe(
|
98
|
+
expect(modalConfig.model.original_node_count).toBe(mockDefaultWorker.node_count);
|
99
|
+
expect(modalConfig.model.node_count).toBe(mockDefaultWorker.node_count);
|
87
100
|
expect(modalConfig.title).toBeDefined();
|
88
101
|
expect(modalConfig.schema).toBeDefined();
|
89
102
|
expect(modalConfig.form).toBeDefined();
|
@@ -85,10 +85,7 @@
|
|
85
85
|
setResponseAsDefaultIfUnset('master_flavor_id', 'master_flavor_id');
|
86
86
|
setResponseAsDefaultIfUnset('node_count', 'node_count');
|
87
87
|
setResponseAsDefaultIfUnset('flavor_id', 'flavor_id');
|
88
|
-
|
89
|
-
if (template.floating_ip_enabled !== null) {
|
90
|
-
$scope.model.floating_ip_enabled = template.floating_ip_enabled;
|
91
|
-
}
|
88
|
+
setResponseAsDefaultIfUnset('master_lb_enabled', 'master_lb_enabled');
|
92
89
|
|
93
90
|
if (!template.labels) { return; }
|
94
91
|
|
@@ -97,6 +94,12 @@
|
|
97
94
|
// If a template label exists as a field on the form -> Set it as a default
|
98
95
|
setLabelResponseAsDefault('auto_scaling_enabled', 'auto_scaling_enabled', true);
|
99
96
|
setLabelResponseAsDefault('auto_healing_enabled', 'auto_healing_enabled', true);
|
97
|
+
setLabelResponseAsDefault(
|
98
|
+
'master_lb_floating_ip_enabled',
|
99
|
+
'master_lb_floating_ip_enabled',
|
100
|
+
true);
|
101
|
+
// Forcibly clear allowed cidr values on template load. Otherwise this value becomes nil.
|
102
|
+
$scope.model.api_master_lb_allowed_cidrs = MODEL_DEFAULTS.api_master_lb_allowed_cidrs;
|
100
103
|
|
101
104
|
// Set default `ingress_controller` based on its label
|
102
105
|
if (template.labels.ingress_controller !== null &&
|
@@ -204,12 +204,14 @@
|
|
204
204
|
|
205
205
|
it('should always override some model properties by values from ' +
|
206
206
|
'retrieved cluster template', function() {
|
207
|
-
$scope.model.
|
208
|
-
templateResponse.
|
209
|
-
$scope.model.cluster_template_id = '99'; // Triggers
|
207
|
+
$scope.model.master_lb_floating_ip_enabled = !MODEL_DEFAULTS.master_lb_floating_ip_enabled;
|
208
|
+
templateResponse.master_lb_floating_ip_enabled = !$scope.model.master_lb_floating_ip_enabled;
|
209
|
+
$scope.model.cluster_template_id = '99'; // Triggers business logic revalidation
|
210
210
|
$scope.$apply();
|
211
211
|
|
212
|
-
expect($scope.model.
|
212
|
+
expect($scope.model.master_lb_floating_ip_enabled).toBe(
|
213
|
+
templateResponse.master_lb_floating_ip_enabled
|
214
|
+
);
|
213
215
|
});
|
214
216
|
|
215
217
|
it('should always override some model\'s properties by values from ' +
|
@@ -220,11 +222,16 @@
|
|
220
222
|
templateResponse.labels.auto_scaling_enabled = 'true';
|
221
223
|
model.auto_healing_enabled = true;
|
222
224
|
templateResponse.labels.auto_healing_enabled = 'false';
|
223
|
-
model.
|
225
|
+
model.api_master_lb_allowed_cidrs = "192.168.67.0/24";
|
226
|
+
templateResponse.labels.api_master_lb_allowed_cidrs = "10.0.0.1/16";
|
227
|
+
model.cluster_template_id = '99'; // Triggers business logic revalidation
|
224
228
|
$scope.$apply();
|
225
229
|
|
226
230
|
expect(model.auto_scaling_enabled).toBe(true);
|
227
231
|
expect(model.auto_healing_enabled).toBe(false);
|
232
|
+
expect($scope.model.api_master_lb_allowed_cidrs).toBe(
|
233
|
+
MODEL_DEFAULTS.api_master_lb_allowed_cidrs
|
234
|
+
);
|
228
235
|
});
|
229
236
|
|
230
237
|
it('should not fail if the cluster template response is empty', function() {
|
magnum_ui-16.0.0/magnum_ui/static/dashboard/container-infra/clusters/workflow/network.help.html
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
<h1 class="h4" translate>Network</h1>
|
2
|
+
|
3
|
+
<p translate>You can choose to create a new network for this cluster, or use an existing network. If you use an existing, it needs to have a subnet and router with a gateway on the external network. You may also need to take care not to conflict with CIDRs in use by the Kubernetes pod and service network.</p>
|
4
|
+
|
5
|
+
|
6
|
+
<h1 class="h4" translate>API Loadbalancer: Floating IP</h1>
|
7
|
+
|
8
|
+
<p translate>Making the Kubernetes API accessible from your private network only is the most secure option (the default), but access will be limited to compute instances on the same private network or a VPN to that network.</p>
|
9
|
+
<p translate>Making the Kubernetes API accessible from the public internet with a floating IP is convenient, but may represent a security risk. When selecting this option, it is recommended to set Allowed CIDRs to limit access to a trusted IP address range.</p>
|
10
|
+
|
11
|
+
|
12
|
+
<h1 class="h4" translate>API Loadbalancer: Allowed CIDRs</h1>
|
13
|
+
<p translate>If this field is left empty, the API Loadbalancer will accept connections from any address. When set to one or more CIDR then only those, plus the internal network, are permitted access to the Kubernetes API Loadbalancer.</em></p>
|
@@ -44,6 +44,9 @@
|
|
44
44
|
// comma-separated key=value with optional space after comma
|
45
45
|
var REGEXP_KEY_VALUE = /^(\w+=[^,]+,?\s?)+$/;
|
46
46
|
|
47
|
+
// Comma-separated CIDR list. Allows lots of variation to include v4 and v6.
|
48
|
+
var REGEXP_CIDR_LIST = /^[a-f0-9\.:]+\/[0-9]+(,\s?[a-f0-9\.:]+\/[0-9]+)*$/;
|
49
|
+
|
47
50
|
// Object name, must start with alphabetical character.
|
48
51
|
var REGEXP_CLUSTER_NAME = /^[a-zA-Z][a-zA-Z0-9_\-\.]*$/;
|
49
52
|
|
@@ -109,7 +112,8 @@
|
|
109
112
|
'create_network': { type: 'boolean' },
|
110
113
|
'fixed_network': { type: 'string' },
|
111
114
|
'fixed_subnet': { type: 'string' },
|
112
|
-
'
|
115
|
+
'master_lb_floating_ip_enabled': { type: 'boolean' },
|
116
|
+
'api_master_lb_allowed_cidrs': { type: 'string' },
|
113
117
|
'ingress_controller': { type: 'object' },
|
114
118
|
|
115
119
|
'auto_healing_enabled': { type: 'boolean' },
|
@@ -359,11 +363,6 @@
|
|
359
363
|
type: 'fieldset',
|
360
364
|
title: gettext('Network'),
|
361
365
|
items: [
|
362
|
-
{
|
363
|
-
key: 'master_lb_enabled',
|
364
|
-
type: 'checkbox',
|
365
|
-
title: gettext('Enable Load Balancer for Master Nodes')
|
366
|
-
},
|
367
366
|
{
|
368
367
|
key: 'create_network',
|
369
368
|
title: gettext('Create New Network'),
|
@@ -398,25 +397,65 @@
|
|
398
397
|
},
|
399
398
|
{
|
400
399
|
type: 'fieldset',
|
401
|
-
title: gettext('
|
400
|
+
title: gettext('Kubernetes API Loadbalancer'),
|
402
401
|
items: [
|
403
402
|
{
|
404
|
-
key: '
|
403
|
+
key: 'master_lb_enabled',
|
404
|
+
type: 'checkbox',
|
405
|
+
title: gettext('Enable Load Balancer for Kubernetes API'),
|
406
|
+
onChange: function(value) {
|
407
|
+
if (value) {
|
408
|
+
model.master_count = MODEL_DEFAULTS.master_count;
|
409
|
+
// Reset values to defaults. They are null after being disabled.
|
410
|
+
model.master_lb_floating_ip_enabled =
|
411
|
+
MODEL_DEFAULTS.master_lb_floating_ip_enabled;
|
412
|
+
model.api_master_lb_allowed_cidrs =
|
413
|
+
MODEL_DEFAULTS.api_master_lb_allowed_cidrs;
|
414
|
+
} else {
|
415
|
+
// Without master_lb_enabled, we can only support
|
416
|
+
// a single master node.
|
417
|
+
model.master_count = 1;
|
418
|
+
}
|
419
|
+
model.isSingleMasterNode = !value;
|
420
|
+
}
|
421
|
+
},
|
422
|
+
{
|
423
|
+
key: 'master_lb_floating_ip_enabled', // formerly floating_ip_enabled
|
405
424
|
type: 'select',
|
406
|
-
title: gettext('
|
425
|
+
title: gettext('Floating IP'),
|
407
426
|
titleMap: [
|
408
427
|
{value: false, name: gettext('Accessible on private network only')},
|
409
|
-
{value: true, name: gettext('Accessible
|
410
|
-
]
|
428
|
+
{value: true, name: gettext('Accessible with public floating IP')}
|
429
|
+
],
|
430
|
+
condition: 'model.master_lb_enabled === true'
|
431
|
+
},
|
432
|
+
{
|
433
|
+
key: 'api_master_lb_allowed_cidrs',
|
434
|
+
type: 'text',
|
435
|
+
title: gettext('Allowed CIDRs'),
|
436
|
+
validationMessage: {
|
437
|
+
invalidFormat: gettext('Invalid format. Must be a comma-separated ' +
|
438
|
+
'CIDR string: 192.168.1.5/32,10.0.0.1/24')
|
439
|
+
},
|
440
|
+
$validators: {
|
441
|
+
invalidFormat: function(cidrString) {
|
442
|
+
return cidrString === '' || REGEXP_CIDR_LIST.test(cidrString);
|
443
|
+
}
|
444
|
+
},
|
445
|
+
condition: 'model.master_lb_enabled === true',
|
411
446
|
},
|
412
|
-
// Warning message
|
447
|
+
// Warning message when Kubernetes API has a Floating IP
|
413
448
|
{
|
414
449
|
type: 'template',
|
415
450
|
template: '<div class="alert alert-warning">' +
|
416
451
|
'<span class="fa fa-warning"></span> ' +
|
417
|
-
gettext('
|
452
|
+
gettext('A public floating IP will mean the Kubernetes API is ' +
|
453
|
+
'publically routable on the internet. It is generally not ' +
|
454
|
+
'recommended to give public access to the Kubernetes API. ' +
|
455
|
+
'Consider limiting the access using the Allowed CIDRs ' +
|
456
|
+
'section.') +
|
418
457
|
'</div>',
|
419
|
-
condition: 'model.
|
458
|
+
condition: 'model.master_lb_floating_ip_enabled == true'
|
420
459
|
}
|
421
460
|
]
|
422
461
|
},
|
@@ -538,7 +577,8 @@
|
|
538
577
|
create_network: true,
|
539
578
|
fixed_network: '',
|
540
579
|
fixed_subnet: '',
|
541
|
-
|
580
|
+
master_lb_floating_ip_enabled: false,
|
581
|
+
api_master_lb_allowed_cidrs: '',
|
542
582
|
ingress_controller: '',
|
543
583
|
|
544
584
|
auto_healing_enabled: true,
|
@@ -646,7 +686,7 @@
|
|
646
686
|
fixedSubnets = [{value: "", name: fixedSubnetsInitial}];
|
647
687
|
}
|
648
688
|
// NOTE(dalees): This hardcoded index could be improved by referencing an object instead.
|
649
|
-
form[0].tabs[2].items[0].items[0].items[
|
689
|
+
form[0].tabs[2].items[0].items[0].items[2].titleMap = subnetTitleMap;
|
650
690
|
model.fixed_subnet = MODEL_DEFAULTS.fixed_subnet;
|
651
691
|
}
|
652
692
|
|
@@ -0,0 +1,98 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: magnum-ui
|
3
|
+
Version: 16.0.0
|
4
|
+
Summary: Magnum User Interface
|
5
|
+
Home-page: https://docs.openstack.org/developer/magnum-ui/
|
6
|
+
Author: OpenStack
|
7
|
+
Author-email: openstack-discuss@lists.openstack.org
|
8
|
+
Classifier: Environment :: OpenStack
|
9
|
+
Classifier: Intended Audience :: Information Technology
|
10
|
+
Classifier: Intended Audience :: System Administrators
|
11
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
12
|
+
Classifier: Operating System :: POSIX :: Linux
|
13
|
+
Classifier: Programming Language :: Python
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
15
|
+
Classifier: Programming Language :: Python :: 3.6
|
16
|
+
Classifier: Programming Language :: Python :: 3.7
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
21
|
+
License-File: LICENSE
|
22
|
+
Requires-Dist: pbr!=2.1.0,>=2.0.0
|
23
|
+
Requires-Dist: python-magnumclient>=4.2.0
|
24
|
+
Requires-Dist: python-heatclient>=1.18.0
|
25
|
+
Requires-Dist: horizon>=17.1.0
|
26
|
+
|
27
|
+
========================
|
28
|
+
Team and repository tags
|
29
|
+
========================
|
30
|
+
|
31
|
+
.. image:: https://governance.openstack.org/tc/badges/magnum-ui.svg
|
32
|
+
:target: https://governance.openstack.org/tc/reference/tags/index.html
|
33
|
+
|
34
|
+
.. Change things from this point on
|
35
|
+
|
36
|
+
=========
|
37
|
+
Magnum UI
|
38
|
+
=========
|
39
|
+
|
40
|
+
Horizon plugin for Magnum
|
41
|
+
|
42
|
+
* Free software: Apache license
|
43
|
+
* Source: https://opendev.org/openstack/magnum-ui
|
44
|
+
* Bugs: https://bugs.launchpad.net/magnum-ui
|
45
|
+
* Documentation: https://docs.openstack.org/magnum-ui/latest/
|
46
|
+
* Release notes: https://docs.openstack.org/releasenotes/magnum-ui/
|
47
|
+
|
48
|
+
Enabling in DevStack
|
49
|
+
--------------------
|
50
|
+
|
51
|
+
Add this repo as an external repository into your ``local.conf`` file::
|
52
|
+
|
53
|
+
[[local|localrc]]
|
54
|
+
enable_plugin magnum-ui https://github.com/openstack/magnum-ui
|
55
|
+
|
56
|
+
Manual Installation
|
57
|
+
-------------------
|
58
|
+
|
59
|
+
Begin by cloning the Horizon and Magnum UI repositories::
|
60
|
+
|
61
|
+
git clone https://github.com/openstack/horizon
|
62
|
+
git clone https://github.com/openstack/magnum-ui
|
63
|
+
|
64
|
+
Create a virtual environment and install Horizon dependencies::
|
65
|
+
|
66
|
+
cd horizon
|
67
|
+
python tools/install_venv.py
|
68
|
+
|
69
|
+
Set up your ``local_settings.py`` file::
|
70
|
+
|
71
|
+
cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py
|
72
|
+
|
73
|
+
Open up the copied ``local_settings.py`` file in your preferred text
|
74
|
+
editor. You will want to customize several settings:
|
75
|
+
|
76
|
+
- ``OPENSTACK_HOST`` should be configured with the hostname of your
|
77
|
+
OpenStack server. Verify that the ``OPENSTACK_KEYSTONE_URL`` and
|
78
|
+
``OPENSTACK_KEYSTONE_DEFAULT_ROLE`` settings are correct for your
|
79
|
+
environment. (They should be correct unless you modified your
|
80
|
+
OpenStack server to change them.)
|
81
|
+
|
82
|
+
Install Magnum UI with all dependencies in your virtual environment::
|
83
|
+
|
84
|
+
tools/with_venv.sh pip install -e ../magnum-ui/
|
85
|
+
|
86
|
+
And enable it in Horizon::
|
87
|
+
|
88
|
+
cp ../magnum-ui/magnum_ui/enabled/_1370_project_container_infra_panel_group.py openstack_dashboard/local/enabled
|
89
|
+
cp ../magnum-ui/magnum_ui/enabled/_1371_project_container_infra_clusters_panel.py openstack_dashboard/local/enabled
|
90
|
+
cp ../magnum-ui/magnum_ui/enabled/_1372_project_container_infra_cluster_templates_panel.py openstack_dashboard/local/enabled
|
91
|
+
|
92
|
+
To run horizon with the newly enabled Magnum UI plugin run::
|
93
|
+
|
94
|
+
python manage.py runserver 0.0.0.0:8080
|
95
|
+
|
96
|
+
to have the application start on port 8080 and the horizon dashboard will be
|
97
|
+
available in your browser at http://localhost:8080/
|
98
|
+
|
@@ -191,6 +191,7 @@ releasenotes/notes/add-reno-7d46796dbf41c247.yaml
|
|
191
191
|
releasenotes/notes/bugfix-cluster-template-hidden-arg-38909eaa92bd8d56.yaml
|
192
192
|
releasenotes/notes/bugfix-set-floating_ip_enabled-default_in-cluster-template-true-ce06118f0e6064ba.yaml
|
193
193
|
releasenotes/notes/improve-cluster-launch-dfc514b51cfa7f0e.yaml
|
194
|
+
releasenotes/notes/lb_floating_ip-ca6039444f88a968.yaml
|
194
195
|
releasenotes/notes/newton-dac21adfe6c6b8ee.yaml
|
195
196
|
releasenotes/notes/ocata-b08d6b024c63296b.yaml
|
196
197
|
releasenotes/notes/ocata-summary-a717111a782c7a68.yaml
|
@@ -205,6 +206,7 @@ releasenotes/notes/upgrade-actions-adf2f749ec0cc817.yaml
|
|
205
206
|
releasenotes/source/2023.1.rst
|
206
207
|
releasenotes/source/2023.2.rst
|
207
208
|
releasenotes/source/2024.1.rst
|
209
|
+
releasenotes/source/2024.2.rst
|
208
210
|
releasenotes/source/conf.py
|
209
211
|
releasenotes/source/index.rst
|
210
212
|
releasenotes/source/newton.rst
|
@@ -0,0 +1 @@
|
|
1
|
+
{"git_version": "829919f", "is_release": true}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
---
|
2
|
+
features:
|
3
|
+
- |
|
4
|
+
The Create Cluster workflow option `floating_ip_enabled` has been replaced
|
5
|
+
with `master_lb_floating_ip_enabled` label as the former added floating
|
6
|
+
IP's to all nodes, whereas the replacement only adds a floating IP to the
|
7
|
+
K8s API loadbalancer itself. The field `floating_ip_enabled` has not
|
8
|
+
changed behaviour and can still be used via the CLI.
|