ironic-ui-3.4.0/0000775000175000017500000000000013444452775013455 5ustar zuulzuul00000000000000ironic-ui-3.4.0/setup.cfg0000666000175000017500000000210313444452775015274 0ustar zuulzuul00000000000000[metadata] name = ironic-ui summary = Ironic plugin UI for Horizon to allow users to view and manage bare metal nodes, ports and drivers. description-file = README.rst author = OpenStack author-email = openstack-discuss@lists.openstack.org home-page = https://docs.openstack.org/ironic-ui/latest/ classifier = Environment :: OpenStack Intended Audience :: Information Technology Intended Audience :: System Administrators License :: OSI Approved :: Apache Software License Operating System :: POSIX :: Linux Programming Language :: Python Programming Language :: Python :: 2 Programming Language :: Python :: 2.7 Programming Language :: Python :: 3 Programming Language :: Python :: 3.5 [pbr] autodoc_index_modules = True autodoc_exclude_modules = ironic_ui.test.* api_doc_dir = contributor/api [files] packages = ironic_ui [build_sphinx] source-dir = doc/source build-dir = doc/build all_files = 1 warning-is-error = 1 [upload_sphinx] upload-dir = doc/build/html [compile_catalog] directory = ironic_ui/locale domain = ironic-ui [egg_info] tag_build = tag_date = 0 ironic-ui-3.4.0/.mailmap0000666000175000017500000000013113444452675015072 0ustar zuulzuul00000000000000# Format is: # # ironic-ui-3.4.0/requirements.txt0000666000175000017500000000043313444452675016742 0ustar zuulzuul00000000000000# The order of packages is significant, because pip processes them in the order # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. pbr!=2.1.0,>=2.0.0 # Apache-2.0 python-ironicclient>=2.3.0 # Apache-2.0 ironic-ui-3.4.0/test-shim.js0000666000175000017500000000617013444452675015735 0ustar zuulzuul00000000000000/* * 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. * * Shim for Javascript unit tests; supplying expected global features. * This should be removed from the codebase once i18n services are provided. * Taken from default i18n file provided by Django. */ var horizonPlugInModules = []; (function (globals) { var django = globals.django || (globals.django = {}); django.pluralidx = function (count) { return (count == 1) ? 0 : 1; }; /* gettext identity library */ django.gettext = function (msgid) { return msgid; }; django.ngettext = function (singular, plural, count) { return (count == 1) ? singular : plural; }; django.gettext_noop = function (msgid) { return msgid; }; django.pgettext = function (context, msgid) { return msgid; }; django.npgettext = function (context, singular, plural, count) { return (count == 1) ? singular : plural; }; django.interpolate = function (fmt, obj, named) { if (named) { return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])}); } else { return fmt.replace(/%s/g, function(match){return String(obj.shift())}); } }; /* formatting library */ django.formats = { "DATETIME_FORMAT": "N j, Y, P", "DATETIME_INPUT_FORMATS": [ "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M:%S.%f", "%Y-%m-%d %H:%M", "%Y-%m-%d", "%m/%d/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S.%f", "%m/%d/%Y %H:%M", "%m/%d/%Y", "%m/%d/%y %H:%M:%S", "%m/%d/%y %H:%M:%S.%f", "%m/%d/%y %H:%M", "%m/%d/%y" ], "DATE_FORMAT": "N j, Y", "DATE_INPUT_FORMATS": [ "%Y-%m-%d", "%m/%d/%Y", "%m/%d/%y" ], "DECIMAL_SEPARATOR": ".", "FIRST_DAY_OF_WEEK": "0", "MONTH_DAY_FORMAT": "F j", "NUMBER_GROUPING": "3", "SHORT_DATETIME_FORMAT": "m/d/Y P", "SHORT_DATE_FORMAT": "m/d/Y", "THOUSAND_SEPARATOR": ",", "TIME_FORMAT": "P", "TIME_INPUT_FORMATS": [ "%H:%M:%S", "%H:%M:%S.%f", "%H:%M" ], "YEAR_MONTH_FORMAT": "F Y" }; django.get_format = function (format_type) { var value = django.formats[format_type]; if (typeof(value) == 'undefined') { return format_type; } else { return value; } }; /* add to global namespace */ globals.pluralidx = django.pluralidx; globals.gettext = django.gettext; globals.ngettext = django.ngettext; globals.gettext_noop = django.gettext_noop; globals.pgettext = django.pgettext; globals.npgettext = django.npgettext; globals.interpolate = django.interpolate; globals.get_format = django.get_format; globals.STATIC_URL = '/static/'; globals.WEBROOT = '/'; }(this)); ironic-ui-3.4.0/.eslintrc0000666000175000017500000000050013444452675015275 0ustar zuulzuul00000000000000# 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: 0ironic-ui-3.4.0/doc/0000775000175000017500000000000013444452775014222 5ustar zuulzuul00000000000000ironic-ui-3.4.0/doc/source/0000775000175000017500000000000013444452775015522 5ustar zuulzuul00000000000000ironic-ui-3.4.0/doc/source/install/0000775000175000017500000000000013444452775017170 5ustar zuulzuul00000000000000ironic-ui-3.4.0/doc/source/install/installation.rst0000666000175000017500000000465613444452675022437 0ustar zuulzuul00000000000000.. _installation: Ironic-UI Installation ====================== Manual 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. 6. Start the server in test mode with the ``npm run test`` command. 7. Access the test page in order to initate tests. http://localhost:8000/jasmine/?spec=horizon.dashboard.admin.ironic 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 Bare Metal Provisioning plugin should now be visible in the Horizon navigation. ironic-ui-3.4.0/doc/source/install/uninstallation.rst0000666000175000017500000000040313444452675022764 0ustar zuulzuul00000000000000.. _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. ironic-ui-3.4.0/doc/source/install/index.rst0000666000175000017500000000023013444452675021025 0ustar zuulzuul00000000000000============================ ironic-ui installation guide ============================ .. toctree:: :maxdepth: 1 installation uninstallation ironic-ui-3.4.0/doc/source/contributor/0000775000175000017500000000000013444452775020074 5ustar zuulzuul00000000000000ironic-ui-3.4.0/doc/source/contributor/contributing.rst0000666000175000017500000000176213444452675023344 0ustar zuulzuul00000000000000================= 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 --------- Most of the tools used for OpenStack depend on a launchpad.net ID for authentication. .. seealso:: * https://launchpad.net * https://storyboard.openstack.org/#!/project/952 Project Hosting Details ------------------------- Bug tracker https://storyboard.openstack.org/#!/project/952 Mailing list (prefix subjects with ``[ironic-ui]`` for faster responses) http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-discuss 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 ironic-ui-3.4.0/doc/source/contributor/index.rst0000666000175000017500000000052713444452675021742 0ustar zuulzuul00000000000000========================= 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 Autogenerated API Documentation =============================== .. toctree:: :maxdepth: 1 api/autoindex ironic-ui-3.4.0/doc/source/index.rst0000666000175000017500000000201713444452675017364 0ustar zuulzuul00000000000000===================================== 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 ironic-ui-3.4.0/doc/source/conf.py0000777000175000017500000001643713444452675017040 0ustar zuulzuul00000000000000# -*- 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 import django BASE_DIR = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.abspath(os.path.join(BASE_DIR, "..", "..")) # Needs to be set for building documents without tox os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ironic_ui.test.settings') sys.path.insert(0, ROOT) sys.path.insert(0, os.path.abspath('../..')) # Starting in Django 1.7, standalone scripts, such as a sphinx build # require that django.setup() be called first. # https://docs.djangoproject.com/en/1.8/releases/1.7/#standalone-scripts django.setup() def write_autodoc_index(): def find_autodoc_modules(module_name, sourcedir): """returns a list of modules in the SOURCE directory.""" modlist = [] os.chdir(os.path.join(sourcedir, module_name)) print("SEARCHING %s" % sourcedir) for root, dirs, files in os.walk("."): for filename in files: if filename == 'tests.py': continue if filename.endswith(".py"): # remove the pieces of the root elements = root.split(os.path.sep) # replace the leading "." with the module name elements[0] = module_name # and get the base module name base, extension = os.path.splitext(filename) if not (base == "__init__"): elements.append(base) result = ".".join(elements) # print result modlist.append(result) return modlist RSTDIR = os.path.abspath(os.path.join(BASE_DIR, "contributor/api")) SRCS = [('ironic_ui', ROOT), ] EXCLUDED_MODULES = () CURRENT_SOURCES = {} if not(os.path.exists(RSTDIR)): os.mkdir(RSTDIR) CURRENT_SOURCES[RSTDIR] = ['autoindex.rst'] INDEXOUT = open(os.path.join(RSTDIR, "autoindex.rst"), "w") INDEXOUT.write(""" ================= Source Code Index ================= .. contents:: :depth: 1 :local: """) for modulename, path in SRCS: sys.stdout.write("Generating source documentation for %s\n" % modulename) INDEXOUT.write("\n%s\n" % modulename.capitalize()) INDEXOUT.write("%s\n" % ("=" * len(modulename),)) INDEXOUT.write(".. toctree::\n") INDEXOUT.write(" :maxdepth: 1\n") INDEXOUT.write("\n") MOD_DIR = os.path.join(RSTDIR, modulename) CURRENT_SOURCES[MOD_DIR] = [] if not(os.path.exists(MOD_DIR)): os.mkdir(MOD_DIR) for module in find_autodoc_modules(modulename, path): if any([module.startswith(exclude) for exclude in EXCLUDED_MODULES]): print("Excluded module %s." % module) continue mod_path = os.path.join(path, *module.split(".")) generated_file = os.path.join(MOD_DIR, "%s.rst" % module) INDEXOUT.write(" %s/%s\n" % (modulename, module)) # Find the __init__.py module if this is a directory if os.path.isdir(mod_path): source_file = ".".join((os.path.join(mod_path, "__init__"), "py",)) else: source_file = ".".join((os.path.join(mod_path), "py")) CURRENT_SOURCES[MOD_DIR].append("%s.rst" % module) # Only generate a new file if the source has changed or we don't # have a doc file to begin with. if not os.access(generated_file, os.F_OK) or ( os.stat(generated_file).st_mtime < os.stat(source_file).st_mtime): print("Module %s updated, generating new documentation." % module) FILEOUT = open(generated_file, "w") header = "The :mod:`%s` Module" % module FILEOUT.write("%s\n" % ("=" * len(header),)) FILEOUT.write("%s\n" % header) FILEOUT.write("%s\n" % ("=" * len(header),)) FILEOUT.write(".. automodule:: %s\n" % module) FILEOUT.write(" :members:\n") FILEOUT.write(" :undoc-members:\n") FILEOUT.write(" :show-inheritance:\n") FILEOUT.write(" :noindex:\n") FILEOUT.close() INDEXOUT.close() # Delete auto-generated .rst files for sources which no longer exist for directory, subdirs, files in list(os.walk(RSTDIR)): for old_file in files: if old_file not in CURRENT_SOURCES.get(directory, []): print("Removing outdated file for %s" % old_file) os.remove(os.path.join(directory, old_file)) write_autodoc_index() # -- 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' # A list of ignored prefixes for module index sorting. modindex_common_prefix = ['ironic-ui.'] # 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} ironic-ui-3.4.0/tox.ini0000666000175000017500000000524313444452675014775 0ustar zuulzuul00000000000000[tox] minversion = 1.8 skipsdist = True envlist = py3,py27,pep8 [testenv] usedevelop = True install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages} setenv = VIRTUAL_ENV={envdir} NOSE_WITH_OPENSTACK=1 NOSE_OPENSTACK_COLOR=1 NOSE_OPENSTACK_RED=0.05 NOSE_OPENSTACK_YELLOW=0.025 NOSE_OPENSTACK_SHOW_ELAPSED=1 DJANGO_SETTINGS_MODULE=ironic_ui.test.settings deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt commands = {toxinidir}/manage.py test ironic_ui --settings=ironic_ui.test.settings --exclude-tag integration [testenv:integration] # Run integration tests only passenv = AVCONV_INSTALLED setenv = PYTHONHASHSEED=0 INTEGRATION_TESTS=1 SELENIUM_HEADLESS=1 HORIZON_INTEGRATION_TESTS_CONFIG_FILE=ironic_ui/test/integration/horizon.conf basepython = python2.7 commands = python manage.py test ironic_ui.test.integration --settings=ironic_ui.test.settings --tag integration [testenv:pep8] basepython = python3 commands = flake8 {posargs} [testenv:venv] basepython = python3 commands = {posargs} [testenv:py3-dev] basepython = python3 commands = pip install {env:HORIZON_REPO:git+git://git.openstack.org/openstack/horizon} {[testenv]commands} [testenv:cover] basepython = python3 commands = python setup.py test --coverage --testr-args='{posargs}' [testenv:docs] basepython = python3 commands = python setup.py build_sphinx [testenv:debug] basepython = python3 commands = oslo_debug_helper -t ironic_ui/test/tests {posargs} [flake8] show-source = True builtins = _ exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build [testenv:releasenotes] basepython = python3 commands = sphinx-build -a -W -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html [testenv:extractmessages] basepython = python3 commands = pybabel extract -F babel-django.cfg \ -o ironic_ui/locale/django.pot -k gettext_noop -k gettext_lazy -k ngettext_lazy:1,2 \ -k ugettext_noop -k ugettext_lazy -k ungettext_lazy:1,2 -k npgettext:1c,2,3 \ -k pgettext_lazy:1c,2 -k npgettext_lazy:1c,2,3 --add-comments Translators: ironic_ui pybabel extract -F babel-djangojs.cfg \ -o ironic_ui/locale/djangojs.pot -k gettext_noop -k gettext_lazy -k ngettext_lazy:1,2 \ -k ugettext_noop -k ugettext_lazy -k ungettext_lazy:1,2 -k npgettext:1c,2,3 \ -k pgettext_lazy:1c,2 -k npgettext_lazy:1c,2,3 --add-comments Translators: ironic_ui [testenv:lower-constraints] basepython = python3 deps = -c{toxinidir}/lower-constraints.txt -r{toxinidir}/test-requirements.txt -r{toxinidir}/requirements.txt ironic-ui-3.4.0/README.rst0000666000175000017500000000144113444452675015145 0ustar zuulzuul00000000000000======================== Team and repository tags ======================== .. image:: https://governance.openstack.org/tc/badges/ironic-ui.svg :target: https://governance.openstack.org/tc/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: https://docs.openstack.org/ironic-ui/latest * Release notes: https://docs.openstack.org/releasenotes/ironic-ui/ * Source: https://git.openstack.org/cgit/openstack/ironic-ui * Bugs: https://storyboard.openstack.org/#!/project/952 Features -------- * View bare metal nodes * View node details * Apply maintenance and power on/off actions to the nodes ironic-ui-3.4.0/releasenotes/0000775000175000017500000000000013444452775016146 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/0000775000175000017500000000000013444452775017446 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/ocata.rst0000666000175000017500000000027213444452675021271 0ustar zuulzuul00000000000000============================================ Ocata Series Release Notes (2.2.0 - 2.2.x) ============================================ .. release-notes:: :branch: origin/stable/ocata ironic-ui-3.4.0/releasenotes/source/pike.rst0000666000175000017500000000021713444452675021131 0ustar zuulzuul00000000000000=================================== Pike Series Release Notes =================================== .. release-notes:: :branch: stable/pike ironic-ui-3.4.0/releasenotes/source/queens.rst0000666000175000017500000000022313444452675021476 0ustar zuulzuul00000000000000=================================== Queens Series Release Notes =================================== .. release-notes:: :branch: stable/queens ironic-ui-3.4.0/releasenotes/source/unreleased.rst0000666000175000017500000000016013444452675022325 0ustar zuulzuul00000000000000============================== Current Series Release Notes ============================== .. release-notes:: ironic-ui-3.4.0/releasenotes/source/Makefile0000666000175000017500000001670213444452675021115 0ustar zuulzuul00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " applehelp to make an Apple Help Book" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " epub3 to make an epub3" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" @echo " coverage to run coverage check of the documentation (if enabled)" @echo " dummy to check syntax errors of document sources" .PHONY: clean clean: rm -rf $(BUILDDIR)/* .PHONY: html html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." .PHONY: dirhtml dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." .PHONY: singlehtml singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." .PHONY: pickle pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." .PHONY: json json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." .PHONY: htmlhelp htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." .PHONY: qthelp qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ironic-ui.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ironic-ui.qhc" .PHONY: applehelp applehelp: $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp @echo @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." @echo "N.B. You won't be able to view it unless you put it in" \ "~/Library/Documentation/Help or install it in your application" \ "bundle." .PHONY: devhelp devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/ironic-ui" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ironic-ui" @echo "# devhelp" .PHONY: epub epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." .PHONY: epub3 epub3: $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 @echo @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." .PHONY: latex latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." .PHONY: latexpdf latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." .PHONY: latexpdfja latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." .PHONY: text text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." .PHONY: man man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." .PHONY: texinfo texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." .PHONY: info info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." .PHONY: gettext gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." .PHONY: changes changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." .PHONY: linkcheck linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." .PHONY: doctest doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." .PHONY: coverage coverage: $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage @echo "Testing of coverage in the sources finished, look at the " \ "results in $(BUILDDIR)/coverage/python.txt." .PHONY: xml xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." .PHONY: pseudoxml pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." .PHONY: dummy dummy: $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy @echo @echo "Build finished. Dummy builder generates no files." ironic-ui-3.4.0/releasenotes/source/newton.rst0000666000175000017500000000027613444452675021520 0ustar zuulzuul00000000000000============================================= Newton Series Release Notes (2.0.0 - 2.1.x) ============================================= .. release-notes:: :branch: origin/stable/newton ironic-ui-3.4.0/releasenotes/source/index.rst0000666000175000017500000000024613444452675021312 0ustar zuulzuul00000000000000======================== Ironic UI Release Notes ======================== .. toctree:: :maxdepth: 1 unreleased rocky queens pike ocata newton ironic-ui-3.4.0/releasenotes/source/rocky.rst0000666000175000017500000000022113444452675021323 0ustar zuulzuul00000000000000=================================== Rocky Series Release Notes =================================== .. release-notes:: :branch: stable/rocky ironic-ui-3.4.0/releasenotes/source/locale/0000775000175000017500000000000013444452775020705 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/en_GB/0000775000175000017500000000000013444452775021657 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/en_GB/LC_MESSAGES/0000775000175000017500000000000013444452775023444 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po0000666000175000017500000003067113444452675026505 0ustar zuulzuul00000000000000# Andi Chandler , 2017. #zanata # Andi Chandler , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-08-27 16:02+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-08-28 02:05+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: English (United Kingdom)\n" "Language: en_GB\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "2.0.0" msgstr "2.0.0" msgid "2.1.0" msgstr "2.1.0" msgid "2.2.0" msgstr "2.2.0" msgid "3.0.0" msgstr "3.0.0" msgid "3.1.0" msgstr "3.1.0" msgid "" "A backend mock has been added that enables better unit testing of the ironic-" "ui application by mocking the ironic API service. The mock utilizes angular " "$httpbackend handlers to intercept requests targeted at the ironic-ui server-" "side REST endpoints, and returns simulated responses." msgstr "" "A backend mock has been added that enables better unit testing of the Ironic-" "UI application by mocking the ironic API service. The mock utilises angular " "$httpbackend handlers to intercept requests targeted at the Ironic-UI server-" "side REST endpoints, and returns simulated responses." msgid "" "A column has been added that displays the UUID of the portgroup to which the " "port belongs." msgstr "" "A column has been added that displays the UUID of the portgroup to which the " "port belongs." msgid "" "A number of unit tests have been developed that illustrate the use of the " "backend mock functionality." msgstr "" "A number of unit tests have been developed that illustrate the use of the " "backend mock functionality." msgid "A portgroup table has been added to the node-details/configuration tab." msgstr "" "A portgroup table has been added to the node-details/configuration tab." msgid "Ability to enroll a node without all required fields for other states" msgstr "Ability to enrol a node without all required fields for other states" msgid "Add and delete nodes" msgstr "Add and delete nodes" msgid "Add and delete ports" msgstr "Add and delete ports" msgid "" "Additional properties are displayed by clicking the detail-toggle-selector " "for that port in a similar manner to the portgroup table." msgstr "" "Additional properties are displayed by clicking the detail-toggle-selector " "for that port in a similar manner to the portgroup table." msgid "" "Adds support for a user to be able to edit the ``resource_class`` field when " "enrolling/updating a node." msgstr "" "Adds support for a user to be able to edit the ``resource_class`` field when " "enrolling/updating a node." msgid "" "Adds support for editing portgroups from the node-details/configuration " "page. Each entry in the portgroups table has an associated ``Edit " "portgroup`` button that when clicked will launch a modal dialog that guides " "the user in making changes." msgstr "" "Adds support for editing portgroups from the node-details/configuration " "page. Each entry in the portgroups table has an associated ``Edit " "portgroup`` button that when clicked will launch a modal dialogue that " "guides the user in making changes." msgid "" "Adds support for injecting non-maskable interrupts into a node. A new action " "``Inject NMI`` has been added to the node actions dropdown menu in the " "``Node Details`` page." msgstr "" "Adds support for injecting non-maskable interrupts into a node. A new action " "``Inject NMI`` has been added to the node actions dropdown menu in the " "``Node Details`` page." msgid "" "Adds support for selecting driver interfaces for dynamic drivers while " "creating nodes. The support for driver interfaces is not compatible with " "classic drivers. This feature is supported with Pike and further versions of " "ironic." msgstr "" "Adds support for selecting driver interfaces for dynamic drivers while " "creating nodes. The support for driver interfaces is not compatible with " "classic drivers. This feature is supported with Pike and further versions of " "Ironic." msgid "" "Adds support for viewing and managing the portgroups associated with an " "ironic node." msgstr "" "Adds support for viewing and managing the portgroups associated with an " "ironic node." msgid "" "Adds the ability to view and edit the node's ``resource_class`` field on the " "node-details/configuration page." msgstr "" "Adds the ability to view and edit the node's ``resource_class`` field on the " "node-details/configuration page." msgid "" "Although the backend mock is a work in progress, enough functionality " "already exists to support test development for the current set of in-" "progress features." msgstr "" "Although the backend mock is a work in progress, enough functionality " "already exists to support test development for the current set of in-" "progress features." msgid "Breadcrumbs have been added" msgstr "Breadcrumbs have been added" msgid "Current Series Release Notes" msgstr "Current Series Release Notes" msgid "" "Currently it is not possible to edit a node via the UI once it has been " "enrolled. Therefore, the enrollment must be done accurately to ensure the " "node is enrolled accurately and can then be made available. At present, any " "errors made during enrollment can only be corrected by deleting the node and " "enrolling it again." msgstr "" "Currently it is not possible to edit a node via the UI once it has been " "enrolled. Therefore, the enrolment must be done accurately to ensure the " "node is enrolled accurately and can then be made available. At present, any " "errors made during enrolment can only be corrected by deleting the node and " "enrolling it again." msgid "" "Detailed information for a portgroup is obtained by clicking the detail-" "toggle-selector (right-chevron) located in its table row. The additional " "information is displayed in a row expansion." msgstr "" "Detailed information for a portgroup is obtained by clicking the detail-" "toggle-selector (right-chevron) located in its table row. The additional " "information is displayed in a row expansion." msgid "" "Each row in the table displays a single portgroup, and has column entries " "for its UUID, MAC address, name, and number of ports. A dropdown menu is " "also provided that contains actions that can be applied to the portgroup." msgstr "" "Each row in the table displays a single portgroup, and has column entries " "for its UUID, MAC address, name, and number of ports. A dropdown menu is " "also provided that contains actions that can be applied to the portgroup." msgid "Edit nodes after creation" msgstr "Edit nodes after creation" msgid "" "For ``shellinabox``, the value is an anchor with the URL required to access " "the web console and title ``shellinabox``. For others, the value is a string " "representation of the ``console_info`` object returned by the ``get_console " "api`` call." msgstr "" "For ``shellinabox``, the value is an anchor with the URL required to access " "the web console and title ``shellinabox``. For others, the value is a string " "representation of the ``console_info`` object returned by the ``get_console " "api`` call." msgid "Ironic UI Release Notes" msgstr "Ironic UI Release Notes" msgid "Known Issues" msgstr "Known Issues" msgid "Move nodes between enroll, manageable, available and active states" msgstr "Move nodes between enrol, manageable, available and active states" msgid "New Features" msgstr "New Features" msgid "Newton Series Release Notes (2.0.0 - 2.1.x)" msgstr "Newton Series Release Notes (2.0.0 - 2.1.x)" msgid "Ocata Series Release Notes (2.2.0 - 2.2.x)" msgstr "Ocata Series Release Notes (2.2.0 - 2.2.x)" msgid "Panel hidden if baremetal service or admin rights are not present" msgstr "Panel hidden if baremetal service or admin rights are not present" msgid "Pike Series Release Notes" msgstr "Pike Series Release Notes" msgid "Prelude" msgstr "Prelude" msgid "Queens Series Release Notes" msgstr "Queens Series Release Notes" msgid "Rocky Series Release Notes" msgstr "Rocky Series Release Notes" msgid "" "Support has been added for inspecting nodes. For a node that is in the " "``manageable`` state, its action menu will include an ``Inspect`` button. " "Node action menus are located in the node-list and node-detail pages." msgstr "" "Support has been added for inspecting nodes. For a node that is in the " "``manageable`` state, its action menu will include an ``Inspect`` button. " "Node action menus are located in the node-list and node-detail pages." msgid "" "Support has been added for starting, stopping, and accessing the console " "associated with a node." msgstr "" "Support has been added for starting, stopping, and accessing the console " "associated with a node." msgid "The Node Details/Configuration tab now shows the node's boot device." msgstr "The Node Details/Configuration tab now shows the node's boot device." msgid "" "The ``Properties`` column has been replaced with a column that displays only " "the boolean value of the ``pxe_enabled`` property." msgstr "" "The ``Properties`` column has been replaced with a column that displays only " "the boolean value of the ``pxe_enabled`` property." msgid "" "The action dropdown menu in the node-details panel has a new item ``Enable|" "Disable console``." msgstr "" "The action dropdown menu in the node-details panel has a new item ``Enable|" "Disable console``." msgid "" "The current cleaning step is displayed in the Provisioning Status section of " "the node-details/overview page" msgstr "" "The current cleaning step is displayed in the Provisioning Status section of " "the node-details/overview page" msgid "" "The node-details/configuration page has been extended to enable the user to " "edit ports after initial creation." msgstr "" "The node-details/configuration page has been extended to enable the user to " "edit ports after initial creation." msgid "" "The node-details/overview panel has a new ``Console info`` item in the " "``General`` section. The value of this field is dependent on the console " "type." msgstr "" "The node-details/overview panel has a new ``Console info`` item in the " "``General`` section. The value of this field is dependent on the console " "type." msgid "" "The port table in node-details/configuration tab has been modified as " "follows:" msgstr "" "The port table in node-details/configuration tab has been modified as " "follows:" msgid "" "The user is now able to abort a node cleaning operation. When cleaning is " "aborted the node is moved from the ``CLEAN WAIT`` state to the ``CLEAN " "FAIL`` state. When appropriate an \"Abort cleaning\" action will be present " "in individual node action menu." msgstr "" "The user is now able to abort a node cleaning operation. When cleaning is " "aborted the node is moved from the ``CLEAN WAIT`` state to the ``CLEAN " "FAIL`` state. When appropriate an \"Abort cleaning\" action will be present " "in individual node action menu." msgid "" "The user is now able to specify the pxe_enabled and local-link-connection " "attributes as part of defining/editing ports." msgstr "" "The user is now able to specify the pxe_enabled and local-link-connection " "attributes as part of defining/editing ports." msgid "" "This release adds support for adding and deleting nodes. Support has also " "been added for adding and deleting ports. The panel will now be hidden if " "the baremetal service is not present in the scenario where the collection of " "running services differs between multiple keystone regions." msgstr "" "This release adds support for adding and deleting nodes. Support has also " "been added for adding and deleting ports. The panel will now be hidden if " "the baremetal service is not present in the scenario where the collection of " "running services differs between multiple Keystone regions." msgid "" "This release adds support for editing nodes and moving those nodes between " "enroll, manageable, available and active states. It is now possible to " "enroll a node without all required fields for moving to manageable state " "being present due to the facility for editing the node once it has been " "created." msgstr "" "This release adds support for editing nodes and moving those nodes between " "enrol, manageable, available and active states. It is now possible to enrol " "a node without all required fields for moving to manageable state being " "present due to the facility for editing the node once it has been created." msgid "UX improvements across the interface" msgstr "UX improvements across the interface" ironic-ui-3.4.0/releasenotes/source/locale/ko_KR/0000775000175000017500000000000013444452775021712 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/ko_KR/LC_MESSAGES/0000775000175000017500000000000013444452775023477 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po0000666000175000017500000001274113444452675026536 0ustar zuulzuul00000000000000# Eunseop Shin , 2016. #zanata # minwook-shin , 2017. #zanata # Sungjin Kang , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-03-09 11:12+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-04-01 05:10+0000\n" "Last-Translator: Sungjin Kang \n" "Language-Team: Korean (South Korea)\n" "Language: ko_KR\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "2.0.0" msgstr "2.0.0" msgid "2.1.0" msgstr "2.1.0" msgid "2.2.0" msgstr "2.2.0" msgid "3.0.0" msgstr "3.0.0" msgid "3.1.0" msgstr "3.1.0" msgid "Ability to enroll a node without all required fields for other states" msgstr "다른 상태를 위해 요구되는 모든 필드를 제외한 노드 등록 능력" msgid "Add and delete nodes" msgstr "노드 추가, 삭제" msgid "Add and delete ports" msgstr "포트 추가, 삭제" msgid "Breadcrumbs have been added" msgstr "Breadcrumbs가 추가되었습니다." msgid "Current Series Release Notes" msgstr "최신 시리즈에 대한 릴리즈 노트" msgid "" "Currently it is not possible to edit a node via the UI once it has been " "enrolled. Therefore, the enrollment must be done accurately to ensure the " "node is enrolled accurately and can then be made available. At present, any " "errors made during enrollment can only be corrected by deleting the node and " "enrolling it again." msgstr "" "현재, 한번 등록된 노드를 UI를 통해 수정 하는것은 불가능합니다. 따라서 등록" "이 정확하게 등록되어 있는지 확인할 수 있도록 등록을 정확하게 수행해야 합니" "다. 현재, 등록과정에서 일어나는 모든 에러들은 노드를 제거 하고 다시 등록 하" "는 방법으로만 고칠 수 있습니다." msgid "Edit nodes after creation" msgstr "생성 이전에 노드 수정" msgid "Ironic UI Release Notes" msgstr "Ironic UI에 대한 릴리즈 노트" msgid "Known Issues" msgstr "알려진 이슈" msgid "Move nodes between enroll, manageable, available and active states" msgstr "" "노드의 수정과 등록, 관리가능, 사용가능 그리고 활성화 상태 사이에서 노드의 이" "동." msgid "New Features" msgstr "새로운 기능" msgid "Newton Series Release Notes (2.0.0 - 2.1.x)" msgstr "Newton 시리즈에 대한 릴리즈 노트 (2.0.0 - 2.1.x)" msgid "Ocata Series Release Notes (2.2.0 - 2.2.x)" msgstr "Ocata 시리즈에 대한 릴리즈 노트 (2.2.0 - 2.2.x)" msgid "Panel hidden if baremetal service or admin rights are not present" msgstr "패널은 베어메탈 서비스 이거나 관지자의 권한이 없을때 숨겨집니다." msgid "Pike Series Release Notes" msgstr "Pike 시리즈에 대한 릴리즈 노트" msgid "Prelude" msgstr "서문" msgid "Queens Series Release Notes" msgstr "Queens 시리즈 릴리즈 노트" msgid "" "The port table in node-details/configuration tab has been modified as " "follows:" msgstr "노드 세부 정보 / 구성 탭에서 포트 표가 다음과 같이 수정되었습니다." msgid "" "The user is now able to abort a node cleaning operation. When cleaning is " "aborted the node is moved from the ``CLEAN WAIT`` state to the ``CLEAN " "FAIL`` state. When appropriate an \"Abort cleaning\" action will be present " "in individual node action menu." msgstr "" "이제 사용자는 노드 정리 작업을 중단 할 수 있습니다. 정리 프로세스가 중단되면 " "노드는 ``CLEAN WAIT`` 상태에서 ``CLEAN FAIL`` 상태로 변합니다. 정리 프로세스" "중 노드 동작 메뉴에 \"정리 작업 중단\" 동작 버튼이 보입니다." msgid "" "The user is now able to specify the pxe_enabled and local-link-connection " "attributes as part of defining/editing ports." msgstr "" "이제 사용자는 포트 정의 / 편집의 일부 항목으로 pxe_enabled, local-link-" "connection 속성을 지정할 수 있습니다." msgid "" "This release adds support for adding and deleting nodes. Support has also " "been added for adding and deleting ports. The panel will now be hidden if " "the baremetal service is not present in the scenario where the collection of " "running services differs between multiple keystone regions." msgstr "" "이번 릴리즈는 노드의 추가삭제에 관한 지원을 추가합니다. 또한 포트 추가삭제에 " "대한 지원도 포함합니다. 패널은 현재 베어메탈 서비스가 실행중인 서비스의 컬렉" "션이 다중 keystone영역에서 다르다는 시나리오에 존재하지 않을 때 숨겨집니다." msgid "" "This release adds support for editing nodes and moving those nodes between " "enroll, manageable, available and active states. It is now possible to " "enroll a node without all required fields for moving to manageable state " "being present due to the facility for editing the node once it has been " "created." msgstr "" "이번 릴리즈는 노드의 수정과 등록, 관리가능, 사용가능 그리고 활성화 상태 사이" "에서 노드의 이동에 대한 지원을 추가합니다. 현재 노드를 관리가능 상태로 옮기" "기 위해 요청된 모든 필드가 없어도 등록하는것이 가능합니다. 때문에 노드를 편집" "하기 위한 기능은 노드가 생성 됬을 때 한번만 가능합니다." msgid "UX improvements across the interface" msgstr "인터페이스 전반에 걸친 UX 향상" ironic-ui-3.4.0/releasenotes/source/locale/id/0000775000175000017500000000000013444452775021301 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/id/LC_MESSAGES/0000775000175000017500000000000013444452775023066 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po0000666000175000017500000003130413444452675026121 0ustar zuulzuul00000000000000# suhartono , 2017. #zanata # suhartono , 2018. #zanata # suhartono , 2019. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-01-17 10:32+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2019-01-21 04:55+0000\n" "Last-Translator: suhartono \n" "Language-Team: Indonesian\n" "Language: id\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "2.0.0" msgstr "2.0.0" msgid "2.1.0" msgstr "2.1.0" msgid "2.2.0" msgstr "2.2.0" msgid "3.0.0" msgstr "3.0.0" msgid "3.1.0" msgstr "3.1.0" msgid "" "A backend mock has been added that enables better unit testing of the ironic-" "ui application by mocking the ironic API service. The mock utilizes angular " "$httpbackend handlers to intercept requests targeted at the ironic-ui server-" "side REST endpoints, and returns simulated responses." msgstr "" "Sebuah backend mock telah ditambahkan yang memungkinkan pengujian unit " "aplikasi ironic-ui lebih baik dengan mocking layanan API ironis. The mock " "menggunakan angular $httpbackend handlers untuk mencegat permintaan yang " "ditargetkan pada endpoint REST server-side ironic-ui, dan mengembalikan " "respons simulasi." msgid "" "A column has been added that displays the UUID of the portgroup to which the " "port belongs." msgstr "" "Kolom telah ditambahkan yang menampilkan UUID dari portgroup tempat port " "berada." msgid "" "A number of unit tests have been developed that illustrate the use of the " "backend mock functionality." msgstr "" "Sejumlah unit test telah dikembangkan yang menggambarkan penggunaan fungsi " "mock backend." msgid "A portgroup table has been added to the node-details/configuration tab." msgstr "Tabel portgroup telah ditambahkan ke node-details/configuration tab." msgid "Ability to enroll a node without all required fields for other states" msgstr "" "Kemampuan untuk mendaftar node tanpa semua field yang diperlukan untuk " "keadaan lainnya" msgid "Add and delete nodes" msgstr "Menambah dan menghapus node" msgid "Add and delete ports" msgstr "Menambah dan menghapus port" msgid "" "Additional properties are displayed by clicking the detail-toggle-selector " "for that port in a similar manner to the portgroup table." msgstr "" "Properti tambahan ditampilkan dengan mengklik detail-toggle-selector untuk " "port tersebut dengan cara yang sama ke tabel portgroup." msgid "" "Adds support for a user to be able to edit the ``resource_class`` field when " "enrolling/updating a node." msgstr "" "Menambahkan dukungan bagi pengguna untuk dapat mengedit field " "``resource_class`` saat enrolling/updating sebuah node." msgid "" "Adds support for editing portgroups from the node-details/configuration " "page. Each entry in the portgroups table has an associated ``Edit " "portgroup`` button that when clicked will launch a modal dialog that guides " "the user in making changes." msgstr "" "Menambahkan dukungan untuk mengedit portgroup dari node-details/" "configuration page. Setiap entri di tabel portgroup memiliki tombol `Edit " "portgroup` yang terkait saat diklik akan meluncurkan dialog modal yang " "membimbing pengguna dalam melakukan perubahan." msgid "" "Adds support for injecting non-maskable interrupts into a node. A new action " "``Inject NMI`` has been added to the node actions dropdown menu in the " "``Node Details`` page." msgstr "" "Menambahkan dukungan untuk menyuntikkan non-maskable interrupts ke node. " "Tindakan baru ``Inject NMI`` telah ditambahkan ke menu dropdown node node di " "halaman ``Node Details``." msgid "" "Adds support for selecting driver interfaces for dynamic drivers while " "creating nodes. The support for driver interfaces is not compatible with " "classic drivers. This feature is supported with Pike and further versions of " "ironic." msgstr "" "Menambahkan dukungan untuk memilih interface driver untuk driver dinamis " "sambil membuat node. Dukungan untuk interface driver tidak kompatibel dengan " "driver klasik. Fitur ini didukung dengan Pike dan versi ironis lainnya." msgid "" "Adds support for viewing and managing the portgroups associated with an " "ironic node." msgstr "" "Menambahkan dukungan untuk melihat dan mengelola portgroups yang terkait " "dengan node ironic." msgid "" "Adds the ability to view and edit the node's ``resource_class`` field on the " "node-details/configuration page." msgstr "" "Menambahkan kemampuan untuk melihat dan mengedit field `resource_class` di " "node-details/configuration page." msgid "" "Although the backend mock is a work in progress, enough functionality " "already exists to support test development for the current set of in-" "progress features." msgstr "" "Meskipun backend mock adalah pekerjaan yang sedang berjalan, fungsionalitas " "yang cukup sudah ada untuk mendukung test development untuk rangkaian fitur " "in-progress saat ini." msgid "Breadcrumbs have been added" msgstr "Breadcrumbs telah ditambahkan" msgid "Current Series Release Notes" msgstr "Current Series Release Notes (catatan rilis seri saat ini)" msgid "" "Currently it is not possible to edit a node via the UI once it has been " "enrolled. Therefore, the enrollment must be done accurately to ensure the " "node is enrolled accurately and can then be made available. At present, any " "errors made during enrollment can only be corrected by deleting the node and " "enrolling it again." msgstr "" "Saat ini tidak mungkin untuk mengedit node melalui UI setelah telah " "terdaftar. Oleh karena itu, pendaftaran harus dilakukan secara akurat untuk " "memastikan node terdaftar secara akurat dan kemudian dapat dibuat tersedia. " "Saat ini, setiap kesalahan yang dibuat saat pendaftaran hanya dapat " "dikoreksi dengan menghapus node dan mendaftarkan lagi." msgid "" "Detailed information for a portgroup is obtained by clicking the detail-" "toggle-selector (right-chevron) located in its table row. The additional " "information is displayed in a row expansion." msgstr "" "Informasi terperinci untuk portgroup diperoleh dengan mengklik detail-toggle-" "selector (right-chevron) yang berada di baris tabelnya. Informasi tambahan " "ditampilkan dalam perluasan baris." msgid "" "Each row in the table displays a single portgroup, and has column entries " "for its UUID, MAC address, name, and number of ports. A dropdown menu is " "also provided that contains actions that can be applied to the portgroup." msgstr "" "Setiap baris dalam tabel menampilkan satu portgroup, dan memiliki entri " "kolom untuk UUID, alamat MAC, nama, dan jumlah port-nya. Menu dropdown juga " "disediakan yang berisi action yang dapat diterapkan ke portgroup." msgid "Edit nodes after creation" msgstr "Mengedit node setelah penciptaan" msgid "" "For ``shellinabox``, the value is an anchor with the URL required to access " "the web console and title ``shellinabox``. For others, the value is a string " "representation of the ``console_info`` object returned by the ``get_console " "api`` call." msgstr "" "Untuk ``shellinabox``, nilainya adalah anchor dengan URL yang dibutuhkan " "untuk mengakses web console dan title ``shellinabox``. Bagi orang lain, " "nilainya adalah representasi string dari objek ``console_info`` yang " "dikembalikan oleh ``get_console api`` call." msgid "Ironic UI Release Notes" msgstr "Ironic UI Release Notes (catalan rilis Ironic UI)" msgid "Known Issues" msgstr "Masalah yang diikenal" msgid "Move nodes between enroll, manageable, available and active states" msgstr "" "Pindahkan node di antara keadaan yang dapat didaftar, dikelola, dan " "disediakan" msgid "New Features" msgstr "Fitur baru" msgid "Newton Series Release Notes (2.0.0 - 2.1.x)" msgstr "Catatan rilis seri Newton(2.0.0 - 2.1.x)" msgid "Ocata Series Release Notes (2.2.0 - 2.2.x)" msgstr "Catatan rilis seri Ocata (2.2.0 - 2.2.x)" msgid "Panel hidden if baremetal service or admin rights are not present" msgstr "Panel tersembunyi jika layanan baremetal atau hak admin tidak hadir" msgid "Pike Series Release Notes" msgstr "Catatan Peluncuran Seri Pike" msgid "Prelude" msgstr "Prelude" msgid "Queens Series Release Notes" msgstr "Catatan Rilis Seri Queens" msgid "Rocky Series Release Notes" msgstr "Rocky Series Release Notes" msgid "" "Support has been added for inspecting nodes. For a node that is in the " "``manageable`` state, its action menu will include an ``Inspect`` button. " "Node action menus are located in the node-list and node-detail pages." msgstr "" "Dukungan telah ditambahkan untuk node pemeriksaan. Untuk node yang ada di " "keadaan ``manageable``, menu aksinya akan mencakup tombol ``Inspect``. Menu " "tindakan node terletak di laman node-list dan node-detail." msgid "" "Support has been added for starting, stopping, and accessing the console " "associated with a node." msgstr "" "Dukungan telah ditambahkan untuk memulai, menghentikan, dan mengakses konsol " "yang terkait dengan sebuah simpul." msgid "The Node Details/Configuration tab now shows the node's boot device." msgstr "" "Tab Node Detail/Configuration sekarang menunjukkan perangkat boot node." msgid "" "The ``Properties`` column has been replaced with a column that displays only " "the boolean value of the ``pxe_enabled`` property." msgstr "" "Kolom `` Properti`` telah diganti dengan kolom yang hanya menampilkan nilai " "boolean dari properti ``pxe_enabled``." msgid "" "The action dropdown menu in the node-details panel has a new item ``Enable|" "Disable console``." msgstr "" "Menu dropdown tindakan di panel rincian node memiliki item baru ``Enable|" "Disable console``." msgid "" "The current cleaning step is displayed in the Provisioning Status section of " "the node-details/overview page" msgstr "" "Langkah pembersihan saat ini ditampilkan di bagian Provisioning Status dari " "laman node-details/overview." msgid "" "The node-details/configuration page has been extended to enable the user to " "edit ports after initial creation." msgstr "" "Laman node-details/configuration telah diperpanjang untuk memungkinkan " "pengguna untuk mengedit port setelah pembuatan awal." msgid "" "The node-details/overview panel has a new ``Console info`` item in the " "``General`` section. The value of this field is dependent on the console " "type." msgstr "" "Panel node-details/overview memiliki item ``Console info`` baru di bagian " "``General``. Nilai field ini bergantung pada tipe konsol." msgid "" "The port table in node-details/configuration tab has been modified as " "follows:" msgstr "" "Tabel port pada node-details/configuration tab telah dimodifikasi sebagai " "berikut:" msgid "" "The user is now able to abort a node cleaning operation. When cleaning is " "aborted the node is moved from the ``CLEAN WAIT`` state to the ``CLEAN " "FAIL`` state. When appropriate an \"Abort cleaning\" action will be present " "in individual node action menu." msgstr "" "Pengguna sekarang dapat membatalkan operasi pembersihan node. Saat " "pembersihan dibatalkan, node ini dipindahkan dari keadaan ``CLEAN WAIT`` ke " "keadaan ``CLEAN FAIL``. Saat yang tepat sebuah tindakan \"Abort cleaning\" " "akan hadir di menu tindakan node secara individu." msgid "" "The user is now able to specify the pxe_enabled and local-link-connection " "attributes as part of defining/editing ports." msgstr "" "Pengguna sekarang dapat menentukan pxe_enabled dan atribut lokal-link-" "connection sebagai bagian dari port defining/editing." msgid "" "This release adds support for adding and deleting nodes. Support has also " "been added for adding and deleting ports. The panel will now be hidden if " "the baremetal service is not present in the scenario where the collection of " "running services differs between multiple keystone regions." msgstr "" "Rilis ini menambahkan dukungan untuk menambah dan menghapus node. Dukungan " "juga telah ditambahkan untuk menambah dan menghapus port. Panel sekarang " "akan disembunyikan jika layanan baremetal tidak hadir dalam skenario dimana " "koleksi menjalankan layanan berbeda antara beberapa keystone region." msgid "" "This release adds support for editing nodes and moving those nodes between " "enroll, manageable, available and active states. It is now possible to " "enroll a node without all required fields for moving to manageable state " "being present due to the facility for editing the node once it has been " "created." msgstr "" "Rilis ini menambahkan dukungan untuk mengedit node dan bergerak dimana node " "di antara keadaan didaftar, dikelola, tersedia dan aktif. Sekarang mungkin " "untuk mendaftar node tanpa semua field yang diperlukan untuk pindah ke " "keadaan terkelola sedang ada karena fasilitas untuk mengedit node telah " "dibuat." msgid "UX improvements across the interface" msgstr "Perbaikan UX di seluruh antarmuka" ironic-ui-3.4.0/releasenotes/source/locale/de/0000775000175000017500000000000013444452775021275 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/de/LC_MESSAGES/0000775000175000017500000000000013444452775023062 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po0000666000175000017500000003172713444452675026126 0ustar zuulzuul00000000000000# Robert Simai , 2016. #zanata # Robert Simai , 2017. #zanata # Andreas Jaeger , 2018. #zanata # Robert Simai , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-29 21:15+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-10-29 08:38+0000\n" "Last-Translator: Andreas Jaeger \n" "Language-Team: German\n" "Language: de\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "2.0.0" msgstr "2.0.0" msgid "2.1.0" msgstr "2.1.0" msgid "2.2.0" msgstr "2.2.0" msgid "3.0.0" msgstr "3.0.0" msgid "3.1.0" msgstr "3.1.0" msgid "" "A backend mock has been added that enables better unit testing of the ironic-" "ui application by mocking the ironic API service. The mock utilizes angular " "$httpbackend handlers to intercept requests targeted at the ironic-ui server-" "side REST endpoints, and returns simulated responses." msgstr "" "Ein Backend-Modell wurde hinzugefügt, welches durch Simulation der Ironic " "Dienst-API bessere Unit-Tests der Ironic-UI Applikation ermöglicht. Das " "Modell verwendet angular $httpbackend Handler, um Anfragen an serverseitige " "Ironic-UI REST Endpunkte abzufangen und gibt simulierte Antworten zurück." msgid "" "A column has been added that displays the UUID of the portgroup to which the " "port belongs." msgstr "" "Spalte hinzugefügt, die die UUID der Portgruppe zeigt, zu der der Port " "gehört." msgid "" "A number of unit tests have been developed that illustrate the use of the " "backend mock functionality." msgstr "" "Eine Menge Unit Tests wurde entwickelt, um die Backend-Mock-Funktionalität " "zu demonstrieren." msgid "A portgroup table has been added to the node-details/configuration tab." msgstr "" "Eine Portgruppentabelle wurde dem Knotendetails/Konfiguration Tab " "hinzugefügt." msgid "Ability to enroll a node without all required fields for other states" msgstr "" "Möglichkeit, einen Knoten ohne alle notwendigen Felder für weitere Zustände " "anzumelden" msgid "Add and delete nodes" msgstr "Hinzufügen und Löschen von Knoten" msgid "Add and delete ports" msgstr "Hinzufügen und Löschen von Ports" msgid "" "Additional properties are displayed by clicking the detail-toggle-selector " "for that port in a similar manner to the portgroup table." msgstr "" "Zusätzliche Eigenschaften für den Port werden durch einen Klick auf den " "detail-toggle-selector angezeigt, ähnlich wie in der Portgruppen-Tabelle." msgid "" "Adds support for a user to be able to edit the ``resource_class`` field when " "enrolling/updating a node." msgstr "" "Hinzufügen von Unterstützung für den Benutzer zum Bearbeiten des " "``resource_class`` Feldes beim ausrollen/aktualisieren eines Knotens." msgid "" "Adds support for editing portgroups from the node-details/configuration " "page. Each entry in the portgroups table has an associated ``Edit " "portgroup`` button that when clicked will launch a modal dialog that guides " "the user in making changes." msgstr "" "Fügt Unterstützung zum Bearbeiten von Portgruppen auf der Konten-Details/" "Konfiguration Seite hinzu. Jeder Eintrag in der Portgruppentabelle hat einen " "zugehörigen ``Portgruppe bearbeiten`` Button der bei einem Klick einen " "Modaldialog startet und den Benutzer durch mögliche Änderungen leitet." msgid "" "Adds support for injecting non-maskable interrupts into a node. A new action " "``Inject NMI`` has been added to the node actions dropdown menu in the " "``Node Details`` page." msgstr "" "Fügt Unterstützung zum injizieren von nicht-maskierbaren Interrupts in eine " "Node hinzu. Einen neue Aktion ``Inject NMI`` wurde dem Knoten-Aktionen " "Dropdownmenü in der ``Knoten Details`` Seite hinzugefügt." msgid "" "Adds support for selecting driver interfaces for dynamic drivers while " "creating nodes. The support for driver interfaces is not compatible with " "classic drivers. This feature is supported with Pike and further versions of " "ironic." msgstr "" "Fügt Unterstützung zur Auswahl von Treiberinterfaces für dynamische Treiber " "beim erstellen von Nodes hinzu. Die Unterstützung für Treiberinterfaces ist " "nicht kompatibel mit klassischen Treibern. Das Feature wird mit Pike und " "neueren Ironic-Versionen unterstützt." msgid "" "Adds support for viewing and managing the portgroups associated with an " "ironic node." msgstr "" "Fügt Unterstützung zur Anzeige und Bearbeitung von mit Ironic-Knoten " "verbundenen Portgruppen hinzu." msgid "" "Adds the ability to view and edit the node's ``resource_class`` field on the " "node-details/configuration page." msgstr "" "Fügt die Möglichkeit zum Betrachten und Bearbeiten der ``resource_class`` " "Felder der Knoten in der Knoten-Details/Konfiguration Seite." msgid "" "Although the backend mock is a work in progress, enough functionality " "already exists to support test development for the current set of in-" "progress features." msgstr "" "Obwohl das Backend-Modell noch in Arbeit ist existiert genug Funktionalität " "zum Testen der Installation mit den aktuell in der Entwicklung befindlichen " "Features." msgid "Breadcrumbs have been added" msgstr "Breadcrumbs wurden hinzugefügt" msgid "Current Series Release Notes" msgstr "Aktuelle Serie Releasenotes" msgid "" "Currently it is not possible to edit a node via the UI once it has been " "enrolled. Therefore, the enrollment must be done accurately to ensure the " "node is enrolled accurately and can then be made available. At present, any " "errors made during enrollment can only be corrected by deleting the node and " "enrolling it again." msgstr "" "Es ist gegenwärtig nicht möglich einen Knoten zu bearbeiten, nachdem er " "angemeldet wurde. Die Anmeldung muss daher sorgfältig durchgeführt werden, " "so dass der Knoten verfügbar gemacht werden kann. Jeglicher Fehler kann " "derzeit nur durch löschen und neu anlegen des Knotens und einen neue " "Anmeldung behoben werden." msgid "" "Detailed information for a portgroup is obtained by clicking the detail-" "toggle-selector (right-chevron) located in its table row. The additional " "information is displayed in a row expansion." msgstr "" "Detailinformation zu einer Portgruppe können mit einem Klick auf auf den " "Details-Umschalt-Auswähler (rechter Winkel) in der Tabellenzeile abgerufen " "werden. Die zusätzlichen Informationen werden in der damit erweiterten Zeile " "angezeigt." msgid "" "Each row in the table displays a single portgroup, and has column entries " "for its UUID, MAC address, name, and number of ports. A dropdown menu is " "also provided that contains actions that can be applied to the portgroup." msgstr "" "Jede Reihe in der Tabelle zeigt eine einzelne Portgruppe und hat " "Spalteneinträge für deren UUID, MAC-Adresse, Name und Anzahl der Ports. Ein " "Ausklappmenü zeigt Aktionen, die auf die Portgruppe angewendet werden können." msgid "Edit nodes after creation" msgstr "Knoten nach Erstellung bearbeiten" msgid "" "For ``shellinabox``, the value is an anchor with the URL required to access " "the web console and title ``shellinabox``. For others, the value is a string " "representation of the ``console_info`` object returned by the ``get_console " "api`` call." msgstr "" "Der Wert für ``shellinabox`` ist ein Anker mit der für den Zugriff auf die " "Webkonsole notwendige URL und dem Titel ``shellinabox``. Der Wert für andere " "ist eine Zeichen-Repräsentation des ``console_info`` Objektes, welches vom " "``get_console api`` Aufruf zurückgegeben wird." msgid "Ironic UI Release Notes" msgstr "Ironic UI Releasenotes" msgid "Known Issues" msgstr "Bekannte Probleme" msgid "Move nodes between enroll, manageable, available and active states" msgstr "Knoten zwischen anmelden, verwaltbar und aktiv Zuständen bewegen" msgid "New Features" msgstr "Neue Funktionen" msgid "Newton Series Release Notes (2.0.0 - 2.1.x)" msgstr "Newton Serie Releasenotes (2.0.0 - 2.1.x)" msgid "Ocata Series Release Notes (2.2.0 - 2.2.x)" msgstr "Ocata Serie Releasenotes (2.2.0 - 2.2.x)" msgid "Panel hidden if baremetal service or admin rights are not present" msgstr "" "Paneel wird versteckt, wenn Baremetal-Dienst oder Administratorenrechte " "fehlen" msgid "Pike Series Release Notes" msgstr "Pike Serie Releasenotes" msgid "Prelude" msgstr "Einleitung" msgid "Queens Series Release Notes" msgstr "Queens Serie Releasenotes" msgid "Rocky Series Release Notes" msgstr "Rocky Serie Releasenotes" msgid "" "Support has been added for inspecting nodes. For a node that is in the " "``manageable`` state, its action menu will include an ``Inspect`` button. " "Node action menus are located in the node-list and node-detail pages." msgstr "" "Unterstützung zum Inspizieren von Knoten wurde hinzugefügt. Bei Knoten im " "Zustand ``manageable`` enthält das Aktionenmenü einen ``Inspect`` Button. " "Knotenaktionen-Menüs finden sich in der Knotenliste und Knotendetail Seiten." msgid "" "Support has been added for starting, stopping, and accessing the console " "associated with a node." msgstr "" "Unterstützung zum Starten, Stoppen und zum Zugriff auf die mit einem Knoten " "verbundene Konsole hinzugefügt." msgid "The Node Details/Configuration tab now shows the node's boot device." msgstr "" "Der Knotendetails/Konfiguration Tab zeigt jetzt das Boot Device für den " "Knoten." msgid "" "The ``Properties`` column has been replaced with a column that displays only " "the boolean value of the ``pxe_enabled`` property." msgstr "" "Die ``Eigenschaften`` Kolumne wurde durch eine Kolumne ersetzt, die nur den " "Bool'schen Wert der ``pxe_enabled`` Eigenschaft zeigt." msgid "" "The action dropdown menu in the node-details panel has a new item ``Enable|" "Disable console``." msgstr "" "Das Aktionen Dropdown-Menü im Knotendetails-Panel hat einen neuen Eintrag " "``Konsole aktivieren|deaktivieren``." msgid "" "The current cleaning step is displayed in the Provisioning Status section of " "the node-details/overview page" msgstr "" "Der aktuelle Schritt beim Aufräumen wird in der Provisionierungs-Status " "Sektion der Knoten-Details/Übersicht Seite angezeigt." msgid "" "The node-details/configuration page has been extended to enable the user to " "edit ports after initial creation." msgstr "" "Die Knotendetails/Konfiguration Seite wurde erweitert, so dass Benutzer " "Ports nach der initialen Erstellung bearbeiten können." msgid "" "The node-details/overview panel has a new ``Console info`` item in the " "``General`` section. The value of this field is dependent on the console " "type." msgstr "" "Das Knotendetails/Übersicht Paneel hat einen neuen ``Console info`` Eintrag " "in der ``General`` Sektion. Der Wert des Feldes hängt vom Konsolentyp ab." msgid "" "The port table in node-details/configuration tab has been modified as " "follows:" msgstr "" "Die Porttabelle im Kotendetails/Konfigurationen-Tab wurde wie folgt geändert:" msgid "" "The user is now able to abort a node cleaning operation. When cleaning is " "aborted the node is moved from the ``CLEAN WAIT`` state to the ``CLEAN " "FAIL`` state. When appropriate an \"Abort cleaning\" action will be present " "in individual node action menu." msgstr "" "Der Benutzer kann jetzt eine Knoten-Aufräumaktion abbrechen. Beim Abbruch " "wird die " msgid "" "The user is now able to specify the pxe_enabled and local-link-connection " "attributes as part of defining/editing ports." msgstr "" "Der Benutzer kann die pxe_enabled und local-link-connection Attribute beim " "definieren/editieren von Ports angeben." msgid "" "This release adds support for adding and deleting nodes. Support has also " "been added for adding and deleting ports. The panel will now be hidden if " "the baremetal service is not present in the scenario where the collection of " "running services differs between multiple keystone regions." msgstr "" "Dieses Release fügt Unterstützung zum Hinzufügen und Löschen von Knoten " "hinzu, ebenso wie die Unterstützung zum Hinzufügen und Löschen von Ports. " "Das Paneel wird jetzt versteckt, wenn der Baremetal-Dienst im Szenario " "fehlt, in dem die Sammlung der laufenden Dienste sich zwischen multiplen " "Keystone-Regionen unterscheidet." msgid "" "This release adds support for editing nodes and moving those nodes between " "enroll, manageable, available and active states. It is now possible to " "enroll a node without all required fields for moving to manageable state " "being present due to the facility for editing the node once it has been " "created." msgstr "" "Dieses Release fügt Unterstützung zum Bearbeiten von Knoten sowie zum " "Bewegen der Knoten zwischen anmelden, verwaltbar und aktiv-Zustand hinzu. Es " "ist jetzt möglich, einen Knoten ohne Angabe aller erforderlicher Felder in " "den verwaltbar Zustand zu bewegen. Dies geschieht durch die Möglichkeit zum " "Bearbeiten des Knotens, nachdem er erstellt wurde." msgid "UX improvements across the interface" msgstr "UX-Verbesserungen im Interface" ironic-ui-3.4.0/releasenotes/source/locale/fr/0000775000175000017500000000000013444452775021314 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/fr/LC_MESSAGES/0000775000175000017500000000000013444452775023101 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po0000666000175000017500000000751013444452675026136 0ustar zuulzuul00000000000000# Gérald LONLAS , 2016. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-02-02 17:22+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-24 09:15+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 "2.0.0" msgstr "2.0.0" msgid "2.1.0" msgstr "2.1.0" msgid "Ability to enroll a node without all required fields for other states" msgstr "" "La possibilité d'enroller un nœud sans avoir tous les champs requis pour les " "autres états." msgid "Add and delete nodes" msgstr "Ajout et suppression des nœuds" msgid "Add and delete ports" msgstr "Ajout et suppression des ports" msgid "Breadcrumbs have been added" msgstr "Un fil d'ariane a été ajouté" msgid "Current Series Release Notes" msgstr "Note de la release actuelle" msgid "" "Currently it is not possible to edit a node via the UI once it has been " "enrolled. Therefore, the enrollment must be done accurately to ensure the " "node is enrolled accurately and can then be made available. At present, any " "errors made during enrollment can only be corrected by deleting the node and " "enrolling it again." msgstr "" "Actuellement il est impossible d'éditer un nœud depuis l'interface graphique " "une fois qu'il a été enrollé. C'est pour cela que l'enrollement doit être " "fait avec précision afin d'assurer qu'un nœud est correctement enrollé et " "qu'il peut être disponible. À présent, si une erreur se produit durant " "l'enrollement, la seule façon de le corriger est de supprimer le nœud et de " "recommencer." msgid "Edit nodes after creation" msgstr "Éditer un nœud après sa création" msgid "Ironic UI Release Notes" msgstr "Note de release pour Ironic UI" msgid "Known Issues" msgstr "Problèmes connus" msgid "Move nodes between enroll, manageable, available and active states" msgstr "" "Déplacer les nœuds entre les états : \"enroll\", \"manageable\", \"available" "\" et \"active\"" msgid "New Features" msgstr "Nouvelles fonctionnalités" msgid "Panel hidden if baremetal service or admin rights are not present" msgstr "" "Cache le panneau si le service Baremetal ou les droits admin ne sont pas " "présents." msgid "" "This release adds support for adding and deleting nodes. Support has also " "been added for adding and deleting ports. The panel will now be hidden if " "the baremetal service is not present in the scenario where the collection of " "running services differs between multiple keystone regions." msgstr "" "Cette release ajoute le support de l'ajout et la suppression de nœud. Le " "support d'ajout et de suppression des ports a également été ajouté. La " "fenêtre sera maintenant cachée si le service baremetal n'est pas présent " "dans le scénario où la collection des services en cours diverge entre " "plusieurs région Keystone." msgid "" "This release adds support for editing nodes and moving those nodes between " "enroll, manageable, available and active states. It is now possible to " "enroll a node without all required fields for moving to manageable state " "being present due to the facility for editing the node once it has been " "created." msgstr "" "Cette release ajoute le support de l'édition des nœuds et permet le " "déplacement des nœuds entre les états : \"enroll\", \"manageable\", " "\"available\" et \"active\". Il est désormais possible d'enroller un nœud " "sans avoir tous les champs requis pour le déplacer à l'état \"manageable\" " "qui est présent dans la fonction d'édition du nœud une fois qu'il a été créé." msgid "UX improvements across the interface" msgstr "Améliorations UX sur toutes l'interface" ironic-ui-3.4.0/releasenotes/source/locale/ru/0000775000175000017500000000000013444452775021333 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/ru/LC_MESSAGES/0000775000175000017500000000000013444452775023120 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po0000666000175000017500000001142213444452675026152 0ustar zuulzuul00000000000000# Yulia Ryndenkova , 2016. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-02-02 17:22+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:44+0000\n" "Last-Translator: Yulia Ryndenkova \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 "2.0.0" msgstr "2.0.0" msgid "2.1.0" msgstr "2.1.0" msgid "Ability to enroll a node without all required fields for other states" msgstr "" "Возможность зарегистрировать узел без обязательных полей для других состояний" msgid "Add and delete nodes" msgstr "Добавить и удалить узлы" msgid "Add and delete ports" msgstr "Добавить и удалить порты" msgid "Breadcrumbs have been added" msgstr "Добавлены строки навигации" msgid "Current Series Release Notes" msgstr "Примечания к выпуску Current Series " msgid "" "Currently it is not possible to edit a node via the UI once it has been " "enrolled. Therefore, the enrollment must be done accurately to ensure the " "node is enrolled accurately and can then be made available. At present, any " "errors made during enrollment can only be corrected by deleting the node and " "enrolling it again." msgstr "" "В настоящее время отсутствует возможно редактирования узла через UI после " "его регистрации. Поэтому регистрация должна проходить безошибочно, для того " "чтобы убедиться что узел корректно зарегистрирован и позже будет доступен. В " "настоящее время, любые ошибки во время регистрации могут быть исправлены " "только посредством удаления и перерегистрации узла." msgid "Edit nodes after creation" msgstr "Редактирование узла после создания" msgid "Ironic UI Release Notes" msgstr "Примечания к выпуску Ironic UI " msgid "Known Issues" msgstr "Известные Проблемы" msgid "Move nodes between enroll, manageable, available and active states" msgstr "" "Перенести узел между регистрацией, управляемым, доступным и активным " "состояниями" msgid "New Features" msgstr "Новые Свойства" msgid "Panel hidden if baremetal service or admin rights are not present" msgstr "" "Панель скрыта если baremetal сервис или права администратора отсутствуют" msgid "" "This release adds support for adding and deleting nodes. Support has also " "been added for adding and deleting ports. The panel will now be hidden if " "the baremetal service is not present in the scenario where the collection of " "running services differs between multiple keystone regions." msgstr "" "В этот релиз входит поддержка добавления и удаления узлов. Также была " "реализована поддержка добавления и удаления портов. Панель теперь будет " "скрыта в случае отсутствия baremetal сервиса в сценарии где набор запущенных " "сервисов различается между различными регионами keystone. " msgid "" "This release adds support for editing nodes and moving those nodes between " "enroll, manageable, available and active states. It is now possible to " "enroll a node without all required fields for moving to manageable state " "being present due to the facility for editing the node once it has been " "created." msgstr "" "В релиз добавлена поддержка редактирования узлов и их перемещение между " "регистрацией, управляемым, доступным и активным состояниями. Теперь можно " "зарегистрировать узел без всех необходимых полей для перехода в управляемое " "состояние за счет возможности редактирования узла, как только он был создан." msgid "UX improvements across the interface" msgstr "UX улучшения интерфейса" ironic-ui-3.4.0/releasenotes/source/locale/ja/0000775000175000017500000000000013444452775021277 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/ja/LC_MESSAGES/0000775000175000017500000000000013444452775023064 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/ja/LC_MESSAGES/releasenotes.po0000666000175000017500000003220513444452675026120 0ustar zuulzuul00000000000000# Akihiro Motoki , 2016. #zanata # Shu Muto , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-02-02 17:22+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-08-25 05:43+0000\n" "Last-Translator: Shu Muto \n" "Language-Team: Japanese\n" "Language: ja\n" "X-Generator: Zanata 3.9.6\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "2.0.0" msgstr "2.0.0" msgid "2.1.0" msgstr "2.1.0" msgid "2.2.0" msgstr "2.2.0" msgid "3.0.0" msgstr "3.0.0" msgid "" "A backend mock has been added that enables better unit testing of the ironic-" "ui application by mocking the ironic API service. The mock utilizes angular " "$httpbackend handlers to intercept requests targeted at the ironic-ui server-" "side REST endpoints, and returns simulated responses." msgstr "" "Ironic API サービスをモックすることによって、 Ironic UI アプリケーションのよ" "り良いユニットテストを可能にする、バックエンドモックが追加されました。 モック" "は、Angular の $httpbackend ハンドラーを使用して、Ironic UI のサーバ側の " "REST エンドポイントを対象とするリクエストをインターセプトし、シミュレートされ" "たレスポンスを返します。" msgid "" "A column has been added that displays the UUID of the portgroup to which the " "port belongs." msgstr "ポートが属するポートグループの UUID を表示する列が追加されました。" msgid "" "A number of unit tests have been developed that illustrate the use of the " "backend mock functionality." msgstr "" "バックエンドモック機能の使用法を示すいくつかのユニットテストが開発されていま" "す。" msgid "A portgroup table has been added to the node-details/configuration tab." msgstr "ポートグループテーブルがノードの詳細/設定タブに追加されました。" msgid "Ability to enroll a node without all required fields for other states" msgstr "他の状態のためのすべての必須フィールドなしでノードを登録する機能" msgid "Add and delete nodes" msgstr "ノードの追加と削除。" msgid "Add and delete ports" msgstr "ポートの追加と削除。" msgid "" "Additional properties are displayed by clicking the detail-toggle-selector " "for that port in a similar manner to the portgroup table." msgstr "" "ポートグループテーブルと同様の方法で、そのポートの detail-toggle-selector を" "クリックすると、追加のプロパティーが表示されます。" msgid "" "Adds support for a user to be able to edit the ``resource_class`` field when " "enrolling/updating a node." msgstr "" "ノードの登録/更新時にユーザが ``resource_class`` フィールドを編集できるよう" "にするためのサポートを追加しました。" msgid "" "Adds support for editing portgroups from the node-details/configuration " "page. Each entry in the portgroups table has an associated ``Edit " "portgroup`` button that when clicked will launch a modal dialog that guides " "the user in making changes." msgstr "" "ノードの詳細/設定ページからポートグループを編集するためのサポートを追加しま" "す。 ポートグループテーブルの各エントリには、関連付けられた ``ポートグループ" "の編集`` ボタンがあります。このボタンをクリックすると、ユーザーが変更を行うた" "めのモーダルダイアログが起動します。" msgid "" "Adds support for viewing and managing the portgroups associated with an " "ironic node." msgstr "" "Ironic ノードに関連付けられたポートグループを表示および管理するためのサポート" "を追加します。" msgid "" "Adds the ability to view and edit the node's ``resource_class`` field on the " "node-details/configuration page." msgstr "" "ノードの詳細/設定ページで、ノードの ``resource_class`` フィールドを表示および" "編集する機能を追加します。" msgid "" "Although the backend mock is a work in progress, enough functionality " "already exists to support test development for the current set of in-" "progress features." msgstr "" "バックエンドモックは進行中の作業ですが、進行中の機能の現在のセットのテスト開" "発をサポートするのに十分な機能が既に用意されています。" msgid "Breadcrumbs have been added" msgstr "パンくずリスト (breadcrumb) のサポートが追加されました。" msgid "Current Series Release Notes" msgstr "開発中バージョンのリリースノート" msgid "" "Currently it is not possible to edit a node via the UI once it has been " "enrolled. Therefore, the enrollment must be done accurately to ensure the " "node is enrolled accurately and can then be made available. At present, any " "errors made during enrollment can only be corrected by deleting the node and " "enrolling it again." msgstr "" "現在、UI を介して登録されたノードを編集することはできません。 したがって、" "ノードが正確に登録され、利用可能になるように、登録を正確に行う必要がありま" "す。 現在、登録中に発生したエラーは、ノードを削除して再度登録することによって" "のみ訂正できます。" msgid "" "Detailed information for a portgroup is obtained by clicking the detail-" "toggle-selector (right-chevron) located in its table row. The additional " "information is displayed in a row expansion." msgstr "" "ポートグループの詳細情報は、テーブル行にある detail-toggle-selector (右向き" "の V 字)をクリックして取得します。 追加情報は、行の展開で表示されます。" msgid "" "Each row in the table displays a single portgroup, and has column entries " "for its UUID, MAC address, name, and number of ports. A dropdown menu is " "also provided that contains actions that can be applied to the portgroup." msgstr "" "表の各行には単一のポートグループが表示され、その UUID 、 MAC アドレス、名前、" "およびポート数の列エントリーがあります。ポートグループに適用できるアクション" "を含むドロップダウンメニューも用意されています。" msgid "Edit nodes after creation" msgstr "ノード作成後の更新" msgid "" "For ``shellinabox``, the value is an anchor with the URL required to access " "the web console and title ``shellinabox``. For others, the value is a string " "representation of the ``console_info`` object returned by the ``get_console " "api`` call." msgstr "" "``shellinabox`` の場合、値はウェブコンソールにアクセスするのに必要なURLと `` " "shellinabox`` というタイトルのアンカーです。 他の場合、値は ``get_console " "api`` 呼び出しによって返される ``console_info`` オブジェクトの文字列表現で" "す。" msgid "Ironic UI Release Notes" msgstr "Ironic UI リリースノート" msgid "Known Issues" msgstr "既知の問題" msgid "Move nodes between enroll, manageable, available and active states" msgstr "登録、管理可能、使用可能、およびアクティブ状態の間でノードを移動する。" msgid "New Features" msgstr "新機能" msgid "Newton Series Release Notes (2.0.0 - 2.1.x)" msgstr "Newton バージョンのリリースノート (2.0.0 - 2.1.x)" msgid "Ocata Series Release Notes (2.2.0 - 2.2.x)" msgstr "Ocata バージョンのリリースノート (2.2.0 - 2.2.x)" msgid "Panel hidden if baremetal service or admin rights are not present" msgstr "ベアメタルサービスまたは管理者権限がない場合はパネルが非表示になります" msgid "Pike Series Release Notes" msgstr "Pike バージョンのリリースノート" msgid "Prelude" msgstr "紹介" msgid "" "Support has been added for inspecting nodes. For a node that is in the " "``manageable`` state, its action menu will include an ``Inspect`` button. " "Node action menus are located in the node-list and node-detail pages." msgstr "" "ノードの検査がサポートされました。``管理可能`` 状態のノードには、アクションメ" "ニューに ``検査``ボタンが含まれるようになります。ノードのアクションメニュー" "は、ノード一覧とノード詳細ページにあります。" msgid "" "Support has been added for starting, stopping, and accessing the console " "associated with a node." msgstr "" "起動、停止、およびノードに関連付けられたコンソールへのアクセスのサポートが追" "加されました。" msgid "The Node Details/Configuration tab now shows the node's boot device." msgstr "" "ノードの詳細/設定 タブにノードのブートデバイスが表示されるようになりました。" msgid "" "The ``Properties`` column has been replaced with a column that displays only " "the boolean value of the ``pxe_enabled`` property." msgstr "" "``プロパティー`` カラムは、 ``pxe_enabled`` プロパティーのブール値だけを表示" "するカラムに置き換えられました。" msgid "" "The action dropdown menu in the node-details panel has a new item ``Enable|" "Disable console``." msgstr "" "ノード詳細パネルにあるアクションのドロップダウンメニューには、``コンソールの" "有効化|無効化`` という新しい項目があります。" msgid "" "The current cleaning step is displayed in the Provisioning Status section of " "the node-details/overview page" msgstr "" "現在のクリーニング状況は、ノードの詳細/概要ページのプロビジョニング状態のセク" "ションに表示されます。" msgid "" "The node-details/configuration page has been extended to enable the user to " "edit ports after initial creation." msgstr "" "ノードの詳細/設定ページは初期作成後にユーザポートを編集出来るように拡張されま" "した。" msgid "" "The node-details/overview panel has a new ``Console info`` item in the " "``General`` section. The value of this field is dependent on the console " "type." msgstr "" "ノードの詳細/概要パネルには、 ``一般`` セクションに新しい ``コンソール情報`` " "の項目があります。 このフィールドの値は、コンソール種別によって異なります。" msgid "" "The port table in node-details/configuration tab has been modified as " "follows:" msgstr "ノードの詳細/設定タブのポートテーブルが次のように変更されました。" msgid "" "The user is now able to abort a node cleaning operation. When cleaning is " "aborted the node is moved from the ``CLEAN WAIT`` state to the ``CLEAN " "FAIL`` state. When appropriate an \"Abort cleaning\" action will be present " "in individual node action menu." msgstr "" "ノードのクリーニング操作を中止できるようになりました。クリーニングが中止され" "ると、ノードは``CLEAN WAIT`` 状態から ``CLEAN FAIL`` 状態に移行します。適宜、" "「クリーニングの中止」アクションがそれぞれのノードのアクションメニューに表示" "されます。" msgid "" "The user is now able to specify the pxe_enabled and local-link-connection " "attributes as part of defining/editing ports." msgstr "" "ポートの定義や編集で PXE 有効、およびローカルリンク接続の項目が指定可能になり" "ました。" msgid "" "This release adds support for adding and deleting nodes. Support has also " "been added for adding and deleting ports. The panel will now be hidden if " "the baremetal service is not present in the scenario where the collection of " "running services differs between multiple keystone regions." msgstr "" "このリリースでは、ノードの追加と削除がサポートされています。 ポートの追加およ" "び削除のサポートも追加されました。 実行中のサービスのコレクションが複数の " "Keystone リージョンで異なるシナリオでは、ベアメタルサービスが存在しない場合、" "パネルは非表示になります。" msgid "" "This release adds support for editing nodes and moving those nodes between " "enroll, manageable, available and active states. It is now possible to " "enroll a node without all required fields for moving to manageable state " "being present due to the facility for editing the node once it has been " "created." msgstr "" "このリリースでは、ノードの編集とそのノードの登録、管理、使用可能、およびアク" "ティブの状態の間で移動がサポートされています。 いったん作成されたノードを編集" "する機能のため、管理可能な状態に移行するのに、すべての必須フィールドなしで" "ノードを登録することが可能になりました。" msgid "UX improvements across the interface" msgstr "インターフェーズ全体のユーザーエクスペリエンスの改善" ironic-ui-3.4.0/releasenotes/source/locale/zh_CN/0000775000175000017500000000000013444452775021706 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/zh_CN/LC_MESSAGES/0000775000175000017500000000000013444452775023473 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.po0000666000175000017500000002533413444452675026534 0ustar zuulzuul00000000000000# sunanchen , 2016. #zanata # Bin , 2017. #zanata # sunanchen , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-02-22 19:02+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-08-15 02:35+0000\n" "Last-Translator: Bin \n" "Language-Team: Chinese (China)\n" "Language: zh_CN\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "2.0.0" msgstr "2.0.0版本" msgid "2.1.0" msgstr "2.1.0版本" msgid "2.2.0" msgstr "2.2.0版本" msgid "3.0.0" msgstr "3.0.0" msgid "" "A backend mock has been added that enables better unit testing of the ironic-" "ui application by mocking the ironic API service. The mock utilizes angular " "$httpbackend handlers to intercept requests targeted at the ironic-ui server-" "side REST endpoints, and returns simulated responses." msgstr "" "添加了一个后端模拟,能够通过对Ironic-ui的API服务模拟,以便对ironic-ui应用进行" "更好的单元测试。该模拟利用angular的$httpbackend处理器去拦截针对Ironic-UI服务" "端的REST端口请求,并返回模拟响应。" msgid "" "A column has been added that displays the UUID of the portgroup to which the " "port belongs." msgstr "添加了一个显示端口所属端口组的UUID的列。" msgid "" "A number of unit tests have been developed that illustrate the use of the " "backend mock functionality." msgstr "已经开发了许多单元测试来说明后端模拟功能性的使用。" msgid "A portgroup table has been added to the node-details/configuration tab." msgstr "添加了一个端口组表到节点详情或配置选项卡。" msgid "Ability to enroll a node without all required fields for other states" msgstr "" "可在缺少部分参数的情况下注册节点,并在创建之后通过编辑节点的方式来切换至其他" "状态" msgid "Add and delete nodes" msgstr "增加或删除节点" msgid "Add and delete ports" msgstr "增加或删除端口" msgid "" "Additional properties are displayed by clicking the detail-toggle-selector " "for that port in a similar manner to the portgroup table." msgstr "" "通过类似于端口组表的方式点击那个端口的detail-toggle-selector(详情切换选项)" "显示附加的属性。" msgid "" "Adds support for a user to be able to edit the ``resource_class`` field when " "enrolling/updating a node." msgstr "增加了用户在注册或更新节点时可以编辑``resource_class``字段。" msgid "" "Adds support for editing portgroups from the node-details/configuration " "page. Each entry in the portgroups table has an associated ``Edit " "portgroup`` button that when clicked will launch a modal dialog that guides " "the user in making changes." msgstr "" "添加从节点详细信息/配置页面编辑端口组的支持。端口组表中的每个条目都有一个关联" "的“编辑端口组”按钮,当单击时将启动一个模式对话框,指导用户进行更改。" msgid "" "Adds support for viewing and managing the portgroups associated with an " "ironic node." msgstr "增加了查看和管理关联一个Ironic节点端口组的支持。" msgid "" "Adds the ability to view and edit the node's ``resource_class`` field on the " "node-details/configuration page." msgstr "在节点详情/配置页增加了能够查看和编辑节点的``resource_class``字段。" msgid "" "Although the backend mock is a work in progress, enough functionality " "already exists to support test development for the current set of in-" "progress features." msgstr "" "尽管后端模拟是一个正在进行的工作,但是足够的功能已经存在去支持目前进行中的一" "组功能的测试开发。" msgid "Breadcrumbs have been added" msgstr "已增加面包屑导航" msgid "Current Series Release Notes" msgstr "当前版本发布说明" msgid "" "Currently it is not possible to edit a node via the UI once it has been " "enrolled. Therefore, the enrollment must be done accurately to ensure the " "node is enrolled accurately and can then be made available. At present, any " "errors made during enrollment can only be corrected by deleting the node and " "enrolling it again." msgstr "" "目前,不支持通过UI修改已经注册的节点的信息。因此,请务必保证节点注册信息的精" "确性和可用性。目前,注册节点过程中出现的错误,只能通过删除节点之后重新注册来" "修正" msgid "" "Detailed information for a portgroup is obtained by clicking the detail-" "toggle-selector (right-chevron) located in its table row. The additional " "information is displayed in a row expansion." msgstr "" "一个端口的详细信息可以通过点击位于表行中的细节切换选项(right-chevron)去获得。" "附加信息以行展开方式显示。" msgid "" "Each row in the table displays a single portgroup, and has column entries " "for its UUID, MAC address, name, and number of ports. A dropdown menu is " "also provided that contains actions that can be applied to the portgroup." msgstr "" "表中的每一行显示了一个单个端口组,并具有它的UUID、MAC地址、名称和端口数量的列" "条目。也提供了包含可以应用于端口组动作的下拉菜单。" msgid "Edit nodes after creation" msgstr "创建之后编辑节点" msgid "" "For ``shellinabox``, the value is an anchor with the URL required to access " "the web console and title ``shellinabox``. For others, the value is a string " "representation of the ``console_info`` object returned by the ``get_console " "api`` call." msgstr "" "对于``shellinabox``,该值是一个具有访问web控制台和标题``shellinabox``所需URL" "的锚点。对于其他,该值是一个由``get_console api``调用返回的``console_info``对" "象的字符串表示形式。" msgid "Ironic UI Release Notes" msgstr "Ironic UI发布说明" msgid "Known Issues" msgstr "已知的问题" msgid "Move nodes between enroll, manageable, available and active states" msgstr "可在已注册,可管理,可用,运行中四种状态间切换" msgid "New Features" msgstr "新特性" msgid "Newton Series Release Notes (2.0.0 - 2.1.x)" msgstr "Newton版本发布说明(2.0.0 - 2.1.x)" msgid "Ocata Series Release Notes (2.2.0 - 2.2.x)" msgstr "Ocata版本发布说明(2.2.0 - 2.2.x)" msgid "Panel hidden if baremetal service or admin rights are not present" msgstr "如果当前baremetal service不可用或者admin权限不够,面板将会不可见" msgid "Pike Series Release Notes" msgstr "Pike版本发布说明" msgid "Prelude" msgstr "前奏" msgid "" "Support has been added for inspecting nodes. For a node that is in the " "``manageable`` state, its action menu will include an ``Inspect`` button. " "Node action menus are located in the node-list and node-detail pages." msgstr "" "增加了检测节点的支持。对于一个处于可管理状态下的节点,该节点的菜单中会包含一" "个``Inspect``按钮。Node action菜单位于node-list和node-detail页面" msgid "" "Support has been added for starting, stopping, and accessing the console " "associated with a node." msgstr "增加了开启、停止和获取节点关联控制台的支持。" msgid "The Node Details/Configuration tab now shows the node's boot device." msgstr "节点详情或配置选项现在显示了节点的引导设备。" msgid "" "The ``Properties`` column has been replaced with a column that displays only " "the boolean value of the ``pxe_enabled`` property." msgstr "``Properties``列已经被替换为仅显示``pxe_enabled``属性布尔值的列。" msgid "" "The action dropdown menu in the node-details panel has a new item ``Enable|" "Disable console``." msgstr "在节点详情面板的动作下拉菜单中有一个新的选项``启用|禁用控制台``。" msgid "" "The current cleaning step is displayed in the Provisioning Status section of " "the node-details/overview page" msgstr "" "目前的清理步骤可以在node-details/overview page页面下Provisioning Status模块中" "了解" msgid "" "The node-details/configuration page has been extended to enable the user to " "edit ports after initial creation." msgstr "现在node-details/configuration页面可以允许用户在初始化创建之后编辑端口" msgid "" "The node-details/overview panel has a new ``Console info`` item in the " "``General`` section. The value of this field is dependent on the console " "type." msgstr "" "节点详情或概览面板在``常规``部分有一个新的``控制台信息``选项。该字段的值取决" "于控制台的类型。" msgid "" "The port table in node-details/configuration tab has been modified as " "follows:" msgstr "在节点详情或配置选项卡中的端口表已修改如下:" msgid "" "The user is now able to abort a node cleaning operation. When cleaning is " "aborted the node is moved from the ``CLEAN WAIT`` state to the ``CLEAN " "FAIL`` state. When appropriate an \"Abort cleaning\" action will be present " "in individual node action menu." msgstr "" "现在用户可以取消节点的清理操作。当一个节点的清理状态被取消时,节点的状态会从" "``CLEAN WAIT``变成``CLEAN FAIL``状态。在合适的时候,\"Abort cleaning\"操作将" "会增加至individual node action菜单中。" msgid "" "The user is now able to specify the pxe_enabled and local-link-connection " "attributes as part of defining/editing ports." msgstr "" "现在用户能够在定义/编辑端口的时候指定pxe_enabled和local-link-connection属性" msgid "" "This release adds support for adding and deleting nodes. Support has also " "been added for adding and deleting ports. The panel will now be hidden if " "the baremetal service is not present in the scenario where the collection of " "running services differs between multiple keystone regions." msgstr "" "该版本支持增加和删除节点的功能。同样也支持增加和删除端口。在多keystone " "regions的情况下,如果当前场景下,baremetal service不可用,面板将会被隐藏" msgid "" "This release adds support for editing nodes and moving those nodes between " "enroll, manageable, available and active states. It is now possible to " "enroll a node without all required fields for moving to manageable state " "being present due to the facility for editing the node once it has been " "created." msgstr "" "这个版本增加了编辑节点,在已注册、可管理、可用、运行中四种状态间切换的支持。" "现在可在缺少部分参数的情况下注册节点,并在创建之后通过编辑节点的方式来切换至" "可管理状态" msgid "UX improvements across the interface" msgstr "通过修改接口的方式提升UX " ironic-ui-3.4.0/releasenotes/source/conf.py0000666000175000017500000002416613444452675020757 0ustar zuulzuul00000000000000# -*- 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. # # ironic-ui documentation build configuration file, created by # sphinx-quickstart on Tue Aug 16 16:29:30 2016. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # # import os # import sys # sys.path.insert(0, os.path.abspath('.')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'openstackdocstheme', 'reno.sphinxext', ] # Add any paths that contain templates here, relative to this directory. # templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The encoding of source files. # # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'ironic-ui' copyright = u'2016, OpenStack' author = u'OpenStack' # Release notes are version independent # The short X.Y version. version = '' # The full version, including alpha/beta/rc tags. release = '' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # # today = '' # # Else, today_fmt is used as the format for a strftime call. # # today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The reST default role (used for this markup: `text`) to use for all # documents. # # default_role = None # 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 # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. # keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'openstackdocs' # openstackdocstheme options repository_name = 'openstack/ironic-ui' bug_project = 'ironic-ui' bug_tag = '' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] # The name for this set of Sphinx documents. # " v documentation" by default. # # html_title = u'ironic-ui v2.0.0' # A shorter title for the navigation bar. Default is the same as html_title. # # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # # html_logo = None # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or # 32x32 pixels large. # # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. # # html_extra_path = [] # Must set this variable to include year, month, day, hours, and minutes. html_last_updated_fmt = '%Y-%m-%d %H:%M' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # # html_additional_pages = {} # If false, no module index is generated. # # html_domain_indices = True # If false, no index is generated. # # html_use_index = True # If true, the index is split into individual pages for each letter. # # html_split_index = False # If true, links to the reST sources are added to the pages. # # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' # # html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # 'ja' uses this config value. # 'zh' user can custom change `jieba` dictionary path. # # html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. # # html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = 'ironic-uidoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'ironic-ui.tex', u'ironic-ui Documentation', u'OpenStack', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # # latex_use_parts = False # If true, show page references after internal links. # # latex_show_pagerefs = False # If true, show URL addresses after external links. # # latex_show_urls = False # Documents to append as an appendix to all manuals. # # latex_appendices = [] # It false, will not define \strong, \code, itleref, \crossref ... but only # \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added # packages. # # latex_keep_old_macro_names = True # If false, no module index is generated. # # latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'ironic-ui', u'ironic-ui Documentation', [author], 1) ] # If true, show URL addresses after external links. # # man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'ironic-ui', u'ironic-ui Documentation', author, 'ironic-ui', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. # # texinfo_appendices = [] # If false, no module index is generated. # # texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # # texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. # # texinfo_no_detailmenu = False # -- Options for Internationalization output ------------------------------ locale_dirs = ['locale/'] ironic-ui-3.4.0/releasenotes/source/make.bat0000666000175000017500000001707213444452675021063 0ustar zuulzuul00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. epub3 to make an epub3 echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. xml to make Docutils-native XML files echo. pseudoxml to make pseudoxml-XML files for display purposes echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled echo. coverage to run coverage check of the documentation if enabled echo. dummy to check syntax errors of document sources goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) REM Check if sphinx-build is available and fallback to Python version if any %SPHINXBUILD% 1>NUL 2>NUL if errorlevel 9009 goto sphinx_python goto sphinx_ok :sphinx_python set SPHINXBUILD=python -m sphinx.__init__ %SPHINXBUILD% 2> nul if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) :sphinx_ok if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\ironic-ui.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\ironic-ui.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "epub3" ( %SPHINXBUILD% -b epub3 %ALLSPHINXOPTS% %BUILDDIR%/epub3 if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub3 file is in %BUILDDIR%/epub3. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdf" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf cd %~dp0 echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdfja" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf-ja cd %~dp0 echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) if "%1" == "coverage" ( %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage if errorlevel 1 exit /b 1 echo. echo.Testing of coverage in the sources finished, look at the ^ results in %BUILDDIR%/coverage/python.txt. goto end ) if "%1" == "xml" ( %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml if errorlevel 1 exit /b 1 echo. echo.Build finished. The XML files are in %BUILDDIR%/xml. goto end ) if "%1" == "pseudoxml" ( %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml if errorlevel 1 exit /b 1 echo. echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. goto end ) if "%1" == "dummy" ( %SPHINXBUILD% -b dummy %ALLSPHINXOPTS% %BUILDDIR%/dummy if errorlevel 1 exit /b 1 echo. echo.Build finished. Dummy builder generates no files. goto end ) :end ironic-ui-3.4.0/releasenotes/notes/0000775000175000017500000000000013444452775017276 5ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/notes/2.1.0-release-3391dfbcf087c883.yaml0000666000175000017500000000101413444452675024462 0ustar zuulzuul00000000000000--- prelude: > This release adds support for editing nodes and moving those nodes between enroll, manageable, available and active states. It is now possible to enroll a node without all required fields for moving to manageable state being present due to the facility for editing the node once it has been created. features: - Edit nodes after creation - Move nodes between enroll, manageable, available and active states - Ability to enroll a node without all required fields for other states ironic-ui-3.4.0/releasenotes/notes/edit-portgroup-92c62b1ae0cf5e54.yaml0000666000175000017500000000042613444452675025441 0ustar zuulzuul00000000000000--- features: - | Adds support for editing portgroups from the node-details/configuration page. Each entry in the portgroups table has an associated ``Edit portgroup`` button that when clicked will launch a modal dialog that guides the user in making changes. ironic-ui-3.4.0/releasenotes/notes/unit-test-framework-f61ad7926413bf91.yaml0000666000175000017500000000113213444452675026250 0ustar zuulzuul00000000000000--- features: - | A backend mock has been added that enables better unit testing of the ironic-ui application by mocking the ironic API service. The mock utilizes angular $httpbackend handlers to intercept requests targeted at the ironic-ui server-side REST endpoints, and returns simulated responses. A number of unit tests have been developed that illustrate the use of the backend mock functionality. Although the backend mock is a work in progress, enough functionality already exists to support test development for the current set of in-progress features. ironic-ui-3.4.0/releasenotes/notes/bug-1648550-32e28cf2a401bb02.yaml0000666000175000017500000000021013444452675023753 0ustar zuulzuul00000000000000--- features: - | The current cleaning step is displayed in the Provisioning Status section of the node-details/overview page ironic-ui-3.4.0/releasenotes/notes/add-console-support-ccffcedc845ca214.yaml0000666000175000017500000000122313444452675026575 0ustar zuulzuul00000000000000--- features: - | Support has been added for starting, stopping, and accessing the console associated with a node. - | The action dropdown menu in the node-details panel has a new item ``Enable|Disable console``. - | The node-details/overview panel has a new ``Console info`` item in the ``General`` section. The value of this field is dependent on the console type. For ``shellinabox``, the value is an anchor with the URL required to access the web console and title ``shellinabox``. For others, the value is a string representation of the ``console_info`` object returned by the ``get_console api`` call. ironic-ui-3.4.0/releasenotes/notes/2.0-release-3d8acae7c8de429b.yaml0000666000175000017500000000155613444452675024551 0ustar zuulzuul00000000000000--- prelude: > This release adds support for adding and deleting nodes. Support has also been added for adding and deleting ports. The panel will now be hidden if the baremetal service is not present in the scenario where the collection of running services differs between multiple keystone regions. features: - Add and delete nodes - Add and delete ports - Panel hidden if baremetal service or admin rights are not present - UX improvements across the interface - Breadcrumbs have been added issues: - Currently it is not possible to edit a node via the UI once it has been enrolled. Therefore, the enrollment must be done accurately to ensure the node is enrolled accurately and can then be made available. At present, any errors made during enrollment can only be corrected by deleting the node and enrolling it again. ././@LongLink0000000000000000000000000000015000000000000011211 Lustar 00000000000000ironic-ui-3.4.0/releasenotes/notes/adding-driver-interfaces-while-node-enrollment-7cb82d6753074629.yamlironic-ui-3.4.0/releasenotes/notes/adding-driver-interfaces-while-node-enrollment-7cb82d6753074629.y0000666000175000017500000000041113444452675032543 0ustar zuulzuul00000000000000--- features: - | Adds support for selecting driver interfaces for dynamic drivers while creating nodes. The support for driver interfaces is not compatible with classic drivers. This feature is supported with Pike and further versions of ironic. ironic-ui-3.4.0/releasenotes/notes/bug-1648548-6e846a0c1e1574aa.yaml0000666000175000017500000000036713444452675024016 0ustar zuulzuul00000000000000--- features: - | Support has been added for inspecting nodes. For a node that is in the ``manageable`` state, its action menu will include an ``Inspect`` button. Node action menus are located in the node-list and node-detail pages. ironic-ui-3.4.0/releasenotes/notes/bug-1648563-e2bc262985873122.yaml0000666000175000017500000000042113444452675023573 0ustar zuulzuul00000000000000--- features: - | The node-details/configuration page has been extended to enable the user to edit ports after initial creation. - | The user is now able to specify the pxe_enabled and local-link-connection attributes as part of defining/editing ports. ironic-ui-3.4.0/releasenotes/notes/inject-nmi-0320453eaf1bda9b.yaml0000666000175000017500000000031313444452675024472 0ustar zuulzuul00000000000000--- features: - | Adds support for injecting non-maskable interrupts into a node. A new action ``Inject NMI`` has been added to the node actions dropdown menu in the ``Node Details`` page. ironic-ui-3.4.0/releasenotes/notes/bug-1648557-462ebfdf39efee1f.yaml0000666000175000017500000000043713444452675024335 0ustar zuulzuul00000000000000--- features: - | The user is now able to abort a node cleaning operation. When cleaning is aborted the node is moved from the ``CLEAN WAIT`` state to the ``CLEAN FAIL`` state. When appropriate an "Abort cleaning" action will be present in individual node action menu. ironic-ui-3.4.0/releasenotes/notes/.placeholder0000666000175000017500000000000013444452675021550 0ustar zuulzuul00000000000000ironic-ui-3.4.0/releasenotes/notes/bug-1671567-a95d7cb0d21470e4.yaml0000666000175000017500000000013513444452675024004 0ustar zuulzuul00000000000000--- features: - | The Node Details/Configuration tab now shows the node's boot device. ironic-ui-3.4.0/releasenotes/notes/bug-1672709-b485a7a59ea1c129.yaml0000666000175000017500000000040013444452675024004 0ustar zuulzuul00000000000000--- features: - | Adds the ability to view and edit the node's ``resource_class`` field on the node-details/configuration page. - | Adds support for a user to be able to edit the ``resource_class`` field when enrolling/updating a node. ironic-ui-3.4.0/releasenotes/notes/view-portgroups-a3efb4407536caf2.yaml0000666000175000017500000000213713444452675025651 0ustar zuulzuul00000000000000--- features: - | Adds support for viewing and managing the portgroups associated with an ironic node. A portgroup table has been added to the node-details/configuration tab. Each row in the table displays a single portgroup, and has column entries for its UUID, MAC address, name, and number of ports. A dropdown menu is also provided that contains actions that can be applied to the portgroup. Detailed information for a portgroup is obtained by clicking the detail-toggle-selector (right-chevron) located in its table row. The additional information is displayed in a row expansion. - | The port table in node-details/configuration tab has been modified as follows: * A column has been added that displays the UUID of the portgroup to which the port belongs. * The ``Properties`` column has been replaced with a column that displays only the boolean value of the ``pxe_enabled`` property. * Additional properties are displayed by clicking the detail-toggle-selector for that port in a similar manner to the portgroup table. ironic-ui-3.4.0/.testr.conf0000666000175000017500000000047713444452675015554 0ustar zuulzuul00000000000000[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 ironic-ui-3.4.0/test-requirements.txt0000666000175000017500000000145013444452675017717 0ustar zuulzuul00000000000000# The order of packages is significant, because pip processes them in the order # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 coverage!=4.4,>=4.0 # Apache-2.0 python-subunit>=1.0.0 # Apache-2.0/BSD oslotest>=3.2.0 # Apache-2.0 testrepository>=0.0.18 # Apache-2.0/BSD testscenarios>=0.4 # Apache-2.0/BSD testtools>=2.2.0 # MIT # this is required for the docs build jobs sphinx!=1.6.6,!=1.6.7,>=1.6.2 # BSD openstackdocstheme>=1.18.1 # Apache-2.0 reno>=2.5.0 # Apache-2.0 # Include horizon as test requirement http://tarballs.openstack.org/horizon/horizon-master.tar.gz#egg=horizon # integration tests requirements selenium>=2.50.1 # Apache-2.0 xvfbwrapper>=0.1.3 #license: MIT ironic-ui-3.4.0/babel-django.cfg0000666000175000017500000000020513444452675016441 0ustar zuulzuul00000000000000[extractors] django = django_babel.extract:extract_django [python: **.py] [django: templates/**.html] [django: **/templates/**.csv] ironic-ui-3.4.0/package.json0000666000175000017500000000213513444452675015745 0ustar zuulzuul00000000000000{ "name": "ironic-ui", "version": "0.0.0", "description": "Horizon plugin for OpenStack Ironic.", "repository": { "type": "git", "url": "git://git.openstack.org/openstack/ironic-ui" }, "author": "Openstack ", "license": "Apache-2.0", "devDependencies": { "eslint": "1.10.3", "eslint-config-openstack": "1.2.4", "eslint-plugin-angular": "1.0.1", "jasmine-core": "^2.4.1", "karma": "^1.1.2", "karma-chrome-launcher": "^1.0.1", "karma-cli": "1.0.1", "karma-coverage": "^1.1.1", "karma-jasmine": "^1.0.2", "karma-jasmine-matchers": "^3.7.0", "karma-ng-html2js-preprocessor": "^1.0.0", "karma-phantomjs-launcher": "^1.0.4", "karma-threshold-reporter": "^0.1.15" }, "scripts": { "postinstall": "if [ ! -d .tox ] || [ ! -d .tox/py27 ]; then tox -epy27 --notest; fi", "test": "karma start ironic_ui/karma.conf.js --single-run", "lint": "eslint --no-color ironic_ui/static", "lintq": "eslint --quiet ironic_ui/static" }, "dependencies": { "string.prototype.endswith": "^0.2.0" } } ironic-ui-3.4.0/ironic_ui.egg-info/0000775000175000017500000000000013444452775017127 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui.egg-info/pbr.json0000664000175000017500000000005613444452775020606 0ustar zuulzuul00000000000000{"git_version": "736ae26", "is_release": true}ironic-ui-3.4.0/ironic_ui.egg-info/dependency_links.txt0000664000175000017500000000000113444452775023175 0ustar zuulzuul00000000000000 ironic-ui-3.4.0/ironic_ui.egg-info/requires.txt0000664000175000017500000000005613444452775021530 0ustar zuulzuul00000000000000pbr!=2.1.0,>=2.0.0 python-ironicclient>=2.3.0 ironic-ui-3.4.0/ironic_ui.egg-info/top_level.txt0000664000175000017500000000001213444452775021652 0ustar zuulzuul00000000000000ironic_ui ironic-ui-3.4.0/ironic_ui.egg-info/not-zip-safe0000664000175000017500000000000113444452775021355 0ustar zuulzuul00000000000000 ironic-ui-3.4.0/ironic_ui.egg-info/SOURCES.txt0000664000175000017500000002364413444452775021024 0ustar zuulzuul00000000000000.coveragerc .eslintignore .eslintrc .mailmap .testr.conf .zuul.yaml AUTHORS CONTRIBUTING.rst ChangeLog HACKING.rst LICENSE MANIFEST.in README.rst babel-django.cfg babel-djangojs.cfg bindep.txt lower-constraints.txt manage.py package.json requirements.txt setup.cfg setup.py test-requirements.txt test-shim.js tox.ini devstack/plugin.sh devstack/settings doc/source/conf.py doc/source/index.rst doc/source/contributor/contributing.rst doc/source/contributor/index.rst doc/source/install/index.rst doc/source/install/installation.rst doc/source/install/uninstallation.rst ironic_ui/__init__.py ironic_ui/karma.conf.js ironic_ui.egg-info/PKG-INFO ironic_ui.egg-info/SOURCES.txt ironic_ui.egg-info/dependency_links.txt ironic_ui.egg-info/not-zip-safe ironic_ui.egg-info/pbr.json ironic_ui.egg-info/requires.txt ironic_ui.egg-info/top_level.txt ironic_ui/api/__init__.py ironic_ui/api/ironic.py ironic_ui/api/ironic_rest_api.py ironic_ui/content/__init__.py ironic_ui/content/ironic/__init__.py ironic_ui/content/ironic/panel.py ironic_ui/content/ironic/urls.py ironic_ui/content/ironic/views.py ironic_ui/content/ironic/templates/ironic/index.html ironic_ui/content/ironic/templates/ironic/node_detail.html ironic_ui/enabled/_2200_ironic.py ironic_ui/enabled/__init__.py ironic_ui/locale/de/LC_MESSAGES/django.po ironic_ui/locale/de/LC_MESSAGES/djangojs.po ironic_ui/locale/en_GB/LC_MESSAGES/django.po ironic_ui/locale/en_GB/LC_MESSAGES/djangojs.po ironic_ui/locale/fr/LC_MESSAGES/django.po ironic_ui/locale/fr/LC_MESSAGES/djangojs.po ironic_ui/locale/id/LC_MESSAGES/django.po ironic_ui/locale/id/LC_MESSAGES/djangojs.po ironic_ui/locale/ja/LC_MESSAGES/django.po ironic_ui/locale/ja/LC_MESSAGES/djangojs.po ironic_ui/locale/ko_KR/LC_MESSAGES/django.po ironic_ui/locale/ko_KR/LC_MESSAGES/djangojs.po ironic_ui/locale/pt_BR/LC_MESSAGES/django.po ironic_ui/locale/pt_BR/LC_MESSAGES/djangojs.po ironic_ui/locale/ru/LC_MESSAGES/django.po ironic_ui/locale/ru/LC_MESSAGES/djangojs.po ironic_ui/locale/tr_TR/LC_MESSAGES/django.po ironic_ui/locale/tr_TR/LC_MESSAGES/djangojs.po ironic_ui/locale/zh_CN/LC_MESSAGES/django.po ironic_ui/locale/zh_CN/LC_MESSAGES/djangojs.po ironic_ui/static/dashboard/admin/ironic/auto-focus.directive.js ironic_ui/static/dashboard/admin/ironic/driver-property.service.js ironic_ui/static/dashboard/admin/ironic/driver-property.service.spec.js ironic_ui/static/dashboard/admin/ironic/empty-to-pristine.directive.js ironic_ui/static/dashboard/admin/ironic/form-field.directive.js ironic_ui/static/dashboard/admin/ironic/form-field.html ironic_ui/static/dashboard/admin/ironic/form-field.service.js ironic_ui/static/dashboard/admin/ironic/form-field.service.spec.js ironic_ui/static/dashboard/admin/ironic/graph.service.js ironic_ui/static/dashboard/admin/ironic/ironic.backend-mock.service.js ironic_ui/static/dashboard/admin/ironic/ironic.module.js ironic_ui/static/dashboard/admin/ironic/ironic.service.js ironic_ui/static/dashboard/admin/ironic/ironic.service.spec.js ironic_ui/static/dashboard/admin/ironic/modal-draggable.directive.js ironic_ui/static/dashboard/admin/ironic/node-actions.service.js ironic_ui/static/dashboard/admin/ironic/node-error.service.js ironic_ui/static/dashboard/admin/ironic/node-state-transition.service.js ironic_ui/static/dashboard/admin/ironic/node-state-transition.service.spec.js ironic_ui/static/dashboard/admin/ironic/postfix-expr.service.js ironic_ui/static/dashboard/admin/ironic/postfix-expr.service.spec.js ironic_ui/static/dashboard/admin/ironic/property-collection-editor.directive.js ironic_ui/static/dashboard/admin/ironic/property-collection-editor.html ironic_ui/static/dashboard/admin/ironic/property-collection.service.js ironic_ui/static/dashboard/admin/ironic/property-collection.service.spec.js ironic_ui/static/dashboard/admin/ironic/test-data.spec.js ironic_ui/static/dashboard/admin/ironic/update-patch.service.js ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.js ironic_ui/static/dashboard/admin/ironic/base-node/base-node.controller.spec.js ironic_ui/static/dashboard/admin/ironic/base-node/base-node.html ironic_ui/static/dashboard/admin/ironic/base-node/base-node.service.js ironic_ui/static/dashboard/admin/ironic/base-node/base-node.spec.js ironic_ui/static/dashboard/admin/ironic/base-port/base-port.controller.js ironic_ui/static/dashboard/admin/ironic/base-port/base-port.controller.spec.js ironic_ui/static/dashboard/admin/ironic/base-port/base-port.html ironic_ui/static/dashboard/admin/ironic/base-portgroup/base-portgroup.controller.js ironic_ui/static/dashboard/admin/ironic/base-portgroup/base-portgroup.controller.spec.js ironic_ui/static/dashboard/admin/ironic/base-portgroup/base-portgroup.html ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.js ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.controller.spec.js ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.html ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.js ironic_ui/static/dashboard/admin/ironic/bootdevice/bootdevice.service.spec.js ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.controller.js ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.html ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.service.js ironic_ui/static/dashboard/admin/ironic/create-port/create-port.controller.js ironic_ui/static/dashboard/admin/ironic/create-port/create-port.controller.spec.js ironic_ui/static/dashboard/admin/ironic/create-port/create-port.service.js ironic_ui/static/dashboard/admin/ironic/create-portgroup/create-portgroup.controller.js ironic_ui/static/dashboard/admin/ironic/create-portgroup/create-portgroup.controller.spec.js ironic_ui/static/dashboard/admin/ironic/create-portgroup/create-portgroup.service.js ironic_ui/static/dashboard/admin/ironic/edit-node/edit-node.controller.js ironic_ui/static/dashboard/admin/ironic/edit-node/edit-node.controller.spec.js ironic_ui/static/dashboard/admin/ironic/edit-node/edit-node.service.js ironic_ui/static/dashboard/admin/ironic/edit-port/edit-port.controller.js ironic_ui/static/dashboard/admin/ironic/edit-port/edit-port.controller.spec.js ironic_ui/static/dashboard/admin/ironic/edit-port/edit-port.service.js ironic_ui/static/dashboard/admin/ironic/edit-portgroup/edit-portgroup.controller.js ironic_ui/static/dashboard/admin/ironic/edit-portgroup/edit-portgroup.controller.spec.js ironic_ui/static/dashboard/admin/ironic/edit-portgroup/edit-portgroup.service.js ironic_ui/static/dashboard/admin/ironic/enroll-node/enroll-node.controller.js ironic_ui/static/dashboard/admin/ironic/enroll-node/enroll-node.controller.spec.js ironic_ui/static/dashboard/admin/ironic/enroll-node/enroll-node.service.js ironic_ui/static/dashboard/admin/ironic/maintenance/maintenance.controller.js ironic_ui/static/dashboard/admin/ironic/maintenance/maintenance.html ironic_ui/static/dashboard/admin/ironic/maintenance/maintenance.service.js ironic_ui/static/dashboard/admin/ironic/node-details/node-details.controller.js ironic_ui/static/dashboard/admin/ironic/node-details/node-details.controller.spec.js ironic_ui/static/dashboard/admin/ironic/node-details/node-details.html ironic_ui/static/dashboard/admin/ironic/node-details/sections/configuration.html ironic_ui/static/dashboard/admin/ironic/node-details/sections/overview.html ironic_ui/static/dashboard/admin/ironic/node-details/sections/port-details.html ironic_ui/static/dashboard/admin/ironic/node-details/sections/portgroup-details.html ironic_ui/static/dashboard/admin/ironic/node-list/node-list.controller.js ironic_ui/static/dashboard/admin/ironic/node-list/node-list.html ironic_ui/static/dashboard/admin/ironic/raidconfig/raidconfig.controller.js ironic_ui/static/dashboard/admin/ironic/raidconfig/raidconfig.controller.spec.js ironic_ui/static/dashboard/admin/ironic/raidconfig/raidconfig.html ironic_ui/static/dashboard/admin/ironic/raidconfig/raidconfig.service.js ironic_ui/static/dashboard/admin/ironic/raidconfig/raidconfig.service.spec.js ironic_ui/test/__init__.py ironic_ui/test/settings.py ironic_ui/test/urls.py ironic_ui/test/integration/__init__.py ironic_ui/test/integration/horizon.conf ironic_ui/test/integration/test_basic.py ironic_ui/test/integration/pages/__init__.py ironic_ui/test/integration/pages/admin/__init__.py ironic_ui/test/integration/pages/admin/system/__init__.py ironic_ui/test/integration/pages/admin/system/ironicbaremetalprovisioningpage.py ironic_ui/test/tests/__init__.py ironic_ui/test/tests/test_registration.py releasenotes/notes/.placeholder releasenotes/notes/2.0-release-3d8acae7c8de429b.yaml releasenotes/notes/2.1.0-release-3391dfbcf087c883.yaml releasenotes/notes/add-console-support-ccffcedc845ca214.yaml releasenotes/notes/adding-driver-interfaces-while-node-enrollment-7cb82d6753074629.yaml releasenotes/notes/bug-1648548-6e846a0c1e1574aa.yaml releasenotes/notes/bug-1648550-32e28cf2a401bb02.yaml releasenotes/notes/bug-1648557-462ebfdf39efee1f.yaml releasenotes/notes/bug-1648563-e2bc262985873122.yaml releasenotes/notes/bug-1671567-a95d7cb0d21470e4.yaml releasenotes/notes/bug-1672709-b485a7a59ea1c129.yaml releasenotes/notes/edit-portgroup-92c62b1ae0cf5e54.yaml releasenotes/notes/inject-nmi-0320453eaf1bda9b.yaml releasenotes/notes/unit-test-framework-f61ad7926413bf91.yaml releasenotes/notes/view-portgroups-a3efb4407536caf2.yaml releasenotes/source/Makefile releasenotes/source/conf.py releasenotes/source/index.rst releasenotes/source/make.bat releasenotes/source/newton.rst releasenotes/source/ocata.rst releasenotes/source/pike.rst releasenotes/source/queens.rst releasenotes/source/rocky.rst releasenotes/source/unreleased.rst releasenotes/source/locale/de/LC_MESSAGES/releasenotes.po releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po releasenotes/source/locale/ja/LC_MESSAGES/releasenotes.po releasenotes/source/locale/ko_KR/LC_MESSAGES/releasenotes.po releasenotes/source/locale/ru/LC_MESSAGES/releasenotes.po releasenotes/source/locale/zh_CN/LC_MESSAGES/releasenotes.poironic-ui-3.4.0/ironic_ui.egg-info/PKG-INFO0000664000175000017500000000351413444452775020227 0ustar zuulzuul00000000000000Metadata-Version: 1.1 Name: ironic-ui Version: 3.4.0 Summary: Ironic plugin UI for Horizon to allow users to view and manage bare metal nodes, ports and drivers. Home-page: https://docs.openstack.org/ironic-ui/latest/ Author: OpenStack Author-email: openstack-discuss@lists.openstack.org License: UNKNOWN Description: ======================== Team and repository tags ======================== .. image:: https://governance.openstack.org/tc/badges/ironic-ui.svg :target: https://governance.openstack.org/tc/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: https://docs.openstack.org/ironic-ui/latest * Release notes: https://docs.openstack.org/releasenotes/ironic-ui/ * Source: https://git.openstack.org/cgit/openstack/ironic-ui * Bugs: https://storyboard.openstack.org/#!/project/952 Features -------- * View bare metal nodes * View node details * Apply maintenance and power on/off actions to the nodes Platform: UNKNOWN Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.5 ironic-ui-3.4.0/.eslintignore0000666000175000017500000000002113444452675016152 0ustar zuulzuul00000000000000node_modules distironic-ui-3.4.0/.coveragerc0000666000175000017500000000010613444452675015574 0ustar zuulzuul00000000000000[run] branch = True source = ironic-ui [report] ignore_errors = True ironic-ui-3.4.0/devstack/0000775000175000017500000000000013444452775015261 5ustar zuulzuul00000000000000ironic-ui-3.4.0/devstack/plugin.sh0000666000175000017500000000306413444452675017117 0ustar zuulzuul00000000000000# 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 fiironic-ui-3.4.0/devstack/settings0000666000175000017500000000021313444452675017041 0ustar zuulzuul00000000000000# settings file for ironic-ui plugin enable_service ironic-ui # set up default directories IRONIC_UI_DIR=${IRONIC_UI_DIR:=$DEST/ironic-ui}ironic-ui-3.4.0/HACKING.rst0000666000175000017500000000021413444452675015251 0ustar zuulzuul00000000000000ironic-ui Style Commandments ============================ Read the OpenStack Style Commandments https://docs.openstack.org/hacking/latest/ ironic-ui-3.4.0/babel-djangojs.cfg0000666000175000017500000000110113444452675016772 0ustar zuulzuul00000000000000[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] ironic-ui-3.4.0/PKG-INFO0000664000175000017500000000351413444452775014555 0ustar zuulzuul00000000000000Metadata-Version: 1.1 Name: ironic-ui Version: 3.4.0 Summary: Ironic plugin UI for Horizon to allow users to view and manage bare metal nodes, ports and drivers. Home-page: https://docs.openstack.org/ironic-ui/latest/ Author: OpenStack Author-email: openstack-discuss@lists.openstack.org License: UNKNOWN Description: ======================== Team and repository tags ======================== .. image:: https://governance.openstack.org/tc/badges/ironic-ui.svg :target: https://governance.openstack.org/tc/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: https://docs.openstack.org/ironic-ui/latest * Release notes: https://docs.openstack.org/releasenotes/ironic-ui/ * Source: https://git.openstack.org/cgit/openstack/ironic-ui * Bugs: https://storyboard.openstack.org/#!/project/952 Features -------- * View bare metal nodes * View node details * Apply maintenance and power on/off actions to the nodes Platform: UNKNOWN Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.5 ironic-ui-3.4.0/.zuul.yaml0000666000175000017500000000203013444452675015412 0ustar zuulzuul00000000000000- job: name: ironic-ui-integration-tests parent: horizon-integration-tests required-projects: - name: openstack/horizon - name: openstack/ironic - name: openstack/python-ironicclient - name: openstack/ironic-ui roles: - zuul: openstack-infra/devstack - zuul: openstack/horizon irrelevant-files: - ^.*\.rst$ - ^doc/.*$ - ^releasenotes/.*$ vars: devstack_plugins: ironic: https://git.openstack.org/openstack/ironic ironic-ui: https://git.openstack.org/openstack/ironic-ui devstack_services: horizon: true tox_envlist: integration - project: templates: - check-requirements - nodejs4-jobs - openstack-lower-constraints-jobs - openstack-python-jobs - openstack-python35-jobs - openstack-python36-jobs - openstack-python37-jobs - publish-openstack-docs-pti - release-notes-jobs-python3 check: jobs: - ironic-ui-integration-tests: voting: false ironic-ui-3.4.0/manage.py0000777000175000017500000000155013444452675015264 0ustar zuulzuul00000000000000#!/usr/bin/env python # Copyright 2016 Cisco Systems, 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. import os import sys from django.core.management import execute_from_command_line # noqa if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ironic_ui.test.settings") execute_from_command_line(sys.argv) ironic-ui-3.4.0/CONTRIBUTING.rst0000666000175000017500000000123113444452675016114 0ustar zuulzuul00000000000000If 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 in StoryBoard, not GitHub: https://storyboard.openstack.org/#!/project/952 ironic-ui-3.4.0/lower-constraints.txt0000666000175000017500000000531413444452675017717 0ustar zuulzuul00000000000000alabaster==0.7.10 appdirs==1.4.3 asn1crypto==0.24.0 Babel==2.5.3 certifi==2018.1.18 cffi==1.11.5 chardet==3.0.4 cliff==2.11.0 cmd2==0.8.1 contextlib2==0.5.5 coverage==4.0 cryptography==2.1.4 debtcollector==1.19.0 decorator==4.2.1 deprecation==2.0 django-appconf==1.0.2 django-babel==0.6.2 django-compressor==2.2 django-pyscss==2.0.2 Django==1.11.11 docutils==0.14 dogpile.cache==0.6.5 dulwich==0.19.0 extras==1.0.0 fasteners==0.14.1 fixtures==3.0.0 flake8==2.5.5 futurist==1.6.0 hacking==0.12.0 idna==2.6 imagesize==1.0.0 iso8601==0.1.12 Jinja2==2.10 jmespath==0.9.3 jsonpatch==1.21 jsonpointer==2.0 jsonschema==2.6.0 keystoneauth1==3.4.0 linecache2==1.0.0 MarkupSafe==1.0 mccabe==0.2.1 mock==2.0.0 monotonic==1.4 mox3==0.25.0 msgpack==0.5.6 munch==2.2.0 netaddr==0.7.19 netifaces==0.10.6 openstackdocstheme==1.18.1 openstacksdk==0.12.0 os-client-config==1.29.0 os-service-types==1.2.0 osc-lib==1.10.0 oslo.concurrency==3.26.0 oslo.config==5.2.0 oslo.i18n==3.20.0 oslo.policy==1.34.0 oslo.serialization==2.25.0 oslo.utils==3.36.0 oslotest==3.2.0 osprofiler==2.0.0 packaging==17.1 pbr==2.0.0 pep8==1.5.7 Pint==0.8.1 prettytable==0.7.2 pycparser==2.18 pyflakes==0.8.1 Pygments==2.2.0 pymongo==3.6.1 pyOpenSSL==17.5.0 pyparsing==2.2.0 pyperclip==1.6.0 pyScss==1.3.4 python-cinderclient==3.5.0 python-glanceclient==2.9.1 python-ironicclient==2.3.0 python-keystoneclient==3.15.0 python-mimeparse==1.6.0 python-neutronclient==6.7.0 python-novaclient==10.1.0 python-subunit==1.0.0 python-swiftclient==3.5.0 pytz==2018.3 PyYAML==3.12 rcssmin==1.0.6 reno==2.5.0 requests==2.18.4 requestsexceptions==1.4.0 rfc3986==1.1.0 rjsmin==1.0.12 selenium==2.50.1 semantic-version==2.6.0 simplejson==3.13.2 six==1.11.0 snowballstemmer==1.2.1 Sphinx==1.6.2 sphinxcontrib-websupport==1.0.1 stevedore==1.28.0 testrepository==0.0.18 testscenarios==0.4 testtools==2.2.0 traceback2==1.4.0 unittest2==1.1.0 urllib3==1.22 warlock==1.3.0 WebOb==1.7.4 wrapt==1.10.11 XStatic-Angular-Bootstrap==2.2.0.0 XStatic-Angular-FileUpload==12.0.4.0 XStatic-Angular-Gettext==2.3.8.0 XStatic-Angular-lrdragndrop==1.0.2.2 XStatic-Angular-Schema-Form==0.8.13.0 XStatic-Angular==1.5.8.0 XStatic-Bootstrap-Datepicker==1.3.1.0 XStatic-Bootstrap-SCSS==3.3.7.1 XStatic-bootswatch==3.3.7.0 XStatic-D3==3.5.17.0 XStatic-Font-Awesome==4.7.0.0 XStatic-Hogan==2.0.0.2 XStatic-Jasmine==2.4.1.1 XStatic-JQuery-Migrate==1.2.1.1 XStatic-jquery-ui==1.12.0.1 XStatic-JQuery.quicksearch==2.0.3.1 XStatic-JQuery.TableSorter==2.14.5.1 XStatic-jQuery==1.10.2.1 XStatic-JSEncrypt==2.3.1.1 XStatic-mdi==1.4.57.0 XStatic-objectpath==1.2.1.0 XStatic-Rickshaw==1.5.0.0 XStatic-roboto-fontface==0.5.0.0 XStatic-smart-table==1.4.13.2 XStatic-Spin==1.2.5.2 XStatic-term.js==0.0.7.0 XStatic-tv4==1.2.7.0 XStatic==1.0.1 xvfbwrapper==0.1.3 ironic-ui-3.4.0/ironic_ui/0000775000175000017500000000000013444452775015435 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/karma.conf.js0000666000175000017500000001277213444452675020024 0ustar zuulzuul00000000000000/* * 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', '../node_modules/string.prototype.endswith/*.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', 'jasmine-matchers'], browsers: ['Chrome', 'PhantomJS'], 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-phantomjs-launcher', 'karma-jasmine', 'karma-jasmine-matchers', '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 } }); }; }()); ironic-ui-3.4.0/ironic_ui/test/0000775000175000017500000000000013444452775016414 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/settings.py0000666000175000017500000000264513444452675020636 0ustar zuulzuul00000000000000# 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. # Default to Horizons test settings to avoid any missing keys from horizon.test.settings import * # noqa from openstack_dashboard.test.settings import * # noqa # pop these keys to avoid log warnings about deprecation # update_dashboards will populate them anyway HORIZON_CONFIG.pop('dashboards', None) HORIZON_CONFIG.pop('default_dashboard', None) # Update the dashboards with ironic_ui import ironic_ui.enabled import openstack_dashboard.enabled from openstack_dashboard.utils import settings settings.update_dashboards( [ ironic_ui.enabled, openstack_dashboard.enabled, ], HORIZON_CONFIG, INSTALLED_APPS ) # Ensure any duplicate apps are removed after the update_dashboards call INSTALLED_APPS = list(set(INSTALLED_APPS)) ironic-ui-3.4.0/ironic_ui/test/__init__.py0000666000175000017500000000000013444452675020514 0ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/tests/0000775000175000017500000000000013444452775017556 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/tests/__init__.py0000666000175000017500000000000013444452675021656 0ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/tests/test_registration.py0000666000175000017500000000201213444452675023675 0ustar zuulzuul00000000000000# Copyright 2015 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. import horizon from ironic_ui.content.ironic import panel as i_panel from openstack_dashboard.test import helpers as test class RegistrationTests(test.TestCase): def test_registered(self): dashboard = horizon.get_dashboard('admin') panel = dashboard.get_panel('ironic') self.assertEqual(panel.__class__, i_panel.Ironic) ironic-ui-3.4.0/ironic_ui/test/urls.py0000666000175000017500000000135013444452675017753 0ustar zuulzuul00000000000000# # 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 include from django.conf.urls import url import openstack_dashboard.urls urlpatterns = [ url(r'', include(openstack_dashboard.urls)) ] ironic-ui-3.4.0/ironic_ui/test/integration/0000775000175000017500000000000013444452775020737 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/integration/test_basic.py0000666000175000017500000000174113444452675023435 0ustar zuulzuul00000000000000# # 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 openstack_dashboard.test.integration_tests import helpers class TestIronicDashboardInstalled(helpers.AdminTestCase): def test_ironic_bare_metal_provisioning_page_opened(self): ironic_page = ( self.home_pg.go_to_admin_system_ironicbaremetalprovisioningpage()) title = 'Ironic Bare Metal Provisioning - OpenStack Dashboard' self.assertEqual(ironic_page.page_title, title) ironic-ui-3.4.0/ironic_ui/test/integration/horizon.conf0000666000175000017500000000024413444452675023277 0ustar zuulzuul00000000000000[plugin] is_plugin=True plugin_page_path=ironic_ui.test.integration.pages plugin_page_structure='{"Admin": {"System": {"_": ["Ironic Bare Metal Provisioning"]}}}' ironic-ui-3.4.0/ironic_ui/test/integration/__init__.py0000666000175000017500000000000013444452675023037 0ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/integration/pages/0000775000175000017500000000000013444452775022036 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/integration/pages/__init__.py0000666000175000017500000000000013444452675024136 0ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/integration/pages/admin/0000775000175000017500000000000013444452775023126 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/integration/pages/admin/system/0000775000175000017500000000000013444452775024452 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/integration/pages/admin/system/ironicbaremetalprovisioningpage.py0000666000175000017500000000157213444452675033476 0ustar zuulzuul00000000000000# # 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 openstack_dashboard.test.integration_tests.pages import basepage class IronicbaremetalprovisioningPage(basepage.BaseNavigationPage): def __init__(self, driver, conf): super(IronicbaremetalprovisioningPage, self).__init__(driver, conf) self._page_title = "Ironic Bare Metal Provisioning" ironic-ui-3.4.0/ironic_ui/test/integration/pages/admin/system/__init__.py0000666000175000017500000000000013444452675026552 0ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/test/integration/pages/admin/__init__.py0000666000175000017500000000000013444452675025226 0ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/api/0000775000175000017500000000000013444452775016206 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/api/ironic_rest_api.py0000777000175000017500000003300113444452675021732 0ustar zuulzuul00000000000000# # 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: List of 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) @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 specified node. :param request: HTTP request. :param node_id: Node name or uuid. :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_id: Node name or uuid. """ patch = request.DATA.get('patch') return ironic.node_update(request, node_id, patch) @rest_utils.ajax() def delete(self, request, node_id): """Delete an Ironic node from inventory :param request: HTTP request. :param node_id: Node name or uuid. """ return ironic.node_delete(request, node_id) @urls.register class Ports(generic.View): url_regex = r'ironic/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() @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_uuid): """Update an Ironic port. :param request: HTTP request. :param port_uuid: Port uuid. """ patch = request.DATA.get('patch') return ironic.port_update(request, port_uuid, patch) @rest_utils.ajax() def delete(self, request, port_uuid): """Delete a network port. :param request: HTTP request :param port_uuid: Port uuid. """ return ironic.port_delete(request, port_uuid) @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_id): """Set the provision state for a specified node. :param request: HTTP request. :param node_id: Node name or uuid. :return: Return code. """ verb = request.DATA.get('verb') clean_steps = request.DATA.get('clean_steps') return ironic.node_set_provision_state(request, node_id, 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_id): """Get connection information for the node's console :param request: HTTP request. :param node_id: Node name or uuid. :return: Connection information. """ return ironic.node_get_console(request, node_id) @rest_utils.ajax(data_required=True) def put(self, request, node_id): """Start or stop the serial console. :param request: HTTP request. :param node_id: Node name or uuid. :return: Return code. """ return ironic.node_set_console_mode(request, node_id, 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: List of 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(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() @urls.register class NodePorts(generic.View): url_regex = r'ironic/nodes/(?P{})/ports/detail$' . \ format(LOGICAL_NAME_PATTERN) @rest_utils.ajax() def get(self, request, node_id): """Get the list of ports associated with a specified node. :param request: HTTP request. :param node_id: Node name or uuid. :return: List of ports. """ ports = ironic.node_list_ports(request, node_id) return { 'ports': [i.to_dict() for i in ports] } @urls.register class NodePortgroups(generic.View): url_regex = r'ironic/nodes/(?P{})/portgroups$' . \ format(LOGICAL_NAME_PATTERN) @rest_utils.ajax() def get(self, request, node_id): """Get the list of portgroups associated with a specified node. :param request: HTTP request. :param node_id: Node name or uuid. :return: List of portgroups. """ portgroups = ironic.portgroup_list(request, node_id) return { 'portgroups': [i.to_dict() for i in portgroups] } @urls.register class Portgroup(generic.View): url_regex = r'ironic/portgroups/(?P{})$'. \ format(LOGICAL_NAME_PATTERN) @rest_utils.ajax(data_required=True) def patch(self, request, portgroup_id): """Update an Ironic portgroup. :param request: HTTP request. :param portgroup_id: UUID or name of portgroup. """ patch = request.DATA.get('patch') return ironic.portgroup_update(request, portgroup_id, patch) @rest_utils.ajax() def delete(self, request, portgroup_id): """Delete a portgroup. :param request: HTTP request. :param portgroup_id: UUID or name of portgroup. """ return ironic.portgroup_delete(request, 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 portgroup_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] } @urls.register class RaidConfig(generic.View): url_regex = r'ironic/nodes/(?P{})/states/raid$'. \ format(LOGICAL_NAME_PATTERN) @rest_utils.ajax(data_required=True) def put(self, request, node_id): """Set the RAID configuration for a specified node. :param request: HTTP request. :param node_id: Node name or node uuid :return: None """ return ironic.node_set_raid_config( request, node_id, request.DATA.get('target_raid_config')) @urls.register class DriverDetails(generic.View): url_regex = r'ironic/drivers/(?P[0-9a-zA-Z_-]+)$'. \ format(LOGICAL_NAME_PATTERN) @rest_utils.ajax() def get(self, request, driver_name): """Get the details of a specified driver :param request: HTTP request :param driver_name: Driver name :return: Dictionary of details """ return ironic.driver_details(request, driver_name) @urls.register class InjectNmi(generic.View): url_regex = r'ironic/nodes/(?P{})/management/inject_nmi$'. \ format(LOGICAL_NAME_PATTERN) @rest_utils.ajax(data_required=True) def put(self, request, node_id): """Inject Non-Masking Interrupts into a specified node. :param request: HTTP request. :param node_id: Node name or uuid. :return: Empty response. """ return ironic.node_inject_nmi(request, node_id) ironic-ui-3.4.0/ironic_ui/api/__init__.py0000666000175000017500000000000013444452675020306 0ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/api/ironic.py0000777000175000017500000003524513444452675020060 0ustar zuulzuul00000000000000# # 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.34' 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 node_inject_nmi(request, node_id): """Inject Non-Masking Interrupts into a specified node. :param request: HTTP request. :param node_id: The UUID or name of the node. :return: Empty response. http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.inject_nmi """ return ironicclient(request).node.inject_nmi(node_id) 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 driver_details(request, driver_name): """Retrieve the details of a specified driver :param request: HTTP request :param driver_name: Name of the driver :return: dictionary of driver details https://docs.openstack.org/python-ironicclient/latest/cli/osc/v1/index.html#baremetal-driver-show """ details = ironicclient(request).driver.get(driver_name) return details.to_dict() 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_update(request, portgroup_id, patch): """Update a specified portgroup. :param request: HTTP request. :param portgroup_id: The UUID or name of the portgroup. :param patch: Sequence of update operations :return: Portgroup. http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.port.html#ironicclient.v1.portgroup.PortgroupManager.update """ portgroup = ironicclient(request).portgroup.update(portgroup_id, patch) return dict([(f, getattr(portgroup, f, '')) for f in res_fields.PORTGROUP_DETAILED_RESOURCE.fields]) 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) def node_set_raid_config(request, node_id, target_raid_config): """Set target raid configuration for a given node. :param request: HTTP request. :param node_id: The UUID or name of the node. :param target_raid_config: Target raid configuration. :return: Node. http://docs.openstack.org/developer/python-ironicclient/api/ironicclient.v1.node.html#ironicclient.v1.node.NodeManager.set_target_raid_config """ return ironicclient(request).node.set_target_raid_config( node_id, target_raid_config) ironic-ui-3.4.0/ironic_ui/content/0000775000175000017500000000000013444452775017107 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/content/ironic/0000775000175000017500000000000013444452775020372 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/content/ironic/templates/0000775000175000017500000000000013444452775022370 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/content/ironic/templates/ironic/0000775000175000017500000000000013444452775023653 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/content/ironic/templates/ironic/node_detail.html0000666000175000017500000000114013444452675027005 0ustar zuulzuul00000000000000{% extends 'base.html' %} {% load i18n %} {% block title %}{% trans "Node Details" %}{% endblock %} {% block breadcrumb_nav %} {% endblock %} {% block page_header %} {% endblock %} {% block main %} {% endblock %} ironic-ui-3.4.0/ironic_ui/content/ironic/templates/ironic/index.html0000666000175000017500000000112613444452675025651 0ustar zuulzuul00000000000000{% extends 'base.html' %} {% load i18n %} {% block title %}{% trans "Ironic Bare Metal Provisioning" %}{% endblock %} {% block breadcrumb_nav %} {% endblock %} {% block page_header %} {% endblock %} {% block main %} {% endblock %} ironic-ui-3.4.0/ironic_ui/content/ironic/__init__.py0000666000175000017500000000000013444452675022472 0ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/content/ironic/views.py0000666000175000017500000000164013444452675022103 0ustar zuulzuul00000000000000# 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' ironic-ui-3.4.0/ironic_ui/content/ironic/panel.py0000666000175000017500000000265313444452675022052 0ustar zuulzuul00000000000000# 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) ironic-ui-3.4.0/ironic_ui/content/ironic/urls.py0000666000175000017500000000166313444452675021740 0ustar zuulzuul00000000000000# 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'), ] ironic-ui-3.4.0/ironic_ui/content/__init__.py0000666000175000017500000000120013444452675021212 0ustar zuulzuul00000000000000# 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() ironic-ui-3.4.0/ironic_ui/__init__.py0000666000175000017500000000120013444452675017540 0ustar zuulzuul00000000000000# 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() ironic-ui-3.4.0/ironic_ui/locale/0000775000175000017500000000000013444452775016674 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/en_GB/0000775000175000017500000000000013444452775017646 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/en_GB/LC_MESSAGES/0000775000175000017500000000000013444452775021433 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/en_GB/LC_MESSAGES/django.po0000666000175000017500000000120513444452675023234 0ustar zuulzuul00000000000000# Andi Chandler , 2016. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-02-22 19:02+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 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "Ironic Bare Metal Provisioning" msgstr "Ironic Bare Metal Provisioning" ironic-ui-3.4.0/ironic_ui/locale/en_GB/LC_MESSAGES/djangojs.po0000666000175000017500000004042113444452675023574 0ustar zuulzuul00000000000000# OpenStack Infra , 2015. #zanata # Rob Cresswell , 2015. #zanata # Andi Chandler , 2016. #zanata # Andreas Jaeger , 2016. #zanata # Rob Cresswell , 2016. #zanata # Andi Chandler , 2017. #zanata # Andi Chandler , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-02-22 19:02+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-01-03 04:31+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: English (United Kingdom)\n" "Language: en_GB\n" "X-Generator: Zanata 4.3.3\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 "A request has been made to change the provisioning state of node %s" msgid "Abort cleaning" msgstr "Abort cleaning" msgid "Action" msgstr "Action" msgid "Actions" msgstr "Actions" msgid "Add Extra" msgstr "Add Extra" msgid "Add Instance Property" msgstr "Add Instance Property" msgid "Add Logical Disk" msgstr "Add Logical Disk" msgid "Add Property" msgstr "Add 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] "" "Are you sure you want to delete node \"%s\"? This action cannot be undone." msgstr[1] "" "Are you sure you want to delete nodes \"%s\"? This action cannot be undone." #, 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] "" "Are you sure you want to delete port \"%s\"? This action cannot be undone." msgstr[1] "" "Are you sure you want to delete ports \"%s\"? This action cannot be undone." #, 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." msgstr[1] "" "Are you sure you want to delete portgroups \"%s\"? This action cannot be " "undone." msgid "Attributes" msgstr "Attributes" msgid "Boot Device" msgstr "Boot Device" msgid "Cancel" msgstr "Cancel" msgid "Chassis ID" msgstr "Chassis ID" msgid "Choose an Image" msgstr "Choose an Image" msgid "Clean" msgstr "Clean" msgid "Clean Node" msgstr "Clean Node" msgid "Clean Step" msgstr "Clean Step" msgid "Clean node" msgstr "Clean node" msgid "Clean steps should be an non-empty array" msgstr "Clean steps should be an non-empty array" msgid "Click link to view console" msgstr "Click link to view console" msgid "Configuration" msgstr "Configuration" msgid "Console Enabled" msgstr "Console Enabled" msgid "Console Info." msgstr "Console Info." msgid "Create Port" msgstr "Create Port" msgid "Create Portgroup" msgstr "Create Portgroup" msgid "Created At" msgstr "Created At" msgid "Current Interface" msgstr "Current Interface" msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" msgstr "Defaults to ([^\"\\. ]+|\"[^\"]+\")" msgid "Delete Node" msgid_plural "Delete Nodes" msgstr[0] "Delete Node" msgstr[1] "Delete Nodes" msgid "Delete Port" msgid_plural "Delete Ports" msgstr[0] "Delete Port" msgstr[1] "Delete Ports" msgid "Delete Portgroup" msgid_plural "Delete Portgroups" msgstr[0] "Delete Portgroup" msgstr[1] "Delete Portgroups" msgid "Deploy Kernel" msgstr "Deploy Kernel" msgid "Deploy Ramdisk" msgstr "Deploy Ramdisk" msgid "Device" msgstr "Device" msgid "Driver" msgstr "Driver" msgid "Driver Details" msgstr "Driver Details" msgid "Driver Info" msgstr "Driver Info" msgid "Driver Interfaces" msgstr "Driver Interfaces" msgid "Driver Validation" msgstr "Driver Validation" msgid "" "Each cleaning step must be an object that contains \"interface\" and \"step" "\" properties" msgstr "" "Each cleaning step must be an object that contains \"interface\" and \"step" "\" properties" msgid "Edit Node" msgstr "Edit Node" msgid "Edit Port" msgstr "Edit Port" msgid "Edit Portgroup" msgstr "Edit Portgroup" 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" msgid "Image Source" msgstr "Image Source" msgid "Indicates whether this port should be used when PXE booting this node" msgstr "Indicates whether this port should be used when PXE booting this node" msgid "Inject NMI" msgstr "Inject NMI" msgid "Inspect" msgstr "Inspect" msgid "Inspection Finished At" msgstr "Inspection Finished At" msgid "Inspection Started At" msgstr "Inspection Started At" msgid "Instance ID" msgstr "Instance ID" msgid "Instance Info" msgstr "Instance Info" msgid "Instance Name" msgstr "Instance Name" msgid "Instance Property Name" msgstr "Instance Property Name" msgid "Interface" msgstr "Interface" msgid "Kernel" msgstr "Kernel" msgid "Last Error" msgstr "Last Error" msgid "" "Linux portgroup mode. For possible values refer to https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" msgstr "" "Linux portgroup mode. For possible values refer to https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" msgid "Local Link Connection" msgstr "Local Link Connection" msgid "Local link connection" msgstr "Local link connection" msgid "MAC Address" msgstr "MAC Address" msgid "MAC address" msgstr "MAC address" msgid "MAC address for this port. Required." msgstr "MAC address for this port. Required." msgid "MAC address for this portgroup." msgstr "MAC address for this portgroup." msgid "MAC address or OpenFlow datapath ID" msgstr "MAC address or OpenFlow datapath ID" msgid "Maintenance" msgstr "Maintenance" msgid "Maintenance Reason" msgstr "Maintenance Reason" msgid "Mode" msgstr "Mode" msgid "Move to" msgstr "Move to" msgid "Name" msgstr "Name" msgid "Name for the portgroup." msgstr "Name for the portgroup." msgid "Network Interface" msgstr "Network Interface" msgid "No Instance" msgstr "No Instance" msgid "No network ports have been defined" msgstr "No network ports have been defined" msgid "No portgroups have been defined" msgstr "No portgroups have been defined" msgid "No reason given." msgstr "No reason given." msgid "Node" msgstr "Node" #, python-format msgid "Node %s is already in target maintenance state." msgstr "Node %s is already in target maintenance state." msgid "Node Driver" msgstr "Node Driver" msgid "Node ID" msgstr "Node ID" msgid "Node Info" msgstr "Node Info" msgid "Node Name" msgstr "Node Name" msgid "One of this, (.*) must be specified\\." msgstr "One of this, (.*) must be specified\\." msgid "Overview" msgstr "Overview" msgid "PXE Enabled" msgstr "PXE Enabled" msgid "PXE enabled" msgstr "PXE enabled" msgid "Persistent" msgstr "Persistent" msgid "Port successfully created" msgstr "Port successfully created" msgid "Portgroup" msgstr "Portgroup" msgid "Portgroup successfully created" msgstr "Portgroup successfully created" msgid "Portgroup that this port belongs to" msgstr "Portgroup that this port belongs to" msgid "Portgroups" msgstr "Portgroups" msgid "Ports" msgstr "Ports" msgid "Power State" msgstr "Power State" msgid "Power off" msgstr "Power off" msgid "Power on" msgstr "Power on" msgid "Properties" msgstr "Properties" msgid "Property Name" msgstr "Property Name" msgid "Provide a list of cleaning steps in JSON format" msgstr "Provide a list of cleaning steps in JSON format" msgid "" "Provide a reason for why you are putting the selected node(s) into " "maintenance mode (optional)" msgstr "" "Provide a reason for why you are putting the selected node(s) into " "maintenance mode (optional)" msgid "Provision State" msgstr "Provision State" msgid "Provisioning State" msgstr "Provisioning State" msgid "Provisioning Status" msgstr "Provisioning Status" msgid "Put Node(s) Into Maintenance Mode" msgstr "Put Node(s) Into Maintenance Mode" msgid "RAID Level" msgstr "RAID Level" msgid "Ramdisk" msgstr "Ramdisk" msgid "Reason" msgstr "Reason" msgid "Reboot" msgstr "Reboot" msgid "Refresh" msgstr "Refresh" msgid "Refresh page to see set boot device" msgstr "Refresh page to see set boot device" msgid "Refresh page to see updated console details" msgstr "Refresh page to see updated console details" msgid "Refresh page to see updated power status" msgstr "Refresh page to see updated power status" msgid "Refresh page." msgstr "Refresh page." msgid "Required" msgstr "Required" msgid "Reservation" msgstr "Reservation" msgid "Resource Class" msgstr "Resource Class" msgid "Root GB" msgstr "Root GB" msgid "Root Volume" msgstr "Root Volume" msgid "Root Volume." msgstr "Root Volume." msgid "SSH Address" msgstr "SSH Address" msgid "SSH Key Contents" msgstr "SSH Key Contents" msgid "SSH Key File" msgstr "SSH Key File" msgid "SSH Password" msgstr "SSH Password" msgid "SSH Port" msgstr "SSH Port" msgid "SSH Username" msgstr "SSH Username" msgid "SSH terminal port" msgstr "SSH terminal port" msgid "Select a Driver" msgstr "Select a Driver" msgid "Select a boot device" msgstr "Select a boot device" msgid "Select a portgroup" msgstr "Select a portgroup" msgid "Set Boot Device" msgstr "Set Boot Device" msgid "Set RAID Configuration" msgstr "Set RAID Configuration" msgid "Set RAID configuration" msgstr "Set RAID configuration" msgid "Set Target RAID Config" msgstr "Set Target RAID Config" msgid "Set boot device" msgstr "Set boot device" msgid "Size GB" msgstr "Size GB" msgid "Soft power off" msgstr "Soft power off" msgid "Soft reboot" msgstr "Soft reboot" msgid "Specifies RAID Level." msgstr "Specifies RAID Level." msgid "Specifies logical disk size in GiB. Required." msgstr "Specifies logical disk size in GiB. Required." msgid "" "Specifies whether ports in this portgroup can be used as standalone ports." msgstr "" "Specifies whether ports in this portgroup can be used as standalone ports." msgid "Specifies whether root volume or not." msgstr "Specifies whether root volume or not." msgid "Standalone Ports Supported" msgstr "Standalone Ports Supported" msgid "Storage Interface" msgstr "Storage Interface" msgid "Submit" msgstr "Submit" #, python-format msgid "Successfully deleted node \"%s\"" msgid_plural "Successfully deleted nodes \"%s\"" msgstr[0] "Successfully deleted node \"%s\"" msgstr[1] "Successfully deleted nodes \"%s\"" #, python-format msgid "Successfully deleted port \"%s\"" msgid_plural "Successfully deleted ports \"%s\"" msgstr[0] "Successfully deleted port \"%s\"" msgstr[1] "Successfully deleted ports \"%s\"" #, python-format msgid "Successfully deleted portgroup \"%s\"" msgid_plural "Successfully deleted portgroups \"%s\"" msgstr[0] "Successfully deleted portgroup \"%s\"" msgstr[1] "Successfully deleted portgroups \"%s\"" #, python-format msgid "Successfully updated node %s" msgstr "Successfully updated node %s" #, python-format msgid "Successfully updated port %s" msgstr "Successfully updated port %s" #, python-format msgid "Successfully updated portgroup %s" msgstr "Successfully updated portgroup %s" msgid "Target Power State" msgstr "Target Power State" msgid "Target Provision State" msgstr "Target Provision State" 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 "" "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 enrolling, inspecting, manageable state; or in " "maintenance mode." msgid "UUID" msgstr "UUID" msgid "Unable to create node update patch." msgstr "Unable to create node update patch." #, python-format msgid "Unable to create node: %s" msgstr "Unable to create node: %s" msgid "Unable to create port update patch." msgstr "Unable to create port update patch." #, python-format msgid "Unable to create port: %s" msgstr "Unable to create port: %s" msgid "Unable to create portgroup update patch." msgstr "Unable to create portgroup update patch." #, python-format msgid "Unable to create portgroup: %s" msgstr "Unable to create portgroup: %s" #, python-format msgid "Unable to delete node \"%s\"" msgid_plural "Unable to delete nodes \"%s\"" msgstr[0] "Unable to delete node \"%s\"" msgstr[1] "Unable to delete nodes \"%s\"" #, python-format msgid "Unable to delete node %s: %s" msgstr "Unable to delete 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\"" msgstr[1] "Unable to delete ports \"%s\"" #, python-format msgid "Unable to delete port: %s" msgstr "Unable to delete port: %s" #, python-format msgid "Unable to delete portgroup \"%s\"" msgid_plural "Unable to delete portgroups \"%s\"" msgstr[0] "Unable to delete portgroup \"%s\"" msgstr[1] "Unable to delete portgroups \"%s\"" #, python-format msgid "Unable to delete portgroup: %s" msgstr "Unable to delete portgroup: %s" #, python-format msgid "Unable to get console for node %s: %s" msgstr "Unable to get console for node %s: %s" #, python-format msgid "Unable to inject NMI: %s" msgstr "Unable to inject NMI: %s" #, python-format msgid "Unable to power off the node: %s" msgstr "Unable to power off the node: %s" #, python-format msgid "Unable to retrieve Ironic drivers: %s" msgstr "Unable to retrieve Ironic drivers: %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 "Unable to retrieve Ironic nodes. %s" #, python-format msgid "Unable to retrieve boot device for Ironic node. %s" msgstr "Unable to retrieve boot device for Ironic node. %s" #, python-format msgid "Unable to retrieve driver properties: %s" msgstr "Unable to retrieve driver properties: %s" #, python-format msgid "Unable to retrieve portgroup ports: %s" msgstr "Unable to retrieve portgroup ports: %s" #, python-format msgid "Unable to retrieve supported boot devices for Ironic node. %s" msgstr "Unable to retrieve supported boot devices for Ironic node. %s" #, python-format msgid "Unable to retrieve the Ironic node ports: %s" msgstr "Unable to retrieve the Ironic node ports: %s" #, python-format msgid "Unable to retrieve the Ironic node: %s" msgstr "Unable to retrieve the 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 "Unable to set boot device: %s" #, python-format msgid "Unable to set console mode: %s" msgstr "Unable to set console mode: %s" #, python-format msgid "Unable to set node provision state: %s" msgstr "Unable to set node provision state: %s" #, python-format msgid "Unable to set raid config: %s" msgstr "Unable to set raid config: %s" #, python-format msgid "Unable to update node %s: %s" msgstr "Unable to update node %s: %s" #, python-format msgid "Unable to update port %s: %s" msgstr "Unable to update port %s: %s" #, python-format msgid "Unable to update portgroup %s: %s" msgstr "Unable to update portgroup %s: %s" #, python-format msgid "Unable to validate node %s: %s" msgstr "Unable to validate node %s: %s" msgid "Unable to validate the JSON input" msgstr "Unable to validate the JSON input" msgid "Update Node" msgstr "Update Node" msgid "Update Port" msgstr "Update Port" msgid "Update Portgroup" msgstr "Update Portgroup" msgid "Updated At" msgstr "Updated At" msgid "Valid" msgstr "Valid" msgid "Virtualization Software" msgstr "Virtualisation Software" msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" msgstr "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" ironic-ui-3.4.0/ironic_ui/locale/pt_BR/0000775000175000017500000000000013444452775017702 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/pt_BR/LC_MESSAGES/0000775000175000017500000000000013444452775021467 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/pt_BR/LC_MESSAGES/django.po0000666000175000017500000000123413444452675023272 0ustar zuulzuul00000000000000# Rodrigo Loures , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-02-22 19:02+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-01-19 09:27+0000\n" "Last-Translator: Rodrigo Loures \n" "Language-Team: Portuguese (Brazil)\n" "Language: pt_BR\n" "X-Generator: Zanata 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "Ironic Bare Metal Provisioning" msgstr "Provisionamento de máquina física Ironic" ironic-ui-3.4.0/ironic_ui/locale/pt_BR/LC_MESSAGES/djangojs.po0000666000175000017500000004333213444452675023634 0ustar zuulzuul00000000000000# André Campos , 2015. #zanata # OpenStack Infra , 2015. #zanata # Andreas Jaeger , 2016. #zanata # Fernando Pimenta , 2018. #zanata # Rodrigo Loures , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-04-23 17:06+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-04-25 11:42+0000\n" "Last-Translator: Fernando Pimenta \n" "Language-Team: Portuguese (Brazil)\n" "Language: pt_BR\n" "X-Generator: Zanata 4.3.3\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 "" "Uma requisição foi feita para alterar o estado de provisionamento do nó %s" msgid "Abort cleaning" msgstr "Abortar limpeza" msgid "Action" msgstr "Ação" msgid "Actions" msgstr "Ações" msgid "Add Extra" msgstr "Adicionar Extra" msgid "Add Instance Property" msgstr "Adicionar Propriedade da Instância" msgid "Add Logical Disk" msgstr "Adicionar Disco Lógico" msgid "Add Property" msgstr "Adicionar Propriedade " #, 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] "" "Você tem certeza que deseja excluir o nó \"%s\"? Essa ação não pode ser " "desfeita." msgstr[1] "" "Você tem certeza que deseja excluir os nós \"%s\"? Essa ação não pode ser " "desfeita." #, 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] "" "Você tem certeza que deseja excluir a porta \"%s\"? Essa ação não pode ser " "desfeita." msgstr[1] "" "Você tem certeza que deseja excluir as portas \"%s\"? Essa ação não pode ser " "desfeita." #, 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] "" "Tem certeza que você quer excluir o grupo de portas \"%s\"? Esta ação não " "pode ser desfeita." msgstr[1] "" "Tem certeza que você quer excluir os grupos de portas \"%s\"? Esta ação não " "pode ser desfeita." msgid "Attributes" msgstr "Atributos" msgid "Boot Device" msgstr "Dispositivo de Boot" msgid "Cancel" msgstr "Cancelar" msgid "Chassis ID" msgstr "ID do Chassi" msgid "Choose an Image" msgstr "Escolha uma Imagem" msgid "Clean" msgstr "Limpar" msgid "Clean Node" msgstr "Nó Limpo" msgid "Clean Step" msgstr "Passo de Limpeza" msgid "Clean node" msgstr "Nó limpo" msgid "Clean steps should be an non-empty array" msgstr "Passos de limpeza deve ser uma matriz não vazia" msgid "Click link to view console" msgstr "Clique no link para ver o console" msgid "Configuration" msgstr "Configuração" msgid "Console Enabled" msgstr "Console Ativado" msgid "Console Info." msgstr "Informações de Console." msgid "Create Port" msgstr "Criar Porta" msgid "Create Portgroup" msgstr "Criar Grupo de Portas" msgid "Created At" msgstr "Criado em" msgid "Current Interface" msgstr "Interface Atual" msgid "Defaults to ([^\"\\. ]+|\"[^\"]+\")" msgstr "Padrões para ([^\"\\. ]+|\"[^\"]+\")" msgid "Delete Node" msgid_plural "Delete Nodes" msgstr[0] "Excluir nó" msgstr[1] "Excluir nós" msgid "Delete Port" msgid_plural "Delete Ports" msgstr[0] "Excluir Porta" msgstr[1] "Excluir Portas" msgid "Delete Portgroup" msgid_plural "Delete Portgroups" msgstr[0] "Excluir Grupo de Portas" msgstr[1] "Excluir Grupos de Portas" msgid "Deploy Kernel" msgstr "Implantar Kernel" msgid "Deploy Ramdisk" msgstr "Implantar Ramdisk" msgid "Device" msgstr "Dispositivo" msgid "Driver" msgstr "Driver" msgid "Driver Details" msgstr "Detalhes do Driver" msgid "Driver Info" msgstr "Informações do Driver" msgid "Driver Interfaces" msgstr "Interfaces do Driver" msgid "Driver Validation" msgstr "Validação do Driver" msgid "" "Each cleaning step must be an object that contains \"interface\" and \"step" "\" properties" msgstr "" "Cada passo de limpeza deve ser um objeto que contenha propriedades de " "\"interface\" e \"passo\"" msgid "Edit Node" msgstr "Editar Nó" msgid "Edit Port" msgstr "Editar Porta" msgid "Edit Portgroup" msgstr "Editar Grupo de Portas" msgid "Enroll Node" msgstr "Nó de Inscrição" msgid "Extra" msgstr "Extra" msgid "Extra Property Name" msgstr "Nome de Propriedade Extra" msgid "Extras" msgstr "Extras" msgid "General" msgstr "Geral" msgid "Image Source" msgstr "Fonte de Imagem" msgid "Indicates whether this port should be used when PXE booting this node" msgstr "Indica se essa porta deve ser utilizada ao inicializar esse nó via PXE" msgid "Inject NMI" msgstr "Injetar NMI" msgid "Inspect" msgstr "Inspecionar " msgid "Inspection Finished At" msgstr "Inspeção Finalizada Em" msgid "Inspection Started At" msgstr "Inspeção Iniciada Em" msgid "Instance ID" msgstr "ID da instância" msgid "Instance Info" msgstr "Informações da Instância" msgid "Instance Name" msgstr "Nome da instância" msgid "Instance Property Name" msgstr "Nome da Propriedade da Instância" msgid "Interface" msgstr "Interface" msgid "Kernel" msgstr "Kernel" msgid "Last Error" msgstr "Último Erro" msgid "" "Linux portgroup mode. For possible values refer to https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" msgstr "" "Modo Linux de grupo de portas. Para os valores possíveis consulte https://" "www.kernel.org/doc/Documentation/networking/bonding.txt" msgid "Local Link Connection" msgstr "Conexão de Link Local" msgid "Local link connection" msgstr "Conexão de link local" msgid "MAC Address" msgstr "Endereço MAC" msgid "MAC address" msgstr "Endereço MAC" msgid "MAC address for this port. Required." msgstr "Endereço MAC para essa porta. Obrigatório." msgid "MAC address for this portgroup." msgstr "Endereço MAC para esse grupo de portas." msgid "MAC address or OpenFlow datapath ID" msgstr "Endereço MAC ou ID do datapath OpenFlow" msgid "Maintenance" msgstr "Manutenção" msgid "Maintenance Reason" msgstr "Motivo da Manutenção" msgid "Mode" msgstr "Modo" msgid "Move to" msgstr "Mover para" msgid "Name" msgstr "Nome" msgid "Name for the portgroup." msgstr "Nome para esse grupo de portas." msgid "Network Interface" msgstr "Interface de Rede" msgid "No Instance" msgstr "Nenhuma Instância" msgid "No network ports have been defined" msgstr "Nenhuma porta de rede foi definida" msgid "No portgroups have been defined" msgstr "Nenhum grupo de portas foi definido" msgid "No reason given." msgstr "Nenhuma razão dada." msgid "Node" msgstr "Nó" #, python-format msgid "Node %s is already in target maintenance state." msgstr "O nó %s já está entrando no estado de manutenção." msgid "Node Driver" msgstr "Driver de Nó" msgid "Node ID" msgstr "ID do Nó" msgid "Node Info" msgstr "Informação do Nó" msgid "Node Name" msgstr "Nome do Nó" msgid "One of this, (.*) must be specified\\." msgstr "Um desse, (.*) deve ser especificado\\." msgid "Overview" msgstr "Visão Geral" msgid "PXE Enabled" msgstr "PXE Ativado" msgid "PXE enabled" msgstr "PXE ativado" msgid "Persistent" msgstr "Persistente" msgid "Port successfully created" msgstr "Porta criada com sucesso" msgid "Portgroup" msgstr "Grupo de Portas" msgid "Portgroup successfully created" msgstr "Grupo de portas criado com sucesso" msgid "Portgroup that this port belongs to" msgstr "Grupo de Portas ao qual essa porta pertence" msgid "Portgroups" msgstr "Grupos de Portas" msgid "Ports" msgstr "Portas" msgid "Power State" msgstr "Estado de energia" msgid "Power off" msgstr "Desligar" msgid "Power on" msgstr "Ligar" msgid "Properties" msgstr "Propriedades" msgid "Property Name" msgstr "Nome da Propriedade" msgid "Provide a list of cleaning steps in JSON format" msgstr "Forneça uma lista de passos de limpeza no formato JSON" msgid "" "Provide a reason for why you are putting the selected node(s) into " "maintenance mode (optional)" msgstr "" "Forneça uma razão pela qual você está colocando o(s) nó(s) selecionado(s) em " "modo de manutenção (opcional)" msgid "Provision State" msgstr "Estado de Provisão" msgid "Provisioning State" msgstr "Estado de Provisionamento" msgid "Provisioning Status" msgstr "Estado de Provisionamento" msgid "Put Node(s) Into Maintenance Mode" msgstr "Colocar Nó(s) em Modo de Manutenção" msgid "RAID Level" msgstr "Nível de RAID" msgid "Ramdisk" msgstr "Ramdisk" msgid "Reason" msgstr "Motivo" msgid "Reboot" msgstr "Reiniciar" msgid "Refresh" msgstr "Atualizar" msgid "Refresh page to see set boot device" msgstr "" "Atualize a página para visualizar o dispositivo de inicialização definido." msgid "Refresh page to see updated console details" msgstr "Atualize a página para ver os detalhes atualizados do console" msgid "Refresh page to see updated power status" msgstr "Atualize a página para visualizar o estado de energia atualizado" msgid "Refresh page." msgstr "Atualizar página." msgid "Required" msgstr "Obrigatório" msgid "Reservation" msgstr "Reserva" msgid "Resource Class" msgstr "Classe de Recurso" msgid "Root GB" msgstr "GB Raiz" msgid "Root Volume" msgstr "Volume Raiz" msgid "Root Volume." msgstr "Volume Raiz." msgid "SSH Address" msgstr "Endereço SSH" msgid "SSH Key Contents" msgstr "Conteúdo da chave SSH" msgid "SSH Key File" msgstr "Arquivo de Chave SSH" msgid "SSH Password" msgstr "Senha SSH" msgid "SSH Port" msgstr "Porta SSH" msgid "SSH Username" msgstr "Nome de usuário SSH" msgid "SSH terminal port" msgstr "Porta de terminal SSH" msgid "Select a Driver" msgstr "Selecione um Driver" msgid "Select a boot device" msgstr "Selecionar dispositivo de boot" msgid "Select a portgroup" msgstr "Selecione um grupo de portas" msgid "Set Boot Device" msgstr "Configurar o Dispositivo de Boot" msgid "Set RAID Configuration" msgstr "Definir Configuração RAID" msgid "Set RAID configuration" msgstr "Definir configuração RAID" msgid "Set Target RAID Config" msgstr "Definir Configuração Alvo de RAID" msgid "Set boot device" msgstr "Configurar dispositivo de boot" msgid "Size GB" msgstr "Tamanho GB" msgid "Soft power off" msgstr "Desligamento suave" msgid "Soft reboot" msgstr "Reinicialização simples" msgid "Specifies RAID Level." msgstr "Especifica o Nível de RAID." msgid "Specifies logical disk size in GiB. Required." msgstr "Especifique o tamanho lógico de disco em GiB. Obrigatório." msgid "" "Specifies whether ports in this portgroup can be used as standalone ports." msgstr "" "Especifica se portas nesse grupo de portas podem ser utilizadas como portas " "autônomas." msgid "Specifies whether root volume or not." msgstr "Especifica se é um volume raiz ou não" msgid "Standalone Ports Supported" msgstr "Portas Autônomas Suportadas" msgid "Storage Interface" msgstr "Interface de Storage" msgid "Submit" msgstr "Enviar" #, python-format msgid "Successfully deleted node \"%s\"" msgid_plural "Successfully deleted nodes \"%s\"" msgstr[0] "Nó excluído com sucesso \"%s\"" msgstr[1] "Nós excluídos com sucesso \"%s\"" #, python-format msgid "Successfully deleted port \"%s\"" msgid_plural "Successfully deleted ports \"%s\"" msgstr[0] "Porta excluída com sucesso \"%s\"" msgstr[1] "Portas excluídas com sucesso \"%s\"" #, python-format msgid "Successfully deleted portgroup \"%s\"" msgid_plural "Successfully deleted portgroups \"%s\"" msgstr[0] "Grupo de Portas \"%s\" excluído com sucesso" msgstr[1] "Grupos de Portas \"%s\" excluído com sucesso" #, python-format msgid "Successfully updated node %s" msgstr "Nó atualizado com sucesso %s" #, python-format msgid "Successfully updated port %s" msgstr "Porta atualizada com sucesso %s" #, python-format msgid "Successfully updated portgroup %s" msgstr "Atualização com sucesso do grupo de portas %s" msgid "Target Power State" msgstr "Estado de Energia Alvo" msgid "Target Provision State" msgstr "Estado de Provisão Alvo" 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 "" "Esse campo está desativado porque uma porta não pode ter quaisquer atributos " "de conectividade (pxe_enabled, local_link_connection, portgroup_id) " "atualizado a menos que seu nó associado esteja em um estado de inscrição, " "inspeção, gerenciamento; ou em modo de manutenção." msgid "UUID" msgstr "UUID" msgid "Unable to create node update patch." msgstr "Não é possível criar patch de atualização do nó" #, python-format msgid "Unable to create node: %s" msgstr "Não foi possível criar o nó: %s" msgid "Unable to create port update patch." msgstr "Não é possível criar patch de atualização de porta" #, python-format msgid "Unable to create port: %s" msgstr "Não foi possível criar a porta: %s" msgid "Unable to create portgroup update patch." msgstr "Não é possível criar patch de atualização de grupo de portas" #, python-format msgid "Unable to create portgroup: %s" msgstr "Não é possível criar o grupo de portas: %s" #, python-format msgid "Unable to delete node \"%s\"" msgid_plural "Unable to delete nodes \"%s\"" msgstr[0] "Não foi possível excluir o nó \"%s\"" msgstr[1] "Não foi possível excluir os nós \"%s\"" #, python-format msgid "Unable to delete node %s: %s" msgstr "Não foi possível excluir o nó %s: %s" #, python-format msgid "Unable to delete port \"%s\"" msgid_plural "Unable to delete ports \"%s\"" msgstr[0] "Não foi possível excluir a porta\"%s\"" msgstr[1] "Não foi possível excluir as portas\"%s\"" #, python-format msgid "Unable to delete port: %s" msgstr "Não foi possível excluir a porta: %s" #, python-format msgid "Unable to delete portgroup \"%s\"" msgid_plural "Unable to delete portgroups \"%s\"" msgstr[0] "Não é possível excluir o grupo de portas \"%s\"" msgstr[1] "Não é possível excluir os grupos de portas \"%s\"" #, python-format msgid "Unable to delete portgroup: %s" msgstr "Não é possível excluir o grupo de portas: %s" #, python-format msgid "Unable to get console for node %s: %s" msgstr "Não é possível obter o console para o nó %s: %s" #, python-format msgid "Unable to inject NMI: %s" msgstr "Não foi possível injetar NMI: %s" #, python-format msgid "Unable to power off the node: %s" msgstr "Não foi possível desligar o nó: %s" #, python-format msgid "Unable to retrieve Ironic drivers: %s" msgstr "Não foi possível recuperar os drivers do Ironic: %s" #, python-format msgid "Unable to retrieve Ironic node portgroups: %s" msgstr "Não é possível recuperar o grupo de portas do nó Ironic: %s" #, python-format msgid "Unable to retrieve Ironic nodes. %s" msgstr "Não foi possível recuperar os nós do Ironic. %s" #, python-format msgid "Unable to retrieve boot device for Ironic node. %s" msgstr "" "Não foi possível recuperar o dispositivo de inicialização para o nó do " "Ironic. %s" #, python-format msgid "Unable to retrieve driver properties: %s" msgstr "Não foi possível recuperar as propriedades do driver: %s" #, python-format msgid "Unable to retrieve portgroup ports: %s" msgstr "Não é possível obter as portas do grupo de portas: %s" #, python-format msgid "Unable to retrieve supported boot devices for Ironic node. %s" msgstr "" "Não foi possível recuperar dispositivos de inicialização suportados para o " "nó do Ironic. %s" #, python-format msgid "Unable to retrieve the Ironic node ports: %s" msgstr "Não foi possível recuperar as portas do nó do Ironic: %s" #, python-format msgid "Unable to retrieve the Ironic node: %s" msgstr "Não foi possível recuperar o nó do Ironic: %s" #, python-format msgid "Unable to set Ironic node %s maintenance state: %s" msgstr "" "Não foi possível configurar o nó %s do Ironic para estado de manutenção: %s" #, python-format msgid "Unable to set boot device: %s" msgstr "Não foi possível definir o dispositivo de inicialização: %s" #, python-format msgid "Unable to set console mode: %s" msgstr "Não é possível configurar o modo console: %s" #, python-format msgid "Unable to set node provision state: %s" msgstr "Não foi possível definir o estado de provisionamento do nó: %s" #, python-format msgid "Unable to set raid config: %s" msgstr "Não foi possível realizar a configuração do raid: %s" #, python-format msgid "Unable to update node %s: %s" msgstr "Não é possível atualizar o nó %s: %s" #, python-format msgid "Unable to update port %s: %s" msgstr "Não foi possível atualizar a porta %s: %s" #, python-format msgid "Unable to update portgroup %s: %s" msgstr "Não é possível atualizar o grupo de portas %s: %s" #, python-format msgid "Unable to validate node %s: %s" msgstr "Não foi possível validar o nó %s: %s" msgid "Unable to validate the JSON input" msgstr "Não é possível validar o JSON de entrada" msgid "Update Node" msgstr "Atualizar Nó" msgid "Update Port" msgstr "Atualizar Porta" msgid "Update Portgroup" msgstr "Atualizar Grupo de Portas" msgid "Updated At" msgstr "Atualizado em" msgid "Valid" msgstr "Válido" msgid "Virtualization Software" msgstr "Software de Virtualização" msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" msgstr "padrão (?:value )? está ([^\"\\. ]+|\"[^\"]+\")" ironic-ui-3.4.0/ironic_ui/locale/ko_KR/0000775000175000017500000000000013444452775017701 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/ko_KR/LC_MESSAGES/0000775000175000017500000000000013444452775021466 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/ko_KR/LC_MESSAGES/django.po0000666000175000017500000000120513444452675023267 0ustar zuulzuul00000000000000# Eunseop Shin , 2016. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-02-22 19:02+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 4.3.3\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "Ironic Bare Metal Provisioning" msgstr "Ironic 베어메탈 프로비저닝" ironic-ui-3.4.0/ironic_ui/locale/ko_KR/LC_MESSAGES/djangojs.po0000666000175000017500000004271613444452675023640 0ustar zuulzuul00000000000000# 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 # Jun-Sik Shin , 2017. #zanata # Sungjin Kang , 2017. #zanata # Wonil Choi , 2017. #zanata # minwook-shin , 2017. #zanata # Ian Y. Choi , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-03-09 11:12+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-03-13 02:08+0000\n" "Last-Translator: Ian Y. Choi \n" "Language-Team: Korean (South Korea)\n" "Language: ko_KR\n" "X-Generator: Zanata 4.3.3\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 "Action" msgstr "동작" msgid "Actions" msgstr "작업" msgid "Add Extra" msgstr "Extra 추가" msgid "Add Instance Property" msgstr "인스턴스 속성 추가" msgid "Add Logical Disk" 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 "Chassis 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 "Create Portgroup" msgstr "포트그룹 생성" msgid "Created At" msgstr "생성 시점" msgid "Current Interface" 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 "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 Interfaces" msgstr "드라이버 인터페이스" msgid "Driver Validation" msgstr "드라이버 확인" msgid "" "Each cleaning step must be an object that contains \"interface\" and \"step" "\" properties" msgstr "" "각 클리닝 단계는 \"interface\"와 \"step\" 속성을 가지고 있는 오브젝트여야 합" "니다." msgid "Edit Node" msgstr "노드 편집" msgid "Edit Port" msgstr "포트 수정" msgid "Edit Portgroup" 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 "Indicates whether this port should be used when PXE booting this node" msgstr "이 노드에서 PXE 부팅 시 이 포트가 사용되어야 하는지를 가리킵니다." msgid "Inject NMI" msgstr "NMI 주입" 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 "" "Linux portgroup mode. For possible values refer to https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" msgstr "" "리눅스 포트그룹 모드. 가능한 설정은 https://www.kernel.org/doc/Documentation/" "networking/bonding.txt 을 참고하세요." 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 for this portgroup." msgstr "이 포트그룹을 위한 MAC 주소" msgid "MAC address or OpenFlow datapath ID" msgstr "MAC 주소 또는 OpenFlow datapath ID" msgid "Maintenance" msgstr "유지보수" msgid "Maintenance Reason" msgstr "유지보수 사유" msgid "Mode" msgstr "모드" msgid "Move to" msgstr "이동" msgid "Name" msgstr "이름" msgid "Name for the portgroup." 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 "One of this, (.*) must be specified\\." msgid "Overview" msgstr "개요" msgid "PXE Enabled" msgstr "PXE 활성화됨" msgid "PXE enabled" msgstr "PXE 활성화됨" msgid "Persistent" msgstr "Persistent" 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 "RAID Level" msgstr "RAID 레벨" 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 "Refresh page." msgstr "페이지를 갱신합니다." msgid "Required" msgstr "필수항목" msgid "Reservation" msgstr "예약" msgid "Resource Class" msgstr "리소스 클래스" msgid "Root GB" msgstr "루트 GB" msgid "Root Volume" msgstr "루트 볼륨" msgid "Root Volume." msgstr "루트 볼륨." 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 "Select a boot device" msgstr "부트 디바이스 선택" msgid "Select a portgroup" msgstr "포트그룹 선택" msgid "Set Boot Device" msgstr "부트 디바이스 설정" msgid "Set RAID Configuration" msgstr "RAID 구성 설정" msgid "Set RAID configuration" msgstr "RAID 구성 설정" msgid "Set Target RAID Config" msgstr "대상 RAID 구성 설정" msgid "Set boot device" msgstr "부트 디바이스 설정" msgid "Size GB" msgstr "크기 (GB)" msgid "Soft power off" msgstr "소프트 전원 끄기" msgid "Soft reboot" msgstr "소프트 재시작" msgid "Specifies RAID Level." msgstr "RAID 레벨을 지정합니다." msgid "Specifies logical disk size in GiB. Required." msgstr "논리 디스크 크기를 GiB로 지정합니다. 필수." msgid "" "Specifies whether ports in this portgroup can be used as standalone ports." msgstr "이 포트그룹 내 포트들이 standalone 포트로 사용 가능한 지 지정합니다." msgid "Specifies whether root volume or not." msgstr "루트 볼륨인지 아닌지 지정합니다." msgid "Standalone Ports Supported" msgstr "독립형 포트 지원" msgid "Storage Interface" 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가 성공적으로 업데이트하였습니다" #, python-format msgid "Successfully updated portgroup %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 "노드를 생성할 수 없습니다: %s" msgid "Unable to create port update patch." msgstr "포트 업데이트 패치를 만들 수 없습니다." #, python-format msgid "Unable to create port: %s" msgstr "포트를 생성할 수 없습니다: %s" msgid "Unable to create portgroup update patch." msgstr "포트그룹 업데이트 패치를 만들 수 없습니다." #, 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 "노드 %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 inject NMI: %s" msgstr "NMI: %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 set raid config: %s" msgstr "raid 구성: %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 update portgroup %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 "Update Portgroup" msgstr "포트그룹 업데이트" msgid "Updated At" msgstr "업데이트 시점" msgid "Valid" msgstr "유효" msgid "Virtualization Software" msgstr "가상화 소프트트웨어" msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" msgstr "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" ironic-ui-3.4.0/ironic_ui/locale/id/0000775000175000017500000000000013444452775017270 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/id/LC_MESSAGES/0000775000175000017500000000000013444452775021055 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/id/LC_MESSAGES/django.po0000666000175000017500000000117113444452675022660 0ustar zuulzuul00000000000000# 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" ironic-ui-3.4.0/ironic_ui/locale/id/LC_MESSAGES/djangojs.po0000666000175000017500000004063413444452675023224 0ustar zuulzuul00000000000000# OpenStack Infra , 2015. #zanata # Andreas Jaeger , 2016. #zanata # suhartono , 2017. #zanata # suhartono , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-01-17 20:40+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-01-09 05:09+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 "Action" msgstr "Action" msgid "Actions" msgstr "Aksi" msgid "Add Extra" msgstr "Menambahkan Extra" msgid "Add Instance Property" msgstr "Menambahkan Instance Property" msgid "Add Logical Disk" msgstr "Menambahkan Logical Disk" 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 "Create Portgroup" msgstr "Membuat Portgroup" msgid "Created At" msgstr "Created At" msgid "Current Interface" msgstr "Current Interface" 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 Interfaces" msgstr "Driver Interfaces" 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 "Edit Portgroup" msgstr "Edit Portgroup" 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 "Inject NMI" msgstr "Menyuntikkan NMI" 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 "" "Linux portgroup mode. For possible values refer to https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" msgstr "" "Mode portgroup Linux. Untuk nilai yang mungkin lihat https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" 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 for this portgroup." msgstr "MAC address untuk portgroup ini" 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 "Mode" msgstr "Mode" msgid "Move to" msgstr "Move to (pindah ke)" msgid "Name" msgstr "Nama" msgid "Name for the portgroup." msgstr "Nama untuk portgroup" 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 "RAID Level" msgstr "RAID Level" 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 "Refresh page." msgstr "Refresh halaman" msgid "Required" msgstr "Wajib" msgid "Reservation" msgstr "Reservation" msgid "Resource Class" msgstr "Resource Class" msgid "Root GB" msgstr "Root GB" msgid "Root Volume" msgstr "Root Volume" msgid "Root Volume." msgstr "Root Volume." 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 RAID Configuration" msgstr "Set RAID Configuration" msgid "Set RAID configuration" msgstr "Setel konfigurasi RAID" msgid "Set Target RAID Config" msgstr "Set Target RAID Config" msgid "Set boot device" msgstr "Setel perangkat booting" msgid "Size GB" msgstr "Ukuran GB" msgid "Soft power off" msgstr "Soft power off" msgid "Soft reboot" msgstr "Soft reboot" msgid "Specifies RAID Level." msgstr "Menentukan RAID Level." msgid "Specifies logical disk size in GiB. Required." msgstr "Menentukan ukuran disk logikal dalami GiB. Wajib." msgid "" "Specifies whether ports in this portgroup can be used as standalone ports." msgstr "" "Menentukan apakah port dalam portgroup ini dapat digunakan sebagai port " "standalone." msgid "Specifies whether root volume or not." msgstr "Menentukan apakah root volume atau bukan." msgid "Standalone Ports Supported" msgstr "Port Standalone yang Didukung" msgid "Storage Interface" msgstr "Storage Interface" 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" #, python-format msgid "Successfully updated portgroup %s" msgstr "Portgroup yang 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" msgid "Unable to create portgroup update patch." msgstr "Tidak dapat membuat patch update portgroup." #, 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 inject NMI: %s" msgstr "Tidak dapat menyuntikkan NMI: %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 set raid config: %s" msgstr "Tidak dapat mengatur konfigurasi raid: %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 update portgroup %s: %s" msgstr "Tidak dapat memperbarui portgroup %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 "Update Portgroup" msgstr "Update Portgroup" 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 ([^\"\\. ]+|\"[^\"]+\")" ironic-ui-3.4.0/ironic_ui/locale/de/0000775000175000017500000000000013444452775017264 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/de/LC_MESSAGES/0000775000175000017500000000000013444452775021051 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/de/LC_MESSAGES/django.po0000666000175000017500000000117613444452675022661 0ustar zuulzuul00000000000000# 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" ironic-ui-3.4.0/ironic_ui/locale/de/LC_MESSAGES/djangojs.po0000666000175000017500000004266113444452675023222 0ustar zuulzuul00000000000000# Frank Kloeker , 2017. #zanata # Robert Simai , 2017. #zanata # Robert Simai , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-01-25 03:21+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-01-24 10:37+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 "Action" msgstr "Aktion" msgid "Actions" msgstr "Aktionen" msgid "Add Extra" msgstr "Extra hinzufügen" msgid "Add Instance Property" msgstr "Instanzeigenschaft hinzufügen" msgid "Add Logical Disk" msgstr "Logische Festplatte 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 "Create Portgroup" msgstr "Portgruppe erstellen" msgid "Created At" msgstr "Erstellt am" msgid "Current Interface" msgstr "Aktuelle Schnittstelle" 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 Interfaces" msgstr "Treiber-Schnittstellen" 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 "Edit Portgroup" msgstr "Portgruppe 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 "Indicates whether this port should be used when PXE booting this node" msgstr "Gibt an, ob der Port beim PXE-Boot des Knotens verwendet werden soll" msgid "Inject NMI" msgstr "NMI einfügen" msgid "Inspect" msgstr "Inspizieren" msgid "Inspection Finished At" msgstr "Inspektion beendet 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 "" "Linux portgroup mode. For possible values refer to https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" msgstr "" "Linux Portgruppen Modus. Mögliche Werte finden Sie hier: https://www.kernel." "org/doc/Documentation/networking/bonding.txt" 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 for this portgroup." msgstr "MAC-Adresse für diese Portgruppe" 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 "Mode" msgstr "Modus" msgid "Move to" msgstr "Verschieben nach" msgid "Name" msgstr "Name" msgid "Name for the portgroup." msgstr "Name der Portgruppe." 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 "Portgroup that this port belongs to" msgstr "Portgruppe, zu der der Port gehört" 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 "RAID Level" msgstr "RAID-Ebene" msgid "Ramdisk" msgstr "Ramdisk" msgid "Reason" msgstr "Grund" msgid "Reboot" msgstr "Neustart" msgid "Refresh" msgstr "Aktualisieren" msgid "Refresh page to see set boot device" msgstr "Aktualisieren Sie die Seite um das gesetzte Boot-Gerät zu sehen" 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 "Refresh page." msgstr "Seite aktualisieren." msgid "Required" msgstr "Erforderlich" msgid "Reservation" msgstr "Reservierung" msgid "Resource Class" msgstr "Ressourcen-Klasse" msgid "Root GB" msgstr "Root GB" msgid "Root Volume" msgstr "Root-Datenträger" msgid "Root Volume." msgstr "Root-Datenträger" 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 "Select a boot device" msgstr "Wählen Sie ein Boot-Gerät" msgid "Select a portgroup" msgstr "Wählen Sie eine Portgruppe" msgid "Set Boot Device" msgstr "Boot-Gerät setzen" msgid "Set RAID Configuration" msgstr "RAID-Konfiguration setzen" msgid "Set RAID configuration" msgstr "RAID-Konfiguration setzen" msgid "Set Target RAID Config" msgstr "Ziel RAID-Konfiguration setzen" msgid "Set boot device" msgstr "Boot-Gerät setzen" msgid "Size GB" msgstr "Größe GB" msgid "Soft power off" msgstr "Sanftes Ausschalten" msgid "Soft reboot" msgstr "Sanfter Neustart" msgid "Specifies RAID Level." msgstr "Gibt die RAID-Ebene an." msgid "Specifies logical disk size in GiB. Required." msgstr "Gibt die logische Plattengröße in GiB an. Erforderlich." msgid "" "Specifies whether ports in this portgroup can be used as standalone ports." msgstr "" "Gibt an, ob Ports aus dieser Portgruppe auch eigenständig verwendet werden " "können." msgid "Specifies whether root volume or not." msgstr "Gibt an, ob es sich um einen Root-Datenträger handelt." msgid "Standalone Ports Supported" msgstr "Unterstützung für eigenständige Ports" msgid "Storage Interface" msgstr "Storage-Schnittstelle" 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" #, python-format msgid "Successfully updated portgroup %s" msgstr "Portgruppe %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" msgid "Unable to create portgroup update patch." msgstr "Portgruppen-Aktualisierung kann nicht erstellt werden." #, 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 Knoten %s kann nicht abgerufen werden: %s" #, python-format msgid "Unable to inject NMI: %s" msgstr "NMI kann nicht eingefügt 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 portgroup ports: %s" msgstr "Portgruppenports können nicht abgerufen werden: %s" #, python-format msgid "Unable to retrieve supported boot devices for Ironic node. %s" msgstr "" "Unterstützte Boot-Geräte für den Ironic-Knoten 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 boot device: %s" msgstr "Boot-Gerät kann nicht gesetzt werden: %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 set raid config: %s" msgstr "Raid-Konfiguration kann nicht gesetzt werden: %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 update portgroup %s: %s" msgstr "Portgruppe %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 "Update Portgroup" msgstr "Portgruppe aktualisieren" msgid "Updated At" msgstr "Aktualisiert am" msgid "Valid" msgstr "Gültig" msgid "Virtualization Software" msgstr "Virtualisierungssoftware" msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" msgstr "Standard (?:value )?ist ([^\"\\. ]+|\"[^\"]+\")" ironic-ui-3.4.0/ironic_ui/locale/tr_TR/0000775000175000017500000000000013444452775017726 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/tr_TR/LC_MESSAGES/0000775000175000017500000000000013444452775021513 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/tr_TR/LC_MESSAGES/django.po0000666000175000017500000000120613444452675023315 0ustar zuulzuul00000000000000# işbaran akçayır , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-02-22 19:02+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 4.3.3\n" "Plural-Forms: nplurals=2; plural=(n>1)\n" msgid "Ironic Bare Metal Provisioning" msgstr "Ironic Saf Metal Hazırlığı" ironic-ui-3.4.0/ironic_ui/locale/tr_TR/LC_MESSAGES/djangojs.po0000666000175000017500000004113113444452675023653 0ustar zuulzuul00000000000000# Mücahit Büyükyılmaz , 2015. #zanata # OpenStack Infra , 2015. #zanata # Andreas Jaeger , 2016. #zanata # Mücahit Büyükyılmaz , 2016. #zanata # işbaran akçayır , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-02-22 19:02+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-09-16 08:03+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 4.3.3\n" "X-POOTLE-MTIME: 1495454551.000000\n" msgid " ([^\" ]+|\"[^\"]+\") \\(Default\\)" msgstr " ([^\" ]+|\"[^\"]+\") \\(Öntanımlı\\)" 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 düğümünün hazırlık durumnda bir değişklik yapılması isteği geldi" 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." #, 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\" bağlantı noktası grubunu silmek istediğinize emin misiniz? Bu eylem " "geri getirilemez." msgstr[1] "" "\"%s\" bağlantı noktası gruplarını silmek istediğinize emin misiniz? Bu " "eylem geri getirilemez." msgid "Attributes" msgstr "Öznitelikler" 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 "Create Portgroup" msgstr "Bağlantı Noktası Grubu Oluştur" msgid "Created At" msgstr "Oluşturulduğu zaman" msgid "Current Interface" msgstr "Mevcut Arayüz" 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 "Delete Portgroup" msgid_plural "Delete Portgroups" msgstr[0] "Bağlantı Noktası Grubunu Sil" msgstr[1] "Bağlantı Noktası Grupları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 "Edit Portgroup" msgstr "Bağlantı Noktası Grubunu 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 "Indicates whether this port should be used when PXE booting this node" msgstr "" "Bu düğüm PXE önyüklenirken bu bağlantı noktasının kullanılıp " "kullanılmayacağını gösterir" 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 "" "Linux portgroup mode. For possible values refer to https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" msgstr "" "Linux bağlantı noktası grubu kipi. Muhtemel değerler için https://www.kernel." "org/doc/Documentation/networking/bonding.txt adresine başvurun" msgid "Local Link Connection" msgstr "Yerel Ağ Bağlantısı" msgid "Local link connection" msgstr "Yerel bağlantı" msgid "MAC Address" msgstr "MAC Adresi" msgid "MAC address" msgstr "MAC adresi" msgid "MAC address for this port. Required." msgstr "Bu bağlantı noktası için MAC adresi. Gerekli." msgid "MAC address for this portgroup." msgstr "Bu bağlantı noktası grubu için 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 "Mode" msgstr "Kip" msgid "Move to" msgstr "Taşı" msgid "Name" msgstr "İsim" msgid "Name for the portgroup." msgstr "Bağlantı noktası grubu için isim." 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 portgroups have been defined" msgstr "Herhangi bir bağlantı noktası grubu tanımlanmamış" msgid "No reason given." msgstr "Sebep verilmemiş." msgid "Node" msgstr "Düğüm" #, python-format msgid "Node %s is already in target maintenance state." msgstr "Düğüm %s zaten hedef bakım durumunda." 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 "PXE enabled" msgstr "PXE etkin" msgid "Persistent" msgstr "Kalıcı" msgid "Port successfully created" msgstr "Bağlantı noktası başarıyla oluşturuldu" msgid "Portgroup" msgstr "Bağlantı noktası grubu" msgid "Portgroup successfully created" msgstr "Bağlantı noktası grubu başarıyla oluşturuldu" msgid "Portgroup that this port belongs to" msgstr "Bu bağlantı noktasının ait olduğu bağlantı noktası grubu" msgid "Portgroups" msgstr "Bağlantı noktası grupları" 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 set boot device" msgstr "Önyükleme aygıtı ayarlamayı görmek için sayfayı tazeleyin" 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 "Resource Class" msgstr "Kaynak Sınıfı" 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 "Select a boot device" msgstr "Bir önyükleme aygıtı seçin" msgid "Select a portgroup" msgstr "Bir bağlantı noktası grubu seçin" msgid "Set Boot Device" msgstr "Önyükleme Aygıtı Ayarla" msgid "Set boot device" msgstr "Önyükleme aygıtı ayarla" msgid "Soft power off" msgstr "Yumuşak güç kapa" msgid "Soft reboot" msgstr "Yumuşak yeniden başlatma" msgid "" "Specifies whether ports in this portgroup can be used as standalone ports." msgstr "" "Bu bağlantı noktası grubundaki bağlantı noktalarının bağımsız bağlantı " "noktaları olarak kullanılıp kullanılamayacağını belirtir." msgid "Standalone Ports Supported" msgstr "Bağımsız Bağlantı Noktaları Destekleniyor" 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 deleted portgroup \"%s\"" msgid_plural "Successfully deleted portgroups \"%s\"" msgstr[0] "\"%s\" bağlantı noktası grubu başarıyla silindi" msgstr[1] "\"%s\" bağlantı noktası grupları 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" #, python-format msgid "Successfully updated portgroup %s" msgstr "Bağlantı noktası grubu %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" msgid "Unable to create portgroup update patch." msgstr "Bağlantı noktası grubu güncelleme yaması oluşturulamadı." #, python-format msgid "Unable to create portgroup: %s" msgstr "Bağlantı noktası grubu oluşturulamadı: %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" #, 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 delete portgroup \"%s\"" msgid_plural "Unable to delete portgroups \"%s\"" msgstr[0] "\"%s\" bağlantı noktası grubu silinemedi" msgstr[1] "\"%s\" bağlantı noktası grupları silinemedi" #, python-format msgid "Unable to delete portgroup: %s" msgstr "Bağlantı noktası grubu silinemedi: %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 node portgroups: %s" msgstr "Ironic düğümü bağlantı noktası grupları alınamadı: %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 portgroup ports: %s" msgstr "Bağlantı noktası grubu bağlantı noktaları alınamadı: %s" #, python-format msgid "Unable to retrieve supported boot devices for Ironic node. %s" msgstr "Ironic düğümü için desteklenen ön yükleme aygıtları alınamadı. %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 Ironic node %s maintenance state: %s" msgstr "Ironic düğümü %s bakım durumuna ayarlanamadı: %s" #, python-format msgid "Unable to set boot device: %s" msgstr "Önyükleme aygıtı ayarlanamadı: %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 update portgroup %s: %s" msgstr "%s bağlantı noktası grubu güncellenemedi: %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 "Update Portgroup" msgstr "Bağlantı Noktası Grubunu 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 )? ([^\"\\. ]+|\"[^\"]+\")" ironic-ui-3.4.0/ironic_ui/locale/fr/0000775000175000017500000000000013444452775017303 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/fr/LC_MESSAGES/0000775000175000017500000000000013444452775021070 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/fr/LC_MESSAGES/django.po0000666000175000017500000000121613444452675022673 0ustar zuulzuul00000000000000# 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" ironic-ui-3.4.0/ironic_ui/locale/fr/LC_MESSAGES/djangojs.po0000666000175000017500000002307013444452675023232 0ustar zuulzuul00000000000000# 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 # Loic Nicolle , 2017. #zanata # JF Taltavull , 2018. #zanata # Loic Nicolle , 2018. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-02-22 19:02+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2018-03-06 07:31+0000\n" "Last-Translator: JF Taltavull \n" "Language-Team: French\n" "Language: fr\n" "X-Generator: Zanata 4.3.3\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 "Action" msgstr "Action" 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 "Attributes" msgstr "Attributs" msgid "Boot Device" msgstr "Périphérique de démarrage" 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 "Edit Port" msgstr "Editer le port" msgid "Enroll Node" msgstr "Enroller le nœud" msgid "Extra" msgstr "Extra" msgid "Extras" msgstr "Extras" msgid "General" msgstr "Général" msgid "Image Source" msgstr "Image source" msgid "Inspect" msgstr "Inspecter" 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 "Interface" msgstr "Interface" 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 "Mode" msgstr "Mode" msgid "Name" msgstr "Nom" msgid "Name for the portgroup." msgstr "Nom du portgroup." msgid "Network Interface" msgstr "Interface réseau" 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 "No reason given." msgstr "Aucune raison fournie." 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 de celles-ci (.*) doit être spécifiée\\." msgid "Overview" msgstr "Vue d'ensemble" msgid "PXE enabled" msgstr "PXE activé" msgid "Persistent" msgstr "Persistant" msgid "Port successfully created" msgstr "Port crée avec succès" msgid "Portgroup successfully created" msgstr "Portgroup 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 "Reason" msgstr "Raison" msgid "Reboot" msgstr "Redémarrage" msgid "Refresh" msgstr "Rafraichir" msgid "Refresh page to see updated console details" msgstr "Rafraîchir la page pour voir les détails de la console mis à jour" msgid "Refresh page to see updated power status" msgstr "Rafraichir la page pour voir les statuts d'alimentation à jour" msgid "Refresh page." msgstr "Rafraichir la page." msgid "Required" msgstr "Obligatoire" msgid "Reservation" msgstr "Réservation" msgid "Root Volume" msgstr "Volume racine" msgid "Root Volume." msgstr "Volume racine." msgid "SSH Key Contents" msgstr "Contenu de la clef" msgid "SSH Password" msgstr "Mot de passe SSH" msgid "SSH Port" msgstr "Port SSH" msgid "SSH Username" msgstr "Utilisateur SSH" msgid "Select a Driver" msgstr "Sélectionner un pilote" msgid "Select a boot device" msgstr "Sélectionner le périphérique de démarrage" msgid "Size GB" msgstr "Taille Go" msgid "Soft reboot" msgstr "Redémarrage logiciel" 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" #, python-format msgid "Successfully updated port %s" msgstr "Port mis à jour avec succès : %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 Ironic nodes. %s" msgstr "Impossible de récupérer les noeuds 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" #, python-format msgid "Unable to update port %s: %s" msgstr "Impossible de mettre à jour le port %s : %s" msgid "Update Node" msgstr "Mettre à jour le nœud" msgid "Update Port" msgstr "Mettre à jour le port" msgid "Updated At" msgstr "Mis à jour à" msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" msgstr "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" ironic-ui-3.4.0/ironic_ui/locale/ru/0000775000175000017500000000000013444452775017322 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/ru/LC_MESSAGES/0000775000175000017500000000000013444452775021107 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/ru/LC_MESSAGES/django.po0000666000175000017500000000135513444452675022716 0ustar zuulzuul00000000000000# 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" ironic-ui-3.4.0/ironic_ui/locale/ru/LC_MESSAGES/djangojs.po0000666000175000017500000002226413444452675023255 0ustar zuulzuul00000000000000# 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 )? - ([^\"\\. ]+|\"[^\"]+\")" ironic-ui-3.4.0/ironic_ui/locale/ja/0000775000175000017500000000000013444452775017266 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/ja/LC_MESSAGES/0000775000175000017500000000000013444452775021053 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/ja/LC_MESSAGES/django.po0000666000175000017500000000120513444452675022654 0ustar zuulzuul00000000000000# 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 ベアメタルプロビジョニング" ironic-ui-3.4.0/ironic_ui/locale/ja/LC_MESSAGES/djangojs.po0000666000175000017500000004224313444452675023220 0ustar zuulzuul00000000000000# 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.dev96\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2017-08-07 21:59+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-08-09 05:33+0000\n" "Last-Translator: Shu Muto \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 "アクション" 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 "Create Portgroup" msgstr "ポートグループの作成" msgid "Created At" msgstr "作成時刻" msgid "Current Interface" 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 "RAM ディスクのデプロイ" 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 "" "各クリーニングステップは、「interface」と「step」プロパティーを含むオブジェク" "トである必要があります。" msgid "Edit Node" msgstr "ノードの編集" msgid "Edit Port" msgstr "ポートの編集" msgid "Edit Portgroup" 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 "" "Linux portgroup mode. For possible values refer to https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" msgstr "" "Linux のポートグループモードです。可能な値は、 https://www.kernel.org/doc/" "Documentation/networking/bonding.txt を参照してください。" 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 for this portgroup." msgstr "このポートグループの MAC アドレス" msgid "MAC address or OpenFlow datapath ID" msgstr "MAC アドレスあるいは OpenFlow データパス ID" msgid "Maintenance" msgstr "メンテナンス" msgid "Maintenance Reason" msgstr "メンテナンスの理由" msgid "Mode" msgstr "モード" msgid "Move to" msgstr "移動先" msgid "Name" msgstr "名前" msgid "Name for the portgroup." 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 "(.*) の1つを指定する必要があります。" 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 "RAM ディスク" 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 "" "Specifies whether ports in this portgroup can be used as standalone ports." msgstr "" "このポートグループのポートがスタンドアロンポートとして使用できるようにするか" "どうか指定してください。" msgid "Standalone Ports Supported" 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 の更新に成功しました" #, python-format msgid "Successfully updated portgroup %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" msgid "Unable to create portgroup update patch." msgstr "ポートグループを更新するパッチを作成できません。" #, 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 "ノード %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 "ノードを電源OFFにできません: %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 update portgroup %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 "Update Portgroup" msgstr "ポートグループの更新" msgid "Updated At" msgstr "最終更新" msgid "Valid" msgstr "有効" msgid "Virtualization Software" msgstr "仮想化ソフトウェア" msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" msgstr "(?:value )?のデフォルトは ([^\"\\. ]+|\"[^\"]+\") です" ironic-ui-3.4.0/ironic_ui/locale/zh_CN/0000775000175000017500000000000013444452775017675 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/zh_CN/LC_MESSAGES/0000775000175000017500000000000013444452775021462 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/locale/zh_CN/LC_MESSAGES/django.po0000666000175000017500000000117213444452675023266 0ustar zuulzuul00000000000000# Shengjing Zhu , 2016. #zanata msgid "" msgstr "" "Project-Id-Version: ironic-ui VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-02-22 19:02+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 4.3.3\n" "Plural-Forms: nplurals=1; plural=0\n" msgid "Ironic Bare Metal Provisioning" msgstr "裸金属 Ironic 配置向导" ironic-ui-3.4.0/ironic_ui/locale/zh_CN/LC_MESSAGES/djangojs.po0000666000175000017500000003437013444452675023631 0ustar zuulzuul00000000000000# 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 VERSION\n" "Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n" "POT-Creation-Date: 2018-02-22 19:02+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-08-15 02:34+0000\n" "Last-Translator: Bin \n" "Language-Team: Chinese (China)\n" "Language: zh_CN\n" "X-Generator: Zanata 4.3.3\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 "Create Portgroup" msgstr "创建端口组" msgid "Created At" msgstr "创建于" msgid "Current Interface" 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 "Edit Portgroup" 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 "" "Linux portgroup mode. For possible values refer to https://www.kernel.org/" "doc/Documentation/networking/bonding.txt" msgstr "" "Linux端口组模式。查看可能的值请参考https://www.kernel.org/doc/Documentation/" "networking/bonding.txt。" 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 for this portgroup." msgstr "该端口组的MAC地址。" msgid "MAC address or OpenFlow datapath ID" msgstr "MAC地址或OpenFlow datapath ID" msgid "Maintenance" msgstr "维护" msgid "Maintenance Reason" msgstr "维护原因" msgid "Mode" msgstr "模式" msgid "Move to" msgstr "移动" msgid "Name" msgstr "名称" msgid "Name for the portgroup." 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 "" "Specifies whether ports in this portgroup can be used as standalone ports." msgstr "指定在该端口组中的端口是否可以用作独立端口。" msgid "Standalone Ports Supported" 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”。" #, python-format msgid "Successfully updated portgroup %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" msgid "Unable to create portgroup update patch." msgstr "不能创建端口组更新补丁" #, 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 update portgroup %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 "Update Portgroup" msgstr "更新端口组" msgid "Updated At" msgstr "已更新于" msgid "Valid" msgstr "有效" msgid "Virtualization Software" msgstr "虚拟化软件" msgid "default (?:value )?is ([^\"\\. ]+|\"[^\"]+\")" msgstr "默认值 (?:value )?是 ([^\"\\. ]+|\"[^\"]+\")" ironic-ui-3.4.0/ironic_ui/enabled/0000775000175000017500000000000013444452775017027 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/enabled/_2200_ironic.py0000666000175000017500000000244713444452675021476 0ustar zuulzuul00000000000000# 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 ironic-ui-3.4.0/ironic_ui/enabled/__init__.py0000666000175000017500000000000013444452675021127 0ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/static/0000775000175000017500000000000013444452775016724 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/0000775000175000017500000000000013444452775020653 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/0000775000175000017500000000000013444452775021743 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/0000775000175000017500000000000013444452775023226 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/form-field.directive.js0000666000175000017500000000272213444452675027571 0ustar zuulzuul00000000000000/* * 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'; angular .module('horizon.dashboard.admin.ironic') .directive('formField', FormField); FormField.$inject = [ '$timeout', '$compile', 'horizon.dashboard.admin.ironic.basePath' ]; function FormField($timeout, $compile, basePath) { return { restrict: 'E', scope: { field: '=', form: '=' }, templateUrl: basePath + '/form-field.html', link: function(scope, element) { // Process the auto-focus attribute if (scope.field.autoFocus) { // Need to defer processing until the DOM is fully instantiated $timeout(function() { var inputs = element.find('input'); if (inputs[0]) { inputs.attr('auto-focus', ''); $compile(element.contents())(scope); } }); } } }; } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/ironic.service.spec.js0000666000175000017500000005401613444452675027446 0ustar zuulzuul00000000000000/** * 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 IRONIC_API_PROPERTIES = [ 'createNode', 'createPort', 'createPortgroup', 'deleteNode', 'deletePort', 'deletePortgroup', 'getDrivers', 'getDriverDetails', 'getDriverProperties', 'getNode', 'getNodes', 'getPortgroupPorts', 'getPortgroups', 'getPortsWithNode', 'getBootDevice', 'getSupportedBootDevices', 'injectNmi', 'nodeGetConsole', 'nodeSetBootDevice', 'nodeSetConsoleMode', 'nodeSetPowerState', 'nodeSetRaidConfig', 'nodeSetMaintenance', 'setNodeProvisionState', 'updateNode', 'updatePort', 'updatePortgroup', 'validateNode' ]; /** * @description Unit tests for the Ironic-UI API service */ describe( 'horizon.dashboard.admin.ironic.service', function() { // Name of default driver used to create nodes. var ironicAPI, ironicBackendMockService, defaultDriver; /** * @description Create a node. * * @param {object} params - Dictionary of parameters that define the node. * @return {promise} - Promise containing the newly created node. */ function createNode(params) { return ironicAPI.createNode(params) .then(function(response) { return response.data; // node }); } /** * @description Fail the current test * * @return {void} */ function failTest() { fail(); } beforeEach(module('horizon.dashboard.admin.ironic')); beforeEach(module('horizon.framework.util')); 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) { ironicAPI = $injector.get('horizon.app.core.openstack-service-api.ironic'); })); it('defines the ironicAPI', function() { expect(ironicAPI).toBeDefined(); }); afterEach(function() { ironicBackendMockService.postTest(); }); describe('ironicAPI', function() { it('service API', function() { expect(Object.getOwnPropertyNames(ironicAPI).sort()) .toEqual(IRONIC_API_PROPERTIES.sort()); }); it('getDrivers', function() { ironicAPI.getDrivers() .then(function(drivers) { expect(drivers).toEqual(ironicBackendMockService.getBaseDrivers()); }) .catch(failTest); ironicBackendMockService.flush(); }); it('getDriverDetails', function() { var driver = ironicBackendMockService.params.defaultDriver; ironicAPI.getDriverDetails(driver) .then(function(details) { var drivers = ironicBackendMockService.getDrivers(); expect(details).toEqual(drivers[driver].details); }) .catch(failTest); ironicBackendMockService.flush(); }); it('getDriverProperties', function() { var driver = ironicBackendMockService.params.defaultDriver; ironicAPI.getDriverProperties(driver) .then(function(properties) { var drivers = ironicBackendMockService.getDrivers(); expect(properties).toEqual(drivers[driver].properties); }) .catch(failTest); ironicBackendMockService.flush(); }); it('createNode - Minimal input data', function() { createNode({driver: defaultDriver}) .then(function(node) { expect(node.driver).toEqual(defaultDriver); expect(node).toEqual(ironicBackendMockService.getNode(node.uuid)); }) .catch(failTest); ironicBackendMockService.flush(); }); it('createNode - Missing input data', function() { createNode({}) .then(failTest); ironicBackendMockService.flush(); }); it('getNode', function() { createNode({driver: defaultDriver}) .then(function(node1) { ironicAPI.getNode(node1.uuid).then(function(node2) { expect(node2).toEqual(node1); }); }) .catch(failTest); ironicBackendMockService.flush(); }); it('deleteNode', function() { createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.deleteNode(node.uuid).then(function() { return node; }); }) .then(function(node) { expect( ironicBackendMockService.getNode(node.uuid)).toBeNull(); }) .catch(failTest); ironicBackendMockService.flush(); }); it('deleteNode - nonexistent node', function() { ironicAPI.deleteNode(0) .then(failTest); ironicBackendMockService.flush(); }); it('updateNode - resource_class', function() { createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.updateNode( node.uuid, [{op: "replace", path: "/resource_class", value: "some-resource-class"}]).then( function(node) { return node; }); }) .then(function(node) { expect(node.resource_class).toEqual("some-resource-class"); }) .catch(failTest); ironicBackendMockService.flush(); }); it('nodeGetConsole - console enabled', function() { createNode({driver: defaultDriver, console_enabled: true}) .then(function(node) { expect(node.console_enabled).toEqual(true); return node; }) .then(function(node) { return ironicAPI.nodeGetConsole(node.uuid).then( function(consoleData) { return {node: node, consoleData: consoleData}; }); }) .then(function(data) { expect(data.consoleData.console_enabled).toEqual(true); expect(data.consoleData.console_info.console_type) .toEqual(ironicBackendMockService.params.consoleType); expect(data.consoleData.console_info.url) .toEqual(ironicBackendMockService.nodeGetConsoleUrl( data.node.uuid)); }) .catch(failTest); ironicBackendMockService.flush(); }); it('nodeGetConsole - console not enabled', function() { createNode({driver: defaultDriver, console_enabled: false}) .then(function(node) { expect(node.console_enabled).toEqual(false); return node; }) .then(function(node) { return ironicAPI.nodeGetConsole(node.uuid); }) .then(function(consoleData) { expect(consoleData).toEqual( {console_enabled: false, console_info: null}); }) .catch(failTest); ironicBackendMockService.flush(); }); it('nodeSetConsoleMode - Toggle console mode', function() { createNode({driver: defaultDriver, console_enabled: false}) .then(function(node) { expect(node.console_enabled).toEqual(false); return node; }) .then(function(node) { ironicAPI.nodeSetConsoleMode(node.uuid, true); return node; }) .then(function(node) { return ironicAPI.getNode(node.uuid); }) .then(function(node) { expect(node.console_enabled).toEqual(true); return node; }) // Toggle back .then(function(node) { ironicAPI.nodeSetConsoleMode(node.uuid, false); return node; }) .then(function(node) { return ironicAPI.getNode(node.uuid); }) .then(function(node) { expect(node.console_enabled).toEqual(false); return node; }) .catch(failTest); ironicBackendMockService.flush(); }); it('nodeSetConsoleMode - Redundant console set', function() { createNode({driver: defaultDriver, console_enabled: false}) .then(function(node) { expect(node.console_enabled).toEqual(false); return node; }) .then(function(node) { ironicAPI.nodeSetConsoleMode(node.uuid, false); return node; }) .then(function(node) { return ironicAPI.getNode(node.uuid); }) .then(function(node) { expect(node.console_enabled).toEqual(false); return node; }) .catch(failTest); ironicBackendMockService.flush(); }); it('getBootDevice', function() { createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.getBootDevice(node.uuid) .then(function(bootDevice) { return {node: node, bootDevice: bootDevice}; }); }) .then(function(data) { expect(data.bootDevice).toEqual( ironicBackendMockService.getNodeBootDevice(data.node.uuid)); }) .catch(failTest); ironicBackendMockService.flush(); }); it('getSupportedBootDevices', function() { createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.getSupportedBootDevices(node.uuid); }) .then(function(bootDevices) { expect(bootDevices).toEqual( ironicBackendMockService.params.supportedBootDevices); }) .catch(failTest); ironicBackendMockService.flush(); }); it('nodeSetBootDevice', function() { var bootDevice = { boot_device: "bios", persistent: false }; createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.nodeSetBootDevice(node.uuid, bootDevice.boot_device, bootDevice.persistent) .then(function() { return node; }); }) .then(function(node) { ironicAPI.getBootDevice(node.uuid).then(function(device) { expect(device).toEqual(bootDevice); }); }) .catch(failTest); ironicBackendMockService.flush(); }); it('nodeSetBootDevice - bad device', function() { createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.getBootDevice(node.uuid) .then(function(device) { return {node: node, currentBootDevice: device}; }); }) .then(function(data) { ironicAPI.nodeSetBootDevice(data.node.uuid, "bad-device", false) .then(failTest) .catch(function() { // Ensure the boot device is unchanged ironicAPI.getBootDevice(data.node.uuid) .then(function(device) { expect(device).toEqual(data.currentBootDevice); }); }); }) .catch(failTest); ironicBackendMockService.flush(); }); it('nodeSetRaidConfig', function() { var raid = { logical_disks: [{size_gb: 10, raid_level: '1', is_root_volume: false}] }; createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.nodeSetRaidConfig(node.uuid, raid) .then(function() { return node; }); }) .then(function(node) { ironicAPI.getNode(node.uuid).then(function(node) { expect(node.target_raid_config).toEqual(raid); }); }) .catch(failTest); ironicBackendMockService.flush(); }); it('nodeSetRaidConfig - bad config', function() { var badConfig = { logical_disks: [{size_gb: 10, is_root_volume: false}] }; createNode({driver: defaultDriver}) .then(function(node) { ironicAPI.nodeSetRaidConfig(node.uuid, badConfig) .then(function() { // Ensure the target raid config is unchanged ironicAPI.getNode(node.uuid) .then(function() { expect(node.target_raid_config).toEqual({}); }); }); }) .catch(failTest); ironicBackendMockService.flush(); }); it('createPort', function() { var macAddr = '00:00:00:00:00:00'; var node; createNode({driver: defaultDriver}) .then(function(createNode) { node = createNode; return ironicAPI.createPort({address: macAddr, node_uuid: node.uuid}); }) .then(function(port) { expect(port.address).toBe(macAddr); expect(port.node_uuid).toBe(node.uuid); expect(port) .toEqual(ironicBackendMockService.getPort(port.uuid)); }) .catch(failTest); ironicBackendMockService.flush(); }); it('createPort - missing input data', function() { ironicAPI.createPort({}) .then(failTest); ironicBackendMockService.flush(); }); it('createPort - bad input data', function() { ironicAPI.createPort({address: "", node_uuid: ""}) .then(failTest); ironicBackendMockService.flush(); }); it('createPort - duplicate mac address', function() { var macAddr = '00:00:00:00:00:00'; var node; createNode({driver: defaultDriver}) .then(function(createNode) { node = createNode; return ironicAPI.createPort({address: macAddr, node_uuid: node.uuid}); }) .then(function(port) { expect(port.address).toBe(macAddr); expect(port.node_uuid).toBe(node.uuid); expect(port) .toEqual(ironicBackendMockService.getPort(port.uuid)); return ironicAPI.createPort({address: macAddr, node_uuid: node.uuid}); }) .then(failTest); ironicBackendMockService.flush(); }); it('deletePort', function() { var macAddr = '00:00:00:00:00:00'; createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.createPort({address: macAddr, node_uuid: node.uuid}); }) .then(function(port) { expect(port).toBeDefined(); expect(port) .toEqual(ironicBackendMockService.getPort(port.uuid)); ironicAPI.deletePort(port.uuid).then(function() { expect(ironicBackendMockService.getPort(port.uuid)) .toBeNull(); }); }) .catch(failTest); ironicBackendMockService.flush(); }); it('deletePort - nonexistent port', function() { ironicAPI.deletePort(0) .then(failTest); ironicBackendMockService.flush(); }); it('createPortgroup', function() { var node; createNode({driver: defaultDriver}) .then(function(createNode) { node = createNode; return ironicAPI.createPortgroup({node_uuid: node.uuid}); }) .then(function(portgroup) { expect(portgroup.node_uuid).toBe(node.uuid); expect(portgroup) .toEqual(ironicBackendMockService.getPortgroup(portgroup.uuid)); }) .catch(failTest); ironicBackendMockService.flush(); }); it('createPortgroup - specify portgroup name', function() { var node; var portgroupName = "test-portgroup"; createNode({driver: defaultDriver}) .then(function(createNode) { node = createNode; return ironicAPI.createPortgroup({node_uuid: node.uuid, name: portgroupName}); }) .then(function(portgroup) { expect(portgroup.node_uuid).toBe(node.uuid); expect(portgroup.name).toBe(portgroupName); expect(portgroup) .toEqual(ironicBackendMockService.getPortgroup(portgroup.uuid)); expect(portgroup) .toEqual(ironicBackendMockService.getPortgroup(portgroup.name)); }) .catch(failTest); ironicBackendMockService.flush(); }); it('createPortgroup - missing input data', function() { ironicAPI.createPortgroup({}) .then(failTest); ironicBackendMockService.flush(); }); it('createPort - bad input data', function() { ironicAPI.createPort({node_uuid: ""}) .then(failTest); ironicBackendMockService.flush(); }); it('deletePortgroup', function() { createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.createPortgroup({node_uuid: node.uuid}); }) .then(function(portgroup) { expect(portgroup).toBeDefined(); expect(portgroup) .toEqual(ironicBackendMockService.getPortgroup(portgroup.uuid)); ironicAPI.deletePortgroup(portgroup.uuid).then(function() { expect(ironicBackendMockService.getPortgroup(portgroup.uuid)) .toBeNull(); }); }) .catch(failTest); ironicBackendMockService.flush(); }); it('deletePortgroup - by name', function() { var portgroupName = "delete-portgroup"; createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.createPortgroup({node_uuid: node.uuid, name: portgroupName}); }) .then(function(portgroup) { expect(portgroup).toBeDefined(); expect(portgroup) .toEqual(ironicBackendMockService.getPortgroup(portgroup.uuid)); expect(portgroup) .toEqual(ironicBackendMockService.getPortgroup(portgroup.name)); ironicAPI.deletePortgroup(portgroup.name).then(function() { expect(ironicBackendMockService.getPortgroup(portgroup.name)) .toBeNull(); expect(ironicBackendMockService.getPortgroup(portgroup.uuid)) .toBeNull(); }); }) .catch(failTest); ironicBackendMockService.flush(); }); it('deletePortgroup - nonexistent portgroup', function() { ironicAPI.deletePortgroup(0) .then(failTest); ironicBackendMockService.flush(); }); it('getPortgroupPorts', function() { createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.createPortgroup({node_uuid: node.uuid}); }) .then(function(portgroup) { expect(portgroup).toBeDefined(); expect(portgroup) .toEqual(ironicBackendMockService.getPortgroup(portgroup.uuid)); ironicAPI.getPortgroupPorts(portgroup.uuid).then(function(ports) { expect(ports).toEqual([]); }); }) .catch(failTest); ironicBackendMockService.flush(); }); it('injectNmi', function() { createNode({driver: defaultDriver}) .then(function(node) { return ironicAPI.injectNmi(node.uuid); }) .then(function(response) { expect(response.status).toBe(204); expect(response.data).toBe(''); }) .catch(failTest); ironicBackendMockService.flush(); }); it('injectNmi - nonexistent node', function() { ironicAPI.injectNmi(0) .then(failTest); ironicBackendMockService.flush(); }); }); }); })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/property-collection-editor.html0000666000175000017500000000366613444452675031431 0ustar zuulzuul00000000000000
{$ collection.addPropertyLabel $}:
{$ propertyName $}
ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/edit-portgroup/0000775000175000017500000000000013444452775026212 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/edit-portgroup/edit-portgroup.service.js0000666000175000017500000000311713444452675033176 0ustar zuulzuul00000000000000/* * 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'; angular .module('horizon.dashboard.admin.ironic') .factory('horizon.dashboard.admin.ironic.edit-portgroup.service', editPortgroupService); editPortgroupService.$inject = [ '$uibModal', 'horizon.dashboard.admin.ironic.basePath' ]; function editPortgroupService($uibModal, basePath) { var service = { editPortgroup: editPortgroup }; /** * @description: Edit a specified portgroup * * @param {object} portgroup - Portgroup to be edited * @return {promise} Promise containing the updated portgroup */ function editPortgroup(portgroup) { var options = { controller: 'EditPortgroupController as ctrl', backdrop: 'static', resolve: { portgroup: function() { return portgroup; } }, templateUrl: basePath + '/base-portgroup/base-portgroup.html' }; return $uibModal.open(options).result; } return service; } })(); ././@LongLink0000000000000000000000000000015100000000000011212 Lustar 00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/edit-portgroup/edit-portgroup.controller.spec.jsironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/edit-portgroup/edit-portgroup.controller.spe0000666000175000017500000001023213444452675034070 0ustar zuulzuul00000000000000/* * Copyright 2015 Hewlett Packard Enterprise Development Company LP * 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.edit-portgroup', function () { var ironicBackendMockService, ctrl, node, portgroup, uibModalInstance; beforeEach(module('horizon.dashboard.admin.ironic')); beforeEach(module('horizon.framework.util')); beforeEach(module(function($provide) { $provide.value('$uibModal', {}); })); beforeEach(module(function($provide) { uibModalInstance = {}; $provide.value('$uibModalInstance', uibModalInstance); })); 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(); var ironicAPI = $injector.get('horizon.app.core.openstack-service-api.ironic'); ironicAPI.createNode( {driver: ironicBackendMockService.params.defaultDriver}) .then(function(response) { node = response.data; ironicAPI.createPortgroup({node_uuid: node.uuid}) .then(function(response) { portgroup = response; var controller = $injector.get('$controller'); ctrl = controller('EditPortgroupController', {portgroup: portgroup}); }); }); ironicBackendMockService.flush(); })); afterEach(function() { ironicBackendMockService.postTest(); }); it('controller should be defined', function () { expect(ctrl).toBeDefined(); }); it('controller base construction', function () { var properties = angular.copy(BASE_PORTGROUP_CONTROLLER_PROPERTIES); properties.push('modalTitle', 'updatePortgroup', 'submit', 'submitButtonTitle'); expect(Object.getOwnPropertyNames(ctrl).sort()).toEqual( properties.sort()); angular.forEach( ['address', 'name', 'standalone_ports_supported', 'mode'], function(property) { expect(ctrl[property].value).toEqual(portgroup[property]); }); angular.forEach( ['properties', 'extra'], function(collection) { expect(ctrl[collection].properties).toEqual(portgroup[collection]); }); }); it('updatePortgroup', function () { var portgroupParams = { address: 'aa:aa:aa:aa:aa:aa', name: 'my-portgroup', standalone_ports_supported: !portgroup.standalone_ports_supported, mode: '802.3ad', extra: { extra_1: 'extra_1_value' }, properties: { prop1_1: 'prop_1_value' } }; uibModalInstance.close = function(portgroup) { angular.forEach(portgroupParams, function(value, property) { expect(portgroup[property]).toEqual(value); }); }; angular.forEach(portgroupParams, function(value, property) { if (typeof value === 'object') { ctrl[property].properties = value; } else { ctrl[property].value = value; } }); ctrl.submit(); ironicBackendMockService.flush(); }); }); })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/edit-portgroup/edit-portgroup.controller.js0000666000175000017500000000672413444452675033730 0ustar zuulzuul00000000000000/* * 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'; /** * Controller used to edit a specified node portgroup */ angular .module('horizon.dashboard.admin.ironic') .controller('EditPortgroupController', EditPortgroupController); EditPortgroupController.$inject = [ '$controller', '$uibModalInstance', 'horizon.framework.widgets.toast.service', '$log', 'horizon.app.core.openstack-service-api.ironic', 'horizon.dashboard.admin.ironic.update-patch.service', 'portgroup' ]; function EditPortgroupController($controller, $uibModalInstance, toastService, $log, ironic, updatePatchService, portgroup) { var ctrl = this; $controller('BasePortgroupController', {ctrl: ctrl, $uibModalInstance: $uibModalInstance}); ctrl.modalTitle = gettext("Edit Portgroup"); ctrl.submitButtonTitle = gettext("Update Portgroup"); // Initialize form fields ctrl.address.value = portgroup.address; ctrl.name.value = portgroup.name; ctrl.standalone_ports_supported.value = portgroup.standalone_ports_supported; ctrl.mode.value = portgroup.mode; ctrl.properties.properties = angular.copy(portgroup.properties); ctrl.extra.properties = angular.copy(portgroup.extra); /** * Apply updates to the portgroup being edited * * @return {void} */ ctrl.updatePortgroup = function() { var patcher = new updatePatchService.UpdatePatch(); $log.info("Updating portgroup " + JSON.stringify(portgroup)); patcher.buildPatch(portgroup.address, ctrl.address.value, "/address"); patcher.buildPatch(portgroup.name, ctrl.name.value, "/name"); patcher.buildPatch(portgroup.standalone_ports_supported, ctrl.standalone_ports_supported.value, "/standalone_ports_supported"); patcher.buildPatch(portgroup.mode, ctrl.mode.value, "/mode"); patcher.buildPatch(portgroup.properties, ctrl.properties.properties, "/properties"); patcher.buildPatch(portgroup.extra, ctrl.extra.properties, "/extra"); var patch = patcher.getPatch(); $log.info("patch = " + JSON.stringify(patch.patch)); if (patch.status === updatePatchService.UpdatePatch.status.OK) { ironic.updatePortgroup(portgroup.uuid, patch.patch) .then(function(portgroup) { $uibModalInstance.close(portgroup); }); } else { toastService.add('error', gettext('Unable to create portgroup update patch.')); } }; ctrl.submit = function() { ctrl.updatePortgroup(); }; } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-state-transition.service.js0000666000175000017500000001242413444452675031462 0ustar zuulzuul00000000000000/* * © 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') .service('horizon.dashboard.admin.ironic.node-state-transition.service', nodeStateTransitionService); nodeStateTransitionService.$inject = []; /** * @description Utility service for working with the node state machine * @return {void} */ function nodeStateTransitionService() { // Dictionary of NodeState objects indexed by state name var states = {}; // Create node state objects angular.forEach(['enroll', 'manageable', 'active', 'available', 'adopt failed', 'clean failed', 'inspect failed', 'clean wait', 'deploy failed', 'error'], function(state) { states[state] = new NodeState(state); }); // Add state transitions states.enroll.addTransition('manageable', 'manage'); states.manageable.addTransition('active', 'adopt'); states.manageable.addTransition('available', 'provide'); states.manageable.addTransition('manageable', 'inspect', gettext('Inspect')); states.manageable.addTransition('manageable', 'clean', gettext('Clean')); states.active.addTransition('available', 'deleted'); states.available.addTransition('active', 'active'); states.available.addTransition('manageable', 'manage'); states['adopt failed'].addTransition('manageable', 'manage'); states['adopt failed'].addTransition('active', 'adopt'); states['inspect failed'].addTransition('manageable', 'manage'); states['clean wait'].addTransition('clean failed', 'abort', gettext('Abort cleaning')); states['clean failed'].addTransition('manageable', 'manage'); states['deploy failed'].addTransition('active', 'active'); states['deploy failed'].addTransition('manageable', 'deleted'); states.error.addTransition('active', 'rebuild'); states.error.addTransition('manageable', 'deleted'); /** * @description Class constructor for NodeState object. * A NodeState maintains a set of transitions to other states. * * @param {name} name – Name of state * @return {void} */ function NodeState(name) { this.name = name; this.transitions = {}; /** * @description Add a transition to a specified target state. * * @param {string} target – Name of target state * @param {string} verb – Verb used to accomplish transition * @param {string} label – Description of the transition. Optional. * @return {void} */ this.addTransition = function(target, verb, label) { this.transitions[verb] = {source: this.name, target: target, verb: verb, label: angular.isDefined(label) ? label : gettext("Move to") + " " + target}; }; /** * @description Get the transition object associated with a * specified target state. * * @param {string} targetState – Name of target state * @return {object} Transition object. A value of null * is returned if a transition does not exist. */ this.getTransition = function(targetState) { return this.transitions.hasOwnProperty(targetState) ? this.transitions[targetState] : null; }; } /** * @description Get the list of transitions originating * from a specified source state. * * @param {string} sourceState – Name of source state * @return {object[]} List of transition objects. Each * transition object contains the following fields: * source: Name of source state. * target: Name of target state. * verb: Verb used to accomplish the transition. * label: String description of the transition. */ this.getTransitions = function(sourceState) { var transitions = []; if (states.hasOwnProperty(sourceState)) { angular.forEach(states[sourceState].transitions, function(transition) { transitions.push(transition); }); } return transitions; }; /** * @description Get a list of known states. * * @return {string[]} List of known node states. */ this.getKnownStates = function() { return Object.keys(states); }; } }()); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/test-data.spec.js0000666000175000017500000000335713444452675026414 0ustar zuulzuul00000000000000/* * 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. */ /** @description Global data used by unit tests. */ /* exported BASE_NODE_CONTROLLER_PROPERTIES */ var BASE_NODE_CONTROLLER_PROPERTIES = [ '_getImages', '_loadDrivers', '_sortDriverProperties', 'cancel', 'collectionCheckPropertyUnique', 'collectionDeleteProperty', 'driverInterfaceFields', 'driverProperties', 'driverPropertyGroups', 'drivers', 'images', 'isDriverPropertyActive', 'loadDriver', '_loadDriverDetails', '_loadDriverProperties', 'loadingDriverProperties', 'modalTitle', 'node', 'propertyCollections', 'readyToSubmit', 'submitButtonTitle', 'validHostNameRegex', 'driverType']; /* exported BASE_PORT_CONTROLLER_PROPERTIES */ var BASE_PORT_CONTROLLER_PROPERTIES = [ 'address', 'cancel', 'extra', 'localLinkConnection', 'pxeEnabled', 'portgroup_uuid']; /* exported BASE_PORTGROUP_CONTROLLER_PROPERTIES */ var BASE_PORTGROUP_CONTROLLER_PROPERTIES = [ 'address', 'cancel', 'extra', 'mode', 'name', 'properties', 'standalone_ports_supported']; /* exported PROPERTY_COLLECTION_PROPERTIES */ var PROPERTY_COLLECTION_PROPERTIES = [ 'id', 'formId', 'title', 'addPrompt', 'placeholder' ]; ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-details/0000775000175000017500000000000013444452775025576 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-details/node-details.controller.js0000777000175000017500000002737313444452675032706 0ustar zuulzuul00000000000000/* * Copyright 2015 Hewlett Packard Enterprise Development Company LP * 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') .controller('horizon.dashboard.admin.ironic.NodeDetailsController', IronicNodeDetailsController); IronicNodeDetailsController.$inject = [ '$scope', '$location', 'horizon.framework.widgets.toast.service', 'horizon.app.core.openstack-service-api.ironic', 'horizon.dashboard.admin.ironic.actions', 'horizon.dashboard.admin.ironic.basePath', 'horizon.dashboard.admin.ironic.edit-node.service', 'horizon.dashboard.admin.ironic.create-port.service', 'horizon.dashboard.admin.ironic.create-portgroup.service', 'horizon.dashboard.admin.ironic.edit-port.service', 'horizon.dashboard.admin.ironic.edit-portgroup.service', 'horizon.dashboard.admin.ironic.maintenance.service', 'horizon.dashboard.admin.ironic.bootdevice.service', 'horizon.dashboard.admin.ironic.raidconfig.service', 'horizon.dashboard.admin.ironic.node-state-transition.service', 'horizon.dashboard.admin.ironic.validUuidPattern' ]; function IronicNodeDetailsController($scope, $location, toastService, ironic, actions, basePath, editNodeService, createPortService, createPortgroupService, editPortService, editPortgroupService, maintenanceService, bootDeviceService, raidConfigService, nodeStateTransitionService, validUuidPattern) { var ctrl = this; var path = basePath + '/node-details/sections/'; ctrl.noPortsText = gettext('No network ports have been defined'); ctrl.noPortgroupsText = gettext('No portgroups have been defined'); ctrl.actions = actions; ctrl.maintenanceService = maintenanceService; ctrl.bootDeviceService = bootDeviceService; ctrl.raidConfigService = raidConfigService; ctrl.sections = [ { heading: gettext('Overview'), templateUrl: path + 'overview.html' }, { heading: gettext('Configuration'), templateUrl: path + 'configuration.html' } ]; ctrl.portDetailsTemplateUrl = path + "port-details.html"; ctrl.portgroupDetailsTemplateUrl = path + "portgroup-details.html"; ctrl.node = null; ctrl.nodeValidation = []; // List of validation results ctrl.nodeValidationMap = {}; // Validation results indexed by interface ctrl.nodeStateTransitions = []; ctrl.nodePowerTransitions = []; ctrl.ports = []; ctrl.portsSrc = []; ctrl.portgroups = []; ctrl.portgroupsSrc = []; ctrl.basePath = basePath; ctrl.re_uuid = new RegExp(validUuidPattern); ctrl.isUuid = isUuid; ctrl.getVifPortId = getVifPortId; ctrl.editNode = editNode; ctrl.createPort = createPort; ctrl.createPortgroup = createPortgroup; ctrl.deletePort = deletePort; ctrl.editPort = editPort; ctrl.editPortgroup = editPortgroup; ctrl.refresh = refresh; ctrl.toggleConsoleMode = toggleConsoleMode; ctrl.deletePortgroups = deletePortgroups; ctrl.injectNmi = injectNmi; $scope.emptyObject = function(obj) { return angular.isUndefined(obj) || Object.keys(obj).length === 0; }; $scope.isDefined = angular.isDefined; init(); /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.init * @description Initialize the controller instance based on the * current page url. * * @return {void} */ function init() { // Fetch the Node ID from the URL. var pattern = /(.*\/admin\/ironic\/)(.+)\/(detail)?/; var uuid = $location.absUrl().match(pattern)[2]; retrieveNode(uuid).then(function () { ctrl.nodeStateTransitions = nodeStateTransitionService.getTransitions(ctrl.node.provision_state); ctrl.nodePowerTransitions = actions.getPowerTransitions(ctrl.node); retrievePorts(); retrieveBootDevice(); retrievePortgroups(); validateNode(); }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.retrieveNode * @description Retrieve the node instance for a specified node id, * and store it in the controller instance. * * @param {string} uuid – Node name or UUID * @return {promise} promise */ function retrieveNode(uuid) { return ironic.getNode(uuid).then(function (node) { ctrl.node = node; ctrl.node.id = ctrl.node.uuid; ironic.nodeGetConsole(uuid).then(function(consoleData) { ctrl.node.console_enabled = consoleData.console_enabled; ctrl.node.console_info = consoleData.console_info; }); }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.retrievePorts * @description Retrieve the ports associated with the current node, * and store them in the controller instance. * * @return {void} */ function retrievePorts() { ironic.getPortsWithNode(ctrl.node.uuid).then(function (ports) { ctrl.portsSrc = ports; }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.retrieveBootDevice * @description Retrieve the boot device associated with the current node, * and store it in the controller instance. * * @return {void} */ function retrieveBootDevice() { ironic.getBootDevice(ctrl.node.uuid).then(function (bootDevice) { ctrl.node.bootDevice = bootDevice; }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.retrievePortgroups * @description Retrieve the port groups associated with the current node, * and store them in the controller instance. * * @return {void} */ function retrievePortgroups() { ironic.getPortgroups(ctrl.node.uuid).then(function(portgroups) { ctrl.portgroupsSrc = portgroups; angular.forEach(portgroups, function(portgroup) { portgroup.ports = []; ironic.getPortgroupPorts(portgroup.uuid).then(function(ports) { portgroup.ports = ports; }); }); }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.validateNode * @description Retrieve the ports associated with the current node, * and store them in the controller instance. * * @return {void} */ function validateNode() { ironic.validateNode(ctrl.node.uuid).then(function(response) { var nodeValidation = []; ctrl.nodeValidationMap = {}; angular.forEach(response.data, function(interfaceStatus) { interfaceStatus.id = interfaceStatus.interface; ctrl.nodeValidationMap[interfaceStatus.interface] = interfaceStatus; interfaceStatus.hw_interface = ctrl.node[interfaceStatus.interface + '_interface']; nodeValidation.push(interfaceStatus); }); ctrl.nodeValidation = nodeValidation; }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.isUuid * @description Test whether a string is an OpenStack UUID * * @param {string} str – string * @return {boolean} True if the string is an OpenStack UUID, * otherwise false */ function isUuid(str) { return !!str.match(ctrl.re_uuid); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.getVifPortId * @description Get the vif_port_id property of a specified port * * @param {object} port – instance of port * @return {string} Value of vif_port_id property or * "" if the property does not exist */ function getVifPortId(port) { return angular.isDefined(port.extra) && angular.isDefined(port.extra.vif_port_id) ? port.extra.vif_port_id : ""; } /** * @description: Edit the current node * * @return {void} */ function editNode() { editNodeService.editNode(ctrl.node).then(function() { ctrl.refresh(); }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.createPort * @description Initiate creation of a newtwork port for the current * node * * @return {void} */ function createPort() { createPortService.createPort(ctrl.node).then(function() { ctrl.refresh(); }); } /** * @description: Edit a specified port * * @param {port} port - Port to be edited * @return {void} */ function editPort(port) { editPortService.editPort(port, ctrl.node).then(function() { ctrl.refresh(); }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.deletePort * @description Delete a list of ports * * @param {port []} ports – ports to be deleted * @return {void} */ function deletePort(ports) { actions.deletePort(ports).then(function() { ctrl.refresh(); }); } /** * @description: Edit a specified portgroup * * @param {portgroup} portgroup - Portgroup to be edited * @return {void} */ function editPortgroup(portgroup) { editPortgroupService.editPortgroup(portgroup).then(function() { ctrl.refresh(); }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.portgroupDelete * @description Delete a list of portgroups. * * @param {port []} portgroups – portgroups to be deleted. * @return {void} */ function deletePortgroups(portgroups) { actions.deletePortgroups(portgroups).then(function() { ctrl.refresh(); }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.refresh * @description Update node information * * @return {void} */ function refresh() { init(); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.toggleConsoleMode * @description Toggle the state of the console for the current node * * @return {void} */ function toggleConsoleMode() { ironic.nodeSetConsoleMode(ctrl.node.uuid, !ctrl.node.console_enabled); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.createPortgroup * @description Initiate creation of a portgroup for the current * node * * @return {void} */ function createPortgroup() { createPortgroupService.createPortgroup(ctrl.node).then(function() { ctrl.refresh(); }); } /** * @name horizon.dashboard.admin.ironic.NodeDetailsController.injectNmi * @description Inject non-masking interrupts into the current node * * @return {void} */ function injectNmi() { ironic.injectNmi(ctrl.node.uuid); } } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-details/node-details.controller.spec.js0000777000175000017500000002013213444452675033621 0ustar zuulzuul00000000000000/* * Copyright 2015 Hewlett Packard Enterprise Development Company LP * 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.node-details', function () { var nodeStateTransitionService, $controller, $location, ironicBackendMockService, $rootScope, ironicAPI; beforeEach(module(function($provide) { $provide.value('$uibModal', jasmine.createSpy()); })); beforeEach(module('horizon.dashboard.admin.ironic')); beforeEach(module('horizon.framework.util')); beforeEach(module(function($provide) { $provide.value('horizon.framework.widgets.toast.service', {add: function() {}}); })); beforeEach(module('horizon.app.core.openstack-service-api')); beforeEach(module(function($provide) { $provide.value('horizon.dashboard.admin.ironic.edit-node.service', {}); })); beforeEach(module(function($provide) { $provide.value('horizon.dashboard.admin.ironic.maintenance.service', {}); })); beforeEach(inject(function ($injector, _$rootScope_, _$location_) { $location = _$location_; $controller = $injector.get('$controller'); $rootScope = _$rootScope_; nodeStateTransitionService = $injector.get( 'horizon.dashboard.admin.ironic.node-state-transition.service'); ironicBackendMockService = $injector.get('horizon.dashboard.admin.ironic.backend-mock.service'); ironicBackendMockService.init(); ironicAPI = $injector.get('horizon.app.core.openstack-service-api.ironic'); })); function createNode() { return ironicAPI.createNode( {driver: ironicBackendMockService.params.defaultDriver}) .then(function(response) { return response.data; }); } function createController(node) { $location.path('/admin/ironic/' + node.uuid + '/'); var nodeActions = { getPowerTransitions: function() { return []; } }; return $controller( 'horizon.dashboard.admin.ironic.NodeDetailsController', {$scope: $rootScope.$new(), $location: $location, 'horizon.dashboard.admin.ironic.edit-port.service': {}, 'horizon.dashboard.admin.ironic.actions': nodeActions}); } it('controller should be defined', function () { createNode() .then(function(node) { var ctrl = createController(node); expect(ctrl).toBeDefined(); }); ironicBackendMockService.flush(); }); it('should have a basePath', function () { createNode() .then(function(node) { var ctrl = createController(node); expect(ctrl.basePath).toBeDefined(); }); ironicBackendMockService.flush(); }); it('should have a node', function () { var node, ctrl; createNode() .then(function(createdNode) { node = createdNode; ctrl = createController(node); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); // The controller augments the base node with additional attributes var ctrlNode = ironicBackendMockService.getNode(node.uuid); ctrlNode.id = node.uuid; ironicAPI.nodeGetConsole(node.uuid) .then(function(consoleInfo) { ctrlNode.console_info = consoleInfo.console_info; }) .then(function() { ironicAPI.getBootDevice(node.uuid) .then(function(bootDevice) { ctrlNode.bootDevice = bootDevice; }); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); expect(ctrl.node).toEqual(ctrlNode); }); it('should have ports', function () { var portAddress = '11:22:33:44:55:66'; var port, ctrl; createNode() .then(function(node) { return ironicAPI.createPort({node_uuid: node.uuid, address: portAddress}) .then(function(port) { return {node: node, port: port}; }); }) .then(function(data) { port = data.port; ctrl = createController(data.node); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); var ctrlPort = ironicBackendMockService.getPort(port.uuid); ctrlPort.id = ctrlPort.uuid; ctrlPort.name = ctrlPort.address; expect(ctrl.portsSrc.length).toEqual(1); expect(ctrl.portsSrc[0].address).toBe(portAddress); expect(ctrl.portsSrc[0]).toEqual(ctrlPort); }); it('should have a uuid regular expression pattern', function () { var ctrl; createNode() .then(function(node) { ctrl = createController(node); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); expect(ctrl.re_uuid).toBeDefined(); }); it('should have an isUuid function', function () { var ctrl; createNode() .then(function(node) { ctrl = createController(node); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); expect(ctrl.isUuid).toBeDefined(); expect(ctrl.isUuid(ctrl.node.uuid)).toEqual(true); expect(ctrl.isUuid("not a uuid")).toEqual(false); }); it('should have a getVifPortId function', function () { var ctrl; createNode() .then(function(node) { ctrl = createController(node); }); ironicBackendMockService.flush(); expect(ctrl.getVifPortId).toBeDefined(); }); it('should have node-state-transitions', function () { var ctrl; createNode() .then(function(node) { ctrl = createController(node); }); ironicBackendMockService.flush(); expect(ctrl.nodeStateTransitions).toBeDefined(); expect(ctrl.nodeStateTransitions).toEqual( nodeStateTransitionService.getTransitions(ctrl.node.provision_state)); }); it('should have node-validation', function () { var ctrl; createNode() .then(function(node) { ctrl = createController(node); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); var defaultNodeInterfaces = ironicBackendMockService.defaultNodeInterfaces; defaultNodeInterfaces[0].hw_interface = 'flat'; defaultNodeInterfaces[0].id = defaultNodeInterfaces[0].interface; expect(ctrl.nodeValidation).toBeDefined(); expect(ctrl.nodeValidation).toEqual(defaultNodeInterfaces); }); it('should have driver interfaces', function () { var ctrl; createNode() .then(function(node) { ctrl = createController(node); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); var interfaceName = ironicBackendMockService.defaultNodeInterfaces[0].interface; var hwInterface = ironicBackendMockService.defaultNode['' + interfaceName + '_interface']; expect(ctrl.node['' + interfaceName + '_interface']).toBeDefined(); expect(ctrl.nodeValidation[0].hw_interface).toEqual(hwInterface); }); it('should have injectNmi', function () { var ctrl; createNode() .then(function(node) { ctrl = createController(node); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); expect(ctrl.injectNmi).toBeDefined(); }); }); })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-details/node-details.html0000666000175000017500000000661613444452675031046 0ustar zuulzuul00000000000000 ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-details/sections/0000775000175000017500000000000013444452775027425 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-details/sections/port-details.html0000666000175000017500000000175313444452675032731 0ustar zuulzuul00000000000000
Attributes

UUID
{$ port.uuid $}
Local Link Connection

{$ id $}
{$ value $}
Extra

{$ id $}
{$ value $} {$ value $}
ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-details/sections/overview.html0000666000175000017500000000470613444452675032171 0ustar zuulzuul00000000000000

General


Name
{$ ctrl.node.name | noValue $}
Network Interface
{$ ctrl.node.network_interface $}
Maintenance
{$ ctrl.node.maintenance | yesno $}
Maintenance Reason
{$ ctrl.node.maintenance_reason | noValue $}
Inspection Started At
{$ ctrl.node.inspection_started_at | date: 'medium' | noValue $}
Inspection Finished At
{$ ctrl.node.inspection_finished_at | date: 'medium' | noValue $}
Reservation
{$ ctrl.node.reservation | noValue $}
Console Enabled
{$ ctrl.node.console_enabled | yesno $}
Console Info.
shellinabox
{$ ctrl.node.console_info | noValue $}

Provisioning Status


Instance ID
{$ ctrl.node.instance_uuid | noValue $}
Power State
{$ ctrl.node.power_state | noValue $}
Target Power State
{$ ctrl.node.target_power_state | noValue $}
Provision State
{$ ctrl.node.provision_state | noValue $}
Target Provision State
{$ ctrl.node.target_provision_state | noValue $}
Clean Step
{$ ctrl.node.clean_step $}
Last Error
{$ ctrl.node.last_error | noValue $}
Updated At
{$ ctrl.node.updated_at | date: 'medium' | noValue $}
ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-details/sections/portgroup-details.html0000666000175000017500000000157313444452675034006 0ustar zuulzuul00000000000000
Attributes

Mode
{$ portgroup.mode $}
SA ports
{$ portgroup.standalone_ports_supported $}
Properties

{$ id $}
{$ value $}
Extra

{$ id $}
{$ value $}
ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-details/sections/configuration.html0000666000175000017500000003523213444452675033170 0ustar zuulzuul00000000000000

General


Node ID
{$ ctrl.node.uuid | noValue $}
Chassis ID
{$ ctrl.node.chassis_uuid | noValue $}
Resource Class
{$ ctrl.node.resource_class | noValue $}
Created At
{$ ctrl.node.created_at | date:'medium' | noValue $}

Ports


{$ ::'Create port' | translate $} {$ ::'Delete ports' | translate $}
  MAC Address PXE Enabled Portgroup Actions
{$ port.address $} {$ port.pxe_enabled $} {$ port.portgroup_uuid | noValue $} {$ ::'Edit port' | translate $}
  • {$ :: 'Delete port' | translate $}
  • Portgroups


    {$ ::'Create portgroup' | translate $} {$ ::'Delete portgroups' | translate $}
      UUID MAC Address Name Ports Actions
    {$ portgroup.uuid $} {$ portgroup.address | noValue $} {$ portgroup.name | noValue $} {$ portgroup.ports.length | noValue $} {$ ::'Edit portgroup' | translate $}
  • {$ :: 'Delete portgroup' | translate $}
  • Driver Info


    Driver
    {$ ctrl.node.driver | noValue $}
    SSH Address
    {$ ctrl.node.driver_info.ssh_address | noValue $}
    SSH Port
    {$ ctrl.node.driver_info.ssh_port | noValue $}
    SSH Username
    {$ ctrl.node.driver_info.ssh_username | noValue $}
    SSH Key File
    {$ ssh_key_filename | noValue $}
    SSH Password
    {$ ssh_password | noValue $}
    SSH Key Contents
    {$ ssh_key_contents | noValue $}
    SSH terminal port
    {$ ctrl.node.driver_info.ssh_terminal_port | noValue $}
    Virtualization Software
    {$ ctrl.node.driver_info.ssh_virt_type | noValue $}
    Deploy Kernel
    {$ ctrl.node.driver_info.deploy_kernel | noValue $} {$ ctrl.node.driver_info.deploy_kernel | noValue $}
    Deploy Ramdisk
    {$ ctrl.node.driver_info.deploy_ramdisk | noValue $} {$ ctrl.node.driver_info.deploy_ramdisk | noValue $}
    {$ id $}
    {$ value $}

    Driver Validation


    Interface Valid Current Interface Reason
    {$ item.id $} {$ item.hw_interface $} {$ item.reason $}

    Properties


    {$ propertyName $}
    {$ propertyValue | noValue $}

    Instance Info


    Instance Name
    {$ ctrl.node.instance_info.display_name | noValue $}
    Ramdisk
    {$ ctrl.node.instance_info.ramdisk | noValue $}
    Kernel
    {$ ctrl.node.instance_info.kernel | noValue $}
    Image Source
    {$ ctrl.node.instance_info.image_source | noValue $}
    Root GB
    {$ ctrl.node.instance_info.root_gb | noValue $}
    {$ id $}
    {$ value | noValue $}

    Extra


    {$ propertyName $}
    {$ propertyValue | noValue $}

    Boot Device


    Device
    {$ ctrl.node.bootDevice.boot_device | noValue $}
    Persistent
    {$ ctrl.node.bootDevice.persistent | noValue $}
    ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-actions.service.js0000777000175000017500000002131113444452675027610 0ustar zuulzuul00000000000000/* * © Copyright 2015,2016 Hewlett Packard Enterprise Development Company LP * 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'; function PowerTransition(label, state, soft) { this.label = label; this.state = state; this.soft = soft; } var POWER_ON_TRANSITIONS = [ new PowerTransition(gettext('Power on'), 'on', false) ]; var POWER_OFF_TRANSITIONS = [ new PowerTransition(gettext('Power off'), 'off', false), new PowerTransition(gettext('Soft power off'), 'off', true), new PowerTransition(gettext('Reboot'), 'reboot', false), new PowerTransition(gettext('Soft reboot'), 'reboot', true) ]; var ALL_POWER_TRANSITIONS = POWER_ON_TRANSITIONS.concat(POWER_OFF_TRANSITIONS); angular .module('horizon.dashboard.admin.ironic') .factory('horizon.dashboard.admin.ironic.actions', actions); actions.$inject = [ 'horizon.app.core.openstack-service-api.ironic', 'horizon.dashboard.admin.ironic.events', 'horizon.framework.widgets.modal.deleteModalService', 'horizon.dashboard.admin.ironic.clean-node.service', '$q', '$rootScope' ]; function actions(ironic, ironicEvents, deleteModalService, cleanNodeService, $q, $rootScope) { var service = { deleteNode: deleteNode, deletePort: deletePort, deletePortgroups: deletePortgroups, setPowerState: setPowerState, setMaintenance: setMaintenance, setProvisionState: setProvisionState, getPowerTransitions : getPowerTransitions }; return service; function deleteNode(nodes) { var context = { labels: { title: ngettext("Delete Node", "Delete Nodes", nodes.length), message: ngettext('Are you sure you want to delete node "%s"? ' + 'This action cannot be undone.', 'Are you sure you want to delete nodes "%s"? ' + 'This action cannot be undone.', nodes.length), submit: ngettext("Delete Node", "Delete Nodes", nodes.length), success: ngettext('Successfully deleted node "%s"', 'Successfully deleted nodes "%s"', nodes.length), error: ngettext('Unable to delete node "%s"', 'Unable to delete nodes "%s"', nodes.length) }, deleteEntity: ironic.deleteNode, successEvent: ironicEvents.DELETE_NODE_SUCCESS }; return deleteModalService.open($rootScope, nodes, context); } // power state /** * @description Set the power state of a list of nodes * * @param {object[]} nodes - List of node objects * @param {string} state - Target power state * @param {boolean} [soft] - Flag for graceful power 'off' or reboot * @return {promise} promise */ function setPowerState(nodes, state, soft) { var promises = []; angular.forEach(nodes, function(node) { promises.push( ironic.nodeSetPowerState(node.uuid, state, soft) ); }); return $q.all(promises); } // maintenance /** * @description Set the maintenance state of a list of nodes * * @param {object[]} nodes - List of node objects * @param {boolean} mode - True if the nodes are to be put in * maintenance mode, otherwise false. * @param {string} [reason] - Optional reason for putting nodes in * maintenance mode. * @return {promise} promise */ function setMaintenance(nodes, mode, reason) { var promises = []; angular.forEach(nodes, function(node) { var promise; if (node.maintenance === mode) { var msg = gettext( "Node %s is already in target maintenance state."); promise = $q.reject(interpolate(msg, [node.uuid], false)); } else { promise = ironic.nodeSetMaintenance(node.uuid, mode, reason).then( function (result) { node.maintenance = mode; node.maintenance_reason = mode && angular.isDefined(reason) ? reason : ""; return result; } ); } promises.push(promise); }); return $q.all(promises); } /* * @name horizon.dashboard.admin.ironic.actions.setProvisionState * @description Set the provisioning state of a specified node * * @param {object} args - Object with two properties named 'node' * and 'verb'. * node: node object. * verb: string the value of which is the verb used to move * the node to the desired target state for the node. */ function setProvisionState(args) { if (args.verb === 'clean') { cleanNodeService.clean(args.node); } else { ironic.setNodeProvisionState(args.node.uuid, args.verb); } } function deletePort(ports) { var context = { labels: { title: ngettext("Delete Port", "Delete Ports", ports.length), message: ngettext('Are you sure you want to delete port "%s"? ' + 'This action cannot be undone.', 'Are you sure you want to delete ports "%s"? ' + 'This action cannot be undone.', ports.length), submit: ngettext("Delete Port", "Delete Ports", ports.length), success: ngettext('Successfully deleted port "%s"', 'Successfully deleted ports "%s"', ports.length), error: ngettext('Unable to delete port "%s"', 'Unable to delete ports "%s"', ports.length) }, deleteEntity: ironic.deletePort, successEvent: ironicEvents.DELETE_PORT_SUCCESS }; return deleteModalService.open($rootScope, ports, context); } function deletePortgroups(portgroups) { var context = { labels: { title: ngettext("Delete Portgroup", "Delete Portgroups", portgroups.length), message: ngettext('Are you sure you want to delete portgroup "%s"? ' + 'This action cannot be undone.', 'Are you sure you want to delete portgroups "%s"? ' + 'This action cannot be undone.', portgroups.length), submit: ngettext("Delete Portgroup", "Delete Portgroups", portgroups.length), success: ngettext('Successfully deleted portgroup "%s"', 'Successfully deleted portgroups "%s"', portgroups.length), error: ngettext('Unable to delete portgroup "%s"', 'Unable to delete portgroups "%s"', portgroups.length) }, deleteEntity: ironic.deletePortgroup }; return deleteModalService.open($rootScope, portgroups, context); } /* * @name horizon.dashboard.admin.ironic.actions.getPowerTransitions * @description Get the list of power transitions for a specified * node, or all power transitions if the node is not specified. * * @param {object} node – Node object for which power transitions * are requested. If node is undefined all possible power transitions * are returned. * @return {object[]} - List of PowerTransition objects */ function getPowerTransitions(node) { return angular.isUndefined(node) ? ALL_POWER_TRANSITIONS : node.power_state === 'power on' ? POWER_OFF_TRANSITIONS : POWER_ON_TRANSITIONS; } } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/postfix-expr.service.js0000666000175000017500000001210313444452675027671 0ustar zuulzuul00000000000000/* * 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'; angular .module('horizon.dashboard.admin.ironic') .factory('horizon.dashboard.admin.ironic.postfix-expr.service', postfixExprService); postfixExprService.$inject = []; function postfixExprService() { var service = { PostfixExpr: PostfixExpr }; /** * 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 expression 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]; }; return service; } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/auto-focus.directive.js0000666000175000017500000000170213444452675027627 0ustar zuulzuul00000000000000/* * 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); } }; } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/property-collection.service.spec.js0000666000175000017500000000703213444452675032174 0ustar zuulzuul00000000000000/** * 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 form-field service */ describe( 'horizon.dashboard.admin.ironic.property-collection.service', function() { var propertyCollectionService; beforeEach(module('horizon.dashboard.admin.ironic')); beforeEach(inject(function($injector) { propertyCollectionService = $injector.get('horizon.dashboard.admin.ironic.property-collection.service'); })); it('defines the form-field service', function() { expect(propertyCollectionService).toBeDefined(); }); it('PropertyCollection - default construction', function() { var collection = new propertyCollectionService.PropertyCollection({}); expect(collection.id).toBeUndefined(); expect(collection.title).toBeUndefined(); expect(collection.addPropertyLabel).toBeUndefined(); expect(collection.placeholder).toBeUndefined(); expect(collection.properties).toEqual({}); expect(collection.checkPropertyUnique).toBeDefined(); expect(collection.addProperty).toBeDefined(); expect(collection.deleteProperty).toBeDefined(); expect(collection.complete).toBeDefined(); }); it('PropertyCollection - local parameters', function() { var args = {id: 'id', title: 'title', placeholder: 'placeholder', properties: {'prop-1': 'prop1-val', 'prop-2': 'prop2-val'} }; var collection = new propertyCollectionService.PropertyCollection(args); for (var arg in args) { if (args.hasOwnProperty(arg)) { expect(collection[arg]).toBeDefined(); expect(collection[arg]).toEqual(args[arg]); } } }); it('checkPropertyUnique', function() { var collection = new propertyCollectionService.PropertyCollection({}); expect(collection.checkPropertyUnique('foo')).toBe(true); collection.addProperty('foo'); expect(collection.checkPropertyUnique('foo')).toBe(false); }); it('addProperty', function() { var collection = new propertyCollectionService.PropertyCollection({}); collection.addProperty('foo'); expect(collection.properties.foo).toBeDefined(); expect(collection.properties.foo).toBe(null); }); it('deleteProperty', function() { var collection = new propertyCollectionService.PropertyCollection({}); var original = angular.copy(collection); collection.addProperty('foo'); collection.deleteProperty('foo'); expect(collection).toEqual(original); }); it('complete', function() { var collection = new propertyCollectionService.PropertyCollection({}); expect(collection.complete()).toBe(true); collection.addProperty('foo'); expect(collection.complete()).toBe(false); }); }); })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/property-collection.service.js0000666000175000017500000000675513444452675031256 0ustar zuulzuul00000000000000/* * 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'; angular .module('horizon.dashboard.admin.ironic') .factory('horizon.dashboard.admin.ironic.property-collection.service', propertyCollectionService); function propertyCollectionService() { var service = { PropertyCollection: PropertyCollection }; /** * @description Utility class for managing property collections. * Used is association with the property-collection-editor directive. * * @param {object} args - Base properties are: * id [string] - Unique id used to create DOM element ids, and * internal variable names * title [string] - Label used to identify the collection to the user * addPropertyLabel [string] - Label used to prompt the user to add a new * property * placeholder [string] - Placeholder for text input field * properties [object] - Dictionary of property values indexed by * property name * * @return {void} */ function PropertyCollection(args) { var collection = this; collection.id = undefined; collection.title = undefined; collection.addPropertyLabel = undefined; collection.placeholder = undefined; collection.properties = {}; angular.forEach(args, function(value, arg) { collection[arg] = value; }); /** * @description Test whether this collection contains a property. * * @param {string} propertyName - Property name. * @return {boolean} True if the property already exists, false otherwise. */ this.checkPropertyUnique = function(propertyName) { return !(propertyName in collection.properties); }; /** * @description Add a property to the collection. * * @param {string} propertyName - Property name. * @return {void} */ this.addProperty = function(propertyName) { this.properties[propertyName] = null; }; /** * @description Delete a specified property. * * @param {string} propertyName - Property name. * @return {void} */ this.deleteProperty = function(propertyName) { delete collection.properties[propertyName]; }; /** * @description Test whether this collection is in a complete state. * Complete is defined as all properties having a non-null value. * * @return {boolean} True if the collection is complete, false otherwise. */ this.complete = function() { for (var propertyName in this.properties) { if (this.properties.hasOwnProperty(propertyName) && this.properties[propertyName] === null) { return false; } } return true; }; } return service; } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/modal-draggable.directive.js0000666000175000017500000000237213444452675030550 0ustar zuulzuul00000000000000/* * 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('modalDraggable', ModalDraggable); ModalDraggable.$inject = ['$document', '$log']; function ModalDraggable($document, $log) { return function (scope, element) { var modalContent = null; while (element) { if (element.hasClass("modal-content")) { modalContent = element; break; } element = element.parent(); } if (modalContent) { modalContent.draggable({ handle: ".modal-header" }); } else { $log.error("Unable to find parent dialog"); } }; } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/postfix-expr.service.spec.js0000666000175000017500000001246513444452675030635 0ustar zuulzuul00000000000000/** * 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.postfix-expr.service', function() { var service, driverPropertyService; beforeEach(module('horizon.dashboard.admin.ironic')); beforeEach(inject(function($injector) { service = $injector.get( 'horizon.dashboard.admin.ironic.postfix-expr.service'); driverPropertyService = $injector.get( 'horizon.dashboard.admin.ironic.driver-property.service'); })); it('defines the service', function() { expect(service).toBeDefined(); }); 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 driverPropertyService.DriverProperty("prop1", "", propertySet); propertySet.prop1 = prop1; var prop2 = new driverPropertyService.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); }); }); }); })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/form-field.html0000666000175000017500000000346013444452675026144 0ustar zuulzuul00000000000000
    ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/node-error.service.js0000666000175000017500000000467613444452675027315 0ustar zuulzuul00000000000000/* * © 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') .service('horizon.dashboard.admin.ironic.node-error.service', nodeErrorService); nodeErrorService.$inject = [ 'horizon.framework.widgets.toast.service' ]; function nodeErrorService(toastService) { // Node last_error cache indexed by node uuid var lastError = sessionStorage.nodeErrorService ? angular.fromJson(sessionStorage.nodeErrorService) : {}; /** * @description Get the error condition for a specified node * * @param {string} nodeUuid – node uuid * @return {string} Error condition */ this.getLastError = function(nodeUuid) { return angular.isDefined(lastError[nodeUuid]) ? lastError[nodeUuid] : null; }; /** * @description Store the error condition for a specified node * * @param {node} node – node * @return {void} */ function setLastError(node) { lastError[node.uuid] = node.last_error; // Store node error condition in browser session storage // which provides persistence across page transitions. sessionStorage.nodeErrorService = angular.toJson(lastError); } /** * @description Notify the user of a change in error condition for * specified node. * * @param {node} node – node being checked * @return {void} */ this.checkNodeError = function(node) { if (node.last_error !== null && node.last_error !== "" && (!angular.isDefined(lastError[node.uuid]) || node.last_error !== lastError[node.uuid])) { toastService.add( 'error', "Detected change in error condition on node " + node.name + ". " + node.last_error); } // Update stored node error condition setLastError(node); }; } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/create-portgroup/0000775000175000017500000000000013444452775026530 5ustar zuulzuul00000000000000././@LongLink0000000000000000000000000000015000000000000011211 Lustar 00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/create-portgroup/create-portgroup.controller.jsironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/create-portgroup/create-portgroup.controller0000666000175000017500000000432413444452675034143 0ustar zuulzuul00000000000000/* * 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'; /** * Controller used to create a portgroup on a specified node */ angular .module('horizon.dashboard.admin.ironic') .controller('CreatePortgroupController', CreatePortgroupController); CreatePortgroupController.$inject = [ '$controller', '$uibModalInstance', 'horizon.app.core.openstack-service-api.ironic', 'node' ]; function CreatePortgroupController($controller, $uibModalInstance, ironic, node) { var ctrl = this; $controller('BasePortgroupController', {ctrl: ctrl, $uibModalInstance: $uibModalInstance}); ctrl.modalTitle = gettext("Create Portgroup"); ctrl.submitButtonTitle = ctrl.modalTitle; /** * Create the defined portgroup * * @return {void} */ ctrl.createPortgroup = function() { var portgroup = { extra: ctrl.extra.properties, properties: ctrl.properties.properties }; portgroup.node_uuid = node.uuid; angular.forEach(['address', 'name', 'standalone_ports_supported', 'mode'], function(propertyName) { if (ctrl[propertyName].hasValue()) { portgroup[propertyName] = ctrl[propertyName].value; } }); ironic.createPortgroup(portgroup).then( function(createdPortgroup) { $uibModalInstance.close(createdPortgroup); }); }; ctrl.submit = function() { ctrl.createPortgroup(); }; } })(); ././@LongLink0000000000000000000000000000015500000000000011216 Lustar 00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/create-portgroup/create-portgroup.controller.spec.jsironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/create-portgroup/create-portgroup.controller0000666000175000017500000001032313444452675034137 0ustar zuulzuul00000000000000/* * 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.create-portgroup', function () { var ironicBackendMockService, uibModalInstance, ironicAPI, controller; beforeEach(module('horizon.dashboard.admin.ironic')); beforeEach(module('horizon.framework.util')); beforeEach(module(function($provide) { $provide.value('$uibModal', {}); })); beforeEach(module(function($provide) { uibModalInstance = {}; $provide.value('$uibModalInstance', uibModalInstance); })); 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(); ironicAPI = $injector.get('horizon.app.core.openstack-service-api.ironic'); controller = $injector.get('$controller'); })); afterEach(function() { ironicBackendMockService.postTest(); }); function createController() { return ironicAPI.createNode({ driver: ironicBackendMockService.params.defaultDriver}) .then(function(response) { var node = response.data; return {node: response.data, ctrl: controller('CreatePortgroupController', {node: node})}; }); } it('controller should be defined', function () { createController() .then(function(data) { expect(data.ctrl).toBeDefined(); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); }); it('base construction', function () { createController() .then(function(data) { var ctrl = data.ctrl; var properties = angular.copy(BASE_PORTGROUP_CONTROLLER_PROPERTIES); properties.push('modalTitle'); properties.push('submitButtonTitle'); properties.push('createPortgroup'); properties.push('submit'); expect(Object.getOwnPropertyNames(ctrl).sort()).toEqual( properties.sort()); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); }); it('submit - success', function () { var portgroupParams = { address: '00:00:00:00:00:00', name: 'my-portgroup', standalone_ports_supported: 'False', mode: '802.3ad', properties: { prop_1: 'prop-1-value' }, extra: { extra_1: 'extra-1-value' } }; spyOn(ironicAPI, 'createPortgroup').and.callThrough(); uibModalInstance.close = function(portgroup) { expect(portgroup).toEqual( ironicBackendMockService.getPortgroup(portgroupParams.name)); }; createController() .then(function(data) { var ctrl = data.ctrl; angular.forEach( portgroupParams, function(value, param) { if (param === 'properties' || param === 'extra') { ctrl[param].properties = value; } else { ctrl[param].value = value; } }); portgroupParams.node_uuid = data.node.uuid; ctrl.submit(); expect(ironicAPI.createPortgroup) .toHaveBeenCalledWith(portgroupParams); }) .catch(function() { fail(); }); ironicBackendMockService.flush(); }); }); })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/create-portgroup/create-portgroup.service.js0000666000175000017500000000322713444452675034034 0ustar zuulzuul00000000000000/* * 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'; angular .module('horizon.dashboard.admin.ironic') .factory('horizon.dashboard.admin.ironic.create-portgroup.service', createPortgroupService); createPortgroupService.$inject = [ '$uibModal', 'horizon.dashboard.admin.ironic.basePath' ]; function createPortgroupService($uibModal, basePath) { var service = { createPortgroup: createPortgroup }; return service; /** * @description Launch a modal dialog that will guide the user * in creating a new portgroup * * @param {object} node - Node to which the portgroup will be associated * @return {promise} Object describing the created portgroup */ function createPortgroup(node) { var options = { controller: 'CreatePortgroupController as ctrl', backdrop: 'static', resolve: { node: function() { return node; } }, templateUrl: basePath + '/base-portgroup/base-portgroup.html' }; return $uibModal.open(options).result; } } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/clean-node/0000775000175000017500000000000013444452775025233 5ustar zuulzuul00000000000000ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.service.js0000666000175000017500000000374413444452675031246 0ustar zuulzuul00000000000000/* * Copyright 2016 Cray 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. */ (function() { 'use strict'; /* * @ngdoc service * @name horizon.dashboard.admin.ironic.maintenance.service * @description Service for putting nodes in, and removing them from * maintenance mode */ angular .module('horizon.dashboard.admin.ironic') .factory('horizon.dashboard.admin.ironic.clean-node.service', cleanNodeService); cleanNodeService.$inject = [ '$uibModal', 'horizon.dashboard.admin.ironic.basePath', 'horizon.app.core.openstack-service-api.ironic' ]; function cleanNodeService($uibModal, basePath, ironic) { var service = { clean: clean }; return service; /* * @description Initiate manual cleaning of an Ironic node. * The user is prompted for a list of steps that are then * used to clean the node. * * @param {object} node - Node to be cleaned * @return {void} */ function clean(node) { var options = { controller: 'CleanNodeController as ctrl', backdrop: 'static', templateUrl: basePath + '/clean-node/clean-node.html' }; $uibModal.open(options).result.then(function(cleanSteps) { return ironic.setNodeProvisionState(node.uuid, 'clean', cleanSteps); }); } } })(); ironic-ui-3.4.0/ironic_ui/static/dashboard/admin/ironic/clean-node/clean-node.html0000666000175000017500000000224313444452675030130 0ustar zuulzuul00000000000000