From 89490553d093cc32353e970eca3b20f64d680f00 Mon Sep 17 00:00:00 2001 From: Tony Breeds Date: Tue, 12 Sep 2017 15:39:55 -0600 Subject: [PATCH] Retire Packaging Deb project repos This commit is part of a series to retire the Packaging Deb project. Step 2 is to remove all content from the project repos, replacing it with a README notification where to find ongoing work, and how to recover the repo if needed at some future point (as in https://docs.openstack.org/infra/manual/drivers.html#retiring-a-project). Change-Id: I6319cb6aa2b8c5847ede4372e222b02a23b02ee3 --- .coveragerc | 6 - .eslintignore | 2 - .eslintrc | 23 - .gitignore | 66 -- .gitreview | 4 - .mailmap | 3 - .testr.conf | 7 - CONTRIBUTING.rst | 17 - HACKING.rst | 4 - LICENSE | 176 ----- MANIFEST.in | 9 - README | 14 + README.rst | 27 - babel-django.cfg | 6 - babel-djangojs.cfg | 14 - devstack/plugin.sh | 46 -- devstack/settings | 5 - doc/source/conf.py | 81 -- doc/source/contributor/contributing.rst | 45 -- doc/source/contributor/index.rst | 11 - doc/source/index.rst | 30 - doc/source/install/index.rst | 9 - doc/source/install/installation.rst | 68 -- doc/source/install/uninstallation.rst | 9 - ironic_ui/__init__.py | 17 - ironic_ui/api/__init__.py | 0 ironic_ui/api/ironic.py | 371 --------- ironic_ui/api/ironic_rest_api.py | 401 ---------- ironic_ui/content/__init__.py | 17 - ironic_ui/content/ironic/__init__.py | 0 ironic_ui/content/ironic/panel.py | 43 - .../ironic/templates/ironic/index.html | 19 - .../ironic/templates/ironic/node_detail.html | 20 - ironic_ui/content/ironic/urls.py | 25 - ironic_ui/content/ironic/views.py | 25 - ironic_ui/enabled/_2200_ironic.py | 30 - ironic_ui/enabled/__init__.py | 0 ironic_ui/karma.conf.js | 154 ---- ironic_ui/locale/de/LC_MESSAGES/django.po | 18 - ironic_ui/locale/de/LC_MESSAGES/djangojs.po | 601 -------------- ironic_ui/locale/en_GB/LC_MESSAGES/django.po | 18 - ironic_ui/locale/fr/LC_MESSAGES/django.po | 18 - ironic_ui/locale/fr/LC_MESSAGES/djangojs.po | 347 -------- ironic_ui/locale/id/LC_MESSAGES/django.po | 18 - ironic_ui/locale/id/LC_MESSAGES/djangojs.po | 615 --------------- ironic_ui/locale/ja/LC_MESSAGES/django.po | 18 - ironic_ui/locale/ja/LC_MESSAGES/djangojs.po | 419 ---------- ironic_ui/locale/ko_KR/LC_MESSAGES/django.po | 18 - .../locale/ko_KR/LC_MESSAGES/djangojs.po | 395 ---------- ironic_ui/locale/ru/LC_MESSAGES/django.po | 19 - ironic_ui/locale/ru/LC_MESSAGES/djangojs.po | 354 --------- ironic_ui/locale/tr_TR/LC_MESSAGES/django.po | 18 - .../locale/tr_TR/LC_MESSAGES/djangojs.po | 516 ------------ ironic_ui/locale/zh_CN/LC_MESSAGES/django.po | 18 - .../locale/zh_CN/LC_MESSAGES/djangojs.po | 607 -------------- .../admin/ironic/auto-focus.directive.js | 35 - .../ironic/base-node/base-node.controller.js | 275 ------- .../base-node/base-node.controller.spec.js | 107 --- .../admin/ironic/base-node/base-node.html | 276 ------- .../ironic/base-node/base-node.service.js | 741 ------------------ .../admin/ironic/base-node/base-node.spec.js | 270 ------- .../ironic/base-port/base-port.controller.js | 228 ------ .../admin/ironic/base-port/base-port.html | 87 -- .../bootdevice/bootdevice.controller.js | 65 -- .../bootdevice/bootdevice.controller.spec.js | 97 --- .../admin/ironic/bootdevice/bootdevice.html | 58 -- .../ironic/bootdevice/bootdevice.service.js | 68 -- .../bootdevice/bootdevice.service.spec.js | 142 ---- .../clean-node/clean-node.controller.js | 69 -- .../admin/ironic/clean-node/clean-node.html | 41 - .../ironic/clean-node/clean-node.service.js | 64 -- .../create-port/create-port.controller.js | 85 -- .../ironic/create-port/create-port.service.js | 56 -- .../ironic/edit-node/edit-node.controller.js | 173 ---- .../edit-node/edit-node.controller.spec.js | 102 --- .../ironic/edit-node/edit-node.service.js | 50 -- .../ironic/edit-port/edit-port.controller.js | 133 ---- .../ironic/edit-port/edit-port.service.js | 60 -- .../ironic/empty-to-pristine.directive.js | 37 - .../enroll-node/enroll-node.controller.js | 83 -- .../enroll-node.controller.spec.js | 88 --- .../ironic/enroll-node/enroll-node.service.js | 51 -- .../admin/ironic/form-field.directive.js | 52 -- .../dashboard/admin/ironic/form-field.html | 56 -- .../admin/ironic/form-field.service.js | 103 --- .../admin/ironic/form-field.service.spec.js | 90 --- .../ironic/ironic.backend-mock.service.js | 718 ----------------- .../dashboard/admin/ironic/ironic.module.js | 60 -- .../dashboard/admin/ironic/ironic.service.js | 673 ---------------- .../admin/ironic/ironic.service.spec.js | 600 -------------- .../maintenance/maintenance.controller.js | 48 -- .../admin/ironic/maintenance/maintenance.html | 31 - .../ironic/maintenance/maintenance.service.js | 71 -- .../admin/ironic/modal-draggable.directive.js | 46 -- .../admin/ironic/node-actions.service.js | 244 ------ .../node-details/node-details.controller.js | 322 -------- .../node-details.controller.spec.js | 208 ----- .../ironic/node-details/node-details.html | 77 -- .../node-details/sections/configuration.html | 418 ---------- .../node-details/sections/overview.html | 64 -- .../node-details/sections/port-details.html | 32 - .../sections/portgroup-details.html | 28 - .../admin/ironic/node-error.service.js | 80 -- .../ironic/node-list/node-list.controller.js | 165 ---- .../admin/ironic/node-list/node-list.html | 212 ----- .../ironic/node-state-transition.service.js | 138 ---- .../dashboard/admin/ironic/test-data.spec.js | 52 -- .../admin/ironic/update-patch.service.js | 191 ----- ironic_ui/test/__init__.py | 0 ironic_ui/test/settings.py | 40 - ironic_ui/test/tests/__init__.py | 0 ironic_ui/test/tests/registration.py | 26 - ironic_ui/test/urls.py | 20 - manage.py | 25 - package.json | 31 - releasenotes/notes/.placeholder | 0 .../notes/2.0-release-3d8acae7c8de429b.yaml | 21 - .../notes/2.1.0-release-3391dfbcf087c883.yaml | 12 - .../add-console-support-ccffcedc845ca214.yaml | 15 - .../notes/bug-1648548-6e846a0c1e1574aa.yaml | 6 - .../notes/bug-1648550-32e28cf2a401bb02.yaml | 5 - .../notes/bug-1648557-462ebfdf39efee1f.yaml | 7 - .../notes/bug-1648563-e2bc262985873122.yaml | 8 - .../notes/bug-1671567-a95d7cb0d21470e4.yaml | 4 - .../notes/bug-1672709-b485a7a59ea1c129.yaml | 7 - .../unit-test-framework-f61ad7926413bf91.yaml | 14 - .../view-portgroups-a3efb4407536caf2.yaml | 27 - releasenotes/source/Makefile | 225 ------ releasenotes/source/conf.py | 357 --------- releasenotes/source/index.rst | 10 - .../locale/de/LC_MESSAGES/releasenotes.po | 219 ------ .../locale/fr/LC_MESSAGES/releasenotes.po | 102 --- .../locale/id/LC_MESSAGES/releasenotes.po | 277 ------- .../locale/ja/LC_MESSAGES/releasenotes.po | 143 ---- .../locale/ko_KR/LC_MESSAGES/releasenotes.po | 93 --- .../locale/ru/LC_MESSAGES/releasenotes.po | 98 --- .../locale/zh_CN/LC_MESSAGES/releasenotes.po | 244 ------ releasenotes/source/make.bat | 281 ------- releasenotes/source/newton.rst | 6 - releasenotes/source/ocata.rst | 6 - releasenotes/source/unreleased.rst | 5 - requirements.txt | 6 - setup.cfg | 36 - setup.py | 29 - test-requirements.txt | 20 - test-shim.js | 108 --- tox.ini | 54 -- 147 files changed, 14 insertions(+), 16714 deletions(-) delete mode 100644 .coveragerc delete mode 100644 .eslintignore delete mode 100644 .eslintrc delete mode 100644 .gitignore delete mode 100644 .gitreview delete mode 100644 .mailmap delete mode 100644 .testr.conf delete mode 100644 CONTRIBUTING.rst delete mode 100644 HACKING.rst delete mode 100644 LICENSE delete mode 100644 MANIFEST.in create mode 100644 README delete mode 100644 README.rst delete mode 100644 babel-django.cfg delete mode 100644 babel-djangojs.cfg delete mode 100644 devstack/plugin.sh delete mode 100644 devstack/settings delete mode 100755 doc/source/conf.py delete mode 100644 doc/source/contributor/contributing.rst delete mode 100644 doc/source/contributor/index.rst delete mode 100644 doc/source/index.rst delete mode 100644 doc/source/install/index.rst delete mode 100644 doc/source/install/installation.rst delete mode 100644 doc/source/install/uninstallation.rst delete mode 100644 ironic_ui/__init__.py delete mode 100644 ironic_ui/api/__init__.py delete mode 100755 ironic_ui/api/ironic.py delete mode 100755 ironic_ui/api/ironic_rest_api.py delete mode 100644 ironic_ui/content/__init__.py delete mode 100644 ironic_ui/content/ironic/__init__.py delete mode 100644 ironic_ui/content/ironic/panel.py delete mode 100644 ironic_ui/content/ironic/templates/ironic/index.html delete mode 100644 ironic_ui/content/ironic/templates/ironic/node_detail.html delete mode 100644 ironic_ui/content/ironic/urls.py delete mode 100644 ironic_ui/content/ironic/views.py delete mode 100644 ironic_ui/enabled/_2200_ironic.py delete mode 100644 ironic_ui/enabled/__init__.py delete mode 100644 ironic_ui/karma.conf.js delete mode 100644 ironic_ui/locale/de/LC_MESSAGES/django.po delete mode 100644 ironic_ui/locale/de/LC_MESSAGES/djangojs.po delete mode 100644 ironic_ui/locale/en_GB/LC_MESSAGES/django.po delete mode 100644 ironic_ui/locale/fr/LC_MESSAGES/django.po delete mode 100644 ironic_ui/locale/fr/LC_MESSAGES/djangojs.po delete mode 100644 ironic_ui/locale/id/LC_MESSAGES/django.po delete mode 100644 ironic_ui/locale/id/LC_MESSAGES/djangojs.po delete mode 100644 ironic_ui/locale/ja/LC_MESSAGES/django.po delete mode 100644 ironic_ui/locale/ja/LC_MESSAGES/djangojs.po delete mode 100644 ironic_ui/locale/ko_KR/LC_MESSAGES/django.po delete mode 100644 ironic_ui/locale/ko_KR/LC_MESSAGES/djangojs.po delete mode 100644 ironic_ui/locale/ru/LC_MESSAGES/django.po delete mode 100644 ironic_ui/locale/ru/LC_MESSAGES/djangojs.po delete mode 100644 ironic_ui/locale/tr_TR/LC_MESSAGES/django.po delete mode 100644 ironic_ui/locale/tr_TR/LC_MESSAGES/djangojs.po delete mode 100644 ironic_ui/locale/zh_CN/LC_MESSAGES/django.po delete mode 100644 ironic_ui/locale/zh_CN/LC_MESSAGES/djangojs.po delete mode 100644 ironic_ui/static/dashboard/admin/ironic/auto-focus.directive.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/base-node/base-node.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/base-node/base-node.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/base-node/base-node.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/base-port/base-port.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/base-port/base-port.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/create-port/create-port.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/create-port/create-port.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/edit-node/edit-node.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/edit-node/edit-node.controller.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/edit-node/edit-node.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/edit-port/edit-port.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/edit-port/edit-port.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/empty-to-pristine.directive.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/enroll-node/enroll-node.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/enroll-node/enroll-node.controller.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/enroll-node/enroll-node.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/form-field.directive.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/form-field.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/form-field.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/form-field.service.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/ironic.backend-mock.service.js delete mode 100755 ironic_ui/static/dashboard/admin/ironic/ironic.module.js delete mode 100755 ironic_ui/static/dashboard/admin/ironic/ironic.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/ironic.service.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/maintenance/maintenance.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/maintenance/maintenance.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/maintenance/maintenance.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/modal-draggable.directive.js delete mode 100755 ironic_ui/static/dashboard/admin/ironic/node-actions.service.js delete mode 100755 ironic_ui/static/dashboard/admin/ironic/node-details/node-details.controller.js delete mode 100755 ironic_ui/static/dashboard/admin/ironic/node-details/node-details.controller.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/node-details/node-details.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/node-details/sections/configuration.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/node-details/sections/overview.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/node-details/sections/port-details.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/node-details/sections/portgroup-details.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/node-error.service.js delete mode 100755 ironic_ui/static/dashboard/admin/ironic/node-list/node-list.controller.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/node-list/node-list.html delete mode 100644 ironic_ui/static/dashboard/admin/ironic/node-state-transition.service.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/test-data.spec.js delete mode 100644 ironic_ui/static/dashboard/admin/ironic/update-patch.service.js delete mode 100644 ironic_ui/test/__init__.py delete mode 100644 ironic_ui/test/settings.py delete mode 100644 ironic_ui/test/tests/__init__.py delete mode 100644 ironic_ui/test/tests/registration.py delete mode 100644 ironic_ui/test/urls.py delete mode 100755 manage.py delete mode 100644 package.json delete mode 100644 releasenotes/notes/.placeholder delete mode 100644 releasenotes/notes/2.0-release-3d8acae7c8de429b.yaml delete mode 100644 releasenotes/notes/2.1.0-release-3391dfbcf087c883.yaml delete mode 100644 releasenotes/notes/add-console-support-ccffcedc845ca214.yaml delete mode 100644 releasenotes/notes/bug-1648548-6e846a0c1e1574aa.yaml delete mode 100644 releasenotes/notes/bug-1648550-32e28cf2a401bb02.yaml delete mode 100644 releasenotes/notes/bug-1648557-462ebfdf39efee1f.yaml delete mode 100644 releasenotes/notes/bug-1648563-e2bc262985873122.yaml delete mode 100644 releasenotes/notes/bug-1671567-a95d7cb0d21470e4.yaml delete mode 100644 releasenotes/notes/bug-1672709-b485a7a59ea1c129.yaml delete mode 100644 releasenotes/notes/unit-test-framework-f61ad7926413bf91.yaml delete mode 100644 releasenotes/notes/view-portgroups-a3efb4407536caf2.yaml delete mode 100644 releasenotes/source/Makefile delete mode 100644 releasenotes/source/conf.py delete mode 100644 releasenotes/source/index.rst delete mode 100644 releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po delete mode 100644 releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po delete mode 100644 releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po delete mode 100644 releasenotes/source/locale/ja/LC_MESSAGES/releasenotes.po delete mode 100644 releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po delete mode 100644 releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po delete mode 100644 releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po delete mode 100644 releasenotes/source/make.bat delete mode 100644 releasenotes/source/newton.rst delete mode 100644 releasenotes/source/ocata.rst delete mode 100644 releasenotes/source/unreleased.rst delete mode 100644 requirements.txt delete mode 100644 setup.cfg delete mode 100644 setup.py delete mode 100644 test-requirements.txt delete mode 100644 test-shim.js delete mode 100644 tox.ini diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index 09bc619c..00000000 --- a/.coveragerc +++ /dev/null @@ -1,6 +0,0 @@ -[run] -branch = True -source = ironic-ui - -[report] -ignore_errors = True diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 76add878..00000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist \ No newline at end of file diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 85836639..00000000 --- a/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -# Enable eslint-plugin-angular -plugins: - - angular - -extends: openstack - -# Set up globals -globals: - angular: false - module: false - -env: - browser: true - jasmine: true - -rules: - angular/no-private-call: 0 - angular/no-services: - - 2 - - - $http - - $resource - - Restangular - angular/no-service-method: 0 \ No newline at end of file diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 13d64bde..00000000 --- a/.gitignore +++ /dev/null @@ -1,66 +0,0 @@ -*.py[cod] - -# C extensions -*.so - -# Packages -*.egg -*.egg-info -dist -build -cover -.eggs -eggs -parts -bin -var -sdist -develop-eggs -.installed.cfg -lib -lib64 - -# Installer logs -pip-log.txt - -# Unit test / coverage reports -.coverage -.tox -nosetests.xml -.testrepository -.venv - -# Translations -*.mo - -# Mr Developer -.mr.developer.cfg -.project -.pydevproject - -# Complexity -output/*.html -output/*/index.html - -# Sphinx -doc/build - -# pbr generates these -AUTHORS -ChangeLog - -# Editors -*~ -.*.swp -.*sw? - -.secret_key_store -*.lock - -# Node generated files -package/ -node_modules/ -npm-debug.log - -# release notes build -releasenotes/build diff --git a/.gitreview b/.gitreview deleted file mode 100644 index 79fe638e..00000000 --- a/.gitreview +++ /dev/null @@ -1,4 +0,0 @@ -[gerrit] -host=review.openstack.org -port=29418 -project=openstack/ironic-ui.git diff --git a/.mailmap b/.mailmap deleted file mode 100644 index 516ae6fe..00000000 --- a/.mailmap +++ /dev/null @@ -1,3 +0,0 @@ -# Format is: -# -# diff --git a/.testr.conf b/.testr.conf deleted file mode 100644 index 6d83b3c4..00000000 --- a/.testr.conf +++ /dev/null @@ -1,7 +0,0 @@ -[DEFAULT] -test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \ - OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \ - OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \ - ${PYTHON:-python} -m subunit.run discover -t ./ . $LISTOPT $IDOPTION -test_id_option=--load-list $IDFILE -test_list_option=--list diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst deleted file mode 100644 index ebebaedf..00000000 --- a/CONTRIBUTING.rst +++ /dev/null @@ -1,17 +0,0 @@ -If you would like to contribute to the development of OpenStack, you must -follow the steps in this page: - - http://docs.openstack.org/infra/manual/developers.html - -If you already have a good understanding of how the system works and your -OpenStack accounts are set up, you can skip to the development workflow -section of this documentation to learn how changes to OpenStack should be -submitted for review via the Gerrit tool: - - http://docs.openstack.org/infra/manual/developers.html#development-workflow - -Pull requests submitted through GitHub will be ignored. - -Bugs should be filed on Launchpad, not GitHub: - - https://bugs.launchpad.net/ironic-ui diff --git a/HACKING.rst b/HACKING.rst deleted file mode 100644 index 15ee22a8..00000000 --- a/HACKING.rst +++ /dev/null @@ -1,4 +0,0 @@ -ironic-ui Style Commandments -=============================================== - -Read the OpenStack Style Commandments http://docs.openstack.org/developer/hacking/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 68c771a0..00000000 --- a/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 5e592be9..00000000 --- a/MANIFEST.in +++ /dev/null @@ -1,9 +0,0 @@ -include AUTHORS -include ChangeLog -exclude .gitignore -exclude .gitreview -include setup.py - -recursive-include ironic_ui *.js *.html *.scss - -global-exclude *.pyc diff --git a/README b/README new file mode 100644 index 00000000..8fcd2b2f --- /dev/null +++ b/README @@ -0,0 +1,14 @@ +This project is no longer maintained. + +The contents of this repository are still available in the Git +source code management system. To see the contents of this +repository before it reached its end of life, please check out the +previous commit with "git checkout HEAD^1". + +For ongoing work on maintaining OpenStack packages in the Debian +distribution, please see the Debian OpenStack packaging team at +https://wiki.debian.org/OpenStack/. + +For any further questions, please email +openstack-dev@lists.openstack.org or join #openstack-dev on +Freenode. diff --git a/README.rst b/README.rst deleted file mode 100644 index 28903f83..00000000 --- a/README.rst +++ /dev/null @@ -1,27 +0,0 @@ -======================== -Team and repository tags -======================== - -.. image:: http://governance.openstack.org/badges/ironic-ui.svg - :target: http://governance.openstack.org/reference/tags/index.html - -.. Change things from this point on - -========= -Ironic UI -========= - -The Ironic UI is a Horizon plugin that will allow users to view and manage bare -metal nodes, ports and drivers. - -* Free software: Apache license -* Documentation: http://docs.openstack.org/ironic-ui/latest -* Source: https://git.openstack.org/cgit/openstack/ironic-ui -* Bugs: http://bugs.launchpad.net/ironic-ui - -Features --------- - -* View bare metal nodes -* View node details -* Apply maintenance and power on/off actions to the nodes diff --git a/babel-django.cfg b/babel-django.cfg deleted file mode 100644 index e7ee76ae..00000000 --- a/babel-django.cfg +++ /dev/null @@ -1,6 +0,0 @@ -[extractors] -django = django_babel.extract:extract_django - -[python: **.py] -[django: templates/**.html] -[django: **/templates/**.csv] diff --git a/babel-djangojs.cfg b/babel-djangojs.cfg deleted file mode 100644 index a8273b62..00000000 --- a/babel-djangojs.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[extractors] -# We use a custom extractor to find translatable strings in AngularJS -# templates. The extractor is included in horizon.utils for now. -# See http://babel.pocoo.org/docs/messages/#referencing-extraction-methods for -# details on how this works. -angular = horizon.utils.babel_extract_angular:extract_angular - -[javascript: **.js] - -# We need to look into all static folders for HTML files. -# The **/static ensures that we also search within -# /openstack_dashboard/dashboards/XYZ/static which will ensure -# that plugins are also translated. -[angular: **/static/**.html] diff --git a/devstack/plugin.sh b/devstack/plugin.sh deleted file mode 100644 index 1bbd0a1b..00000000 --- a/devstack/plugin.sh +++ /dev/null @@ -1,46 +0,0 @@ -# plugin.sh - DevStack plugin.sh dispatch script ironic-ui - -function install_ironic_ui { - # NOTE(crushil): workaround for devstack bug: 1540328 - # where devstack installs 'test-requirements' but should not do it - # for ironic-ui project as it installs Horizon from url. - # Remove following two 'mv' commands when mentioned bug is fixed. - mv $IRONIC_UI_DIR/test-requirements.txt $IRONIC_UI_DIR/_test-requirements.txt - - setup_develop ${IRONIC_UI_DIR} - - mv $IRONIC_UI_DIR/_test-requirements.txt $IRONIC_UI_DIR/test-requirements.txt -} - -# check for service enabled -if is_service_enabled horizon && is_service_enabled ironic && is_service_enabled ironic-ui; then - - if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then - # Set up system services - # no-op - : - elif [[ "$1" == "stack" && "$2" == "install" ]]; then - # Perform installation of service source - echo_summary "Installing Ironic UI" - install_ironic_ui - elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then - # Configure after the other layer 1 and 2 services have been configured - echo_summary "Configuring Ironic UI" - cp -a ${IRONIC_UI_DIR}/ironic_ui/enabled/* ${DEST}/horizon/openstack_dashboard/local/enabled/ - elif [[ "$1" == "stack" && "$2" == "extra" ]]; then - # no-op - : - fi - - if [[ "$1" == "unstack" ]]; then - # no-op - : - fi - - if [[ "$1" == "clean" ]]; then - # Remove state and transient data - # Remember clean.sh first calls unstack.sh - # no-op - : - fi -fi \ No newline at end of file diff --git a/devstack/settings b/devstack/settings deleted file mode 100644 index 4347453a..00000000 --- a/devstack/settings +++ /dev/null @@ -1,5 +0,0 @@ -# settings file for ironic-ui plugin -enable_service ironic-ui - -# set up default directories -IRONIC_UI_DIR=${IRONIC_UI_DIR:=$DEST/ironic-ui} \ No newline at end of file diff --git a/doc/source/conf.py b/doc/source/conf.py deleted file mode 100755 index 9d51df67..00000000 --- a/doc/source/conf.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import os -import sys - -sys.path.insert(0, os.path.abspath('../..')) -# -- General configuration ---------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [ - 'sphinx.ext.autodoc', - #'sphinx.ext.intersphinx', - 'openstackdocstheme', -] - -# autodoc generation is a bit aggressive and a nuisance when doing heavy -# text edit cycles. -# execute "export SPHINX_DEBUG=1" in your terminal to disable - -# The suffix of source filenames. -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'ironic-ui' -copyright = u'2016, OpenStack Foundation' - -# If true, '()' will be appended to :func: etc. cross-reference text. -add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -add_module_names = True - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# -- Options for HTML output -------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -html_theme = 'openstackdocs' - -# openstackdocstheme options -repository_name = 'openstack/ironic-ui' -bug_project = 'ironic-ui' -bug_tag = '' - -# Must set this variable to include year, month, day, hours, and minutes. -html_last_updated_fmt = '%Y-%m-%d %H:%M' - -# Output file base name for HTML help builder. -htmlhelp_basename = '%sdoc' % project - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass -# [howto/manual]). -latex_documents = [ - ('index', - '%s.tex' % project, - u'%s Documentation' % project, - u'OpenStack Foundation', 'manual'), -] - -# Example configuration for intersphinx: refer to the Python standard library. -#intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/doc/source/contributor/contributing.rst b/doc/source/contributor/contributing.rst deleted file mode 100644 index a2c37b4f..00000000 --- a/doc/source/contributor/contributing.rst +++ /dev/null @@ -1,45 +0,0 @@ -================= -How to Contribute -================= - -Contributor License Agreement ------------------------------ - -.. index:: - single: license; agreement - -In order to contribute to the Ironic UI project, you need to have -signed OpenStack's contributor's agreement. - -.. seealso:: - - * http://docs.openstack.org/infra/manual/developers.html - * http://wiki.openstack.org/CLA - -LaunchPad Project ------------------ - -Most of the tools used for OpenStack depend on a launchpad.net ID for -authentication. - -.. seealso:: - - * https://launchpad.net - * https://launchpad.net/ironic-ui - -Project Hosting Details -------------------------- - -Bug tracker - http://launchpad.net/ironic-ui - -Mailing list (prefix subjects with ``[ironic-ui]`` for faster responses) - http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev - -Code Hosting - https://git.openstack.org/cgit/openstack/ironic-ui - -Code Review - https://review.openstack.org/#/q/status:open+project:openstack/ironic-ui,n,z - - diff --git a/doc/source/contributor/index.rst b/doc/source/contributor/index.rst deleted file mode 100644 index 717581d2..00000000 --- a/doc/source/contributor/index.rst +++ /dev/null @@ -1,11 +0,0 @@ -========================= -Contributing to Ironic UI -========================= - -If you're interested in contributing to the Ironic UI project, -the following will help get you started. - -.. toctree:: - :maxdepth: 1 - - contributing diff --git a/doc/source/index.rst b/doc/source/index.rst deleted file mode 100644 index ade30cf3..00000000 --- a/doc/source/index.rst +++ /dev/null @@ -1,30 +0,0 @@ -===================================== -Welcome to Ironic UI's documentation! -===================================== - -Introduction -============ - -The ironic UI is an OpenStack Horizon plugin that will allow users to view and -manage their ironic bare metal nodes, ports and drivers. - -The documentation provided here is continually kept up-to-date based -on the latest code that has been committed, and may not represent the state of -the project at any specific prior release. - -For information on any current or prior version of Ironic, see `the release -notes`_. - -.. _the release notes: http://docs.openstack.org/releasenotes/ironic-ui/ - -For more information on ironic, see `the ironic documentation`_. - -.. _the ironic documentation: http://docs.openstack.org/developer/ironic/ - -.. toctree:: - :maxdepth: 1 - - Introduction to ironic - Installing the ironic UI - Contributing - Release notes diff --git a/doc/source/install/index.rst b/doc/source/install/index.rst deleted file mode 100644 index 6e52bf41..00000000 --- a/doc/source/install/index.rst +++ /dev/null @@ -1,9 +0,0 @@ -============================ -ironic-ui installation guide -============================ - -.. toctree:: - :maxdepth: 1 - - installation - uninstallation diff --git a/doc/source/install/installation.rst b/doc/source/install/installation.rst deleted file mode 100644 index b37ae20f..00000000 --- a/doc/source/install/installation.rst +++ /dev/null @@ -1,68 +0,0 @@ -.. _installation: - -Ironic-UI Installation -====================== - -Please note that the following instructions assume that you have an existing -installation of the OpenStack Horizon dashboard application. For Horizon -installation please see http://docs.openstack.org/developer/horizon/quickstart.html - -1. Clone the Ironic UI repository:: - - git clone https://git.openstack.org/openstack/ironic-ui - -2. Change into the root directory of your horizon installation and - activate the python virtualenv. Example:: - - source .venv/bin/activate - - .. NOTE:: The ``.venv`` folder is pre-installed when horizon is setup with - ``./run_tests.sh``. Do not attempt to reinstall the virtual - environment. - -3. Copy the ``_2200_ironic.py`` file from ``ironic_ui/enabled/_2200_ironic.py`` - file to ``horizon/openstack_dashboard/local/enabled`` directory. Example, - set as if being executed from the root of the ironic-ui repository:: - - cp ./ironic_ui/enabled/_2200_ironic.py ../horizon/openstack_dashboard/local/enabled - -4. Change into the ironic-ui repository and package the plugin:: - - pip install -r requirements.txt -e . - - This will build and install the ironic-ui plugin into the active virtual - environment associated with your horizon installation. The plugin is installed - in "editable" mode as a link back to your ironic-ui plugin directory. - -5. Change back into the horizon repository and bring up your environment:: - - ./run_tests.sh --runserver - - The Bare Metal service should now be visible in the Horizon navigation. - -Ironic-UI Installation with DevStack ------------------------------------- - -In order to use the Ironic UI with devstack, you will need to enable -the UI plugin separately in your installation local.conf file. - -This is done in a similar fashion to enabling Ironic for devstack. - -Make sure you have horizon enabled, which is the default in devstack. - -Then, enable the Ironic UI plugin appending the following line to the end of the local.conf file, -just after Ironic plugin enablement: - - enable_plugin ironic-ui https://github.com/openstack/ironic-ui - -After this, you can run ./stack.sh from the devstack directory. - - The Ironic Bare Metal Provisioning plugin should now be visible in the Horizon - navigation. - -6. Run JavaScript unit tests by either: - - Running the tests locally with npm run test. - - Visiting http://localhost:8000/jasmine/?spec=horizon.dashboard.admin.ironic in your - browser. diff --git a/doc/source/install/uninstallation.rst b/doc/source/install/uninstallation.rst deleted file mode 100644 index f8515c56..00000000 --- a/doc/source/install/uninstallation.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. _unstallation: - -Uninstallation -============== - -To uninstall, use ``pip uninstall ironic-ui`` from with-in the horizon -virtual environment. You will also need to remove the -``openstack_dashboard/enabled/_2200_ironic.py`` file from the horizon -installation. diff --git a/ironic_ui/__init__.py b/ironic_ui/__init__.py deleted file mode 100644 index e8145616..00000000 --- a/ironic_ui/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import pbr.version - - -__version__ = pbr.version.VersionInfo( - 'ironic-ui').version_string() diff --git a/ironic_ui/api/__init__.py b/ironic_ui/api/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ironic_ui/api/ironic.py b/ironic_ui/api/ironic.py deleted file mode 100755 index 8a1a0ba4..00000000 --- a/ironic_ui/api/ironic.py +++ /dev/null @@ -1,371 +0,0 @@ -# -# Copyright 2015, 2016 Hewlett Packard Enterprise Development Company LP -# Copyright 2016 Cray Inc. -# Copyright 2017 Intel Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.conf import settings - -from ironicclient import client -from ironicclient.v1 import resource_fields as res_fields - -from horizon.utils.memoized import memoized # noqa - -from openstack_dashboard.api import base - - -DEFAULT_IRONIC_API_VERSION = '1.27' -DEFAULT_INSECURE = False -DEFAULT_CACERT = None -IRONIC_CLIENT_CLASS_NAME = 'baremetal' - - -@memoized -def ironicclient(request): - """Returns a client connected to the Ironic backend. - - :param request: HTTP request. - :return: Ironic client. - """ - insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', DEFAULT_INSECURE) - cacert = getattr(settings, 'OPENSTACK_SSL_CACERT', DEFAULT_CACERT) - ironic_url = base.url_for(request, IRONIC_CLIENT_CLASS_NAME) - - return client.Client(1, - ironic_url, - os_ironic_api_version=DEFAULT_IRONIC_API_VERSION, - project_id=request.user.project_id, - token=request.user.token.id, - insecure=insecure, - cacert=cacert) - - -def node_list(request): - """Retrieve a list of nodes. - - :param request: HTTP request. - :return: A list of nodes. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.list - """ - node_manager = ironicclient(request).node - return node_manager.list(detail=True, limit=0) - - -def node_get(request, node_id): - """Retrieve a node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :return: node. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.get - """ - return ironicclient(request).node.get(node_id) - - -def node_list_ports(request, node_id): - """List all the ports on a given node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :return: A full list of ports. (limit=0) - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.list_ports - """ - return ironicclient(request).node.list_ports(node_id, limit=0, detail=True) - - -def node_set_power_state(request, node_id, state, soft=False): - """Set power state for a given node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :param state: the power state to set ['on', 'off', 'reboot']. - :param soft: flag for graceful power 'off' or reboot - :return: node. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.set_power_state - """ - return ironicclient(request).node.set_power_state(node_id, - state, - soft) - - -def node_set_provision_state(request, node_id, state, cleansteps=None): - """Set the target provision state for a given node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :param state: the target provision state to set. - :param cleansteps: Optional list of cleaning steps - :return: node. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.set_provision_state - """ - node_manager = ironicclient(request).node - return node_manager.set_provision_state(node_id, - state, - cleansteps=cleansteps) - - -def node_set_console_mode(request, node_id, enabled): - """Start or stop the serial console for a given node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :param enabled: True to start the console, False to stop it - :return: node. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.set_console_mode - """ - return ironicclient(request).node.set_console_mode(node_id, enabled) - - -def node_get_console(request, node_id): - """Get connection information for a node's console. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :return: Console connection information - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.get_console - """ - return ironicclient(request).node.get_console(node_id) - - -def node_set_maintenance(request, node_id, state, maint_reason=None): - """Set the maintenance mode on a given node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :param state: The maintenance state to set. - :return: node. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.set_maintenance - """ - return ironicclient(request).node.set_maintenance( - node_id, - state, - maint_reason=maint_reason) - - -def node_create(request, params): - """Create a node - - :param request: HTTP request. - :param params: Dictionary of node parameters - """ - node_manager = ironicclient(request).node - node = node_manager.create(**params) - return dict([(f, getattr(node, f, '')) - for f in res_fields.NODE_DETAILED_RESOURCE.fields]) - - -def node_delete(request, node_id): - """Delete a node from inventory. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :return: node. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.delete - """ - return ironicclient(request).node.delete(node_id) - - -def node_update(request, node_id, patch): - """Update a specified node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :param patch: Sequence of update operations - :return: node. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.update - """ - node = ironicclient(request).node.update(node_id, patch) - return dict([(f, getattr(node, f, '')) - for f in res_fields.NODE_DETAILED_RESOURCE.fields]) - - -def node_validate(request, node_id): - """Validate a specified node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :return: List of dictionaries, each containing an interface status - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.validate - """ - ifaces = ironicclient(request).node.validate(node_id) - result = [] - for interface, status in ifaces.to_dict().items(): - data = {'interface': interface} - data.update(status) - result.append(data) - return result - - -def node_get_boot_device(request, node_id): - """Get the boot device for a specified node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :return: Dictionary with keys "boot_device" and "persistent" - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.get_boot_device - """ - return ironicclient(request).node.get_boot_device(node_id) - - -def node_set_boot_device(request, node_id, device, persistent): - """Set the boot device for a specified node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :param device: boot device. - :param persistent: True or False. - :return: null. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.set_boot_device - """ - return ironicclient(request).node.set_boot_device(node_id, - device, - persistent) - - -def node_get_supported_boot_devices(request, node_id): - """Get the list of supported boot devices for a specified node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :return: List of supported boot devices (strings) - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.get_boot_device - """ - result = ironicclient(request).node.get_supported_boot_devices(node_id) - return result.get('supported_boot_devices', []) - - -def driver_list(request): - """Retrieve a list of drivers. - - :param request: HTTP request. - :return: A list of drivers. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.driver.html#ironicclient.v1.driver.DriverManager.list - """ - return ironicclient(request).driver.list() - - -def driver_properties(request, driver_name): - """Retrieve the properties of a specified driver - - :param request: HTTP request - :param driver_name: Name of the driver - :return: Property list - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.driver.html#ironicclient.v1.driver.DriverManager.properties - """ - return ironicclient(request).driver.properties(driver_name) - - -def port_create(request, params): - """Create network port - - :param request: HTTP request - :param params: Port creation parameters - :return: Port - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.port.html#ironicclient.v1.port.PortManager.create - """ - port_manager = ironicclient(request).port - return port_manager.create(**params) - - -def port_delete(request, port_uuid): - """Delete a network port - - :param request: HTTP request - :param port_uuid: Port uuid - :return: Port - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.port.html#ironicclient.v1.port.PortManager.delete - """ - return ironicclient(request).port.delete(port_uuid) - - -def port_update(request, port_uuid, patch): - """Update a specified port. - - :param request: HTTP request. - :param port_id: The UUID of the port. - :param patch: Sequence of update operations - :return: Port. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.port.html#ironicclient.v1.port.PortManager.update - """ - port = ironicclient(request).port.update(port_uuid, patch) - return dict([(f, getattr(port, f, '')) - for f in res_fields.PORT_DETAILED_RESOURCE.fields]) - - -def portgroup_list(request, node_id): - """List the portgroups associated with a given node. - - :param request: HTTP request. - :param node_id: The UUID or name of the node. - :return: A full list of portgroups. (limit=0) - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.portgroup.html#ironicclient.v1.portgroup.PortgroupManager.list_portgroups - """ - return ironicclient(request).portgroup.list(node_id, limit=0, detail=True) - - -def portgroup_create(request, params): - """Create a portgroup. - - :param request: HTTP request. - :param params: Portgroup creation parameters. - :return: Portgroup. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.portgroup.html#ironicclient.v1.portgroup.PortgroupManager.create - """ - portgroup_manager = ironicclient(request).portgroup - return portgroup_manager.create(**params) - - -def portgroup_delete(request, portgroup_id): - """Delete a portgroup from the DB. - - :param request: HTTP request. - :param portgroup_id: The UUID or name of the portgroup. - :return: Portgroup. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.portgroup.html#ironicclient.v1.portgroup.PortgroupManager.delete - """ - return ironicclient(request).portgroup.delete(portgroup_id) - - -def portgroup_get_ports(request, portgroup_id): - """Get the ports associated with a specified portgroup. - - :param request: HTTP request. - :param portgroup_id: The UUID or name of the portgroup. - :return: List of ports. - - http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.portgroup.html#ironicclient.v1.portgroup.PortgroupManager.list_ports - """ - return ironicclient(request).portgroup.list_ports(portgroup_id) diff --git a/ironic_ui/api/ironic_rest_api.py b/ironic_ui/api/ironic_rest_api.py deleted file mode 100755 index c31669af..00000000 --- a/ironic_ui/api/ironic_rest_api.py +++ /dev/null @@ -1,401 +0,0 @@ -# -# Copyright 2015, 2016 Hewlett Packard Enterprise Development Company LP -# Copyright 2016 Cray Inc. -# Copyright 2017 Intel Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.views import generic - -from ironic_ui.api import ironic - -from openstack_dashboard.api.rest import urls - -from openstack_dashboard.api.rest import utils as rest_utils - -LOGICAL_NAME_PATTERN = '[a-zA-Z0-9-._~]+' - - -@urls.register -class Nodes(generic.View): - - url_regex = r'ironic/nodes/$' - - @rest_utils.ajax() - def get(self, request): - """Get the list of nodes. - - :param request: HTTP request. - :return: nodes. - """ - nodes = ironic.node_list(request) - return { - 'nodes': [i.to_dict() for i in nodes] - } - - @rest_utils.ajax(data_required=True) - def post(self, request): - """Create an Ironic node - - :param request: HTTP request - """ - params = request.DATA.get('node') - return ironic.node_create(request, params) - - @rest_utils.ajax(data_required=True) - def delete(self, request): - """Delete an Ironic node from inventory - - :param request: HTTP request - """ - params = request.DATA.get('node') - return ironic.node_delete(request, params) - - -@urls.register -class Node(generic.View): - - url_regex = r'ironic/nodes/(?P{})$'.format(LOGICAL_NAME_PATTERN) - - @rest_utils.ajax() - def get(self, request, node_id): - """Get information on a specific node. - - :param request: HTTP request. - :param node_id: Node id. - :return: node. - """ - return ironic.node_get(request, node_id).to_dict() - - @rest_utils.ajax(data_required=True) - def patch(self, request, node_id): - """Update an Ironic node - - :param request: HTTP request - :param node_uuid: Node uuid. - """ - patch = request.DATA.get('patch') - return ironic.node_update(request, node_id, patch) - - -@urls.register -class Ports(generic.View): - - url_regex = r'ironic/ports/$' - - @rest_utils.ajax() - def get(self, request): - """Get the list of ports associated with a specified node. - - :param request: HTTP request - :return: List of ports. - """ - node_id = request.GET.get('node_id') - ports = ironic.node_list_ports(request, node_id) - return { - 'ports': [i.to_dict() for i in ports] - } - - @rest_utils.ajax(data_required=True) - def post(self, request): - """Create a network port - - :param request: HTTP request - :return: Port - """ - port = request.DATA.get('port') - return ironic.port_create(request, port).to_dict() - - @rest_utils.ajax(data_required=True) - def delete(self, request): - """Delete a network port - - :param request: HTTP request - """ - params = request.DATA.get('port_uuid') - return ironic.port_delete(request, params) - - -@urls.register -class Port(generic.View): - - url_regex = r'ironic/ports/(?P[0-9a-f-]+)$' - - @rest_utils.ajax(data_required=True) - def patch(self, request, port_id): - """Update an Ironic port - - :param request: HTTP request - :param port_id: Port id. - """ - patch = request.DATA.get('patch') - return ironic.port_update(request, port_id, patch) - - -@urls.register -class StatesPower(generic.View): - - url_regex = r'ironic/nodes/(?P{})/states/power$'. \ - format(LOGICAL_NAME_PATTERN) - - @rest_utils.ajax(data_required=True) - def patch(self, request, node_id): - """Set the power state for a specified node. - - :param request: HTTP request. - :param node_id: Node name or uuid - :return: Return code - """ - return ironic.node_set_power_state(request, - node_id, - request.DATA.get('state'), - request.DATA.get('soft')) - - -@urls.register -class StatesProvision(generic.View): - - url_regex = r'ironic/nodes/(?P{})/states/provision$'. \ - format(LOGICAL_NAME_PATTERN) - - @rest_utils.ajax(data_required=True) - def put(self, request, node_uuid): - """Set the provision state for a specified node. - - :param request: HTTP request. - :param node_id: Node uuid - :return: Return code - """ - verb = request.DATA.get('verb') - clean_steps = request.DATA.get('clean_steps') - return ironic.node_set_provision_state(request, - node_uuid, - verb, - clean_steps) - - -@urls.register -class StatesConsole(generic.View): - - url_regex = r'ironic/nodes/(?P{})/states/console$'. \ - format(LOGICAL_NAME_PATTERN) - - @rest_utils.ajax() - def get(self, request, node_uuid): - """Get connection information for the node's console - - :param request: HTTP request. - :param node_id: Node uuid - :return: Connection information - """ - return ironic.node_get_console(request, node_uuid) - - @rest_utils.ajax(data_required=True) - def put(self, request, node_uuid): - """Start or stop the serial console. - - :param request: HTTP request. - :param node_id: Node uuid - :return: Return code - """ - return ironic.node_set_console_mode(request, - node_uuid, - request.DATA.get('enabled')) - - -@urls.register -class Maintenance(generic.View): - - url_regex = r'ironic/nodes/(?P{})/maintenance$'. \ - format(LOGICAL_NAME_PATTERN) - - @rest_utils.ajax() - def patch(self, request, node_id): - """Put a specified node into maintenance state - - :param request: HTTP request. - :param node_id: Node name or uuid - :return: Return code - """ - maint_reason = request.DATA.get('maint_reason') - return ironic.node_set_maintenance( - request, - node_id, - 'on', - maint_reason=maint_reason) - - @rest_utils.ajax() - def delete(self, request, node_id): - """Take a specified node out of the maintenance state - - :param request: HTTP request. - :param node_id: Node name or uuid - :return: Return code - """ - return ironic.node_set_maintenance(request, node_id, 'off') - - -@urls.register -class Validate(generic.View): - - url_regex = r'ironic/nodes/(?P{})/validate$'. \ - format(LOGICAL_NAME_PATTERN) - - @rest_utils.ajax() - def get(self, request, node_id): - """Validate a specified node - - :param request: HTTP request. - :param node_id: Node name or uuid - :return: List of dictionaries of interface statuses - """ - return ironic.node_validate(request, node_id) - - -@urls.register -class BootDevice(generic.View): - - url_regex = r'ironic/nodes/(?P{})/boot_device$'. \ - format(LOGICAL_NAME_PATTERN) - - @rest_utils.ajax() - def get(self, request, node_id): - """Get the boot device for a specified node - - :param request: HTTP request. - :param node_id: Node name or uuid - :return: Dictionary with keys "boot_device" and "persistent" - """ - return ironic.node_get_boot_device(request, node_id) - - @rest_utils.ajax(data_required=True) - def put(self, request, node_id): - """Set the boot device for a specific node - - :param request: HTTP request. - :param node_id: Node name or uuid - :return: null. - """ - return ironic.node_set_boot_device( - request, - node_id, - request.DATA.get('boot_device'), - persistent=request.DATA.get('persistent')) - - -@urls.register -class SupportedBootDevices(generic.View): - - url_regex = r'ironic/nodes/(?P{})/boot_device/supported$' . \ - format(LOGICAL_NAME_PATTERN) - - @rest_utils.ajax() - def get(self, request, node_id): - """Get the list of supported boot devices for a specified node - - :param request: HTTP request. - :param node_id: Node name or uuid - :return: List of supported boot devices - """ - return ironic.node_get_supported_boot_devices(request, node_id) - - -@urls.register -class Drivers(generic.View): - - url_regex = r'ironic/drivers/$' - - @rest_utils.ajax() - def get(self, request): - """Get the list of drivers - - :param request: HTTP request - :return: drivers - """ - drivers = ironic.driver_list(request) - return { - 'drivers': [i.to_dict() for i in drivers] - } - - -@urls.register -class DriverProperties(generic.View): - - url_regex = r'ironic/drivers/(?P[0-9a-zA-Z_-]+)/properties$' - - @rest_utils.ajax() - def get(self, request, driver_name): - """Get the properties associated with a specified driver - - :param request: HTTP request - :param driver_name: Driver name - :return: Dictionary of properties - """ - return ironic.driver_properties(request, driver_name) - - -@urls.register -class Portgroups(generic.View): - - url_regex = r'ironic/portgroups/$' - - @rest_utils.ajax() - def get(self, request): - """Get the list of portgroups associated with a specified node. - - :param request: HTTP request. - :return: List of portgroups. - """ - portgroups = ironic.portgroup_list(request, - request.GET.get('node_id')) - return { - 'portgroups': [i.to_dict() for i in portgroups] - } - - @rest_utils.ajax(data_required=True) - def post(self, request): - """Create a portgroup. - - :param request: HTTP request. - :return: Portgroup. - """ - return ironic.portgroup_create(request, request.DATA).to_dict() - - @rest_utils.ajax(data_required=True) - def delete(self, request): - """Delete a portgroup. - - :param request: HTTP request. - """ - return ironic.portgroup_delete(request, - request.DATA.get('portgroup_id')) - - -@urls.register -class PortgroupPorts(generic.View): - - url_regex = r'ironic/portgroups/(?P{})/ports$'. \ - format(LOGICAL_NAME_PATTERN) - - @rest_utils.ajax() - def get(self, request, portgroup_id): - """Get the ports for a specified portgroup. - - :param request: HTTP request. - :param node_id: UUID or name of portgroup. - :return: List of port objects. - """ - ports = ironic.portgroup_get_ports(request, portgroup_id) - return { - 'ports': [i.to_dict() for i in ports] - } diff --git a/ironic_ui/content/__init__.py b/ironic_ui/content/__init__.py deleted file mode 100644 index e8145616..00000000 --- a/ironic_ui/content/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import pbr.version - - -__version__ = pbr.version.VersionInfo( - 'ironic-ui').version_string() diff --git a/ironic_ui/content/ironic/__init__.py b/ironic_ui/content/ironic/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ironic_ui/content/ironic/panel.py b/ironic_ui/content/ironic/panel.py deleted file mode 100644 index ac67b517..00000000 --- a/ironic_ui/content/ironic/panel.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2016 Cisco Systems, Inc. -# Copyright (c) 2016 Hewlett Packard Enterprise Development Company LP -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from django.utils.translation import ugettext_lazy as _ - -import horizon - -from openstack_dashboard.api import base -from openstack_dashboard.dashboards.admin import dashboard - - -class Ironic(horizon.Panel): - name = _("Ironic Bare Metal Provisioning") - slug = 'ironic' - permissions = ('openstack.roles.admin',) - - def allowed(self, context): - request = context['request'] - if not base.is_service_enabled(request, 'baremetal'): - return False - else: - return super(Ironic, self).allowed(context) - - def nav(self, context): - request = context['request'] - if not base.is_service_enabled(request, 'baremetal'): - return False - else: - return True - -dashboard.Admin.register(Ironic) diff --git a/ironic_ui/content/ironic/templates/ironic/index.html b/ironic_ui/content/ironic/templates/ironic/index.html deleted file mode 100644 index 2e050ca7..00000000 --- a/ironic_ui/content/ironic/templates/ironic/index.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends 'base.html' %} -{% load i18n %} -{% block title %}{% trans "Ironic Bare Metal Provisioning" %}{% endblock %} - -{% block breadcrumb_nav %} - -{% endblock %} - -{% block page_header %} - -{% endblock %} - -{% block main %} - -{% endblock %} diff --git a/ironic_ui/content/ironic/templates/ironic/node_detail.html b/ironic_ui/content/ironic/templates/ironic/node_detail.html deleted file mode 100644 index 098f7ad6..00000000 --- a/ironic_ui/content/ironic/templates/ironic/node_detail.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends 'base.html' %} -{% load i18n %} -{% block title %}{% trans "Node Details" %}{% endblock %} - -{% block breadcrumb_nav %} - -{% endblock %} - -{% block page_header %} - -{% endblock %} - -{% block main %} - -{% endblock %} diff --git a/ironic_ui/content/ironic/urls.py b/ironic_ui/content/ironic/urls.py deleted file mode 100644 index a0143273..00000000 --- a/ironic_ui/content/ironic/urls.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2016 Cisco Systems, Inc. -# Copyright (c) 2016 Hewlett Packard Enterprise Development Company LP -# Copyright (c) 2016 Cray Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from django.conf.urls import url - -import ironic_ui.api.ironic_rest_api # noqa -from ironic_ui.content.ironic import views - -urlpatterns = [ - url(r'^$', views.IndexView.as_view(), name='index'), - url(r'^([^/]+)/$', views.DetailView.as_view(), name='detail'), -] diff --git a/ironic_ui/content/ironic/views.py b/ironic_ui/content/ironic/views.py deleted file mode 100644 index 66e1df31..00000000 --- a/ironic_ui/content/ironic/views.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2016 Cisco Systems, Inc. -# Copyright (c) 2016 Hewlett Packard Enterprise Development Company LP -# Copyright (c) 2016 Cray Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from django.views import generic - - -class IndexView(generic.TemplateView): - template_name = 'admin/ironic/index.html' - - -class DetailView(generic.TemplateView): - template_name = 'admin/ironic/node_detail.html' diff --git a/ironic_ui/enabled/_2200_ironic.py b/ironic_ui/enabled/_2200_ironic.py deleted file mode 100644 index 6d456cb5..00000000 --- a/ironic_ui/enabled/_2200_ironic.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2016 Hewlett Packard Enterprise Development Company LP -# Copyright (c) 2016 Cray Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# The name of the panel to be added to HORIZON_CONFIG. Required. -PANEL = 'ironic' -# The name of the dashboard the PANEL associated with. Required. -PANEL_DASHBOARD = 'admin' -# The name of the panel group the PANEL is associated with. -PANEL_GROUP = 'admin' -# Python panel class of the PANEL to be added. -ADD_PANEL = 'ironic_ui.content.ironic.panel.Ironic' -# A list of applications to be prepended to INSTALLED_APPS -ADD_INSTALLED_APPS = ['ironic_ui', ] -# A list of AngularJS modules to be loaded when Angular bootstraps. -ADD_ANGULAR_MODULES = ['horizon.dashboard.admin.ironic'] -# Automatically discover static resources in installed apps -AUTO_DISCOVER_STATIC_FILES = True diff --git a/ironic_ui/enabled/__init__.py b/ironic_ui/enabled/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ironic_ui/karma.conf.js b/ironic_ui/karma.conf.js deleted file mode 100644 index 2e7dc4af..00000000 --- a/ironic_ui/karma.conf.js +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(function () { - 'use strict'; - - module.exports = function (config) { - // This tox venv is setup in the post-install npm step - var toxPath = '../.tox/py27/lib/python2.7/site-packages/'; - - config.set({ - preprocessors: { - // Used to collect templates for preprocessing. - // NOTE: the templates must also be listed in the files section below. - './static/**/*.html': ['ng-html2js'], - // Used to indicate files requiring coverage reports. - './static/**/!(*.spec).js': ['coverage'] - }, - - // Sets up module to process templates. - ngHtml2JsPreprocessor: { - prependPrefix: '/', - moduleName: 'templates' - }, - - basePath: './', - - // Contains both source and test files. - files: [ - /* - * shim, partly stolen from /i18n/js/horizon/ - * Contains expected items not provided elsewhere (dynamically by - * Django or via jasmine template. - */ - '../test-shim.js', - - // from jasmine.html - toxPath + 'xstatic/pkg/jquery/data/jquery.js', - toxPath + 'xstatic/pkg/angular/data/angular.js', - toxPath + 'xstatic/pkg/angular/data/angular-route.js', - toxPath + 'xstatic/pkg/angular/data/angular-mocks.js', - toxPath + 'xstatic/pkg/angular/data/angular-cookies.js', - toxPath + 'xstatic/pkg/angular_bootstrap/data/angular-bootstrap.js', - toxPath + 'xstatic/pkg/angular_gettext/data/angular-gettext.js', - toxPath + 'xstatic/pkg/angular/data/angular-sanitize.js', - toxPath + 'xstatic/pkg/d3/data/d3.js', - toxPath + 'xstatic/pkg/rickshaw/data/rickshaw.js', - toxPath + 'xstatic/pkg/angular_smart_table/data/smart-table.js', - toxPath + 'xstatic/pkg/angular_lrdragndrop/data/lrdragndrop.js', - toxPath + 'xstatic/pkg/angular_fileupload/data/ng-file-upload-all.js', - toxPath + 'xstatic/pkg/spin/data/spin.js', - toxPath + 'xstatic/pkg/spin/data/spin.jquery.js', - toxPath + 'xstatic/pkg/tv4/data/tv4.js', - toxPath + 'xstatic/pkg/objectpath/data/ObjectPath.js', - toxPath + 'xstatic/pkg/angular_schema_form/data/schema-form.js', - toxPath + '/horizon/static/horizon/js/horizon.js', - - /** - * Include framework source code from horizon that we need. - * Otherwise, karma will not be able to find them when testing. - * These files should be mocked in the foreseeable future. - */ - toxPath + 'horizon/static/framework/**/*.module.js', - toxPath + 'horizon/static/framework/**/!(*.spec|*.mock).js', - toxPath + 'openstack_dashboard/static/**/*.module.js', - toxPath + 'openstack_dashboard/static/**/!(*.spec|*.mock).js', - toxPath + 'openstack_dashboard/dashboards/**/static/**/*.module.js', - toxPath + 'openstack_dashboard/dashboards/**/static/**/!(*.spec|*.mock).js', - - /** - * First, list all the files that defines application's angular modules. - * Those files have extension of `.module.js`. The order among them is - * not significant. - */ - './static/**/*.module.js', - - /** - * Followed by other JavaScript files that defines angular providers - * on the modules defined in files listed above. And they are not mock - * files or spec files defined below. The order among them is not - * significant. - */ - './static/**/!(*.spec|*.mock).js', - - /** - * Then, list files for mocks with `mock.js` extension. The order - * among them should not be significant. - */ - toxPath + 'openstack_dashboard/static/**/*.mock.js', - - /** - * Finally, list files for spec with `spec.js` extension. The order - * among them should not be significant. - */ - './static/**/*.spec.js', - - /** - * Angular external templates - */ - './static/**/*.html' - ], - - autoWatch: true, - - frameworks: ['jasmine'], - - browsers: ['Chrome'], - - browserNoActivityTimeout: 60000, - - phantomjsLauncher: { - // Have phantomjs exit if a ResourceError is encountered - // (useful if karma exits without killing phantom) - exitOnResourceError: true - }, - - reporters: ['progress', 'coverage', 'threshold'], - - plugins: [ - 'karma-chrome-launcher', - 'karma-jasmine', - 'karma-ng-html2js-preprocessor', - 'karma-coverage', - 'karma-threshold-reporter' - ], - - // Places coverage report in HTML format in the subdirectory below. - coverageReporter: { - type: 'html', - dir: '../cover/karma/' - }, - - // Coverage threshold values. - thresholdReporter: { - statements: 10, // target 100 - branches: 0, // target 100 - functions: 10, // target 100 - lines: 10 // target 100 - } - }); - }; - -}()); diff --git a/ironic_ui/locale/de/LC_MESSAGES/django.po b/ironic_ui/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 6597df78..00000000 --- a/ironic_ui/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,18 +0,0 @@ -# Robert Simai , 2016. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.1.1.dev9\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2016-10-07 16:48+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-10-17 01:04+0000\n" -"Last-Translator: Robert Simai \n" -"Language-Team: German\n" -"Language: de\n" -"X-Generator: Zanata 3.7.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -msgid "Ironic Bare Metal Provisioning" -msgstr "Ironic Bare Metal Provisionierung" diff --git a/ironic_ui/locale/de/LC_MESSAGES/djangojs.po b/ironic_ui/locale/de/LC_MESSAGES/djangojs.po deleted file mode 100644 index c984a258..00000000 --- a/ironic_ui/locale/de/LC_MESSAGES/djangojs.po +++ /dev/null @@ -1,601 +0,0 @@ -# Andreas Jaeger , 2016. #zanata -# Frank Kloeker , 2016. #zanata -# Robert Simai , 2016. #zanata -# Andreas Jaeger , 2017. #zanata -# Robert Simai , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.3.1.dev70\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-07-18 16:08+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-07-04 10:43+0000\n" -"Last-Translator: Robert Simai \n" -"Language-Team: German\n" -"Language: de\n" -"X-Generator: Zanata 3.9.6\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -msgid " ([^\" ]+|\"[^\"]+\") \\(Default\\)" -msgstr " ([^\" ]+|\"[^\"]+\") \\(Default\\)" - -msgid "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" -msgstr "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" - -#, python-format -msgid "A request has been made to change the provisioning state of node %s" -msgstr "" -"Eine Anfrage wurde erstellt, um den Provisionierungszustand des Knotens %s " -"zu ändern" - -msgid "Abort cleaning" -msgstr "Bereinigung abbrechen" - -msgid "Actions" -msgstr "Aktionen" - -msgid "Add Extra" -msgstr "Extra hinzufügen" - -msgid "Add Instance Property" -msgstr "Instanz-Eigenschaft hinzufügen" - -msgid "Add Property" -msgstr "Eigenschaft hinzufügen" - -#, python-format -msgid "" -"Are you sure you want to delete node \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete nodes \"%s\"? This action cannot be undone." -msgstr[0] "" -"Sind Sie sicher, dass Sie den Knoten \"%s\" löschen wollen? Diese Aktion " -"kann nicht rückgängig gemacht werden." -msgstr[1] "" -"Sind Sie sicher, dass Sie die Knoten \"%s\" löschen wollen? Diese Aktion " -"kann nicht rückgängig gemacht werden." - -#, python-format -msgid "" -"Are you sure you want to delete port \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete ports \"%s\"? This action cannot be undone." -msgstr[0] "" -"Sind Sie sicher, dass Sie den Port \"%s\" löschen wollen? Diese Aktion kann " -"nicht rückgängig gemacht werden." -msgstr[1] "" -"Sind Sie sicher, dass Sie die Ports \"%s\" löschen wollen? Diese Aktion kann " -"nicht rückgängig gemacht werden." - -#, python-format -msgid "" -"Are you sure you want to delete portgroup \"%s\"? This action cannot be " -"undone." -msgid_plural "" -"Are you sure you want to delete portgroups \"%s\"? This action cannot be " -"undone." -msgstr[0] "" -"Sind Sie sicher, dass Sie die Portgruppe \"%s\" löschen wollen? Diese Aktion " -"kann nicht rückgängig gemacht werden." -msgstr[1] "" -"Sind Sie sicher, dass Sie die Portgruppen \"%s\" löschen wollen? Diese " -"Aktion kann nicht rückgängig gemacht werden." - -msgid "Attributes" -msgstr "Attribute" - -msgid "Boot Device" -msgstr "Boot-Gerät" - -msgid "Cancel" -msgstr "Abbrechen" - -msgid "Chassis ID" -msgstr "Chassis-ID" - -msgid "Choose an Image" -msgstr "Wählen Sie ein Abbild" - -msgid "Clean" -msgstr "Bereinigen" - -msgid "Clean Node" -msgstr "Knoten bereinigen" - -msgid "Clean Step" -msgstr "Bereinigungsschritt" - -msgid "Clean node" -msgstr "Knoten bereinigen" - -msgid "Clean steps should be an non-empty array" -msgstr "Reinigungsschritte sollten ein nicht-leeres Array sein" - -msgid "Click link to view console" -msgstr "Klicken Sie auf den Link, um nur die Konsole anzuzeigen." - -msgid "Configuration" -msgstr "Konfiguration" - -msgid "Console Enabled" -msgstr "Konsole aktiviert" - -msgid "Console Info." -msgstr "Konsoleninformation." - -msgid "Create Port" -msgstr "Port erstellen" - -msgid "Created At" -msgstr "Erstellt am" - -msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" -msgstr "Standard ist ([^\"\\. ]+|\"[^\"]+\")" - -msgid "Delete Node" -msgid_plural "Delete Nodes" -msgstr[0] "Knoten löschen" -msgstr[1] "Knoten löschen" - -msgid "Delete Port" -msgid_plural "Delete Ports" -msgstr[0] "Port löschen" -msgstr[1] "Ports löschen" - -msgid "Delete Portgroup" -msgid_plural "Delete Portgroups" -msgstr[0] "Portgruppe löschen" -msgstr[1] "Portgruppen löschen" - -msgid "Deploy Kernel" -msgstr "Kernel bereitstellen" - -msgid "Deploy Ramdisk" -msgstr "Ramdisk bereitstellen" - -msgid "Device" -msgstr "Gerät" - -msgid "Driver" -msgstr "Treiber" - -msgid "Driver Details" -msgstr "Treiberdetails" - -msgid "Driver Info" -msgstr "Treiberinformationen" - -msgid "Driver Validation" -msgstr "Treibervalidierung" - -msgid "" -"Each cleaning step must be an object that contains \"interface\" and \"step" -"\" properties" -msgstr "" -"Jeder Reinigunsschritt muss ein Objekt sein, das \"interface\" und \"step\" " -"Eigenschaften enthält" - -msgid "Edit Node" -msgstr "Knoten bearbeiten" - -msgid "Edit Port" -msgstr "Port bearbeiten" - -msgid "Enroll Node" -msgstr "Knoten ausrollen" - -msgid "Extra" -msgstr "Extra" - -msgid "Extra Property Name" -msgstr "Extra Eigenschaftname" - -msgid "Extras" -msgstr "Extras" - -msgid "General" -msgstr "Allgemein" - -msgid "Image Source" -msgstr "Abbildquelle" - -msgid "Inspect" -msgstr "Inspizieren" - -msgid "Inspection Finished At" -msgstr "Inspektion beenden um" - -msgid "Inspection Started At" -msgstr "Inspektion gestartet um" - -msgid "Instance ID" -msgstr "Instanz-ID" - -msgid "Instance Info" -msgstr "Instanzinformation" - -msgid "Instance Name" -msgstr "Instanzname" - -msgid "Instance Property Name" -msgstr "Instanzeigenschaftname" - -msgid "Interface" -msgstr "Interface" - -msgid "Kernel" -msgstr "Kernel" - -msgid "Last Error" -msgstr "Letzter Fehler" - -msgid "Local Link Connection" -msgstr "Local Link Verbindung" - -msgid "Local link connection" -msgstr "Local Link Verbindung" - -msgid "MAC Address" -msgstr "MAC-Adresse" - -msgid "MAC address" -msgstr "MAC-Adresse" - -msgid "MAC address for this port. Required." -msgstr "MAC-Adresse für diesen Port. Erforderlich." - -msgid "MAC address or OpenFlow datapath ID" -msgstr "MAC Adresse oder OpenFlow datapath ID" - -msgid "Maintenance" -msgstr "Wartung" - -msgid "Maintenance Reason" -msgstr "Grund der Wartung" - -msgid "Move to" -msgstr "Verschieben nach" - -msgid "Name" -msgstr "Name" - -msgid "Network Interface" -msgstr "Netzwerk Schnittstelle" - -msgid "No Instance" -msgstr "Keine Instanz" - -msgid "No network ports have been defined" -msgstr "Es wurden keine Netzwerkports definiert" - -msgid "No portgroups have been defined" -msgstr "Es wurden keine Portgruppen definiert" - -msgid "No reason given." -msgstr "Kein Grund angegeben." - -msgid "Node" -msgstr "Knoten" - -#, python-format -msgid "Node %s is already in target maintenance state." -msgstr "Knoten %s ist bereits im beabsichtigten Wartungszustand." - -msgid "Node Driver" -msgstr "Knotentreiber" - -msgid "Node ID" -msgstr "Knoten-ID" - -msgid "Node Info" -msgstr "Knoteninformation" - -msgid "Node Name" -msgstr "Knotenname" - -msgid "One of this, (.*) must be specified\\." -msgstr "Einer von diesen, (.*) muss spezifiziert sein\\." - -msgid "Overview" -msgstr "Übersicht" - -msgid "PXE Enabled" -msgstr "PXE aktiviert" - -msgid "PXE enabled" -msgstr "PXE aktiviert" - -msgid "Persistent" -msgstr "Persistent" - -msgid "Port successfully created" -msgstr "Port erfolgreich erstellt" - -msgid "Portgroup" -msgstr "Portgruppe" - -msgid "Portgroup successfully created" -msgstr "Portgruppe erfolgreich erstellt" - -msgid "Portgroups" -msgstr "Portgruppen" - -msgid "Ports" -msgstr "Ports" - -msgid "Power State" -msgstr "Zustand" - -msgid "Power off" -msgstr "Ausschalten" - -msgid "Power on" -msgstr "Einschalten" - -msgid "Properties" -msgstr "Eigenschaften" - -msgid "Property Name" -msgstr "Eigenschaftname" - -msgid "Provide a list of cleaning steps in JSON format" -msgstr "Eine Liste der Reinigungsschritte im JSON-Format angeben" - -msgid "" -"Provide a reason for why you are putting the selected node(s) into " -"maintenance mode (optional)" -msgstr "" -"Geben Sie einen Grund an, warum Sie den/die ausgewählten Knoten in den " -"Wartungsmodus setzen (optional)" - -msgid "Provision State" -msgstr "Bereitstellungszustand" - -msgid "Provisioning State" -msgstr "Provisionierungszustand" - -msgid "Provisioning Status" -msgstr "Provisionierungsstatus" - -msgid "Put Node(s) Into Maintenance Mode" -msgstr "Knoten in Wartungsmodus setzen" - -msgid "Ramdisk" -msgstr "Ramdisk" - -msgid "Reason" -msgstr "Grund" - -msgid "Reboot" -msgstr "Neustart" - -msgid "Refresh" -msgstr "Aktualisieren" - -msgid "Refresh page to see updated console details" -msgstr "Seite neu laden, um aktualisierte Konsolendetails anzuzeigen" - -msgid "Refresh page to see updated power status" -msgstr "Aktualisiere Seite, um den Power Status zu sehen" - -msgid "Required" -msgstr "Erforderlich" - -msgid "Reservation" -msgstr "Reservierung" - -msgid "Resource Class" -msgstr "Ressourcen-Klasse" - -msgid "Root GB" -msgstr "Root GB" - -msgid "SSH Address" -msgstr "SSH Adresse" - -msgid "SSH Key Contents" -msgstr "SSH Schlüsselinhalt" - -msgid "SSH Key File" -msgstr "SSH Schlüsseldatei" - -msgid "SSH Password" -msgstr "SSH Passwort" - -msgid "SSH Port" -msgstr "SSH-Port" - -msgid "SSH Username" -msgstr "SSH-Benutzername" - -msgid "SSH terminal port" -msgstr "SSH Terminal Port" - -msgid "Select a Driver" -msgstr "Wählen Sie einen Treiber" - -msgid "Soft power off" -msgstr "Sanftes Ausschalten" - -msgid "Soft reboot" -msgstr "Sanfter Neustart" - -msgid "Submit" -msgstr "Abschicken" - -#, python-format -msgid "Successfully deleted node \"%s\"" -msgid_plural "Successfully deleted nodes \"%s\"" -msgstr[0] "Knoten \"%s\" erfolgreich gelöscht" -msgstr[1] "Knoten \"%s\" erfolgreich gelöscht" - -#, python-format -msgid "Successfully deleted port \"%s\"" -msgid_plural "Successfully deleted ports \"%s\"" -msgstr[0] "Port \"%s\" erfolgreich gelöscht" -msgstr[1] "Port \"%s\" erfolgreich gelöscht" - -#, python-format -msgid "Successfully deleted portgroup \"%s\"" -msgid_plural "Successfully deleted portgroups \"%s\"" -msgstr[0] "Portgruppe \"%s\" erfolgreich gelöscht" -msgstr[1] "Portgruppen \"%s\" erfolgreich gelöscht" - -#, python-format -msgid "Successfully updated node %s" -msgstr "Knoten %s erfolgreich aktualisiert" - -#, python-format -msgid "Successfully updated port %s" -msgstr "Port %s erfolgreich aktualisiert" - -msgid "Target Power State" -msgstr "Ziel Power-Zustand" - -msgid "Target Provision State" -msgstr "Ziel Bereitstellungszustand" - -msgid "" -"This field is disabled because a port cannot have any connectivity " -"attributes (pxe_enabled, local_link_connection, portgroup_id) updated unless " -"its associated node is in an enroll, inspecting, mangeable state; or in " -"maintenance mode." -msgstr "" -"Dieses Feld ist deaktiviert, denn bei einem Port können Verbindungsattribute " -"(pxe_enabled, local_link_connection, portgroup_id) nur aktualisiert werden, " -"wenn der zugewiesene Knoten im Enroll, Inspecting oder Manageable Status " -"oder im Wartungsmodus ist." - -msgid "UUID" -msgstr "UUID" - -msgid "Unable to create node update patch." -msgstr "Knoten-Aktualisierungspatch kann nicht erstellt werden." - -#, python-format -msgid "Unable to create node: %s" -msgstr "Knoten kann nicht erstellt werden: %s" - -msgid "Unable to create port update patch." -msgstr "Port Update Patch kann nicht erstellt werden." - -#, python-format -msgid "Unable to create port: %s" -msgstr "Port kann nicht erstellt werden: %s" - -#, python-format -msgid "Unable to create portgroup: %s" -msgstr "Portgruppe kann nicht erstellt werden: %s" - -#, python-format -msgid "Unable to delete node \"%s\"" -msgid_plural "Unable to delete nodes \"%s\"" -msgstr[0] "Knoten \"%s\" kann nicht gelöscht werden" -msgstr[1] "Knoten \"%s\" können nicht gelöscht werden" - -#, python-format -msgid "Unable to delete node %s: %s" -msgstr "Knoten kann nicht gelöscht werden: %s: %s" - -#, python-format -msgid "Unable to delete port \"%s\"" -msgid_plural "Unable to delete ports \"%s\"" -msgstr[0] "Port \"%s\" kann nicht gelöscht werden" -msgstr[1] "Ports \"%s\" können nicht gelöscht werden" - -#, python-format -msgid "Unable to delete port: %s" -msgstr "Port kann nicht gelöscht werden: %s" - -#, python-format -msgid "Unable to delete portgroup \"%s\"" -msgid_plural "Unable to delete portgroups \"%s\"" -msgstr[0] "Portgruppe \"%s\" kann nicht gelöscht werden" -msgstr[1] "Portgruppen \"%s\" können nicht gelöscht werden" - -#, python-format -msgid "Unable to delete portgroup: %s" -msgstr "Portgruppe kann nicht gelöscht werden: %s" - -#, python-format -msgid "Unable to get console for node %s: %s" -msgstr "Konsole für Node %s kann nicht abgerufen werden: %s" - -#, python-format -msgid "Unable to power off the node: %s" -msgstr "Konnte den Knoten nicht ausschalten: %s" - -#, python-format -msgid "Unable to retrieve Ironic drivers: %s" -msgstr "Ironic Treiber können nicht abgerufen werden: %s" - -#, python-format -msgid "Unable to retrieve Ironic node portgroups: %s" -msgstr "Ironic Knotenportgruppen können nicht abgerufen werden: %s" - -#, python-format -msgid "Unable to retrieve Ironic nodes. %s" -msgstr "Konnte die Ironic Knoten nicht abrufen: %s" - -#, python-format -msgid "Unable to retrieve boot device for Ironic node. %s" -msgstr "Boot-Gerät für den Ironic-Knoten kann nicht abgerufen werden. %s" - -#, python-format -msgid "Unable to retrieve driver properties: %s" -msgstr "Treibereigenschaften können nicht abgerufen werden: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node ports: %s" -msgstr "Konnte die Ironic-Knotenports nicht abrufen: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node: %s" -msgstr "Konnte den Ironic-Knoten nicht abrufen: %s" - -#, python-format -msgid "Unable to set Ironic node %s maintenance state: %s" -msgstr "Konnte den Ironic Knoten %s nicht in den Wartungszustand setzen: %s" - -#, python-format -msgid "Unable to set console mode: %s" -msgstr "Konsolenmodus kann nicht gesetzt werden: %s" - -#, python-format -msgid "Unable to set node provision state: %s" -msgstr "Kann Provisionierungszustand nicht setzen: %s" - -#, python-format -msgid "Unable to update node %s: %s" -msgstr "Knoten %s kann nicht aktualisiert werden: %s" - -#, python-format -msgid "Unable to update port %s: %s" -msgstr "Port %s kann nicht aktualisiert werden: %s" - -#, python-format -msgid "Unable to validate node %s: %s" -msgstr "Knoten %s kann nicht validiert werden: %s" - -msgid "Unable to validate the JSON input" -msgstr "JSON-Eingabe kann nicht validiert werden" - -msgid "Update Node" -msgstr "Knoten aktualisieren" - -msgid "Update Port" -msgstr "Port aktualisieren" - -msgid "Updated At" -msgstr "Aktualisiert am" - -msgid "Valid" -msgstr "Gültig" - -msgid "Virtualization Software" -msgstr "Virtualisierungssoftware" - -msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" -msgstr "Standard (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" diff --git a/ironic_ui/locale/en_GB/LC_MESSAGES/django.po b/ironic_ui/locale/en_GB/LC_MESSAGES/django.po deleted file mode 100644 index 751b18d5..00000000 --- a/ironic_ui/locale/en_GB/LC_MESSAGES/django.po +++ /dev/null @@ -1,18 +0,0 @@ -# Andi Chandler , 2016. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 1.1.1.dev28\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2016-07-13 21:09+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-06-29 01:16+0000\n" -"Last-Translator: Andi Chandler \n" -"Language-Team: English (United Kingdom)\n" -"Language: en-GB\n" -"X-Generator: Zanata 3.7.3\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -msgid "Ironic Bare Metal Provisioning" -msgstr "Ironic Bare Metal Provisioning" diff --git a/ironic_ui/locale/fr/LC_MESSAGES/django.po b/ironic_ui/locale/fr/LC_MESSAGES/django.po deleted file mode 100644 index c2e2bf2f..00000000 --- a/ironic_ui/locale/fr/LC_MESSAGES/django.po +++ /dev/null @@ -1,18 +0,0 @@ -# Nicolas Fournier , 2016. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 1.1.1.dev9\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2016-05-05 12:53+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-04-30 05:13+0000\n" -"Last-Translator: Nicolas Fournier \n" -"Language-Team: French\n" -"Language: fr\n" -"X-Generator: Zanata 3.7.3\n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" - -msgid "Ironic Bare Metal Provisioning" -msgstr "Déploiement Bare Metal Ironic" diff --git a/ironic_ui/locale/fr/LC_MESSAGES/djangojs.po b/ironic_ui/locale/fr/LC_MESSAGES/djangojs.po deleted file mode 100644 index 34e6f37c..00000000 --- a/ironic_ui/locale/fr/LC_MESSAGES/djangojs.po +++ /dev/null @@ -1,347 +0,0 @@ -# Gael Rehault , 2015. #zanata -# OpenStack Infra , 2015. #zanata -# Andreas Jaeger , 2016. #zanata -# Gérald LONLAS , 2016. #zanata -# Martine Marin , 2016. #zanata -# Nicolas Fournier , 2016. #zanata -# Gérald LONLAS , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.3.1.dev70\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-07-18 16:08+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-02-03 10:49+0000\n" -"Last-Translator: Gérald LONLAS \n" -"Language-Team: French\n" -"Language: fr\n" -"X-Generator: Zanata 3.9.6\n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" - -msgid " ([^\" ]+|\"[^\"]+\") \\(Default\\)" -msgstr " ([^\" ]+|\"[^\"]+\") \\(Default\\)" - -msgid "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" -msgstr "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" - -#, python-format -msgid "A request has been made to change the provisioning state of node %s" -msgstr "" -"Une requête a été envoyé pour changer l'état du provisionnement du nœud %s" - -msgid "Actions" -msgstr "Actions" - -#, fuzzy, python-format -msgid "" -"Are you sure you want to delete node \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete nodes \"%s\"? This action cannot be undone." -msgstr[0] "" -"Etes-vous certain de vouloir supprimer le nœud \"%s\" ? Cette action est " -"irréversible." -msgstr[1] "" - -#, fuzzy, python-format -msgid "" -"Are you sure you want to delete port \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete ports \"%s\"? This action cannot be undone." -msgstr[0] "" -"Etes-vous certain de vouloir supprimer le port \"%s\" ? Cette action est " -"irréversible." -msgstr[1] "" - -msgid "Cancel" -msgstr "Annuler" - -msgid "Chassis ID" -msgstr "ID du chassis" - -msgid "Choose an Image" -msgstr "Choisir une image" - -msgid "Configuration" -msgstr "Configuration" - -msgid "Console Enabled" -msgstr "Console Activée" - -msgid "Create Port" -msgstr "Créer un port" - -msgid "Created At" -msgstr "Créé le" - -msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" -msgstr "Par défaut ([^\"\\. ]+|\"[^\"]+\")" - -#, fuzzy -msgid "Delete Node" -msgid_plural "Delete Nodes" -msgstr[0] "Supprimer le nœud" -msgstr[1] "" - -#, fuzzy -msgid "Delete Port" -msgid_plural "Delete Ports" -msgstr[0] "Supprimer le port" -msgstr[1] "" - -msgid "Deploy Kernel" -msgstr "Kernel de déploiement" - -msgid "Deploy Ramdisk" -msgstr "Ramdisk de déploiement" - -msgid "Driver" -msgstr "Pilote" - -msgid "Driver Details" -msgstr "Détails du pilote" - -msgid "Driver Info" -msgstr "Info du pilote" - -msgid "Edit Node" -msgstr "Editer le nœud" - -msgid "Enroll Node" -msgstr "Enroller le nœud" - -msgid "Extra" -msgstr "Extra" - -msgid "Extras" -msgstr "Extras" - -msgid "General" -msgstr "Général" - -msgid "Inspection Finished At" -msgstr "Inspection terminée à" - -msgid "Inspection Started At" -msgstr "Inspection démarrée à" - -msgid "Instance ID" -msgstr "ID de l'instance" - -msgid "Instance Info" -msgstr "Infos de l'instance" - -msgid "Instance Name" -msgstr "Nom de l'instance" - -msgid "Kernel" -msgstr "Noyau" - -msgid "Last Error" -msgstr "Dernière Erreur" - -msgid "MAC Address" -msgstr "Adresse MAC" - -msgid "MAC address" -msgstr "Adresse MAC" - -msgid "MAC address for this port. Required." -msgstr "Adresse MAC pour ce port. Requis." - -msgid "Maintenance" -msgstr "Maintenance" - -msgid "Maintenance Reason" -msgstr "Raison de la maintenance" - -msgid "Name" -msgstr "Nom" - -msgid "No Instance" -msgstr "Pas d'instance" - -msgid "No network ports have been defined" -msgstr "Aucun port réseau n'a été défini" - -msgid "Node" -msgstr "Nœud" - -msgid "Node Driver" -msgstr "Pilote du nœud" - -msgid "Node ID" -msgstr "ID du nœud" - -msgid "Node Info" -msgstr "Info du nœud" - -msgid "Node Name" -msgstr "Nom du nœud" - -msgid "One of this, (.*) must be specified\\." -msgstr "Une des leurs (.*) doit être spécifié\\." - -msgid "Overview" -msgstr "Vue d'ensemble" - -msgid "Port successfully created" -msgstr "Port crée avec succès" - -msgid "Ports" -msgstr "Ports" - -msgid "Power State" -msgstr "État de l'alimentation" - -msgid "Power off" -msgstr "Éteindre" - -msgid "Power on" -msgstr "Allumer" - -msgid "Properties" -msgstr "Propriétés" - -msgid "Property Name" -msgstr "Nom de la propriété" - -msgid "" -"Provide a reason for why you are putting the selected node(s) into " -"maintenance mode (optional)" -msgstr "" -"Fournir une raison pour avoir mis le(s) nœud(s) sélectionné(s) en mode " -"maintenance (optionnel)" - -msgid "Provision State" -msgstr "État de déploiement" - -msgid "Provisioning State" -msgstr "État de déploiement" - -msgid "Provisioning Status" -msgstr "Statut de Déploiement" - -msgid "Put Node(s) Into Maintenance Mode" -msgstr "Mettre le(s) nœud(s) en mode maintenance" - -msgid "Ramdisk" -msgstr "Ramdisk" - -msgid "Refresh" -msgstr "Rafraichir" - -msgid "Refresh page to see updated power status" -msgstr "Rafraichir la page pour voir les statuts d'alimentation à jour" - -msgid "Required" -msgstr "Obligatoire" - -msgid "Reservation" -msgstr "Réservation" - -msgid "SSH Port" -msgstr "Port SSH" - -msgid "SSH Username" -msgstr "Utilisateur SSH" - -msgid "Select a Driver" -msgstr "Sélectionner un pilote" - -msgid "Submit" -msgstr "Envoyer" - -#, fuzzy, python-format -msgid "Successfully deleted node \"%s\"" -msgid_plural "Successfully deleted nodes \"%s\"" -msgstr[0] "Suppression avec succès du nœud \"%s\" " -msgstr[1] "" - -#, fuzzy, python-format -msgid "Successfully deleted port \"%s\"" -msgid_plural "Successfully deleted ports \"%s\"" -msgstr[0] "Suppression avec succès du port \"%s\" " -msgstr[1] "" - -#, python-format -msgid "Successfully updated node %s" -msgstr "Mise à jour avec succès du nœud %s" - -msgid "Target Power State" -msgstr "État de l'alimentation de la cible" - -msgid "Target Provision State" -msgstr "État de déploiement de la cible" - -msgid "UUID" -msgstr "UUID" - -msgid "Unable to create node update patch." -msgstr "Impossible de créer le patch de mise à jour du nœud." - -#, python-format -msgid "Unable to create node: %s" -msgstr "Impossible de créer le nœud : %s" - -#, python-format -msgid "Unable to create port: %s" -msgstr "Impossible de créer le port : %s" - -#, fuzzy, python-format -msgid "Unable to delete node \"%s\"" -msgid_plural "Unable to delete nodes \"%s\"" -msgstr[0] "Impossible de supprimer le nœud \"%s\"" -msgstr[1] "" - -#, python-format -msgid "Unable to delete node %s: %s" -msgstr "Impossible de supprimer le nœud %s : %s" - -#, fuzzy, python-format -msgid "Unable to delete port \"%s\"" -msgid_plural "Unable to delete ports \"%s\"" -msgstr[0] "Impossible de supprimer le port \"%s\"" -msgstr[1] "" - -#, python-format -msgid "Unable to delete port: %s" -msgstr "Impossible de supprimer le port : %s" - -#, python-format -msgid "Unable to power off the node: %s" -msgstr "Impossible d'éteindre le nœud : %s" - -#, python-format -msgid "Unable to retrieve Ironic drivers: %s" -msgstr "Impossible de récupérer les pilotes Ironic : %s" - -#, python-format -msgid "Unable to retrieve driver properties: %s" -msgstr "Impossible de récupérer les propriétés du pilote : %s" - -#, python-format -msgid "Unable to retrieve the Ironic node ports: %s" -msgstr "Impossible de récupérer les ports du nœud Ironic : %s" - -#, python-format -msgid "Unable to retrieve the Ironic node: %s" -msgstr "Impossible de récupérer le nœud Ironic : %s" - -#, python-format -msgid "Unable to set node provision state: %s" -msgstr "Impossible de configurer l'état du provisionnement : %s" - -#, python-format -msgid "Unable to update node %s: %s" -msgstr "Impossible de mettre à jour le nœud %s : %s" - -msgid "Update Node" -msgstr "Mettre à jour le nœud" - -msgid "Updated At" -msgstr "Mis à jour à" - -msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" -msgstr "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" diff --git a/ironic_ui/locale/id/LC_MESSAGES/django.po b/ironic_ui/locale/id/LC_MESSAGES/django.po deleted file mode 100644 index 1a036825..00000000 --- a/ironic_ui/locale/id/LC_MESSAGES/django.po +++ /dev/null @@ -1,18 +0,0 @@ -# suhartono , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.1.1.dev45\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-01-17 12:34+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-01-10 02:16+0000\n" -"Last-Translator: suhartono \n" -"Language-Team: Indonesian\n" -"Language: id\n" -"X-Generator: Zanata 3.7.3\n" -"Plural-Forms: nplurals=1; plural=0\n" - -msgid "Ironic Bare Metal Provisioning" -msgstr "Ironic Bare Metal Provisioning" diff --git a/ironic_ui/locale/id/LC_MESSAGES/djangojs.po b/ironic_ui/locale/id/LC_MESSAGES/djangojs.po deleted file mode 100644 index f352068c..00000000 --- a/ironic_ui/locale/id/LC_MESSAGES/djangojs.po +++ /dev/null @@ -1,615 +0,0 @@ -# OpenStack Infra , 2015. #zanata -# Andreas Jaeger , 2016. #zanata -# suhartono , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.3.1.dev73\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-07-21 15:07+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-07-23 05:11+0000\n" -"Last-Translator: suhartono \n" -"Language-Team: Indonesian\n" -"Language: id\n" -"X-Generator: Zanata 3.9.6\n" -"Plural-Forms: nplurals=1; plural=0\n" - -msgid " ([^\" ]+|\"[^\"]+\") \\(Default\\)" -msgstr " ([^\" ]+|\"[^\"]+\") \\(Default\\)" - -msgid "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" -msgstr "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" - -#, python-format -msgid "A request has been made to change the provisioning state of node %s" -msgstr "Permintaan telah dibuat untuk mengubah keadaan provisioning node %s" - -msgid "Abort cleaning" -msgstr "Membatalkan pembersihan" - -msgid "Actions" -msgstr "Aksi" - -msgid "Add Extra" -msgstr "Menambahkan Extra" - -msgid "Add Instance Property" -msgstr "Menambahkan Instance Property" - -msgid "Add Property" -msgstr "Menambahkan Property" - -#, python-format -msgid "" -"Are you sure you want to delete node \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete nodes \"%s\"? This action cannot be undone." -msgstr[0] "" -"Apakah Anda yakin ingin menghapus node \"%s\"? Tindakan ini tidak bisa " -"dibatalkan." - -#, python-format -msgid "" -"Are you sure you want to delete port \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete ports \"%s\"? This action cannot be undone." -msgstr[0] "" -"Apakah Anda yakin ingin menghapus port \"%s\"? Tindakan ini tidak bisa " -"dibatalkan." - -#, python-format -msgid "" -"Are you sure you want to delete portgroup \"%s\"? This action cannot be " -"undone." -msgid_plural "" -"Are you sure you want to delete portgroups \"%s\"? This action cannot be " -"undone." -msgstr[0] "" -"Are you sure you want to delete portgroup \"%s\"? This action cannot be " -"undone." - -msgid "Attributes" -msgstr "Attributes" - -msgid "Boot Device" -msgstr "Boot Device" - -msgid "Cancel" -msgstr "Batal" - -msgid "Chassis ID" -msgstr "Chassis ID" - -msgid "Choose an Image" -msgstr "Pilih Image" - -msgid "Clean" -msgstr "Bersih" - -msgid "Clean Node" -msgstr "Clean Node" - -msgid "Clean Step" -msgstr "Membersihkan langkah" - -msgid "Clean node" -msgstr "Clean node" - -msgid "Clean steps should be an non-empty array" -msgstr "Langkah pembersihan harus array non-empty" - -msgid "Click link to view console" -msgstr "Klik tautan untuk melihat konsol" - -msgid "Configuration" -msgstr "Konfigurasi" - -msgid "Console Enabled" -msgstr "Console Enabled (konsol diaktifkan)" - -msgid "Console Info." -msgstr "Console Info." - -msgid "Create Port" -msgstr "Buat Port" - -msgid "Created At" -msgstr "Created At" - -msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" -msgstr "Defaults ke ([^\"\\. ]+|\"[^\"]+\")" - -msgid "Delete Node" -msgid_plural "Delete Nodes" -msgstr[0] "Delete Node (hapus node)" - -msgid "Delete Port" -msgid_plural "Delete Ports" -msgstr[0] "Delete Port (hapus port)" - -msgid "Delete Portgroup" -msgid_plural "Delete Portgroups" -msgstr[0] "Delete Portgroup" - -msgid "Deploy Kernel" -msgstr "Deploy Kernel (mengerahkan kernel)" - -msgid "Deploy Ramdisk" -msgstr "Deploy Ramdisk (mengerahkan ramdisk)" - -msgid "Device" -msgstr "Device" - -msgid "Driver" -msgstr "Driver" - -msgid "Driver Details" -msgstr "Driver Details (rincian driver)" - -msgid "Driver Info" -msgstr "Driver Info" - -msgid "Driver Validation" -msgstr "Driver Validation (validasi driver)" - -msgid "" -"Each cleaning step must be an object that contains \"interface\" and \"step" -"\" properties" -msgstr "" -"Setiap langkah pembersihan harus sebagai obyek yang berisi properti " -"\"interface\" dan \"step\"." - -msgid "Edit Node" -msgstr "Edit Node" - -msgid "Edit Port" -msgstr "Edit Port" - -msgid "Enroll Node" -msgstr "Enroll Node" - -msgid "Extra" -msgstr "Extra" - -msgid "Extra Property Name" -msgstr "Extra Property Name" - -msgid "Extras" -msgstr "Extras" - -msgid "General" -msgstr "General (umum)" - -msgid "Image Source" -msgstr "Image Source" - -msgid "Indicates whether this port should be used when PXE booting this node" -msgstr "" -"Menunjukkan apakah port ini harus digunakan saat PXE melakukan booting node " -"ini" - -msgid "Inspect" -msgstr "Inspect (periksa)" - -msgid "Inspection Finished At" -msgstr "Inspection Finished At (pemeriksaan selesai)" - -msgid "Inspection Started At" -msgstr "Inspection Started At (pemeriksaan dimulai)" - -msgid "Instance ID" -msgstr "ID Instances" - -msgid "Instance Info" -msgstr "Instance Info (info instance)" - -msgid "Instance Name" -msgstr "Nama Instance" - -msgid "Instance Property Name" -msgstr "Instance Property Name" - -msgid "Interface" -msgstr "Interface (antarmuka)" - -msgid "Kernel" -msgstr "Kernel" - -msgid "Last Error" -msgstr "Last Error (kesalahan terakhir)" - -msgid "Local Link Connection" -msgstr "Local Link Connection" - -msgid "Local link connection" -msgstr "Koneksi link lokal" - -msgid "MAC Address" -msgstr "MAC Address" - -msgid "MAC address" -msgstr "MAC address" - -msgid "MAC address for this port. Required." -msgstr "MAC address untuk port ini. Wajib." - -msgid "MAC address or OpenFlow datapath ID" -msgstr "Alamat MAC atau OpenFlow datapath ID" - -msgid "Maintenance" -msgstr "Maintenance (pemeliharaan)" - -msgid "Maintenance Reason" -msgstr "Maintenance Reason (alasan pemeliharaan)" - -msgid "Move to" -msgstr "Move to (pindah ke)" - -msgid "Name" -msgstr "Nama" - -msgid "Network Interface" -msgstr "Network Interface" - -msgid "No Instance" -msgstr "Tak ada Instance" - -msgid "No network ports have been defined" -msgstr "Tidak ada port jaringan telah didefinisikan" - -msgid "No portgroups have been defined" -msgstr "No portgroups telah didefinisikan" - -msgid "No reason given." -msgstr "Tidak ada alasan yang diberikan." - -msgid "Node" -msgstr "Node (simpul)" - -#, python-format -msgid "Node %s is already in target maintenance state." -msgstr "Node %s sudah dalam target maintenance state." - -msgid "Node Driver" -msgstr "Node Driver" - -msgid "Node ID" -msgstr "Node ID" - -msgid "Node Info" -msgstr "Node Info (info node)" - -msgid "Node Name" -msgstr "Node Name (nama node)" - -msgid "One of this, (.*) must be specified\\." -msgstr "One of this, (.*) must be specified\\." - -msgid "Overview" -msgstr "Iktisar" - -msgid "PXE Enabled" -msgstr "PXE Diaktifkan" - -msgid "PXE enabled" -msgstr "PXE enabled" - -msgid "Persistent" -msgstr "Persistent" - -msgid "Port successfully created" -msgstr "Port berhasil dibuat" - -msgid "Portgroup" -msgstr "Portgroup" - -msgid "Portgroup successfully created" -msgstr "Portgroup berhasil dibuat" - -msgid "Portgroup that this port belongs to" -msgstr "Portgroup yang dimiliki port ini" - -msgid "Portgroups" -msgstr "Portgroups" - -msgid "Ports" -msgstr "Port-Port" - -msgid "Power State" -msgstr "Power State" - -msgid "Power off" -msgstr "Power off" - -msgid "Power on" -msgstr "Power on" - -msgid "Properties" -msgstr "Property (sifat)" - -msgid "Property Name" -msgstr "Property Name (nama property)" - -msgid "Provide a list of cleaning steps in JSON format" -msgstr "Berikan daftar langkah-langkah pembersihan dalam format JSON" - -msgid "" -"Provide a reason for why you are putting the selected node(s) into " -"maintenance mode (optional)" -msgstr "" -"Berikan alasan mengapa Anda menempatkan node yang dipilih ke dalam modus " -"pemeliharaan (opsional)" - -msgid "Provision State" -msgstr "Provision State (keadaan penyediaan)" - -msgid "Provisioning State" -msgstr "Provisioning State" - -msgid "Provisioning Status" -msgstr "Provisioning Status (status penyediaan)" - -msgid "Put Node(s) Into Maintenance Mode" -msgstr "Letakan Node(s) dalam Maintenance Mode" - -msgid "Ramdisk" -msgstr "Ramdisk" - -msgid "Reason" -msgstr "Reason (alasan)" - -msgid "Reboot" -msgstr "Reboot" - -msgid "Refresh" -msgstr "Refresh" - -msgid "Refresh page to see set boot device" -msgstr "Segarkan halaman untuk melihat perangkat booting yang ditetapkan" - -msgid "Refresh page to see updated console details" -msgstr "Segarkan halaman untuk melihat rincian konsol yang diperbarui" - -msgid "Refresh page to see updated power status" -msgstr "Refresh halaman untuk melihat status daya diperbarui" - -msgid "Required" -msgstr "Wajib" - -msgid "Reservation" -msgstr "Reservation" - -msgid "Resource Class" -msgstr "Resource Class" - -msgid "Root GB" -msgstr "Root GB" - -msgid "SSH Address" -msgstr "SSH Address" - -msgid "SSH Key Contents" -msgstr "SSH Key Contents (konten kunci SSH)" - -msgid "SSH Key File" -msgstr "SSH Key File (file kunci SSH)" - -msgid "SSH Password" -msgstr "SSH Password (password SSH)" - -msgid "SSH Port" -msgstr "SSH Port" - -msgid "SSH Username" -msgstr "SSH Username " - -msgid "SSH terminal port" -msgstr "SSH terminal port (port terminal SSH)" - -msgid "Select a Driver" -msgstr "Pilih Driver" - -msgid "Select a boot device" -msgstr "Pilih perangkat booting" - -msgid "Select a portgroup" -msgstr "Pilih portgroup" - -msgid "Set Boot Device" -msgstr "Set Boot Device (setel perangkat booting)" - -msgid "Set boot device" -msgstr "Setel perangkat booting" - -msgid "Soft power off" -msgstr "Soft power off" - -msgid "Soft reboot" -msgstr "Soft reboot" - -msgid "Submit" -msgstr "Submit (menyampaikan)" - -#, python-format -msgid "Successfully deleted node \"%s\"" -msgid_plural "Successfully deleted nodes \"%s\"" -msgstr[0] "Berhasil hapus node \"%s\"" - -#, python-format -msgid "Successfully deleted port \"%s\"" -msgid_plural "Successfully deleted ports \"%s\"" -msgstr[0] "Berhasil hapus port \"%s\"" - -#, python-format -msgid "Successfully deleted portgroup \"%s\"" -msgid_plural "Successfully deleted portgroups \"%s\"" -msgstr[0] "Successfully deleted portgroup \"%s\"" - -#, python-format -msgid "Successfully updated node %s" -msgstr "Berhasil perbarui node %s" - -#, python-format -msgid "Successfully updated port %s" -msgstr "Port berhasil diperbarui %s" - -msgid "Target Power State" -msgstr "Target Power State" - -msgid "Target Provision State" -msgstr "Target Provision State (keadaab penyediaan sasaran)" - -msgid "" -"This field is disabled because a port cannot have any connectivity " -"attributes (pxe_enabled, local_link_connection, portgroup_id) updated unless " -"its associated node is in an enroll, inspecting, mangeable state; or in " -"maintenance mode." -msgstr "" -"Field ini dinonaktifkan karena port tidak dapat memiliki atribut " -"konektivitas (pxe_enabled, local_link_connection, portgroup_id) yang " -"diperbarui kecuali node yang terkait adalah dalam keadaan enroll, " -"inspecting, mangeable; atau dalam modus pemeliharaan." - -msgid "UUID" -msgstr "UUID" - -msgid "Unable to create node update patch." -msgstr "Tidak dapat membuat node update patch." - -#, python-format -msgid "Unable to create node: %s" -msgstr "Tidak dapat membuat node: %s" - -msgid "Unable to create port update patch." -msgstr "Tidak dapat membuat port update patch." - -#, python-format -msgid "Unable to create port: %s" -msgstr "Tidak dapat membuat port: %s" - -#, python-format -msgid "Unable to create portgroup: %s" -msgstr "Tidak dapat membuat portgroup: %s" - -#, python-format -msgid "Unable to delete node \"%s\"" -msgid_plural "Unable to delete nodes \"%s\"" -msgstr[0] "Tidak dapat menghapus node \"%s\"" - -#, python-format -msgid "Unable to delete node %s: %s" -msgstr "Tidak dapat menghapus node %s: %s" - -#, python-format -msgid "Unable to delete port \"%s\"" -msgid_plural "Unable to delete ports \"%s\"" -msgstr[0] "Unable to delete port \"%s\"" - -#, python-format -msgid "Unable to delete port: %s" -msgstr "Tidak dapat menghapus port: %s" - -#, python-format -msgid "Unable to delete portgroup \"%s\"" -msgid_plural "Unable to delete portgroups \"%s\"" -msgstr[0] "Unable to delete portgroup \"%s\"" - -#, python-format -msgid "Unable to delete portgroup: %s" -msgstr "Tidak dapat menghapus portgroup: %s" - -#, python-format -msgid "Unable to get console for node %s: %s" -msgstr "Tidak dapat mendapatkan konsol untuk node %s: %s" - -#, python-format -msgid "Unable to power off the node: %s" -msgstr "Tidak dapat daya mati pada node: %s" - -#, python-format -msgid "Unable to retrieve Ironic drivers: %s" -msgstr "Tidak dapat mengambil Ironic driver: %s" - -#, python-format -msgid "Unable to retrieve Ironic node portgroups: %s" -msgstr "Unable to retrieve Ironic node portgroups: %s" - -#, python-format -msgid "Unable to retrieve Ironic nodes. %s" -msgstr "Tidak dapat mengambil node Ironis. %s" - -#, python-format -msgid "Unable to retrieve boot device for Ironic node. %s" -msgstr "Tidak dapat mengambil perangkat boot untuk simpul Ironis. %s" - -#, python-format -msgid "Unable to retrieve driver properties: %s" -msgstr "Tidak dapat mengambil driver property: %s" - -#, python-format -msgid "Unable to retrieve portgroup ports: %s" -msgstr "Tidak dapat mengambil port portgroup: %s" - -#, python-format -msgid "Unable to retrieve supported boot devices for Ironic node. %s" -msgstr "" -"Tidak dapat mengambil perangkat booting yang didukung untuk node Ironic. %s" - -#, python-format -msgid "Unable to retrieve the Ironic node ports: %s" -msgstr "Tidak dapat mengambil Ironic node port: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node: %s" -msgstr "Tidak dapat mengambil Ironic node: %s" - -#, python-format -msgid "Unable to set Ironic node %s maintenance state: %s" -msgstr "Unable to set Ironic node %s maintenance state: %s" - -#, python-format -msgid "Unable to set boot device: %s" -msgstr "Tidak dapat mengatur perangkat booting: %s" - -#, python-format -msgid "Unable to set console mode: %s" -msgstr "Tidak dapat mengatur mode konsol: %s" - -#, python-format -msgid "Unable to set node provision state: %s" -msgstr "Tidak dapat mengatur keadaan provision node: %s" - -#, python-format -msgid "Unable to update node %s: %s" -msgstr "Tidak dapat memperbarui node %s: %s" - -#, python-format -msgid "Unable to update port %s: %s" -msgstr "Tidak dapat memperbarui port %s: %s" - -#, python-format -msgid "Unable to validate node %s: %s" -msgstr "Tidak dapat memvalidasi node %s: %s" - -msgid "Unable to validate the JSON input" -msgstr "Tidak dapat memvalidasi input JSON" - -msgid "Update Node" -msgstr "Update Node" - -msgid "Update Port" -msgstr "Update Port" - -msgid "Updated At" -msgstr "Diperbarui pada" - -msgid "Valid" -msgstr "Valid (sah)" - -msgid "Virtualization Software" -msgstr "Virtualization Software (software virtualisasi)" - -msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" -msgstr "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" diff --git a/ironic_ui/locale/ja/LC_MESSAGES/django.po b/ironic_ui/locale/ja/LC_MESSAGES/django.po deleted file mode 100644 index fca46c87..00000000 --- a/ironic_ui/locale/ja/LC_MESSAGES/django.po +++ /dev/null @@ -1,18 +0,0 @@ -# Andreas Jaeger , 2016. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 1.1.1.dev9\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2016-05-05 12:53+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-04-01 04:04+0000\n" -"Last-Translator: Shu Muto \n" -"Language-Team: Japanese\n" -"Language: ja\n" -"X-Generator: Zanata 3.7.3\n" -"Plural-Forms: nplurals=1; plural=0\n" - -msgid "Ironic Bare Metal Provisioning" -msgstr "Ironic ベアメタルプロビジョニング" diff --git a/ironic_ui/locale/ja/LC_MESSAGES/djangojs.po b/ironic_ui/locale/ja/LC_MESSAGES/djangojs.po deleted file mode 100644 index dbcf8213..00000000 --- a/ironic_ui/locale/ja/LC_MESSAGES/djangojs.po +++ /dev/null @@ -1,419 +0,0 @@ -# Akihiro Motoki , 2016. #zanata -# Andreas Jaeger , 2016. #zanata -# Shu Muto , 2016. #zanata -# Yoshiki Eguchi , 2016. #zanata -# Akihiro Motoki , 2017. #zanata -# Shu Muto , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.3.1.dev70\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-07-18 16:08+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-06-30 03:16+0000\n" -"Last-Translator: Akihiro Motoki \n" -"Language-Team: Japanese\n" -"Language: ja\n" -"X-Generator: Zanata 3.9.6\n" -"Plural-Forms: nplurals=1; plural=0\n" - -msgid " ([^\" ]+|\"[^\"]+\") \\(Default\\)" -msgstr " ([^\" ]+|\"[^\"]+\") \\(デフォルト\\)" - -msgid "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" -msgstr "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" - -#, python-format -msgid "A request has been made to change the provisioning state of node %s" -msgstr "ノード %s のプロビジョニング状態を変更するための要求が作成されました。" - -msgid "Abort cleaning" -msgstr "クリーニングの中止" - -msgid "Actions" -msgstr "アクション" - -#, python-format -msgid "" -"Are you sure you want to delete node \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete nodes \"%s\"? This action cannot be undone." -msgstr[0] "ノード「%s」 を削除してよろしいですか?この操作は取り消せません。" - -#, python-format -msgid "" -"Are you sure you want to delete port \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete ports \"%s\"? This action cannot be undone." -msgstr[0] "ポート「%s」 を削除してよろしいですか?この操作は取り消せません。" - -msgid "Cancel" -msgstr "取り消し" - -msgid "Chassis ID" -msgstr "シャーシ ID" - -msgid "Choose an Image" -msgstr "イメージの選択" - -msgid "Clean Step" -msgstr "クリーニングステップ" - -msgid "Configuration" -msgstr "設定" - -msgid "Console Enabled" -msgstr "コンソールの有効化" - -msgid "Create Port" -msgstr "ポートの作成" - -msgid "Created At" -msgstr "作成時刻" - -msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" -msgstr "デフォルトを ([^\"\\. ]+|\"[^\"]+\") にします" - -msgid "Delete Node" -msgid_plural "Delete Nodes" -msgstr[0] "ノードの削除" - -msgid "Delete Port" -msgid_plural "Delete Ports" -msgstr[0] "ポートの削除" - -msgid "Deploy Kernel" -msgstr "カーネルのデプロイ" - -msgid "Deploy Ramdisk" -msgstr "RAM ディスクのデプロイ" - -msgid "Driver" -msgstr "ドライバー" - -msgid "Driver Details" -msgstr "ドライバー詳細" - -msgid "Driver Info" -msgstr "ドライバー情報" - -msgid "Driver Validation" -msgstr "ドライバーの検証" - -msgid "Edit Node" -msgstr "ノードの編集" - -msgid "Edit Port" -msgstr "ポートの編集" - -msgid "Enroll Node" -msgstr "ノードの登録" - -msgid "Extra" -msgstr "拡張" - -msgid "Extras" -msgstr "拡張" - -msgid "General" -msgstr "一般" - -msgid "Image Source" -msgstr "イメージソース" - -msgid "Inspect" -msgstr "検査" - -msgid "Inspection Finished At" -msgstr "検査終了時刻" - -msgid "Inspection Started At" -msgstr "検査開始時刻" - -msgid "Instance ID" -msgstr "インスタンス ID" - -msgid "Instance Info" -msgstr "インスタンス情報" - -msgid "Instance Name" -msgstr "インスタンス名" - -msgid "Interface" -msgstr "インターフェース" - -msgid "Kernel" -msgstr "カーネル" - -msgid "Last Error" -msgstr "最後のエラー" - -msgid "Local link connection" -msgstr "ローカルリンク接続" - -msgid "MAC Address" -msgstr "MAC アドレス" - -msgid "MAC address" -msgstr "MAC アドレス" - -msgid "MAC address for this port. Required." -msgstr "このポートの MAC アドレス。必須。" - -msgid "MAC address or OpenFlow datapath ID" -msgstr "MAC アドレスあるいは OpenFlow データパス ID" - -msgid "Maintenance" -msgstr "メンテナンス" - -msgid "Maintenance Reason" -msgstr "メンテナンスの理由" - -msgid "Move to" -msgstr "移動先" - -msgid "Name" -msgstr "名前" - -msgid "No Instance" -msgstr "インスタンスなし" - -msgid "No network ports have been defined" -msgstr "ネットワークポートが定義されていません" - -msgid "Node" -msgstr "ノード" - -msgid "Node Driver" -msgstr "ノードドライバー" - -msgid "Node ID" -msgstr "ノード ID" - -msgid "Node Info" -msgstr "ノード情報" - -msgid "Node Name" -msgstr "ノード名" - -msgid "One of this, (.*) must be specified\\." -msgstr "(.*) の1つを指定する必要があります。" - -msgid "Overview" -msgstr "概要" - -msgid "Port successfully created" -msgstr "ポートが正常に作成されました" - -msgid "Ports" -msgstr "ポート" - -msgid "Power State" -msgstr "電源状態" - -msgid "Power off" -msgstr "電源オフ" - -msgid "Power on" -msgstr "電源オン" - -msgid "Properties" -msgstr "プロパティー" - -msgid "Property Name" -msgstr "プロパティ名" - -msgid "" -"Provide a reason for why you are putting the selected node(s) into " -"maintenance mode (optional)" -msgstr "" -"選択したノードをメンテナンスモードにする理由を設定してください(オプション)" - -msgid "Provision State" -msgstr "プロビジョニング状態" - -msgid "Provisioning State" -msgstr "プロビジョニング状態" - -msgid "Provisioning Status" -msgstr "プロビジョニング状態" - -msgid "Put Node(s) Into Maintenance Mode" -msgstr "ノードをメンテナンスモードにします" - -msgid "Ramdisk" -msgstr "RAM ディスク" - -msgid "Reason" -msgstr "理由" - -msgid "Refresh" -msgstr "最新表示" - -msgid "Refresh page to see updated power status" -msgstr "電源状態を更新するにはページをリフレッシュしてください" - -msgid "Required" -msgstr "必須" - -msgid "Reservation" -msgstr "予約" - -msgid "Root GB" -msgstr "ルートディスク (GB)" - -msgid "SSH Address" -msgstr "SSH アドレス" - -msgid "SSH Key Contents" -msgstr "SSH 鍵の内容" - -msgid "SSH Key File" -msgstr "SSH 鍵ファイル" - -msgid "SSH Password" -msgstr "SSH パスワード" - -msgid "SSH Port" -msgstr "SSH ポート" - -msgid "SSH Username" -msgstr "SSH ユーザー名" - -msgid "SSH terminal port" -msgstr "SSH ターミナルのポート" - -msgid "Select a Driver" -msgstr "ドライバーを選択してください" - -msgid "Submit" -msgstr "送信" - -#, python-format -msgid "Successfully deleted node \"%s\"" -msgid_plural "Successfully deleted nodes \"%s\"" -msgstr[0] "ノード「%s」を正常に削除しました" - -#, python-format -msgid "Successfully deleted port \"%s\"" -msgid_plural "Successfully deleted ports \"%s\"" -msgstr[0] "ポート \"%s\" を正常に削除しました" - -#, python-format -msgid "Successfully updated node %s" -msgstr "ノード %s の更新に成功しました" - -#, python-format -msgid "Successfully updated port %s" -msgstr "ポート %s の更新に成功しました" - -msgid "Target Power State" -msgstr "ターゲット電源状態" - -msgid "Target Provision State" -msgstr "ターゲットプロビジョニング状態" - -msgid "" -"This field is disabled because a port cannot have any connectivity " -"attributes (pxe_enabled, local_link_connection, portgroup_id) updated unless " -"its associated node is in an enroll, inspecting, mangeable state; or in " -"maintenance mode." -msgstr "" -"ポートが接続のための属性 (PXE 有効、ローカルリンク接続、ポートグループ ID) の" -"いずれも持たないため、関連付けられたノードが登録、検査、管理可能な状態に更新" -"されるまで、あるいはメンテナンスモードになるまで、この項目は無効です。" - -msgid "UUID" -msgstr "UUID" - -msgid "Unable to create node update patch." -msgstr "ノードを更新するパッチを作成できません。" - -#, python-format -msgid "Unable to create node: %s" -msgstr "ノードを作成できません: %s" - -msgid "Unable to create port update patch." -msgstr "ポートを更新するパッチを作成できません。" - -#, python-format -msgid "Unable to create port: %s" -msgstr "ポートを作成できません: %s" - -#, python-format -msgid "Unable to delete node \"%s\"" -msgid_plural "Unable to delete nodes \"%s\"" -msgstr[0] "ノード 「%s」を削除できません" - -#, python-format -msgid "Unable to delete node %s: %s" -msgstr "ノード %s を削除できません: %s" - -#, fuzzy, python-format -msgid "Unable to delete port \"%s\"" -msgid_plural "Unable to delete ports \"%s\"" -msgstr[0] "ポート \"%s\" を削除できません" - -#, python-format -msgid "Unable to delete port: %s" -msgstr "ポートを削除できません: %s" - -#, python-format -msgid "Unable to power off the node: %s" -msgstr "ノードを電源OFFにできません: %s" - -#, python-format -msgid "Unable to retrieve Ironic drivers: %s" -msgstr "Ironic ドライバーの一覧を取得できません: %s" - -#, python-format -msgid "Unable to retrieve Ironic nodes. %s" -msgstr "Ironic ノードの一覧を取得できません: %s" - -#, python-format -msgid "Unable to retrieve driver properties: %s" -msgstr "ドライバープロパティーの一覧を取得できません: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node ports: %s" -msgstr "Ironic ノードのポート一覧を取得できません: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node: %s" -msgstr "Ironic ノードを取得できません: %s" - -#, python-format -msgid "Unable to set node provision state: %s" -msgstr "ノードのプロビジョニング状態を設定できませんでした: %s" - -#, python-format -msgid "Unable to update node %s: %s" -msgstr "ノード %s を更新できません: %s" - -#, python-format -msgid "Unable to update port %s: %s" -msgstr "ポート %s の更新に失敗しました: %s" - -#, python-format -msgid "Unable to validate node %s: %s" -msgstr "ノード %s を検証できません: %s" - -msgid "Update Node" -msgstr "ノードの更新" - -msgid "Update Port" -msgstr "ポートの更新" - -msgid "Updated At" -msgstr "最終更新" - -msgid "Valid" -msgstr "有効" - -msgid "Virtualization Software" -msgstr "仮想化ソフトウェア" - -msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" -msgstr "(?:value )?のデフォルトは ([^\"\\. ]+|\"[^\"]+\") です" diff --git a/ironic_ui/locale/ko_KR/LC_MESSAGES/django.po b/ironic_ui/locale/ko_KR/LC_MESSAGES/django.po deleted file mode 100644 index 1e4192a2..00000000 --- a/ironic_ui/locale/ko_KR/LC_MESSAGES/django.po +++ /dev/null @@ -1,18 +0,0 @@ -# Eunseop Shin , 2016. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.1.1.dev9\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2016-10-07 16:48+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-10-20 05:14+0000\n" -"Last-Translator: Eunseop Shin \n" -"Language-Team: Korean (South Korea)\n" -"Language: ko-KR\n" -"X-Generator: Zanata 3.7.3\n" -"Plural-Forms: nplurals=1; plural=0\n" - -msgid "Ironic Bare Metal Provisioning" -msgstr "Ironic 베어메탈 프로비저닝" diff --git a/ironic_ui/locale/ko_KR/LC_MESSAGES/djangojs.po b/ironic_ui/locale/ko_KR/LC_MESSAGES/djangojs.po deleted file mode 100644 index 156e5bda..00000000 --- a/ironic_ui/locale/ko_KR/LC_MESSAGES/djangojs.po +++ /dev/null @@ -1,395 +0,0 @@ -# Andreas Jaeger , 2016. #zanata -# Eunseop Shin , 2016. #zanata -# HYUNGBAI PARK , 2016. #zanata -# Ian Y. Choi , 2016. #zanata -# Sungjin Kang , 2016. #zanata -# ChungYoung Cho , 2017. #zanata -# Ian Y. Choi , 2017. #zanata -# Sungjin Kang , 2017. #zanata -# Wonil Choi , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.3.1.dev70\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-07-18 16:08+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-06-30 03:16+0000\n" -"Last-Translator: Sungjin Kang \n" -"Language-Team: Korean (South Korea)\n" -"Language: ko-KR\n" -"X-Generator: Zanata 3.9.6\n" -"Plural-Forms: nplurals=1; plural=0\n" - -msgid " ([^\" ]+|\"[^\"]+\") \\(Default\\)" -msgstr " ([^\" ]+|\"[^\"]+\") \\(Default\\)" - -msgid "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" -msgstr "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" - -#, python-format -msgid "A request has been made to change the provisioning state of node %s" -msgstr "노드 %s의 프로비저닝 상태 변경을 위한 요청이 처리되었습니다." - -msgid "Abort cleaning" -msgstr "클린업 취소" - -msgid "Actions" -msgstr "작업" - -#, python-format -msgid "" -"Are you sure you want to delete node \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete nodes \"%s\"? This action cannot be undone." -msgstr[0] "노드 \"%s\" 를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다." - -#, python-format -msgid "" -"Are you sure you want to delete port \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete ports \"%s\"? This action cannot be undone." -msgstr[0] "포트 \"%s\" 를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다." - -msgid "Cancel" -msgstr "취소하기" - -msgid "Chassis ID" -msgstr "Chassis ID" - -msgid "Choose an Image" -msgstr "이미지 선택하기" - -msgid "Clean Step" -msgstr "클린업 단계" - -msgid "Configuration" -msgstr "구성" - -msgid "Console Enabled" -msgstr "콘솔 활성화" - -msgid "Create Port" -msgstr "포트 생성하기" - -msgid "Created At" -msgstr "생성 시점" - -msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" -msgstr "Defaults to ([^\"\\. ]+|\"[^\"]+\")" - -msgid "Delete Node" -msgid_plural "Delete Nodes" -msgstr[0] "노드 삭제" - -msgid "Delete Port" -msgid_plural "Delete Ports" -msgstr[0] "포트 삭제" - -msgid "Deploy Kernel" -msgstr "커널 배치하기" - -msgid "Deploy Ramdisk" -msgstr "램디스크 배치하기" - -msgid "Driver" -msgstr "드라이버" - -msgid "Driver Details" -msgstr "드라이버 세부사항" - -msgid "Driver Info" -msgstr "드라이버 정보" - -msgid "Driver Validation" -msgstr "드라이버 확인" - -msgid "Edit Node" -msgstr "노드 편집" - -msgid "Enroll Node" -msgstr "노드 등록하기" - -msgid "Extra" -msgstr "Extra" - -msgid "Extra Property Name" -msgstr "Extra 속성 명칭" - -msgid "Extras" -msgstr "Extra" - -msgid "General" -msgstr "일반" - -msgid "Image Source" -msgstr "이미지 소스" - -msgid "Inspect" -msgstr "검사" - -msgid "Inspection Finished At" -msgstr "점검 종료시점" - -msgid "Inspection Started At" -msgstr "점검 시작 시점" - -msgid "Instance ID" -msgstr "인스턴스 ID" - -msgid "Instance Info" -msgstr "인스턴스 정보" - -msgid "Instance Name" -msgstr "인스턴스 이름" - -msgid "Interface" -msgstr "인터페이스" - -msgid "Kernel" -msgstr "커널" - -msgid "Last Error" -msgstr "마지막 에러" - -msgid "MAC Address" -msgstr "MAC 주소" - -msgid "MAC address" -msgstr "MAC 주소" - -msgid "MAC address for this port. Required." -msgstr "이 포트를 위한 MAC 주소. 필수항목." - -msgid "Maintenance" -msgstr "유지보수" - -msgid "Maintenance Reason" -msgstr "유지보수 사유" - -msgid "Move to" -msgstr "이동" - -msgid "Name" -msgstr "이름" - -msgid "No Instance" -msgstr "인스턴스 없음" - -msgid "No network ports have been defined" -msgstr "네트워크 포트가 정의되지 않았습니다" - -msgid "Node" -msgstr "노드" - -msgid "Node Driver" -msgstr "노드 드라이버" - -msgid "Node ID" -msgstr "노드 ID" - -msgid "Node Info" -msgstr "노드 정보" - -msgid "Node Name" -msgstr "노드 명칭" - -msgid "One of this, (.*) must be specified\\." -msgstr "One of this, (.*) must be specified\\." - -msgid "Overview" -msgstr "개요" - -msgid "Port successfully created" -msgstr "포트가 성공적으로 생성됐습니다" - -msgid "Ports" -msgstr "포트들" - -msgid "Power State" -msgstr "전원 상태" - -msgid "Power off" -msgstr "전원 꺼짐" - -msgid "Power on" -msgstr "전원 켜짐" - -msgid "Properties" -msgstr "속성" - -msgid "Property Name" -msgstr "속성 명칭" - -msgid "" -"Provide a reason for why you are putting the selected node(s) into " -"maintenance mode (optional)" -msgstr "선택된 노드를 유지보수 모드로 넣는지 사유를 제공합니다 (선택항목)" - -msgid "Provision State" -msgstr "권한설정 상태" - -msgid "Provisioning State" -msgstr "권한설정 상태" - -msgid "Provisioning Status" -msgstr "권한설정 상태" - -msgid "Put Node(s) Into Maintenance Mode" -msgstr "노드(들)을 유지보수 모드로 넣기" - -msgid "Ramdisk" -msgstr "램디스크" - -msgid "Reason" -msgstr "원인" - -msgid "Refresh" -msgstr "갱신" - -msgid "Refresh page to see updated power status" -msgstr "갱신된 전원 상태를 보기 위해 페이지 새로 고치기" - -msgid "Required" -msgstr "필수항목" - -msgid "Reservation" -msgstr "예약" - -msgid "Root GB" -msgstr "루트 GB" - -msgid "SSH Address" -msgstr "SSH주소" - -msgid "SSH Key Contents" -msgstr "SSH 키콘텐츠" - -msgid "SSH Key File" -msgstr "SSH Key File" - -msgid "SSH Password" -msgstr "SSH 패스워드" - -msgid "SSH Port" -msgstr "SSH 포트" - -msgid "SSH Username" -msgstr "SSH Username" - -msgid "SSH terminal port" -msgstr "SSH 터미널포트" - -msgid "Select a Driver" -msgstr "드라이버 선택하기" - -msgid "Submit" -msgstr "제출" - -#, python-format -msgid "Successfully deleted node \"%s\"" -msgid_plural "Successfully deleted nodes \"%s\"" -msgstr[0] "노드 \"%s\" 를 성공적으로 삭제했습니다" - -#, python-format -msgid "Successfully deleted port \"%s\"" -msgid_plural "Successfully deleted ports \"%s\"" -msgstr[0] "포트 \"%s\" 를 성공적으로 삭제했습니다" - -#, python-format -msgid "Successfully updated node %s" -msgstr "노드 %s가 성공적으로 업데이트 됨." - -msgid "Target Power State" -msgstr "대상 전원 상태" - -msgid "Target Provision State" -msgstr "대상 권한설정 상태" - -msgid "UUID" -msgstr "UUID" - -msgid "Unable to create node update patch." -msgstr "노드 업데이트 패치를 만들수 없습니다." - -#, python-format -msgid "Unable to create node: %s" -msgstr "노드를 생성할 수 없습니다: %s" - -#, python-format -msgid "Unable to create port: %s" -msgstr "포트를 생성할 수 없습니다: %s" - -#, python-format -msgid "Unable to delete node \"%s\"" -msgid_plural "Unable to delete nodes \"%s\"" -msgstr[0] "노드 \"%s\" 를 삭제할 수 없습니다" - -#, python-format -msgid "Unable to delete node %s: %s" -msgstr "노드 %s를 삭제할 수 없습니다: %s" - -#, fuzzy, python-format -msgid "Unable to delete port \"%s\"" -msgid_plural "Unable to delete ports \"%s\"" -msgstr[0] "포트를 삭제할 수 없습니다: %s" - -#, python-format -msgid "Unable to delete port: %s" -msgstr "포트를 삭제할 수 없습니다: %s" - -#, python-format -msgid "Unable to power off the node: %s" -msgstr "노드의 전원을 끌 수 없습니다: %s" - -#, python-format -msgid "Unable to retrieve Ironic drivers: %s" -msgstr "Ironic 드라이버를 되찾을 수 없습니다: %s" - -#, python-format -msgid "Unable to retrieve Ironic nodes. %s" -msgstr "Ironic 노드를 가져올 수 없습니다: %s " - -#, python-format -msgid "Unable to retrieve boot device for Ironic node. %s" -msgstr "Ironic 노드를 위한 부트 장치를 가져올 수 없습니다: %s" - -#, python-format -msgid "Unable to retrieve driver properties: %s" -msgstr "드라이버 속성을 되찾을 수 없습니다 : %s" - -#, python-format -msgid "Unable to retrieve the Ironic node ports: %s" -msgstr "Ironic 노드 포트를 가져올 수 없습니다: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node: %s" -msgstr "해당 Ironic 노드를 가져올 수 없습니다: %s " - -#, python-format -msgid "Unable to set node provision state: %s" -msgstr "노드 공급 상태를 설정 할 수 없습니다: %s" - -#, python-format -msgid "Unable to update node %s: %s" -msgstr "노드 %s를 업데이트 할 수 없습니다: %s" - -#, python-format -msgid "Unable to validate node %s: %s" -msgstr "노드 %s를 검증할수 없습니다: %s" - -msgid "Update Node" -msgstr "노드 업데이트" - -msgid "Updated At" -msgstr "업데이트 시점" - -msgid "Valid" -msgstr "유효" - -msgid "Virtualization Software" -msgstr "가상화 소프트트웨어" - -msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" -msgstr "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" diff --git a/ironic_ui/locale/ru/LC_MESSAGES/django.po b/ironic_ui/locale/ru/LC_MESSAGES/django.po deleted file mode 100644 index 495efe9a..00000000 --- a/ironic_ui/locale/ru/LC_MESSAGES/django.po +++ /dev/null @@ -1,19 +0,0 @@ -# Alexander , 2016. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.1.1.dev9\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2016-10-07 16:48+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-10-19 02:08+0000\n" -"Last-Translator: Alexander \n" -"Language-Team: Russian\n" -"Language: ru\n" -"X-Generator: Zanata 3.7.3\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" - -msgid "Ironic Bare Metal Provisioning" -msgstr "Разворачивание на пустой системе - Ironic" diff --git a/ironic_ui/locale/ru/LC_MESSAGES/djangojs.po b/ironic_ui/locale/ru/LC_MESSAGES/djangojs.po deleted file mode 100644 index 5d36a507..00000000 --- a/ironic_ui/locale/ru/LC_MESSAGES/djangojs.po +++ /dev/null @@ -1,354 +0,0 @@ -# Ilya Alekseyev , 2015. #zanata -# OpenStack Infra , 2015. #zanata -# Alexander , 2016. #zanata -# Andreas Jaeger , 2016. #zanata -# Fedor Tarasenko , 2016. #zanata -# Alexander , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.3.1.dev70\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-07-18 16:08+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-02-03 10:49+0000\n" -"Last-Translator: Alexander \n" -"Language-Team: Russian\n" -"Language: ru\n" -"X-Generator: Zanata 3.9.6\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" - -msgid " ([^\" ]+|\"[^\"]+\") \\(Default\\)" -msgstr " ([^\" ]+|\"[^\"]+\") \\(По умолчанию\\)" - -msgid "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" -msgstr "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" - -#, python-format -msgid "A request has been made to change the provisioning state of node %s" -msgstr "Запрос был создал для изменения состояния подготовки узла %s" - -msgid "Actions" -msgstr "Действия" - -#, fuzzy, python-format -msgid "" -"Are you sure you want to delete node \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete nodes \"%s\"? This action cannot be undone." -msgstr[0] "" -"Вы действительно хотите удалить узел \"%s\"? Это действие не может быть " -"отменено." -msgstr[1] "" -msgstr[2] "" - -#, fuzzy, python-format -msgid "" -"Are you sure you want to delete port \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete ports \"%s\"? This action cannot be undone." -msgstr[0] "" -"Вы действительно хотите удалить порт \"%s\"? Это действие не может быть " -"отменено." -msgstr[1] "" -msgstr[2] "" - -msgid "Cancel" -msgstr "Отмена" - -msgid "Chassis ID" -msgstr "ID устройства" - -msgid "Choose an Image" -msgstr "Выберите образ" - -msgid "Configuration" -msgstr "Конфигурация" - -msgid "Console Enabled" -msgstr "Консоль активирована" - -msgid "Create Port" -msgstr "Создать порт" - -msgid "Created At" -msgstr "Создано" - -msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" -msgstr "По умолчанию ([^\"\\. ]+|\"[^\"]+\")" - -#, fuzzy -msgid "Delete Node" -msgid_plural "Delete Nodes" -msgstr[0] "Удалить узел" -msgstr[1] "" -msgstr[2] "" - -#, fuzzy -msgid "Delete Port" -msgid_plural "Delete Ports" -msgstr[0] "Удалить порт" -msgstr[1] "" -msgstr[2] "" - -msgid "Deploy Kernel" -msgstr "Развернуть ядро" - -msgid "Deploy Ramdisk" -msgstr "Развернуть Ramdisk" - -msgid "Driver" -msgstr "Драйвер" - -msgid "Driver Details" -msgstr "Детали дравера" - -msgid "Driver Info" -msgstr "Информация о драйвере" - -msgid "Edit Node" -msgstr "Редактировать узел" - -msgid "Enroll Node" -msgstr "Зарегистрировать узел" - -msgid "Extra" -msgstr "Дополнительно" - -msgid "Extras" -msgstr "Дополнительно" - -msgid "General" -msgstr "Общее" - -msgid "Inspection Finished At" -msgstr "Проверка закончилась в" - -msgid "Inspection Started At" -msgstr "Проверка началась в" - -msgid "Instance ID" -msgstr "ID инстанса" - -msgid "Instance Info" -msgstr "Информация об инстансе" - -msgid "Instance Name" -msgstr "Имя инстанса" - -msgid "Kernel" -msgstr "Ядро" - -msgid "Last Error" -msgstr "Последняя ошибка" - -msgid "MAC Address" -msgstr "MAC адрес" - -msgid "MAC address" -msgstr "MAC адрес" - -msgid "MAC address for this port. Required." -msgstr "MAC адрес для этого порта. Обязательный параметр." - -msgid "Maintenance" -msgstr "Техническое обслуживание" - -msgid "Maintenance Reason" -msgstr "Причина технического обслуживания" - -msgid "Name" -msgstr "Имя" - -msgid "No Instance" -msgstr "Нет инстанса" - -msgid "No network ports have been defined" -msgstr "Сетевые порты не были заданы" - -msgid "Node" -msgstr "Узел" - -msgid "Node Driver" -msgstr "Драйвер узла" - -msgid "Node ID" -msgstr "ID узла" - -msgid "Node Info" -msgstr "Информация об узле" - -msgid "Node Name" -msgstr "Имя узла" - -msgid "One of this, (.*) must be specified\\." -msgstr "Один из этих, (.*) должен быть определен\\." - -msgid "Overview" -msgstr "Обзор" - -msgid "Port successfully created" -msgstr "Порт создан успешно" - -msgid "Ports" -msgstr "Порты" - -msgid "Power State" -msgstr "Состояние" - -msgid "Power off" -msgstr "Выключить" - -msgid "Power on" -msgstr "Включить" - -msgid "Properties" -msgstr "Свойства" - -msgid "Property Name" -msgstr "Имя свойства" - -msgid "" -"Provide a reason for why you are putting the selected node(s) into " -"maintenance mode (optional)" -msgstr "" -"Опишите причину по которой вы переводите выбранные узлы в режим обслуживания " -"(необязательно)" - -msgid "Provision State" -msgstr "Статус развертывания" - -msgid "Provisioning State" -msgstr "Статус развертывания" - -msgid "Provisioning Status" -msgstr "Статус развертывания" - -msgid "Put Node(s) Into Maintenance Mode" -msgstr "Перевести узел (узлы) в режим обслуживания" - -msgid "Ramdisk" -msgstr "Ramdisk" - -msgid "Refresh" -msgstr "Обновить" - -msgid "Refresh page to see updated power status" -msgstr "Обновите страницу чтобы увидеть обновленный статус питания" - -msgid "Required" -msgstr "Обязательно" - -msgid "Reservation" -msgstr "Резервация" - -msgid "SSH Port" -msgstr "Порт SSH" - -msgid "SSH Username" -msgstr "Имя пользователя SSH" - -msgid "Select a Driver" -msgstr "Выберите драйвер" - -msgid "Submit" -msgstr "Отправить" - -#, fuzzy, python-format -msgid "Successfully deleted node \"%s\"" -msgid_plural "Successfully deleted nodes \"%s\"" -msgstr[0] "Узел \"%s\" успешно удален" -msgstr[1] "" -msgstr[2] "" - -#, fuzzy, python-format -msgid "Successfully deleted port \"%s\"" -msgid_plural "Successfully deleted ports \"%s\"" -msgstr[0] "Порт \"%s\" успешно удален" -msgstr[1] "" -msgstr[2] "" - -#, python-format -msgid "Successfully updated node %s" -msgstr "Узел %s успешно обновлен" - -msgid "Target Power State" -msgstr "Целевое состояние" - -msgid "Target Provision State" -msgstr "Целевой статус развертывания" - -msgid "UUID" -msgstr "UUID" - -msgid "Unable to create node update patch." -msgstr "Невозможно создать патч обновления узла." - -#, python-format -msgid "Unable to create node: %s" -msgstr "Невозможно создать узел: %s" - -#, python-format -msgid "Unable to create port: %s" -msgstr "Невозможно создать порт: %s" - -#, fuzzy, python-format -msgid "Unable to delete node \"%s\"" -msgid_plural "Unable to delete nodes \"%s\"" -msgstr[0] "Невозможно удалить узел \"%s\"" -msgstr[1] "" -msgstr[2] "" - -#, python-format -msgid "Unable to delete node %s: %s" -msgstr "Невозможно удалить узел %s: %s" - -#, fuzzy, python-format -msgid "Unable to delete port \"%s\"" -msgid_plural "Unable to delete ports \"%s\"" -msgstr[0] "Невозможно удалить порт \"%s\"" -msgstr[1] "" -msgstr[2] "" - -#, python-format -msgid "Unable to delete port: %s" -msgstr "Невозможно удалить порт: %s" - -#, python-format -msgid "Unable to power off the node: %s" -msgstr "Невозможно выключить узел: %s" - -#, python-format -msgid "Unable to retrieve Ironic drivers: %s" -msgstr "Невозможно получить драйвера Ironic: %s" - -#, python-format -msgid "Unable to retrieve driver properties: %s" -msgstr "Невозможно получить свойства драйвера: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node ports: %s" -msgstr "Невозможно получить порты узла Ironic: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node: %s" -msgstr "Невозможно получить узел Ironic: %s" - -#, python-format -msgid "Unable to set node provision state: %s" -msgstr "Не удается установить состояние подготовки узла: %s" - -#, python-format -msgid "Unable to update node %s: %s" -msgstr "Невозможно обновить узел %s: %s" - -msgid "Update Node" -msgstr "Обновить узел" - -msgid "Updated At" -msgstr "Обновлено" - -msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" -msgstr "По умолчанию (?:value )? - ([^\"\\. ]+|\"[^\"]+\")" diff --git a/ironic_ui/locale/tr_TR/LC_MESSAGES/django.po b/ironic_ui/locale/tr_TR/LC_MESSAGES/django.po deleted file mode 100644 index bdddccfe..00000000 --- a/ironic_ui/locale/tr_TR/LC_MESSAGES/django.po +++ /dev/null @@ -1,18 +0,0 @@ -# işbaran akçayır , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.3.1.dev39\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-06-20 18:25+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-05-22 12:06+0000\n" -"Last-Translator: işbaran akçayır \n" -"Language-Team: Turkish (Turkey)\n" -"Language: tr-TR\n" -"X-Generator: Zanata 3.9.6\n" -"Plural-Forms: nplurals=2; plural=(n>1)\n" - -msgid "Ironic Bare Metal Provisioning" -msgstr "Ironic Saf Metal Hazırlığı" diff --git a/ironic_ui/locale/tr_TR/LC_MESSAGES/djangojs.po b/ironic_ui/locale/tr_TR/LC_MESSAGES/djangojs.po deleted file mode 100644 index dc277f01..00000000 --- a/ironic_ui/locale/tr_TR/LC_MESSAGES/djangojs.po +++ /dev/null @@ -1,516 +0,0 @@ -# Mücahit Büyükyılmaz , 2015. #zanata -# OpenStack Infra , 2015. #zanata -# Andreas Jaeger , 2016. #zanata -# Mücahit Büyükyılmaz , 2016. #zanata -# Andreas Jaeger , 2017. #zanata -# işbaran akçayır , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.3.1.dev53\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-06-30 15:16+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-06-30 03:16+0000\n" -"Last-Translator: işbaran akçayır \n" -"Language-Team: Turkish (Turkey)\n" -"Language: tr-TR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Zanata 3.9.6\n" -"X-POOTLE-MTIME: 1495454551.000000\n" - -msgid " ([^\" ]+|\"[^\"]+\") \\(Default\\)" -msgstr " ([^\" ]+|\"[^\"]+\") \\(Öntanımlı\\)" - -msgid "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" -msgstr "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" - -msgid "Abort cleaning" -msgstr "Temizliği iptal et" - -msgid "Actions" -msgstr "İşlemler" - -msgid "Add Extra" -msgstr "Ek Ekle" - -msgid "Add Instance Property" -msgstr "Sunucu Özelliği Ekle" - -msgid "Add Property" -msgstr "Özellik Ekle" - -#, python-format -msgid "" -"Are you sure you want to delete node \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete nodes \"%s\"? This action cannot be undone." -msgstr[0] "" -"\"%s\" düğümünü silmek istediğinize emin misiniz? Bu eylem geri alınamaz." -msgstr[1] "" -"\"%s\" düğümlerini silmek istediğinize emin misiniz? Bu eylem geri alınamaz." - -#, python-format -msgid "" -"Are you sure you want to delete port \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete ports \"%s\"? This action cannot be undone." -msgstr[0] "" -"\"%s\" bağlantı noktasını silmek istediğinize emin misiniz? Bu eylem geri " -"alınamaz." -msgstr[1] "" -"\"%s\" bağlantı noktalarını silmek istediğinize emin misiniz? Bu eylem geri " -"alınamaz." - -msgid "Boot Device" -msgstr "Önyükleme Aygıtı" - -msgid "Cancel" -msgstr "İptal" - -msgid "Chassis ID" -msgstr "Şasi ID'si" - -msgid "Choose an Image" -msgstr "Bir İmaj seçin" - -msgid "Clean" -msgstr "Temizle" - -msgid "Clean Node" -msgstr "Düğümü Temizle" - -msgid "Clean Step" -msgstr "Temizlik Adımı" - -msgid "Clean node" -msgstr "Düğümü sil" - -msgid "Clean steps should be an non-empty array" -msgstr "Temizlik adımları boş-olmayan bir dizi olmalı" - -msgid "Click link to view console" -msgstr "Konsolu görüntülemek için bağlantıya tıklayın" - -msgid "Configuration" -msgstr "Yapılandırma" - -msgid "Console Enabled" -msgstr "Konsol Etkin" - -msgid "Console Info." -msgstr "Konsol Bilgisi." - -msgid "Create Port" -msgstr "Bağlantı Noktası Oluştur" - -msgid "Created At" -msgstr "Oluşturulduğu zaman" - -msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" -msgstr "Öntanımlı olarak ([^\"\\. ]+|\"[^\"]+\")" - -msgid "Delete Node" -msgid_plural "Delete Nodes" -msgstr[0] "Düğümü Sil" -msgstr[1] "Düğümleri Sil" - -msgid "Delete Port" -msgid_plural "Delete Ports" -msgstr[0] "Bağlantı Noktasını Sil" -msgstr[1] "Bağlantı Noktalarını Sil" - -msgid "Deploy Kernel" -msgstr "Çekirdeği Yerleştir" - -msgid "Deploy Ramdisk" -msgstr "Ramdisk'i Yerleştir" - -msgid "Device" -msgstr "Aygıt" - -msgid "Driver" -msgstr "Sürücü" - -msgid "Driver Details" -msgstr "Sürücü Ayrıntıları" - -msgid "Driver Info" -msgstr "Sürücü Bilgisi" - -msgid "Driver Validation" -msgstr "Sürücü Onaylama" - -msgid "" -"Each cleaning step must be an object that contains \"interface\" and \"step" -"\" properties" -msgstr "" -"Her temizlik adımı \"arayüz\" ve \"adım\" özelliklerinden birini içeren " -"nesne olmalı" - -msgid "Edit Node" -msgstr "Düğümü Düzenle" - -msgid "Edit Port" -msgstr "Bağlantı Noktasını Düzenle" - -msgid "Enroll Node" -msgstr "Düğümü Kaydet" - -msgid "Extra" -msgstr "Ek" - -msgid "Extra Property Name" -msgstr "Ek Özellik İsmi" - -msgid "Extras" -msgstr "Ekler" - -msgid "General" -msgstr "Genel" - -msgid "Image Source" -msgstr "İmaj Kaynağı" - -msgid "Inspect" -msgstr "İncele" - -msgid "Inspection Finished At" -msgstr "İnceleme Şu Anda Bitti" - -msgid "Inspection Started At" -msgstr "İnceleme Şu Anda Başlatıldı" - -msgid "Instance ID" -msgstr "Instance ID" - -msgid "Instance Info" -msgstr "Sunucu Bilgisi" - -msgid "Instance Name" -msgstr "Instance Adı" - -msgid "Instance Property Name" -msgstr "Sunucu Özellik İsmi" - -msgid "Interface" -msgstr "Arayüz" - -msgid "Kernel" -msgstr "Çekirdek" - -msgid "Last Error" -msgstr "Son Hata" - -msgid "Local link connection" -msgstr "Yerel bağlantı" - -msgid "MAC Address" -msgstr "MAC Adresi" - -msgid "MAC address" -msgstr "MAC adresi" - -msgid "MAC address or OpenFlow datapath ID" -msgstr "MAC adresi veya OpenFlow veriyolu ID'si" - -msgid "Maintenance" -msgstr "Bakım" - -msgid "Maintenance Reason" -msgstr "Bakım Sebebi" - -msgid "Move to" -msgstr "Taşı" - -msgid "Name" -msgstr "İsim" - -msgid "Network Interface" -msgstr "Ağ Arayüzü" - -msgid "No Instance" -msgstr "Sunucu Yok" - -msgid "No network ports have been defined" -msgstr "Hiçbir ağ bağlantı noktası tanımlanmamış" - -msgid "No reason given." -msgstr "Sebep verilmemiş." - -msgid "Node" -msgstr "Düğüm" - -msgid "Node Driver" -msgstr "Düğüm Sürücüsü" - -msgid "Node ID" -msgstr "Düğüm Kimliği" - -msgid "Node Info" -msgstr "Düğüm Bilgisi" - -msgid "Node Name" -msgstr "Düğüm İsmi" - -msgid "One of this, (.*) must be specified\\." -msgstr "Bunlardan biri, (.*) belirtilmeli\\." - -msgid "Overview" -msgstr "Önizleme" - -msgid "PXE enabled" -msgstr "PXE etkin" - -msgid "Persistent" -msgstr "Kalıcı" - -msgid "Port successfully created" -msgstr "Bağlantı noktası başarıyla oluşturuldu" - -msgid "Ports" -msgstr "Portlar" - -msgid "Power State" -msgstr "Güç Durumu" - -msgid "Power off" -msgstr "Güç kapa" - -msgid "Power on" -msgstr "Güç aç" - -msgid "Properties" -msgstr "Özellikler" - -msgid "Property Name" -msgstr "Özellik İsmi" - -msgid "Provide a list of cleaning steps in JSON format" -msgstr "JSON biçiminde temizlik adımları listesi sağlayın" - -msgid "" -"Provide a reason for why you are putting the selected node(s) into " -"maintenance mode (optional)" -msgstr "" -"Seçili düğüm(ler)i neden bakım kipine soktuğunuzla ilgili bir sebep verin " -"(isteğe bağlı)" - -msgid "Provision State" -msgstr "Hazırlık Durumu" - -msgid "Provisioning State" -msgstr "Hazırlık Durumu" - -msgid "Provisioning Status" -msgstr "Hazırlık Durumu" - -msgid "Put Node(s) Into Maintenance Mode" -msgstr "Düğüm(ler)i Bakım Kipine Sok" - -msgid "Ramdisk" -msgstr "Ramdisk" - -msgid "Reason" -msgstr "Sebep" - -msgid "Reboot" -msgstr "Yeniden başlat" - -msgid "Refresh" -msgstr "Tazele" - -msgid "Refresh page to see updated console details" -msgstr "Güncel konsol ayrıntılarını görmek için sayfayı tazeleyin" - -msgid "Refresh page to see updated power status" -msgstr "Güncel güç durumunu görmek için sayfayı tazeleyin" - -msgid "Required" -msgstr "Gerekli" - -msgid "Reservation" -msgstr "Yer ayırmalar" - -msgid "Root GB" -msgstr "Kök GB" - -msgid "SSH Address" -msgstr "SSH Adresi" - -msgid "SSH Key Contents" -msgstr "SSH Anahtar İçeriği" - -msgid "SSH Key File" -msgstr "SSH Anahtar Dosyası" - -msgid "SSH Password" -msgstr "SSH Parolası" - -msgid "SSH Port" -msgstr "SSH Bağlantı Noktası" - -msgid "SSH Username" -msgstr "SSH Kullanıcı adı" - -msgid "SSH terminal port" -msgstr "SSH terminal bağlantı noktası" - -msgid "Select a Driver" -msgstr "Bir Sürücü Seçin" - -msgid "Soft power off" -msgstr "Yumuşak güç kapa" - -msgid "Soft reboot" -msgstr "Yumuşak yeniden başlatma" - -msgid "Submit" -msgstr "Gönder" - -#, python-format -msgid "Successfully deleted node \"%s\"" -msgid_plural "Successfully deleted nodes \"%s\"" -msgstr[0] "\"%s\" düğümü başarıyla silindi." -msgstr[1] "\"%s\" düğümleri başarıyla silindi." - -#, python-format -msgid "Successfully deleted port \"%s\"" -msgid_plural "Successfully deleted ports \"%s\"" -msgstr[0] "\"%s\" bağlantı noktası başarıyla silindi" -msgstr[1] "\"%s\" bağlantı noktaları başarıyla silindi" - -#, python-format -msgid "Successfully updated node %s" -msgstr "Düğüm %s başarıyla güncellendi" - -#, python-format -msgid "Successfully updated port %s" -msgstr "Bağlantı noktası %s başarıyla güncellendi" - -msgid "Target Power State" -msgstr "Hedef Güç Durumu" - -msgid "Target Provision State" -msgstr "Hedef Hazırlık Durumu" - -msgid "" -"This field is disabled because a port cannot have any connectivity " -"attributes (pxe_enabled, local_link_connection, portgroup_id) updated unless " -"its associated node is in an enroll, inspecting, mangeable state; or in " -"maintenance mode." -msgstr "" -"Bu alan kapalı çünkü bağlantı noktası bağlanırlık öznitelikleri " -"(pxe_enabled, local_link_connection, portgroup_id), ilişkili düğümü kayıt, " -"inceleme, yönetilir durum; veya bakım kipinde olmadan güncellenemez." - -msgid "UUID" -msgstr "UUID" - -msgid "Unable to create node update patch." -msgstr "Düğüm güncelleme yaması oluşturulamadı." - -#, python-format -msgid "Unable to create node: %s" -msgstr "Düğüm oluşturulamıyor: %s" - -msgid "Unable to create port update patch." -msgstr "Bağlantı noktası güncelleme yaması oluşturulamadı." - -#, python-format -msgid "Unable to create port: %s" -msgstr "Bağlantı noktası oluşturulamıyor: %s" - -#, python-format -msgid "Unable to delete node \"%s\"" -msgid_plural "Unable to delete nodes \"%s\"" -msgstr[0] "\"%s\" düğümü silinemedi" -msgstr[1] "\"%s\" düğümleri silinemedi" - -#, python-format -msgid "Unable to delete node %s: %s" -msgstr "Düğüm %s silinemiyor: %s" - -#, fuzzy, python-format -msgid "Unable to delete port \"%s\"" -msgid_plural "Unable to delete ports \"%s\"" -msgstr[0] "\"%s\" bağlantı noktası silinemiyor" -msgstr[1] "\"%s\" bağlantı noktaları silinemiyor" - -#, python-format -msgid "Unable to delete port: %s" -msgstr "Bağlantı noktası silinemiyor: %s" - -#, python-format -msgid "Unable to get console for node %s: %s" -msgstr "Düğüm %s için konsol alınamadı: %s" - -#, python-format -msgid "Unable to power off the node: %s" -msgstr "Düğümün gücü kesilemiyor: %s" - -#, python-format -msgid "Unable to retrieve Ironic drivers: %s" -msgstr "Ironic sürücüleri alınamıyor: %s" - -#, python-format -msgid "Unable to retrieve Ironic nodes. %s" -msgstr "Ironic düğümler alınamadı. %s" - -#, python-format -msgid "Unable to retrieve boot device for Ironic node. %s" -msgstr "Ironic düğüm için ön yükleme aygıtı alınamadı. %s" - -#, python-format -msgid "Unable to retrieve driver properties: %s" -msgstr "Sürücü özellikleri alınamıyor: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node ports: %s" -msgstr "Ironic düğümü bağlantı noktaları alınamadı: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node: %s" -msgstr "Ironic düğümü alınamadı: %s" - -#, python-format -msgid "Unable to set console mode: %s" -msgstr "Konsol kipi ayarlanamıyor: %s" - -#, python-format -msgid "Unable to set node provision state: %s" -msgstr "Düğüm hazırlık durumu ayarlanamıyor: %s" - -#, python-format -msgid "Unable to update node %s: %s" -msgstr "Düğüm %s güncellenemedi: %s" - -#, python-format -msgid "Unable to update port %s: %s" -msgstr "Bağlantı noktası %s güncellenemiyor: %s" - -#, python-format -msgid "Unable to validate node %s: %s" -msgstr "Düğüm %s onaylanamıyor: %s" - -msgid "Unable to validate the JSON input" -msgstr "JSON girdisi onaylanamadı" - -msgid "Update Node" -msgstr "Düğümü Güncelle" - -msgid "Update Port" -msgstr "Bağlantı Noktasını Güncelle" - -msgid "Updated At" -msgstr "Güncelleme saati" - -msgid "Valid" -msgstr "Geçerli" - -msgid "Virtualization Software" -msgstr "Sanallaştırma Yazılımı" - -msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" -msgstr "öntanımlı (?:değer )? ([^\"\\. ]+|\"[^\"]+\")" diff --git a/ironic_ui/locale/zh_CN/LC_MESSAGES/django.po b/ironic_ui/locale/zh_CN/LC_MESSAGES/django.po deleted file mode 100644 index 549114ab..00000000 --- a/ironic_ui/locale/zh_CN/LC_MESSAGES/django.po +++ /dev/null @@ -1,18 +0,0 @@ -# Shengjing Zhu , 2016. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 1.1.1.dev33\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2016-08-15 22:06+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-08-09 08:49+0000\n" -"Last-Translator: Shengjing Zhu \n" -"Language-Team: Chinese (China)\n" -"Language: zh-CN\n" -"X-Generator: Zanata 3.7.3\n" -"Plural-Forms: nplurals=1; plural=0\n" - -msgid "Ironic Bare Metal Provisioning" -msgstr "裸金属 Ironic 配置向导" diff --git a/ironic_ui/locale/zh_CN/LC_MESSAGES/djangojs.po b/ironic_ui/locale/zh_CN/LC_MESSAGES/djangojs.po deleted file mode 100644 index 1ea46096..00000000 --- a/ironic_ui/locale/zh_CN/LC_MESSAGES/djangojs.po +++ /dev/null @@ -1,607 +0,0 @@ -# OpenStack Infra , 2015. #zanata -# zhangjingwen , 2015. #zanata -# Andreas Jaeger , 2016. #zanata -# Shengjing Zhu , 2016. #zanata -# sunanchen , 2016. #zanata -# vuuv , 2016. #zanata -# Bin , 2017. #zanata -# Gaoxiao Zhu , 2017. #zanata -# liujunpeng , 2017. #zanata -msgid "" -msgstr "" -"Project-Id-Version: ironic-ui 2.3.1.dev73\n" -"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" -"POT-Creation-Date: 2017-07-21 15:07+0000\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-07-22 03:50+0000\n" -"Last-Translator: Bin \n" -"Language-Team: Chinese (China)\n" -"Language: zh-CN\n" -"X-Generator: Zanata 3.9.6\n" -"Plural-Forms: nplurals=1; plural=0\n" - -msgid " ([^\" ]+|\"[^\"]+\") \\(Default\\)" -msgstr "([^\" ]+|\"[^\"]+\") \\(Default标签\\)" - -msgid "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" -msgstr "(?:[Oo]ne of )(?!this)((?:(?:\"[^\"]+\"|[^,\\. ]+)(?:, |\\.))+)" - -#, python-format -msgid "A request has been made to change the provisioning state of node %s" -msgstr "更改节点 \"%s\" 服务状态的请求已提交。" - -msgid "Abort cleaning" -msgstr "放弃清理" - -msgid "Actions" -msgstr "动作" - -msgid "Add Extra" -msgstr "增加额外信息" - -msgid "Add Instance Property" -msgstr "添加实例属性" - -msgid "Add Property" -msgstr "添加属性" - -#, python-format -msgid "" -"Are you sure you want to delete node \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete nodes \"%s\"? This action cannot be undone." -msgstr[0] "你确认要删除节点\"%s\"嘛?此操作将不可恢复" - -#, python-format -msgid "" -"Are you sure you want to delete port \"%s\"? This action cannot be undone." -msgid_plural "" -"Are you sure you want to delete ports \"%s\"? This action cannot be undone." -msgstr[0] "你确认要删除端口\"%s\"吗?本操作无法恢复。" - -#, python-format -msgid "" -"Are you sure you want to delete portgroup \"%s\"? This action cannot be " -"undone." -msgid_plural "" -"Are you sure you want to delete portgroups \"%s\"? This action cannot be " -"undone." -msgstr[0] "你确定要删除端口组\"%s\"?本操作无法恢复。" - -msgid "Attributes" -msgstr "属性" - -msgid "Boot Device" -msgstr "引导设备" - -msgid "Cancel" -msgstr "取消" - -msgid "Chassis ID" -msgstr "机架ID" - -msgid "Choose an Image" -msgstr "选择一个镜像" - -msgid "Clean" -msgstr "清理" - -msgid "Clean Node" -msgstr "清理节点" - -msgid "Clean Step" -msgstr "清理步骤" - -msgid "Clean node" -msgstr "清理节点" - -msgid "Clean steps should be an non-empty array" -msgstr "清理步骤应该是一个非空数组" - -msgid "Click link to view console" -msgstr "点击链接查看控制台" - -msgid "Configuration" -msgstr "配置" - -msgid "Console Enabled" -msgstr "允许控制台" - -msgid "Console Info." -msgstr "控制台信息。" - -msgid "Create Port" -msgstr "创建端口" - -msgid "Created At" -msgstr "创建于" - -msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" -msgstr "默认为 ([^\"\\. ]+|\"[^\"]+\")" - -msgid "Delete Node" -msgid_plural "Delete Nodes" -msgstr[0] "删除节点" - -msgid "Delete Port" -msgid_plural "Delete Ports" -msgstr[0] "删除端口" - -msgid "Delete Portgroup" -msgid_plural "Delete Portgroups" -msgstr[0] "删除端口组" - -msgid "Deploy Kernel" -msgstr "部署内核" - -msgid "Deploy Ramdisk" -msgstr "部署虚拟内存盘" - -msgid "Device" -msgstr "设备" - -msgid "Driver" -msgstr "驱动" - -msgid "Driver Details" -msgstr "驱动详情" - -msgid "Driver Info" -msgstr "驱动信息" - -msgid "Driver Validation" -msgstr "驱动验证" - -msgid "" -"Each cleaning step must be an object that contains \"interface\" and \"step" -"\" properties" -msgstr "每一步清理步骤必需是一个包含“接口”和“步骤”属性的对象" - -msgid "Edit Node" -msgstr "编辑节点" - -msgid "Edit Port" -msgstr "编辑端口" - -msgid "Enroll Node" -msgstr "注册节点" - -msgid "Extra" -msgstr "额外信息" - -msgid "Extra Property Name" -msgstr "额外属性名称" - -msgid "Extras" -msgstr "额外信息" - -msgid "General" -msgstr "概要信息" - -msgid "Image Source" -msgstr "镜像源" - -msgid "Indicates whether this port should be used when PXE booting this node" -msgstr "当PXE应到该节点时,表明此端口是否应该被使用" - -msgid "Inspect" -msgstr "检查" - -msgid "Inspection Finished At" -msgstr "检查结束于" - -msgid "Inspection Started At" -msgstr "检查开始于" - -msgid "Instance ID" -msgstr "云主机ID" - -msgid "Instance Info" -msgstr "实例信息" - -msgid "Instance Name" -msgstr "实例名字" - -msgid "Instance Property Name" -msgstr "实例属性名称" - -msgid "Interface" -msgstr "接口" - -msgid "Kernel" -msgstr "内核" - -msgid "Last Error" -msgstr "最近的一次错误" - -msgid "Local Link Connection" -msgstr "本地链接连接" - -msgid "Local link connection" -msgstr "本地链接连接" - -msgid "MAC Address" -msgstr "MAC地址" - -msgid "MAC address" -msgstr "MAC地址" - -msgid "MAC address for this port. Required." -msgstr "需要该端口的MAC地址" - -msgid "MAC address or OpenFlow datapath ID" -msgstr "MAC地址或OpenFlow datapath ID" - -msgid "Maintenance" -msgstr "维护" - -msgid "Maintenance Reason" -msgstr "维护原因" - -msgid "Move to" -msgstr "移动" - -msgid "Name" -msgstr "名称" - -msgid "Network Interface" -msgstr "网络接口" - -msgid "No Instance" -msgstr "没有实例" - -msgid "No network ports have been defined" -msgstr "未定义网络端口" - -msgid "No portgroups have been defined" -msgstr "未定义端口组" - -msgid "No reason given." -msgstr "没有原因提供。" - -msgid "Node" -msgstr "节点" - -#, python-format -msgid "Node %s is already in target maintenance state." -msgstr "节点\"%s\"已经处于目标维护状态" - -msgid "Node Driver" -msgstr "节点驱动" - -msgid "Node ID" -msgstr "节点ID" - -msgid "Node Info" -msgstr "节点信息" - -msgid "Node Name" -msgstr "节点名称" - -msgid "One of this, (.*) must be specified\\." -msgstr "必须指定其中的一个 (.*)" - -msgid "Overview" -msgstr "概览" - -msgid "PXE Enabled" -msgstr "PXE启用" - -msgid "PXE enabled" -msgstr "PXE启用" - -msgid "Persistent" -msgstr "持久" - -msgid "Port successfully created" -msgstr "端口创建成功" - -msgid "Portgroup" -msgstr "端口组" - -msgid "Portgroup successfully created" -msgstr "端口组创建成功" - -msgid "Portgroup that this port belongs to" -msgstr "此端口所属的端口组" - -msgid "Portgroups" -msgstr "端口组" - -msgid "Ports" -msgstr "端口" - -msgid "Power State" -msgstr "电源状态" - -msgid "Power off" -msgstr "关闭电源" - -msgid "Power on" -msgstr "打开电源" - -msgid "Properties" -msgstr "属性" - -msgid "Property Name" -msgstr "属性名称" - -msgid "Provide a list of cleaning steps in JSON format" -msgstr "提供一个JSON格式的清理步骤列表" - -msgid "" -"Provide a reason for why you are putting the selected node(s) into " -"maintenance mode (optional)" -msgstr "提供一个你为什么选择将节点置于维护模式的原因(可选)" - -msgid "Provision State" -msgstr "配置状态" - -msgid "Provisioning State" -msgstr "配置状态" - -msgid "Provisioning Status" -msgstr "配置状态" - -msgid "Put Node(s) Into Maintenance Mode" -msgstr "将节点置于维护模式" - -msgid "Ramdisk" -msgstr "内存盘" - -msgid "Reason" -msgstr "原因" - -msgid "Reboot" -msgstr "重启" - -msgid "Refresh" -msgstr "刷新" - -msgid "Refresh page to see set boot device" -msgstr "刷新页面来设置引导设备" - -msgid "Refresh page to see updated console details" -msgstr "刷新页面查看更新的控制台细节" - -msgid "Refresh page to see updated power status" -msgstr "刷新页面来确认电源状态是否更新" - -msgid "Required" -msgstr "必需的" - -msgid "Reservation" -msgstr "预留" - -msgid "Resource Class" -msgstr "资源类" - -msgid "Root GB" -msgstr "根磁盘 GB" - -msgid "SSH Address" -msgstr "SSH 地址" - -msgid "SSH Key Contents" -msgstr "SSH 密钥内容" - -msgid "SSH Key File" -msgstr "SSH 密钥文件" - -msgid "SSH Password" -msgstr "SSH 密码" - -msgid "SSH Port" -msgstr "SSH端口" - -msgid "SSH Username" -msgstr "SSH用户名" - -msgid "SSH terminal port" -msgstr "SSH 终端端口" - -msgid "Select a Driver" -msgstr "选择一种驱动" - -msgid "Select a boot device" -msgstr "选择一个引导设备" - -msgid "Select a portgroup" -msgstr "选择一个端口组" - -msgid "Set Boot Device" -msgstr "设置引导设备" - -msgid "Set boot device" -msgstr "设置引导设备" - -msgid "Soft power off" -msgstr "软关机" - -msgid "Soft reboot" -msgstr "软重启" - -msgid "Submit" -msgstr "提交" - -#, python-format -msgid "Successfully deleted node \"%s\"" -msgid_plural "Successfully deleted nodes \"%s\"" -msgstr[0] "成功删除节点\"%s\"" - -#, python-format -msgid "Successfully deleted port \"%s\"" -msgid_plural "Successfully deleted ports \"%s\"" -msgstr[0] "删除端口\"%s\"成功" - -#, python-format -msgid "Successfully deleted portgroup \"%s\"" -msgid_plural "Successfully deleted portgroups \"%s\"" -msgstr[0] "成功删除端口组\"%s\"" - -#, python-format -msgid "Successfully updated node %s" -msgstr "成功更新节点:“%s”。" - -#, python-format -msgid "Successfully updated port %s" -msgstr "成功更新端口:“%s”。" - -msgid "Target Power State" -msgstr "标记电源状态" - -msgid "Target Provision State" -msgstr "标记配置状态" - -msgid "" -"This field is disabled because a port cannot have any connectivity " -"attributes (pxe_enabled, local_link_connection, portgroup_id) updated unless " -"its associated node is in an enroll, inspecting, mangeable state; or in " -"maintenance mode." -msgstr "" -"这些域被禁用了,因为端口不能有任何已更新的连接属性((pxe_enabled, " -"local_link_connection, portgroup_id),除非节点处于注册,检查,可管理状态或处" -"于维护模式。" - -msgid "UUID" -msgstr "UUID" - -msgid "Unable to create node update patch." -msgstr "不能创建节点更新补丁" - -#, python-format -msgid "Unable to create node: %s" -msgstr "无法创建Ironic节点: %s" - -msgid "Unable to create port update patch." -msgstr "不能创建端口更新补丁" - -#, python-format -msgid "Unable to create port: %s" -msgstr "无法创建端口: %s" - -#, python-format -msgid "Unable to create portgroup: %s" -msgstr "无法创建端口组: %s" - -#, python-format -msgid "Unable to delete node \"%s\"" -msgid_plural "Unable to delete nodes \"%s\"" -msgstr[0] "无法删除节点\"%s\"" - -#, python-format -msgid "Unable to delete node %s: %s" -msgstr "无法删除Ironic节点\"%s\": %s" - -#, python-format -msgid "Unable to delete port \"%s\"" -msgid_plural "Unable to delete ports \"%s\"" -msgstr[0] "无法删除端口\"%s\"" - -#, python-format -msgid "Unable to delete port: %s" -msgstr "无法删除端口: %s" - -#, python-format -msgid "Unable to delete portgroup \"%s\"" -msgid_plural "Unable to delete portgroups \"%s\"" -msgstr[0] "无法删除端口组\"%s\"" - -#, python-format -msgid "Unable to delete portgroup: %s" -msgstr "无法删除端口组:%s" - -#, python-format -msgid "Unable to get console for node %s: %s" -msgstr "无法获取节点的控制台 %s: %s" - -#, python-format -msgid "Unable to power off the node: %s" -msgstr "无法关闭节点电源: %s" - -#, python-format -msgid "Unable to retrieve Ironic drivers: %s" -msgstr "无法获取Ironic驱动: %s" - -#, python-format -msgid "Unable to retrieve Ironic node portgroups: %s" -msgstr "无法获取Ironic节点端口组信息: %s" - -#, python-format -msgid "Unable to retrieve Ironic nodes. %s" -msgstr "无法获取Ironic节点信息: %s" - -#, python-format -msgid "Unable to retrieve boot device for Ironic node. %s" -msgstr "无法获取Ironic节点引导设备信息。%s" - -#, python-format -msgid "Unable to retrieve driver properties: %s" -msgstr "无法获取驱动属性: %s" - -#, python-format -msgid "Unable to retrieve portgroup ports: %s" -msgstr "无法获取端口组端口:%s" - -#, python-format -msgid "Unable to retrieve supported boot devices for Ironic node. %s" -msgstr "无法获取Ironic节点支持的引导设备信息。%s" - -#, python-format -msgid "Unable to retrieve the Ironic node ports: %s" -msgstr "无法获取Ironic节点端口信息: %s" - -#, python-format -msgid "Unable to retrieve the Ironic node: %s" -msgstr "无法获取Ironic节点信息: %s" - -#, python-format -msgid "Unable to set Ironic node %s maintenance state: %s" -msgstr "不能设置Ironic节点%s维护状态:%s" - -#, python-format -msgid "Unable to set boot device: %s" -msgstr "不能设置引导设备:%s" - -#, python-format -msgid "Unable to set console mode: %s" -msgstr "不能设置控制台模式:%s" - -#, python-format -msgid "Unable to set node provision state: %s" -msgstr "不能设置节点提供状态:%s" - -#, python-format -msgid "Unable to update node %s: %s" -msgstr "无法更新节点%s:%s" - -#, python-format -msgid "Unable to update port %s: %s" -msgstr "无法更新端口%s:%s" - -#, python-format -msgid "Unable to validate node %s: %s" -msgstr "无法验证节点%s:%s" - -msgid "Unable to validate the JSON input" -msgstr "无法验证JSON输入" - -msgid "Update Node" -msgstr "更新节点" - -msgid "Update Port" -msgstr "更新端口" - -msgid "Updated At" -msgstr "已更新于" - -msgid "Valid" -msgstr "有效" - -msgid "Virtualization Software" -msgstr "虚拟化软件" - -msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" -msgstr "默认值 (?:value )?是 ([^\"\\. ]+|\"[^\"]+\")" diff --git a/ironic_ui/static/dashboard/admin/ironic/auto-focus.directive.js b/ironic_ui/static/dashboard/admin/ironic/auto-focus.directive.js deleted file mode 100644 index 6ff13c38..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/auto-focus.directive.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2016 Cray Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function () { - 'use strict'; - - angular - .module('horizon.dashboard.admin.ironic') - .directive('autoFocus', AutoFocus); - - AutoFocus.$inject = ['$timeout']; - - function AutoFocus($timeout) { - return { - restrict: 'AC', - link: function(scope, elem) { - $timeout(function() { - elem[0].focus(); - }, 1000); - } - }; - } -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.js b/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.js deleted file mode 100644 index 81239c7b..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.js +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright 2016 Cray Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function() { - 'use strict'; - - /** - * Controller used to support operations on an Ironic node - */ - angular - .module('horizon.dashboard.admin.ironic') - .controller('BaseNodeController', BaseNodeController); - - BaseNodeController.$inject = [ - '$uibModalInstance', - 'horizon.app.core.openstack-service-api.ironic', - 'horizon.app.core.openstack-service-api.glance', - 'horizon.dashboard.admin.ironic.base-node.service', - 'horizon.dashboard.admin.ironic.validHostNamePattern', - '$log', - 'ctrl' - ]; - - function BaseNodeController($uibModalInstance, - ironic, - glance, - baseNodeService, - validHostNamePattern, - $log, - ctrl) { - ctrl.validHostNameRegex = new RegExp(validHostNamePattern); - ctrl.drivers = null; - ctrl.images = null; - ctrl.loadingDriverProperties = false; - // Object containing the set of properties associated with the currently - // selected driver - ctrl.driverProperties = null; - ctrl.driverPropertyGroups = null; - - ctrl.modalTitle = gettext("Node"); - ctrl.submitButtonTitle = gettext("Submit"); - - /* A property-collection is a set of properties that will be displayed - in the node view as a minimal browser ui that supports: - - adding new properties - - displaying the list of properties in the set - - changing the value of properties - - Collection attributes: - id: Name of the property inside the node object that is used - to store the collection. - formId: Name of the controller variable that can be used to - access the property collection form. - prompt: Label used to prompt the user to add properties - to the collection. - placeholder: Label used to guide the user in providiing property - values. - */ - ctrl.propertyCollections = [ - {id: "properties", - formId: "properties_form", - title: gettext("Properties"), - addPrompt: gettext("Add Property"), - placeholder: gettext("Property Name") - }, - {id: "extra", - formId: "extra_form", - title: gettext("Extras"), - addPrompt: gettext("Add Extra"), - placeholder: gettext("Extra Property Name") - }]; - - // Node object suitable for Ironic api - ctrl.node = { - name: null, - driver: null, - driver_info: {}, - network_interface: null, - resource_class: null - }; - - angular.forEach(ctrl.propertyCollections, function(collection) { - ctrl.node[collection.id] = {}; - }); - - /** - * @description Get the list of currently active Ironic drivers - * - * @return {void} - */ - ctrl._loadDrivers = function() { - return ironic.getDrivers().then(function(drivers) { - ctrl.drivers = drivers; - }); - }; - - /** - * @description Get the list of images from Glance - * - * @return {void} - */ - ctrl._getImages = function() { - glance.getImages().then(function(response) { - ctrl.images = response.data.items; - }); - }; - - /** - * @description Order driver properties in the form using the following - * rules: - * - * (1) Properties that are related to one another should occupy adjacent - * locations in the form - * - * (2) Required properties with no dependents should be located at the - * top of the form - * - * @return {[]} Ordered list of groups of strongly related properties - */ - ctrl._sortDriverProperties = function() { - // Build dependency graph between driver properties - var graph = new baseNodeService.Graph(); - - // Create vertices - angular.forEach(ctrl.driverProperties, function(property, name) { - graph.addVertex(name, property); - }); - - /* eslint-disable no-unused-vars */ - - // Create edges - angular.forEach(ctrl.driverProperties, - function(property, name) { - var activators = property.getActivators(); - if (activators) { - angular.forEach(activators, - function(unused, activatorName) { - graph.addEdge(name, activatorName); - }); - } - }); - - /* eslint-enable no-unused-vars */ - - // Perform depth-first-search to find groups of related properties - var groups = []; - graph.dfs( - function(vertexList, components) { - // Sort properties so that those with the largest number of - // immediate dependents are the top of the list - vertexList.sort(function(vertex1, vertex2) { - return vertex2.adjacents.length - vertex1.adjacents.length; - }); - - // Build component and add to list - var component = new Array(vertexList.length); - angular.forEach(vertexList, function(vertex, index) { - component[index] = vertex.data; - }); - components.push(component); - }, - groups); - groups.sort(baseNodeService.compareDriverPropertyGroups); - - $log.debug("Found the following property groups: " + - baseNodeService.driverPropertyGroupsToString(groups)); - return groups; - }; - - /** - * @description Get the properties associated with a specified driver - * - * @param {string} driverName - Name of driver - * @return {void} - */ - ctrl.loadDriverProperties = function(driverName) { - ctrl.node.driver = driverName; - ctrl.node.driver_info = {}; - - ctrl.loadingDriverProperties = true; - ctrl.driverProperties = null; - ctrl.driverPropertyGroups = null; - - return ironic.getDriverProperties(driverName).then(function(properties) { - ctrl.driverProperties = {}; - angular.forEach(properties, function(desc, property) { - ctrl.driverProperties[property] = - new baseNodeService.DriverProperty(property, - desc, - ctrl.driverProperties); - }); - ctrl.driverPropertyGroups = ctrl._sortDriverProperties(); - ctrl.loadingDriverProperties = false; - }); - }; - - /** - * @description Cancel the current node operation - * - * @return {void} - */ - ctrl.cancel = function() { - $uibModalInstance.dismiss('cancel'); - }; - - /** - * @description Check whether the specified property already exists - * - * @param {string} collectionId - Collection ID - * @param {string} propertyName - Name of the property - * @return {boolean} True if the property already exists, - * otherwise false - */ - ctrl.collectionCheckPropertyUnique = function(collectionId, propertyName) { - return !(propertyName in ctrl.node[collectionId]); - }; - - /** - * @description Delete a node metadata property - * - * @param {string} collectionId - Collection ID - * @param {string} propertyName - Name of the property - * @return {void} - */ - ctrl.collectionDeleteProperty = function(collectionId, propertyName) { - delete ctrl.node[collectionId][propertyName]; - }; - - /** - * @description Check whether a specified driver property is - * currently active - * - * @param {string} property - Driver property - * @return {boolean} True if the property is active, false otherwise - */ - ctrl.isDriverPropertyActive = function(property) { - return property.isActive(); - }; - - /** - * @description Check whether the node definition form is ready for - * to be submitted. - * - * @return {boolean} True if the form is ready to be submitted, - * otherwise false. - */ - ctrl.readyToSubmit = function() { - var ready = true; - if (ctrl.driverProperties) { - for (var i = 0; i < ctrl.propertyCollections.length; i++) { - var collection = ctrl.propertyCollections[i]; - if (ctrl[collection.formId].$invalid) { - ready = false; - break; - } - } - } else { - ready = false; - } - return ready; - }; - } -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.spec.js b/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.spec.js deleted file mode 100644 index 0635cbee..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.spec.js +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2017 Cray Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function () { - 'use strict'; - - describe('horizon.dashboard.admin.ironic.base-node', function () { - var ironicBackendMockService, uibModalInstance; - var ctrl = {}; - - beforeEach(module('horizon.dashboard.admin.ironic')); - - beforeEach(module('horizon.framework.util')); - - beforeEach(module(function($provide) { - $provide.value('$uibModal', {}); - })); - - beforeEach(module(function($provide) { - uibModalInstance = { - dismiss: jasmine.createSpy() - }; - $provide.value('$uibModalInstance', uibModalInstance); - })); - - beforeEach(module(function($provide) { - $provide.value('horizon.framework.widgets.toast.service', - {}); - })); - - beforeEach(module('horizon.app.core.openstack-service-api')); - - beforeEach(inject(function($injector) { - ironicBackendMockService = - $injector.get('horizon.dashboard.admin.ironic.backend-mock.service'); - ironicBackendMockService.init(); - - var controller = $injector.get('$controller'); - controller('BaseNodeController', {ctrl: ctrl}); - })); - - afterEach(function() { - ironicBackendMockService.postTest(); - }); - - it('controller should be defined', function () { - expect(ctrl).toBeDefined(); - }); - - it('base construction', function () { - expect(ctrl.drivers).toBeNull(); - expect(ctrl.images).toBeNull(); - expect(ctrl.loadingDriverProperties).toBe(false); - expect(ctrl.driverProperties).toBeNull(); - expect(ctrl.driverPropertyGroups).toBeNull(); - expect(ctrl.modalTitle).toBeDefined(); - angular.forEach(ctrl.propertyCollections, function(collection) { - expect(Object.getOwnPropertyNames(collection).sort()).toEqual( - PROPERTY_COLLECTION_PROPERTIES.sort()); - }); - expect(ctrl.propertyCollections) - .toContain(jasmine.objectContaining({id: "properties"})); - expect(ctrl.propertyCollections) - .toContain(jasmine.objectContaining({id: "extra"})); - expect(ctrl.node).toEqual({ - name: null, - driver: null, - driver_info: {}, - properties: {}, - extra: {}, - network_interface: null, - resource_class: null}); - expect(Object.getOwnPropertyNames(ctrl).sort()).toEqual( - BASE_NODE_CONTROLLER_PROPERTIES.sort()); - }); - - it('_loadDrivers', function () { - ctrl._loadDrivers(); - ironicBackendMockService.flush(); - expect(ctrl.drivers).toEqual(ironicBackendMockService.getDrivers()); - }); - - it('_getImages', function () { - ctrl._getImages(); - ironicBackendMockService.flush(); - expect(ctrl.images).toEqual(ironicBackendMockService.getImages()); - }); - - it('cancel', function () { - ctrl.cancel(); - expect(uibModalInstance.dismiss).toHaveBeenCalledWith('cancel'); - }); - - }); -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.html b/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.html deleted file mode 100644 index e3550fc1..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - diff --git a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.service.js b/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.service.js deleted file mode 100644 index 5b50337a..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.service.js +++ /dev/null @@ -1,741 +0,0 @@ -/* - * Copyright 2016 Cray Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function() { - 'use strict'; - - var REQUIRED = " " + gettext("Required") + "."; - - var SELECT_OPTIONS_REGEX = - new RegExp( - gettext('(?:[Oo]ne of )(?!this)((?:(?:"[^"]+"|[^,\\. ]+)(?:, |\\.))+)')); - - var DEFAULT_IS_REGEX = - new RegExp(gettext('default (?:value )?is ([^"\\. ]+|"[^"]+")')); - - var DEFAULTS_TO_REGEX = - new RegExp(gettext('Defaults to ([^"\\. ]+|"[^"]+")')); - - var DEFAULT_IN_PARENS_REGEX = - new RegExp(gettext(' ([^" ]+|"[^"]+") \\(Default\\)')); - - var DEFAULT_REGEX_LIST = [DEFAULT_IS_REGEX, - DEFAULTS_TO_REGEX, - DEFAULT_IN_PARENS_REGEX]; - var ONE_OF_REGEX = - new RegExp(gettext('One of this, (.*) must be specified\\.')); - - var NOT_INSIDE_MATCH = -1; - - var VALID_PORT_REGEX = new RegExp('^\\d+$'); - - var VALID_IPV4_ADDRESS = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"; // eslint-disable-line max-len - - var VALID_IPV6_ADDRESS = "^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$"; // eslint-disable-line max-len - - angular - .module('horizon.dashboard.admin.ironic') - .factory('horizon.dashboard.admin.ironic.base-node.service', - baseNodeService); - - baseNodeService.$inject = [ - '$uibModal', - '$log', - 'horizon.dashboard.admin.ironic.validHostNamePattern', - 'horizon.dashboard.admin.ironic.validUuidPattern' - ]; - - function baseNodeService($uibModal, - $log, - validHostNamePattern, - validUuidPattern) { - var service = { - DriverProperty: DriverProperty, - PostfixExpr: PostfixExpr, - Graph: Graph, - driverPropertyGroupHasRequired: driverPropertyGroupHasRequired, - driverPropertyGroupsToString: driverPropertyGroupsToString, - compareDriverPropertyGroups: compareDriverPropertyGroups - }; - - var VALID_ADDRESS_HOSTNAME_REGEX = new RegExp(VALID_IPV4_ADDRESS + "|" + - VALID_IPV6_ADDRESS + "|" + - validHostNamePattern); - - var VALID_IMAGE_REGEX = new RegExp(validUuidPattern + "|" + - "^(https?|file)://.+$"); - - /** - The DriverProperty class is used to represent an ironic driver - property. It is currently used by the base-node form to - support property display, value assignment and validation. - - The following rules are used to extract information about a property - from the description returned by the driver. - - 1. If the description ends with " Required." a value must be - supplied for the property. - - 2. The following syntax is used to extract default values - from property descriptions. - - Default is (|.) - default is “” - default value is (|.) - default value is “” - Defaults to (|.) - Defaults to “” - (Default) - - 3. The following syntax is used to determine whether a property - is considered active. In the example below if the user specifies - a value for , properties 2 to n will be tagged - inactive, and hidden from view. All properties are considered - to be required. - - One of this, , , …, or - must be specified. - - 4. The following syntax is used to determine whether a property - is restricted to a set of enumerated values. The property will - be displayed as an HTML select element. - - [Oo]ne of , "", …, . - - 5. The following syntax is used to determine whether a property is - active and required based on the value of another property. - If the property is not active it will not be displayed. - - Required|Used only if is set to - (or "")*. - - Notes: - 1. The properties "deploy_kernel" and "deploy_ramdisk" are - assumed to accept Glance image uuids as valid values. - - 2. Property names ending in _port are assumed to only accept - positive integer values - - 3. Property names ending in _address are assumed to only accept - valid IPv4 and IPv6 addresses; and hostnames - */ - - /** - * @description Construct a new driver property - * - * @class DriverProperty - * @param {string} name - Name of property - * @param {string} desc - Description of property - * @param {object} propertySet - Set of properties to which this one belongs - * - * @property {string} defaultValue - Default value of the property - * @property {string[]} selectOptions - If the property is limited to a - * set of enumerated values then selectOptions will be an array of those - * values, otherwise null - * @property {boolean} required - Boolean value indicating whether a value - * must be supplied for this property if it is active - * @property {PostfixExpr} isActiveExpr - Null if this property is always - * active; otherwise, a boolean expression that when evaluated will - * return whether this variable is active. A property is considered - * active if its role is not eliminated by the values of other - * properties in the property-set. - * @property {string} inputValue - User assigned value for this property - * @property {regexp} validValueRegex - Regular expression used to - * determine whether an input value is valid. - * @returns {object} Driver property - */ - function DriverProperty(name, desc, propertySet) { - this.name = name; - this.desc = desc; - this.propertySet = propertySet; - - // Determine whether this property should be presented as a selection - this.selectOptions = this._analyzeSelectOptions(); - - this.required = null; // Initialize to unknown - // Expression to be evaluated to determine whether property is active. - // By default the property is considered active. - this.isActiveExpr = null; - var result = this._analyzeRequiredOnlyDependencies(); - if (result) { - this.required = result[0]; - this.isActiveExpr = result[1]; - } - if (!this.isActiveExpr) { - result = this._analyzeOneOfDependencies(); - if (result) { - this.required = result[0]; - this.isActiveExpr = result[1]; - } - } - if (this.required === null) { - this.required = desc.endsWith(REQUIRED); - } - - this.defaultValue = this._getDefaultValue(); - this.inputValue = this.defaultValue; - - // Infer that property is a boolean that can be represented as a - // True/False selection - if (this.selectOptions === null && - (this.defaultValue === "True" || this.defaultValue === "False")) { - this.selectOptions = ["True", "False"]; - } - - this.validValueRegex = _determineValidValueRegex(this.name); - } - - /** - * @description Return a regular expression that can be used to - * validate the value of a specified property - * - * @param {string} propertyName - Name of property - * @return {regexp} Regular expression object or undefined - */ - function _determineValidValueRegex(propertyName) { - var regex; - if (propertyName.endsWith("_port")) { - regex = VALID_PORT_REGEX; - } else if (propertyName.endsWith("_address")) { - regex = VALID_ADDRESS_HOSTNAME_REGEX; - } else if (propertyName === "deploy_kernel") { - regex = VALID_IMAGE_REGEX; - } else if (propertyName === "deploy_ramdisk") { - regex = VALID_IMAGE_REGEX; - } - - return regex; - } - - DriverProperty.prototype.isActive = function() { - if (!this.isActiveExpr) { - return true; - } - var ret = this.isActiveExpr.evaluate(this.propertySet); - return ret[0] === PostfixExpr.status.OK && - typeof ret[1] === "boolean" ? ret[1] : true; - }; - - /** - * @description Get a regular expression object that can be used to - * determine whether a value is valid for this property - * - * @return {regexp} Regular expression object or undefined - */ - DriverProperty.prototype.getValidValueRegex = function() { - return this.validValueRegex; - }; - - /** - * @description Must a value be provided for this property - * - * @return {boolean} True if a value must be provided for this property - */ - DriverProperty.prototype.isRequired = function() { - return this.required; - }; - - DriverProperty.prototype._analyzeSelectOptions = function() { - var match = this.desc.match(SELECT_OPTIONS_REGEX); - if (!match) { - return null; - } - - var matches = match[1].substring(0, match[1].length - 1).split(", "); - var options = []; - angular.forEach(matches, function(match) { - options.push(trimQuotes(match)); - }); - return options; - }; - - /** - * @description Get the list of select options for this property - * - * @return {string[]} null if this property is not selectable; else, - * an array of selectable options - */ - DriverProperty.prototype.getSelectOptions = function() { - return this.selectOptions; - }; - - /** - * @description Remove leading/trailing double-quotes from a string - * - * @param {string} str - String to be trimmed - * @return {string} trim'd string - */ - function trimQuotes(str) { - return str.charAt(0) === '"' - ? str.substring(1, str.length - 1) : str; - } - - /** - * @description Get the default value of this property - * - * @return {string} Default value of this property - */ - DriverProperty.prototype._getDefaultValue = function() { - var value; - for (var i = 0; i < DEFAULT_REGEX_LIST.length; i++) { - var match = this.desc.match(DEFAULT_REGEX_LIST[i]); - if (match) { - value = trimQuotes(match[1]); - break; - } - } - $log.debug("_getDefaultValue | " + this.desc + " | " + value); - return value; - }; - - /** - * @description Get the input value of this property - * - * @return {string} the input value of this property - */ - DriverProperty.prototype.getInputValue = function() { - return this.inputValue; - }; - - /** - * @description Get the default value of this property - * - * @return {string} the default value of this property - */ - DriverProperty.prototype.getDefaultValue = function() { - return this.defaultValue; - }; - - /** - * @description Get the description of this property - * - * @return {string} Description of this property - */ - DriverProperty.prototype.getDescription = function() { - return this.desc; - }; - - /** - * @description Use the property description to build an expression - * that will evaluate to a boolean result indicating whether the - * property is active - * - * @return {array} null if this property is not dependent on any others; - * otherwise, - * [0] boolean indicating whether if active a value must be - * supplied for this property. - * [1] an expression that when evaluated will return a boolean - * result indicating whether this property is active - */ - DriverProperty.prototype._analyzeRequiredOnlyDependencies = function() { - var re = /(Required|Used) only if ([^ ]+) is set to /g; - var match = re.exec(this.desc); - - if (!match) { - return null; - } - - // Build logical expression to describe under what conditions this - // property is active - var expr = new PostfixExpr(); - var numAdds = 0; - - var i = NOT_INSIDE_MATCH; - var j = re.lastIndex; - while (j < this.desc.length) { - if (i === NOT_INSIDE_MATCH && this.desc.charAt(j) === ".") { - break; - } - - if (this.desc.charAt(j) === '"') { - if (i === NOT_INSIDE_MATCH) { - i = j + 1; - } else { - expr.addProperty(match[2]); - expr.addValue(this.desc.substring(i, j)); - expr.addOperator(PostfixExpr.op.EQ); - numAdds++; - if (numAdds > 1) { - expr.addOperator(PostfixExpr.op.OR); - } - i = NOT_INSIDE_MATCH; - } - } - j++; - } - $log.debug("_analyzeRequiredOnlyDependencies | " + - this.desc + " | " + - match[2] + ", " + - JSON.stringify(expr)); - return [match[1] === "Required", expr]; - }; - - DriverProperty.prototype._analyzeOneOfDependencies = function() { - var match = this.desc.match(ONE_OF_REGEX); - if (!match) { - return null; - } - - // Build logical expression to describe under what conditions this - // property is active - var expr = new PostfixExpr(); - - var parts = match[1].split(", or "); - expr.addProperty(parts[1]); - expr.addValue(undefined); - expr.addOperator(PostfixExpr.op.EQ); - - parts = parts[0].split(", "); - for (var i = 0; i < parts.length; i++) { - expr.addProperty(parts[i]); - expr.addValue(undefined); - expr.addOperator(PostfixExpr.op.EQ); - expr.addOperator(PostfixExpr.op.AND); - } - $log.debug("_analyzeOneOfDependencies | " + - this.desc + " | " + - JSON.stringify(match) + ", " + - JSON.stringify(expr)); - return [true, expr]; - }; - - /** - * @description Get the names of the driver-properties whose values - * determine whether this property is active - * - * @return {object} Object the properties of which are names of - * activating driver-properties or null - */ - DriverProperty.prototype.getActivators = function() { - return this.isActiveExpr ? this.isActiveExpr.getProperties() : null; - }; - - /** - * PostFixExpr is a class primarily developed to support the - * evaluation of boolean expressions that determine whether a - * particular property is active. - * - * The expression is stored as a postfix sequence of operands and - * operators. Operands are currently limited to the literal values - * and the values of properties in a specified set. Currently - * supported operands are ==, or, and. - * - * @return {void} - */ - function PostfixExpr() { - this.elem = []; - } - - PostfixExpr.op = { - EQ: "==", - AND: "and", - OR: "or" - }; - - PostfixExpr.UNDEFINED = undefined; - - PostfixExpr.status = { - OK: 0, - ERROR: 1, - BAD_ARG: 2, - UNKNOWN_OP: 3, - MALFORMED: 4 - }; - - /** - * @description Add a property to the expression - * - * @param {string} propertyName - Property name - * - * @return {void} - */ - PostfixExpr.prototype.addProperty = function(propertyName) { - this.elem.push({name: propertyName}); - }; - - /** - * @description Add a value to the expression - * - * @param {object} value - value - * - * @return {void} - */ - PostfixExpr.prototype.addValue = function(value) { - this.elem.push({value: value}); - }; - - /** - * @description Add an operator to the expression - * - * @param {PostfixExpr.op} opId - operator - * - * @return {void} - */ - PostfixExpr.prototype.addOperator = function(opId) { - this.elem.push({op: opId}); - }; - - /** - * @description Get a list of property names referenced by this - * expression - * - * @return {object} An object each property of which corresponds to - * a property in the expression - */ - PostfixExpr.prototype.getProperties = function() { - var properties = {}; - angular.forEach(this.elem, function(elem) { - if (angular.isDefined(elem.name)) { - properties[elem.name] = true; - } - }); - return properties; - }; - - /** - * @description Evaluate a boolean binary operation - * - * @param {array} valStack - Stack of values to operate on - * @param {string} opId - operator id - * - * @return {integer} Return code - */ - function _evaluateBoolBinaryOp(valStack, opId) { - var retCode = PostfixExpr.status.OK; - var val1 = valStack.pop(); - var val2 = valStack.pop(); - if (typeof val1 === "boolean" && - typeof val2 === "boolean") { - switch (opId) { - case PostfixExpr.op.AND: - valStack.push(val1 && val2); - break; - case PostfixExpr.op.OR: - valStack.push(val1 || val2); - break; - default: - retCode = PostfixExpr.status.UNKNOWN_OP; - } - } else { - retCode = PostfixExpr.status.BAD_ARG; - } - return retCode; - } - - /** - * @description Evaluate the experssion using property values from - * a specified set - * - * @param {object} propertySet - Dictionary of DriverProperty instances - * - * @return {array} Return code and Value of the expression - */ - PostfixExpr.prototype.evaluate = function(propertySet) { - var resultStack = []; - for (var i = 0, len = this.elem.length; i < len; i++) { - var elem = this.elem[i]; - if (elem.hasOwnProperty("name")) { - resultStack.push(propertySet[elem.name].getInputValue()); - } else if (elem.hasOwnProperty("value")) { - resultStack.push(elem.value); - } else if (elem.hasOwnProperty("op")) { - if (elem.op === PostfixExpr.op.EQ) { - var val1 = resultStack.pop(); - var val2 = resultStack.pop(); - resultStack.push(val1 === val2); - } else { - var ret = _evaluateBoolBinaryOp(resultStack, elem.op); - if (ret !== PostfixExpr.status.OK) { - return [ret, PostfixExpr.UNDEFINED]; - } - } - } else { - return [PostfixExpr.status.UNKNOWN_ELEMENT, PostfixExpr.UNDEFINED]; - } - } - return resultStack.length === 1 - ? [PostfixExpr.status.OK, resultStack.pop()] - : [PostfixExpr.status.MALFORMED, PostfixExpr.UNDEFINED]; - }; - - /** - * @description Class for representing and manipulating undirected - * graphs - * - * @property {object} vertices - Associative array of vertex objects - * indexed by property name - * @return {object} Graph - */ - function Graph() { - this.vertices = {}; - } - - Graph.prototype.getVertex = function(vertexName) { - var vertex = null; - if (this.vertices.hasOwnProperty(vertexName)) { - vertex = this.vertices[vertexName]; - } - return vertex; - }; - - /** - * @description Add a vertex to this graph - * - * @param {string} name - Vertex name - * @param {object} data - Vertex data - * @returns {object} - Newly created vertex - */ - Graph.prototype.addVertex = function(name, data) { - var vertex = {name: name, data: data, adjacents: []}; - this.vertices[name] = vertex; - return vertex; - }; - - /** - * @description Add an undirected edge between two vertices - * - * @param {string} vertexName1 - Name of first vertex - * @param {string} vertexName2 - Name of second vertex - * @returns {void} - */ - Graph.prototype.addEdge = function(vertexName1, vertexName2) { - this.vertices[vertexName1].adjacents.push(vertexName2); - this.vertices[vertexName2].adjacents.push(vertexName1); - }; - - /** - * @description Depth-first-search graph traversal utility function - * - * @param {object} vertex - Root vertex from which traveral will begin. - * It is assumed that this vertex has not alreday been visited as part - * of this traversal. - * @param {object} visited - Associative array. Each named property - * corresponds to a vertex with the same name, and has boolean value - * indicating whether the vertex has been alreday visited. - * @param {object[]} component - Array of vertices that define a strongly - * connected component. - * @returns {void} - */ - Graph.prototype._dfsTraverse = function(vertex, visited, component) { - var graph = this; - visited[vertex.name] = true; - component.push(vertex); - - /* eslint-disable no-unused-vars */ - angular.forEach(vertex.adjacents, function(vertexName) { - if (!visited[vertexName]) { - graph._dfsTraverse(graph.vertices[vertexName], visited, component); - } - }); - /* eslint-enable no-unused-vars */ - }; - - /** - * @description Perform a depth-first-search on a specified graph to - * find strongly connected components. A user provided function will - * be called to process each component. - * - * @param {function} componentFunc - Function called on each strongly - * connected component. Accepts aruments: array of vertex objects, and - * user-provided extra data that can be used in processing the component. - * @param {object} extra - Extra data that is passed into the component - * processing function. - * @returns {void} - */ - Graph.prototype.dfs = function(componentFunc, extra) { - var graph = this; - var visited = {}; - angular.forEach( - graph.vertices, - function(unused, name) { - visited[name] = false; - }); - - angular.forEach(this.vertices, function(vertex, vertexName) { - if (!visited[vertexName]) { - var component = []; - graph._dfsTraverse(vertex, visited, component); - componentFunc(component, extra); - } - }); - }; - - /** - * @description Check whether a group contains required properties - * - * @param {DriverProperty[]} group - Property group - * @return {boolean} Return true if the group contains required - * properties, false otherwise - */ - function driverPropertyGroupHasRequired(group) { - var hasRequired = false; - for (var i = 0; i < group.length; i++) { - if (group[i].required) { - hasRequired = true; - break; - } - } - return hasRequired; - } - - /** - * @description Convert array of driver property groups to a string - * - * @param {array[]} groups - Array of driver property groups - * @return {string} Output string - */ - function driverPropertyGroupsToString(groups) { - var output = []; - angular.forEach(groups, function(group) { - var groupStr = []; - angular.forEach(group, function(property) { - groupStr.push(property.name); - }); - groupStr = groupStr.join(", "); - output.push(['[', groupStr, ']'].join("")); - }); - output = output.join(", "); - return ['[', output, ']'].join(""); - } - - /** - * @description Comaprison function used to sort driver property groups - * - * @param {DriverProperty[]} group1 - First group - * @param {DriverProperty[]} group2 - Second group - * @return {integer} Return: - * < 0 if group1 should precede group2 in an ascending ordering - * > 0 if group2 should precede group1 - * 0 if group1 and group2 are considered equal from ordering perpsective - */ - function compareDriverPropertyGroups(group1, group2) { - var group1HasRequired = driverPropertyGroupHasRequired(group1); - var group2HasRequired = driverPropertyGroupHasRequired(group2); - - if (group1HasRequired === group2HasRequired) { - if (group1.length === group2.length) { - return group1[0].name.localeCompare(group2[0].name); - } else { - return group1.length - group2.length; - } - } else { - return group1HasRequired ? -1 : 1; - } - return 0; - } - - return service; - } -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.spec.js b/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.spec.js deleted file mode 100644 index 8da3f0ac..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/base-node/base-node.spec.js +++ /dev/null @@ -1,270 +0,0 @@ -/** - * Copyright 2016 Cray Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(function() { - "use strict"; - - describe( - 'horizon.dashboard.admin.ironic.base-node.service', - function() { - var service; - - beforeEach(module('horizon.dashboard.admin.ironic')); - - beforeEach(module(function($provide) { - $provide.value('$uibModal', jasmine.createSpy()); - })); - - beforeEach(inject(function($injector) { - service = - $injector.get('horizon.dashboard.admin.ironic.base-node.service'); - })); - - it('defines the service', function() { - expect(service).toBeDefined(); - }); - - describe('DriverProperty', function() { - it('Base construction', function() { - var propertyName = 'propertyName'; - var description = ''; - var propertySet = []; - var property = new service.DriverProperty(propertyName, - description, - propertySet); - expect(property.name).toBe(propertyName); - expect(property.desc).toBe(description); - expect(property.propertySet).toBe(propertySet); - expect(property.getSelectOptions()).toBe(null); - expect(property.required).toBe(false); - expect(property.defaultValue).toBe(undefined); - expect(property.inputValue).toBe(undefined); - expect(property.getInputValue()).toBe(undefined); - expect(property.isActive()).toBe(true); - }); - - it('Required - ends with', function() { - var property = new service.DriverProperty('propertyName', - ' Required.', - []); - expect(property.required).toBe(true); - }); - - it('Not required - missing space', function() { - var property = new service.DriverProperty('propertyName', - 'Required.', - []); - expect(property.required).toBe(false); - }); - - it('Not required - missing period', function() { - var property = new service.DriverProperty('propertyName', - ' Required', - []); - expect(property.required).toBe(false); - }); - - it('Select options', function() { - var property = new service.DriverProperty( - 'propertyName', - 'One of "foo", bar.', - []); - expect(property.getSelectOptions()).toEqual(['foo', 'bar']); - }); - - it('Select options - No single quotes', function() { - var property = new service.DriverProperty( - 'propertyName', - "One of 'foo', bar.", - []); - expect(property.getSelectOptions()).toEqual(["'foo'", 'bar']); - }); - - it('default - is string', function() { - var property = new service.DriverProperty( - 'propertyName', - 'default is "5.1".', - []); - expect(property._getDefaultValue()).toEqual('5.1'); - }); - - it('default - period processing', function() { - var property = new service.DriverProperty( - 'propertyName', - 'default is 5.1.', - []); - expect(property._getDefaultValue()).toEqual('5'); - }); - }); - - describe('PostfixExpr', function() { - it('Base construction', function() { - var expr = new service.PostfixExpr(); - var ret = expr.evaluate({}); - expect(ret[0]).toBe(service.PostfixExpr.status.MALFORMED); - expect(ret[1]).toBe(service.PostfixExpr.UNDEFINED); - }); - - function evalBinary(val1, val2, op) { - var propertySet = {}; - var prop1 = new service.DriverProperty("prop1", "", propertySet); - propertySet.prop1 = prop1; - var prop2 = new service.DriverProperty("prop2", "", propertySet); - propertySet.prop2 = prop2; - - var expr = new service.PostfixExpr(); - expr.addProperty("prop1"); - expr.addProperty("prop2"); - prop1.inputValue = val1; - prop2.inputValue = val2; - expr.addOperator(op); - return expr.evaluate(propertySet); - } - - it('T and T', function() { - var ret = evalBinary(true, true, service.PostfixExpr.op.AND); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(true); - }); - - it('T and F', function() { - var ret = evalBinary(true, false, service.PostfixExpr.op.AND); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(false); - }); - - it('F and T', function() { - var ret = evalBinary(false, true, service.PostfixExpr.op.AND); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(false); - }); - - it('F and F', function() { - var ret = evalBinary(false, false, service.PostfixExpr.op.AND); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(false); - }); - - it('T or T', function() { - var ret = evalBinary(true, true, service.PostfixExpr.op.OR); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(true); - }); - - it('T or F', function() { - var ret = evalBinary(true, false, service.PostfixExpr.op.OR); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(true); - }); - - it('F or T', function() { - var ret = evalBinary(false, true, service.PostfixExpr.op.OR); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(true); - }); - - it('F or F', function() { - var ret = evalBinary(false, false, service.PostfixExpr.op.OR); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(false); - }); - - it('T eq T', function() { - var ret = evalBinary(true, true, service.PostfixExpr.op.EQ); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(true); - }); - - it('T eq F', function() { - var ret = evalBinary(true, false, service.PostfixExpr.op.EQ); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(false); - }); - - it('F eq T', function() { - var ret = evalBinary(false, true, service.PostfixExpr.op.EQ); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(false); - }); - - it('F eq F', function() { - var ret = evalBinary(false, false, service.PostfixExpr.op.EQ); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(true); - }); - - it('1 eq 1', function() { - var ret = evalBinary(1, 1, service.PostfixExpr.op.EQ); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(true); - }); - - it('1 eq 0', function() { - var ret = evalBinary(1, 0, service.PostfixExpr.op.EQ); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(false); - }); - - it('"1" eq 1', function() { - var ret = evalBinary('1', 1, service.PostfixExpr.op.EQ); - expect(ret[0]).toBe(service.PostfixExpr.status.OK); - expect(ret[1]).toBe(false); - }); - }); - - describe('DriverPropertyGroup', function() { - it('driverPropertyGroupHasRequired', function () { - var dp1 = new service.DriverProperty("dp-1", " Required.", []); - var dp2 = new service.DriverProperty("dp-2", " ", []); - - expect(service.driverPropertyGroupHasRequired).toBeDefined(); - expect(service.driverPropertyGroupHasRequired([])).toBe(false); - expect(service.driverPropertyGroupHasRequired([dp1])).toBe(true); - expect(service.driverPropertyGroupHasRequired([dp2])).toBe(false); - expect(service.driverPropertyGroupHasRequired([dp1, dp2])).toBe(true); - }); - - it('driverPropertyGroupsToString', function () { - var dp1 = new service.DriverProperty("dp-1", " Required.", []); - var dp2 = new service.DriverProperty("dp-2", " ", []); - - expect(service.driverPropertyGroupsToString).toBeDefined(); - expect(service.driverPropertyGroupsToString([])).toBe("[]"); - expect(service.driverPropertyGroupsToString([[dp1]])) - .toBe("[[dp-1]]"); - expect(service.driverPropertyGroupsToString([[dp1], [dp2]])) - .toBe("[[dp-1], [dp-2]]"); - }); - - it('compareDriverPropertyGroups', function () { - var dp1 = new service.DriverProperty("dp-1", " Required.", []); - var dp2 = new service.DriverProperty("dp-2", " ", []); - - expect(service.compareDriverPropertyGroups).toBeDefined(); - expect(service.compareDriverPropertyGroups([dp1], [dp1])).toBe(0); - expect(service.compareDriverPropertyGroups([dp1], [dp2])).toBe(-1); - expect(service.compareDriverPropertyGroups([dp2], [dp1])).toBe(1); - // smaller group precedes larger group - expect(service.compareDriverPropertyGroups([dp1], [dp1, dp2])) - .toBe(-1); - // group order decided on lexographic comparison of names of first - // property - expect(service.compareDriverPropertyGroups([dp2, dp1], [dp1, dp2])) - .toBe(1); - }); - }); - }); -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/base-port/base-port.controller.js b/ironic_ui/static/dashboard/admin/ironic/base-port/base-port.controller.js deleted file mode 100644 index d62aca1b..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/base-port/base-port.controller.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright 2016 Cray Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function() { - 'use strict'; - - /** - * Controller used to support operations on an Ironic port - */ - angular - .module('horizon.dashboard.admin.ironic') - .controller('BasePortController', BasePortController); - - BasePortController.$inject = [ - '$uibModalInstance', - 'horizon.dashboard.admin.ironic.validMacAddressPattern', - 'horizon.dashboard.admin.ironic.validDatapathIdPattern', - 'horizon.dashboard.admin.ironic.form-field.service', - 'horizon.app.core.openstack-service-api.ironic', - 'ctrl', - 'node' - ]; - - /** - * @description Utility class used to manage local-link-connection - * form fields. - * - * @param {string} formFieldService - Provider service for creating - * form fields. - * @param {string} validMacAddressPattern - Regular expression - * pattern used to test for valid mac addresses. - * @param {string} validDatapathIdPattern - Regular expression - * pattern used to test for valid datapath ids. - * @return {void} - */ - function LocalLinkConnectionMgr(formFieldService, - validMacAddressPattern, - validDatapathIdPattern) { - var mgr = this; - - mgr.port_id = new formFieldService.FormField( - {id: 'port_id', title: 'port_id'}); - - mgr.switch_id = new formFieldService.FormField( - {id: 'switch_id', - title: 'switch_id', - desc: gettext("MAC address or OpenFlow datapath ID"), - pattern: new RegExp(validMacAddressPattern + '|' + - validDatapathIdPattern)}); - - mgr.switch_info = new formFieldService.FormField( - {id: 'switch_info', title: 'switch_info'}); - - mgr.fields = { - port_id: mgr.port_id, - switch_id: mgr.switch_id, - switch_info: mgr.switch_info - }; - - /** - * Update the required property of each field based on current values - * - * @return {void} - */ - mgr.update = function() { - var required = mgr.port_id.hasValue() || mgr.switch_id.hasValue(); - mgr.port_id.required = required; - mgr.switch_id.required = required; - }; - - // Add form field value change handlers - angular.forEach(mgr.fields, function(field) { - field.change = mgr.update; - }); - - /** - * Generate an attribute object that conforms to the format - * required for port creation using the Ironic client - * - * @return {object|null} local_link_connection attribute object. - * A value of null is returned if the local-link-connection - * information is incomplete. - */ - mgr.toPortAttr = function() { - var attr = null; - if (mgr.port_id.hasValue() && - mgr.switch_id.hasValue()) { - attr = {}; - attr.port_id = mgr.port_id.value; - attr.switch_id = mgr.switch_id.value; - - if (mgr.switch_info.hasValue()) { - attr.switch_info = mgr.switch_info.value; - } - } - return attr; - }; - - /** - * @description Set values of form fields; - * - * @param {object} values - Dictionary of values indexed by - * property-name - * @return {void} - */ - mgr.setValues = function(values) { - angular.forEach(mgr.fields, function(field, propertyName) { - if (angular.isDefined(values[propertyName])) { - field.value = values[propertyName]; - } - }); - }; - - /** - * @description Disable the local-link-connection form fields. - * - * @param {string} reason - Optional reason for disabling fields. - * @return {void} - */ - mgr.disable = function(reason) { - angular.forEach(mgr.fields, function(item) { - item.disable(reason); - }); - }; - } - - function BasePortController($uibModalInstance, - validMacAddressPattern, - validDatapathIdPattern, - formFieldService, - ironic, - ctrl, - node) { - ctrl.port = { - extra: {}, - node_uuid: node.uuid - }; - - ctrl.address = new formFieldService.FormField({ - id: "macAddress", - title: gettext("MAC address"), - desc: gettext("MAC address for this port. Required."), - pattern: new RegExp(validMacAddressPattern), - value: null, - required: true, - autoFocus: true - }); - - ctrl.pxeEnabled = new formFieldService.FormField({ - type: "radio", - id: "pxeEnabled", - title: gettext("PXE enabled"), - desc: gettext( - "Indicates whether this port should be used when PXE booting this node"), - options: ['True', 'False'], - value: 'True'}); - - ctrl.portgroup_uuid = new formFieldService.FormField({ - type: "select", - id: "portgroup-uuid", - title: gettext("Portgroup"), - desc: gettext("Portgroup that this port belongs to"), - portgroups: [], - options: "portgroup.uuid as portgroup.name ? portgroup.name : portgroup.uuid for portgroup in field.portgroups", // eslint-disable-line max-len - value: null}); - - // Object used to manage local-link-connection form fields - ctrl.localLinkConnection = - new LocalLinkConnectionMgr(formFieldService, - validMacAddressPattern, - validDatapathIdPattern); - - ironic.getPortgroups(node.uuid).then(function(portgroups) { - var field = ctrl.portgroup_uuid; - - if (portgroups.length > 0) { - field.portgroups.push({uuid: null, name: gettext("Select a portgroup")}); - } - field.portgroups = field.portgroups.concat(portgroups); - - if (portgroups.length === 0) { - field.disable(); - } - }); - - /** - * Cancel the modal - * - * @return {void} - */ - ctrl.cancel = function() { - $uibModalInstance.dismiss('cancel'); - }; - - /** - * Delete a port metadata property - * - * @param {string} propertyName - Name of the property - * @return {void} - */ - ctrl.deleteExtra = function(propertyName) { - delete ctrl.port.extra[propertyName]; - }; - - /** - * Check whether the specified port metadata property already exists - * - * @param {string} propertyName - Name of the metadata property - * @return {boolean} True if the property already exists, - * otherwise false - */ - ctrl.checkExtraUnique = function(propertyName) { - return !(propertyName in ctrl.port.extra); - }; - } -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/base-port/base-port.html b/ironic_ui/static/dashboard/admin/ironic/base-port/base-port.html deleted file mode 100644 index 7958e680..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/base-port/base-port.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - diff --git a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.js b/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.js deleted file mode 100644 index a130eded..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2017 Intel Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function() { - 'use strict'; - - /** - * @ngdoc controller - * @name horizon.dashboard.admin.ironic:BootDeviceController - * @ngController - * - * @description - * Controller used to prompt the user for information associated with - * setting the boot device of a node - */ - angular - .module('horizon.dashboard.admin.ironic') - .controller('BootDeviceController', BootDeviceController); - - BootDeviceController.$inject = [ - '$uibModalInstance', - 'horizon.app.core.openstack-service-api.ironic', - 'node' - ]; - - function BootDeviceController($uibModalInstance, ironic, node) { - var ctrl = this; - - ctrl.modalTitle = gettext("Set Boot Device"); - - ironic.getSupportedBootDevices(node.uuid).then( - function(bootDevices) { - ctrl.supportedBootDevices = bootDevices; - }); - - // Initialize form fields to current values - ctrl.bootDevice = null; - ctrl.persistent = 'False'; - ironic.getBootDevice(node.uuid).then(function(device) { - ctrl.bootDevice = device.boot_device; - ctrl.persistent = device.persistent ? 'True' : 'False'; - }); - - ctrl.cancel = function() { - $uibModalInstance.dismiss('cancel'); - }; - - ctrl.setSelectedBootDevice = function() { - $uibModalInstance.close({device: ctrl.bootDevice, - persistent: ctrl.persistent === 'True'}); - }; - } -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.spec.js b/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.spec.js deleted file mode 100644 index e52c7490..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.spec.js +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2017 Cray Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function () { - 'use strict'; - - describe('horizon.dashboard.admin.ironic.BootDeviceController', function () { - var BOOT_DEVICE_CONTROLLER_PROPERTIES = [ - 'bootDevice', - 'cancel', - 'modalTitle', - 'persistent', - 'setSelectedBootDevice', - 'supportedBootDevices' - ]; - var uibModalInstance, ironicBackendMockService, node; - var ctrl = {}; - - beforeEach(module('horizon.dashboard.admin.ironic')); - - beforeEach(module('horizon.framework.util')); - - beforeEach(module(function($provide) { - $provide.value('$uibModal', {}); - })); - - beforeEach(module(function($provide) { - uibModalInstance = { - close: jasmine.createSpy(), - dismiss: jasmine.createSpy() - }; - $provide.value('$uibModalInstance', uibModalInstance); - })); - - beforeEach(module(function($provide) { - $provide.value('horizon.framework.widgets.toast.service', - {}); - })); - - beforeEach(module('horizon.app.core.openstack-service-api')); - - beforeEach(inject(function($injector) { - ironicBackendMockService = - $injector.get('horizon.dashboard.admin.ironic.backend-mock.service'); - ironicBackendMockService.init(); - - var ironicAPI = - $injector.get('horizon.app.core.openstack-service-api.ironic'); - - ironicAPI.createNode( - {driver: ironicBackendMockService.params.defaultDriver}) - .then(function(response) { - node = response.data; - var controller = $injector.get('$controller'); - ctrl = controller('BootDeviceController', {node: node}); - }); - ironicBackendMockService.flush(); - })); - - it('controller should be defined', function () { - expect(ctrl).toBeDefined(); - expect(Object.getOwnPropertyNames(ctrl).sort()).toEqual( - BOOT_DEVICE_CONTROLLER_PROPERTIES.sort()); - expect(ctrl.supportedBootDevices).toEqual( - ironicBackendMockService.getNodeSupportedBootDevices(node.uuid)); - var bootDevice = ironicBackendMockService.getNodeBootDevice(node.uuid); - expect(ctrl.bootDevice).toEqual(bootDevice.boot_device); - expect(ctrl.persistent).toEqual(bootDevice.persistent ? 'True' : 'False'); - }); - - it('cancel', function () { - ctrl.cancel(); - expect(uibModalInstance.dismiss).toHaveBeenCalled(); - }); - - it('setSelectedBootDevice', function () { - ctrl.bootDevice = 'pxe'; - ctrl.persistent = 'False'; - ctrl.setSelectedBootDevice(); - expect(uibModalInstance.close).toHaveBeenCalledWith( - {device: ctrl.bootDevice, - persistent: ctrl.persistent === 'True'}); - }); - }); -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.html b/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.html deleted file mode 100644 index 502623da..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - diff --git a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.js b/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.js deleted file mode 100644 index 955fd83e..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.js +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2017 Intel Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function() { - 'use strict'; - - /* - * @ngdoc service - * @name horizon.dashboard.admin.ironic.bootdevice.service - * @description Service for setting the boot device of a node - */ - angular - .module('horizon.dashboard.admin.ironic') - .factory('horizon.dashboard.admin.ironic.bootdevice.service', - bootDeviceService); - - bootDeviceService.$inject = [ - '$uibModal', - 'horizon.dashboard.admin.ironic.basePath', - 'horizon.app.core.openstack-service-api.ironic' - ]; - - function bootDeviceService($uibModal, basePath, ironic) { - var service = { - setBootDevice: setBootDevice - }; - return service; - - /* - * @description Set the boot device of a specified node - * - * @param {object} node - node object - * @return {promise} - */ - function setBootDevice(node) { - var promise; - var options = { - controller: "BootDeviceController as ctrl", - backdrop: 'static', - resolve: { - node: function() { - return node; - } - }, - templateUrl: basePath + '/bootdevice/bootdevice.html' - }; - promise = $uibModal.open(options).result.then( - function(result) { - return ironic.nodeSetBootDevice(node.uuid, - result.device, - result.persistent); - }); - return promise; - } - } -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.spec.js b/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.spec.js deleted file mode 100644 index c5d0ed7c..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.spec.js +++ /dev/null @@ -1,142 +0,0 @@ -/** - * Copyright 2017 Cray Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(function() { - "use strict"; - - /** - * @description Unit tests for the Ironic-UI boot-device service - */ - - describe('horizon.dashboard.admin.ironic.bootdevice.service', - function() { - var $q, - $uibModal, - bootDeviceService, - ironicAPI, - ironicBackendMockService, - defaultDriver; - - beforeEach(module('horizon.dashboard.admin.ironic')); - - beforeEach(module('horizon.framework.util')); - - beforeEach(module(function($provide) { - $provide.value('$uibModal', { - open: function() { - return $q.when({device: 'pxe', - persistent: true}); - } - }); - })); - - beforeEach(module(function($provide) { - $provide.value('horizon.framework.widgets.toast.service', { - add: function() {} - }); - })); - - beforeEach(module('horizon.app.core.openstack-service-api')); - - beforeEach(inject(function($injector) { - ironicBackendMockService = - $injector.get('horizon.dashboard.admin.ironic.backend-mock.service'); - ironicBackendMockService.init(); - defaultDriver = ironicBackendMockService.params.defaultDriver; - })); - - beforeEach(inject(function($injector) { - $q = $injector.get('$q'); - - $uibModal = $injector.get('$uibModal'); - - ironicAPI = - $injector.get('horizon.app.core.openstack-service-api.ironic'); - - bootDeviceService = - $injector.get('horizon.dashboard.admin.ironic.bootdevice.service'); - })); - - it('defines the bootDeviceService', function() { - expect(bootDeviceService).toBeDefined(); - expect(bootDeviceService.setBootDevice).toBeDefined(); - }); - - afterEach(function() { - ironicBackendMockService.postTest(); - }); - - /** - * @description Utility function that creates a node and returns - * both it and its boot device - * - * @return {promise} Containing node and boot_device - */ - function createNode() { - return ironicAPI.createNode({driver: defaultDriver}) - .then(function(response) { - return response.data; - }) - .then(function(node) { - return ironicAPI.getBootDevice(node.uuid).then(function(device) { - return {node: node, boot_device: device}; - }); - }); - } - - it('setBootDevice', function() { - var targetBootDevice = { - device: "safe", - persistent: false - }; - - spyOn($uibModal, 'open').and.returnValue( - {result: $q.when(targetBootDevice)}); - - createNode().then(function(data) { - expect(data.node.boot_device).not.toEqual(targetBootDevice.device); - bootDeviceService.setBootDevice(data.node) - .then(function() { - ironicAPI.getBootDevice(data.node.uuid).then(function(device) { - expect(device).toEqual( - {boot_device: targetBootDevice.device, - persistent: targetBootDevice.persistent}); - }); - }) - .catch(fail); - }); - - ironicBackendMockService.flush(); - }); - - it('setBootDevice - cancel', function() { - spyOn($uibModal, 'open').and.returnValue( - {result: $q.reject('cancel')}); - - createNode().then(function(data) { - bootDeviceService.setBootDevice(data.node) - .then(fail) - .catch(function() { - ironicAPI.getBootDevice(data.node.uuid).then(function(device) { - expect(device).toEqual(data.boot_device); - }); - }); - }); - - ironicBackendMockService.flush(); - }); - }); -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.controller.js b/ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.controller.js deleted file mode 100644 index 247e129a..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.controller.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2017 Cray Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function() { - 'use strict'; - - /** - * @ngdoc controller - * @name horizon.dashboard.admin.ironic:CleanNodeController - * @ngController - * - * @description - * Controller used to prompt the user for a list of clean-steps - * in JSON format that will be applied a node - */ - angular - .module('horizon.dashboard.admin.ironic') - .controller('CleanNodeController', CleanNodeController); - - CleanNodeController.$inject = [ - '$uibModalInstance' - ]; - - function CleanNodeController($uibModalInstance) { - var ctrl = this; - - ctrl.errMsg = ''; - - ctrl.cancel = function() { - $uibModalInstance.dismiss('cancel'); - }; - - ctrl.clean = function(cleanSteps) { - try { - var steps = JSON.parse(cleanSteps); - if (angular.isArray(steps) && steps.length > 0) { - var valid = true; - angular.forEach(steps, function(step) { - if (angular.isUndefined(step.interface) || - angular.isUndefined(step.step)) { - valid = false; - } - }); - if (valid) { - $uibModalInstance.close(steps); - } else { - ctrl.errMsg = gettext('Each cleaning step must be an object that contains "interface" and "step" properties'); // eslint-disable-line max-len - } - } else { - ctrl.errMsg = gettext('Clean steps should be an non-empty array'); - } - } catch (e) { - ctrl.errMsg = gettext('Unable to validate the JSON input'); - } - }; - } -})(); diff --git a/ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.html b/ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.html deleted file mode 100644 index ffd1029c..00000000 --- a/ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.html +++ /dev/null @@ -1,41 +0,0 @@ - -