Retire Packaging Deb project repos

This commit is part of a series to retire the Packaging Deb
project. Step 2 is to remove all content from the project
repos, replacing it with a README notification where to find
ongoing work, and how to recover the repo if needed at some
future point (as in
https://docs.openstack.org/infra/manual/drivers.html#retiring-a-project).

Change-Id: I4639c6cc19580e25d359d8eeb8edc8c164db81d8
This commit is contained in:
Tony Breeds 2017-09-12 16:21:47 -06:00
parent c9021bbcd5
commit a6d8ede9ed
138 changed files with 14 additions and 10617 deletions

View File

@ -1,60 +0,0 @@
# Set up globals
globals:
angular: false
extends: openstack
# Most environment options are not explicitly enabled or disabled, only
# included here for completeness' sake. They are commented out, because the
# global updates.py script would otherwise override them during a global
# requirements synchronization.
#
# Individual projects should choose which platforms they deploy to.
env:
# browser global variables.
browser: true
# Adds all of the Jasmine testing global variables for version 1.3 and 2.0.
jasmine: true
# Enable eslint-plugin-angular
plugins:
- angular
# Below we adjust rules specific to horizon's usage of openstack's linting
# rules, and its own plugin inclusions.
rules:
#############################################################################
# Disabled Rules from eslint-config-openstack
#############################################################################
valid-jsdoc: [1, {
requireParamDescription: false
}]
brace-style: 1
block-scoped-var: 1
callback-return: 1
consistent-return: 1
guard-for-in: 1
no-extra-parens: 1
no-new: 1
no-redeclare: 1
no-undefined: 1
no-unneeded-ternary: 1
no-use-before-define: 1
quote-props: 0
semi-spacing: 1
space-in-parens: 1
#############################################################################
# Angular Plugin Customization
#############################################################################
angular/controller-as-vm:
- 1
- "ctrl"
# Remove after migrating to angular 1.4 or later.
angular/no-cookiestore:
- 1

21
.gitignore vendored
View File

@ -1,21 +0,0 @@
AUTHORS
ChangeLog
build
cover
dist
doc/source/contributor/api
zaqar_ui/test/.secret_key_store
node_modules
npm-debug.log
releasenotes/build
.coverage*
.project
.pydevproject
.tox
.venv
*.egg*
*.lock
*.mo
*.pyc
*.swp
*nose_results.html

View File

@ -1,4 +0,0 @@
[gerrit]
host=review.openstack.org
port=29418
project=openstack/zaqar-ui.git

176
LICENSE
View File

@ -1,176 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

View File

@ -1,4 +0,0 @@
include setup.py
recursive-include zaqar_ui/content/queues/templates *
recursive-include zaqar_ui/static *

14
README Normal file
View File

@ -0,0 +1,14 @@
This project is no longer maintained.
The contents of this repository are still available in the Git
source code management system. To see the contents of this
repository before it reached its end of life, please check out the
previous commit with "git checkout HEAD^1".
For ongoing work on maintaining OpenStack packages in the Debian
distribution, please see the Debian OpenStack packaging team at
https://wiki.debian.org/OpenStack/.
For any further questions, please email
openstack-dev@lists.openstack.org or join #openstack-dev on
Freenode.

View File

@ -1,69 +0,0 @@
========================
Team and repository tags
========================
.. image:: http://governance.openstack.org/badges/zaqar-ui.svg
:target: http://governance.openstack.org/reference/tags/index.html
.. Change things from this point on
===============================
zaqar-ui
===============================
Zaqar Dashboard
* Free software: Apache license
* Source: http://git.openstack.org/cgit/openstack/zaqar-ui
* Bugs: http://bugs.launchpad.net/zaqar-ui
Enabling in DevStack
--------------------
Add this repo as an external repository into your ``local.conf`` file::
[[local|localrc]]
enable_plugin zaqar-ui https://github.com/openstack/zaqar-ui
Manual Installation
-------------------
Begin by cloning the Horizon and Zaqar UI repositories::
git clone https://github.com/openstack/horizon
git clone https://github.com/openstack/zaqar-ui
Create a virtual environment and install Horizon dependencies::
cd horizon
python tools/install_venv.py
Set up your ``local_settings.py`` file::
cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py
Open up the copied ``local_settings.py`` file in your preferred text
editor. You will want to customize several settings:
- ``OPENSTACK_HOST`` should be configured with the hostname of your
OpenStack server. Verify that the ``OPENSTACK_KEYSTONE_URL`` and
``OPENSTACK_KEYSTONE_DEFAULT_ROLE`` settings are correct for your
environment. (They should be correct unless you modified your
OpenStack server to change them.)
Install Zaqar UI with all dependencies in your virtual environment::
tools/with_venv.sh pip install -e ../zaqar-ui/
And enable it in Horizon::
cp ../zaqar-ui/zaqar_ui/enabled/_1510_project_messaging_group.py openstack_dashboard/local/enabled
cp ../zaqar-ui/zaqar_ui/enabled/_1520_project_queues.py openstack_dashboard/local/enabled
To run horizon with the newly enabled Zaqar UI plugin run::
python manage.py runserver 0.0.0.0:8080
to have the application start on port 8080 and the horizon dashboard will be
available in your browser at http://localhost:8080/

View File

@ -1,5 +0,0 @@
[extractors]
django = django_babel.extract:extract_django
[python: **.py]
[django: templates/**.html]

View File

@ -1,14 +0,0 @@
[extractors]
# We use a custom extractor to find translatable strings in AngularJS
# templates. The extractor is included in horizon.utils for now.
# See http://babel.pocoo.org/docs/messages/#referencing-extraction-methods for
# details on how this works.
angular = horizon.utils.babel_extract_angular:extract_angular
[javascript: **.js]
# We need to look into all static folders for HTML files.
# The **/static ensures that we also search within
# /openstack_dashboard/dashboards/XYZ/static which will ensure
# that plugins are also translated.
[angular: **/static/**.html]

View File

@ -1,60 +0,0 @@
# plugin.sh - DevStack plugin.sh dispatch script zaqar-ui
ZAQAR_UI_DIR=$(cd $(dirname $BASH_SOURCE)/.. && pwd)
function install_zaqar_ui {
# NOTE(shu-mutou): workaround for devstack bug: 1540328
# where devstack install 'test-requirements' but should not do it
# for zaqar-ui project as it installs Horizon from url.
# Remove following two 'mv' commands when mentioned bug is fixed.
mv $ZAQAR_UI_DIR/test-requirements.txt $ZAQAR_UI_DIR/_test-requirements.txt
setup_develop ${ZAQAR_UI_DIR}
mv $ZAQAR_UI_DIR/_test-requirements.txt $ZAQAR_UI_DIR/test-requirements.txt
}
function configure_zaqar_ui {
#cp -a ${ZAQAR_UI_DIR}/zaqar_ui/enabled/* ${DEST}/horizon/openstack_dashboard/local/enabled/
# NOTE: If locale directory does not exist, compilemessages will fail,
# so check for an existence of locale directory is required.
if [ -d ${ZAQAR_UI_DIR}/zaqar_ui/locale ]; then
(cd ${ZAQAR_UI_DIR}/zaqar_ui; DJANGO_SETTINGS_MODULE=openstack_dashboard.settings ../manage.py compilemessages)
fi
}
# check for service enabled
if is_service_enabled zaqar-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 Zaqar UI"
install_zaqar_ui
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
# Configure after the other layer 1 and 2 services have been configured
echo_summary "Configuring Zaqar UI"
configure_zaqar_ui
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
# no-op
:
fi
if [[ "$1" == "unstack" ]]; then
# no-op
:
fi
if [[ "$1" == "clean" ]]; then
# Remove state and transient data
# Remember clean.sh first calls unstack.sh
# no-op
:
fi
fi

View File

@ -1,3 +0,0 @@
# settings file for zaqar-ui plugin
enable_service zaqar-ui

View File

@ -1,153 +0,0 @@
# 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) source
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make <target>' where <target> 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 " 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 " 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 " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
-rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
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."
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/Cisco.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Cisco.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/Cisco"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Cisco"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
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)."
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."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
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)."
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."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
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."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."

View File

@ -1,333 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# Horizon documentation build configuration file, created by
# sphinx-quickstart on Thu Oct 27 11:38:59 2011.
#
# 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.
from __future__ import print_function
import os
import sys
import django
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT = os.path.abspath(os.path.join(BASE_DIR, "..", ".."))
sys.path.insert(0, ROOT)
# This is required for ReadTheDocs.org, but isn't a bad idea anyway.
os.environ.setdefault('DJANGO_SETTINGS_MODULE',
'openstack_dashboard.test.settings')
# 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()
from zaqar_ui import version as zaqarui_ver
# 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.
# 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 = ['sphinx.ext.autodoc',
'sphinx.ext.todo',
'sphinx.ext.coverage',
'sphinx.ext.viewcode',
'openstackdocstheme',
]
# Add any paths that contain templates here, relative to this directory.
# templates_path = ['_templates']
# The suffix of source filenames.
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'Zaqar UI'
copyright = u'2015, Catalyst IT Ltd'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = zaqarui_ver.version_info.version_string()
# The full version, including alpha/beta/rc tags.
release = zaqarui_ver.version_info.release_string()
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
# 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.
exclude_patterns = ['**/#*', '**~', '**/#*#']
# 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 = []
primary_domain = 'py'
nitpicky = 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/zaqar-ui'
bug_project = 'zaqar-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. If None, it defaults to
# "<project> v<release> documentation".
# html_title = None
# 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 (within the static path) to use as 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 = ['']
# 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 <link> 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
# Output file base name for HTML help builder.
htmlhelp_basename = 'Horizondoc'
# -- 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': '',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass
# [howto/manual]).
latex_documents = [
('index', 'Horizon.tex', u'Horizon Documentation',
u'OpenStack Foundation', '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 = []
# 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 = [
('index', u'Zaqar UI Documentation',
'Documentation for the Zaqar UI plugin to the OpenStack\
Dashboard (Horizon)',
[u'OpenStack'], 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 = [
('index', 'Horizon', u'Horizon Documentation', u'OpenStack',
'Horizon', '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'
# -- Options for Epub output --------------------------------------------------
# Bibliographic Dublin Core info.
epub_title = u'Horizon'
epub_author = u'OpenStack'
epub_publisher = u'OpenStack'
epub_copyright = u'2012, OpenStack'
# The language of the text. It defaults to the language option
# or en if the language is not set.
# epub_language = ''
# The scheme of the identifier. Typical schemes are ISBN or URL.
# epub_scheme = ''
# The unique identifier of the text. This can be an ISBN number
# or the project homepage.
# epub_identifier = ''
# A unique identification for the text.
# epub_uid = ''
# A tuple containing the cover image and cover page html template filenames.
# epub_cover = ()
# HTML files that should be inserted before the pages created by sphinx.
# The format is a list of tuples containing the path and title.
# epub_pre_files = []
# HTML files shat should be inserted after the pages created by sphinx.
# The format is a list of tuples containing the path and title.
# epub_post_files = []
# A list of files that should not be packed into the epub file.
# epub_exclude_files = []
# The depth of the table of contents in toc.ncx.
# epub_tocdepth = 3
# Allow duplicate toc entries.
# epub_tocdup = True

View File

@ -1,11 +0,0 @@
=============
Configuration
=============
Zaqar UI has no configuration option.
For more configurations, see
`Configuration Guide
<https://docs.openstack.org/horizon/latest/configuration/index.html>`__
in the Horizon documentation.

View File

@ -1,9 +0,0 @@
=====================
Source Code Reference
=====================
.. toctree::
:maxdepth: 1
:glob:
api/*

View File

@ -1,17 +0,0 @@
=================
Contributor Guide
=================
There is no topic specific to Zaqar UI now.
See `Horizon Contributor Documentation
<https://docs.openstack.org/horizon/latest/contributor/index.html>`__
for general topic on developing a dashboard on horizon.
----
.. toctree::
:glob:
:maxdepth: 1
api

View File

@ -1,28 +0,0 @@
========
Zaqar UI
========
Horizon plugin for Zaqar
* Free software: Apache license
* Source: https://git.openstack.org/cgit/openstack/zaqar-ui
* Bugs: https://bugs.launchpad.net/zaqar-ui
User Documentation
------------------
.. toctree::
:maxdepth: 2
install/index
configuration/index
Release Notes <https://docs.openstack.org/releasenotes/zaqar-ui>
Contributor Guide
-----------------
.. toctree::
:glob:
:maxdepth: 2
contributor/index

View File

@ -1,47 +0,0 @@
============
Installation
============
Enabling in DevStack
--------------------
Add this repo as an external repository into your ``local.conf`` file::
[[local|localrc]]
enable_plugin zaqar-ui https://github.com/openstack/zaqar-ui
Manual Installation
-------------------
Begin by cloning the Horizon and Zaqar UI repositories::
git clone https://github.com/openstack/horizon
git clone https://github.com/openstack/zaqar-ui
Create a virtual environment and install Horizon dependencies::
cd horizon
python tools/install_venv.py
Set up your ``local_settings.py`` file::
cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py
Open up the copied ``local_settings.py`` file in your preferred text
editor. You will want to customize several settings:
- ``OPENSTACK_HOST`` should be configured with the hostname of your
OpenStack server. Verify that the ``OPENSTACK_KEYSTONE_URL`` and
``OPENSTACK_KEYSTONE_DEFAULT_ROLE`` settings are correct for your
environment. (They should be correct unless you modified your
OpenStack server to change them.)
Install Zaqar UI with all dependencies in your virtual environment::
tools/with_venv.sh pip install -e ../zaqar-ui/
And enable it in Horizon::
cp ../zaqar-ui/enabled/_1510_messaging_panel_group.py openstack_dashboard/local/enabled
cp ../zaqar-ui/enabled/_1520_zaqar_project_queues.py openstack_dashboard/local/enabled

View File

@ -1,23 +0,0 @@
#!/usr/bin/env python
# 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
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"openstack_dashboard.settings")
execute_from_command_line(sys.argv)

View File

@ -1,35 +0,0 @@
{
"name": "zaqar-ui",
"description": "Zaqar UI JavaScript tests",
"repository": {
"type": "git",
"url": "git://git.openstack.org/openstack/zaqar-ui"
},
"version": "0.0.0",
"private": true,
"license": "Apache 2.0",
"author": "Openstack <openstack-dev@lists.openstack.org>",
"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-ng-html2js-preprocessor": "1.0.0",
"karma-phantomjs-launcher": "0.2.0",
"karma-threshold-reporter": "0.1.15",
"phantomjs": "1.9.17"
},
"dependencies": {},
"scripts": {
"postinstall": "if [ ! -d .tox ] || [ ! -d .tox/py27 ]; then tox -epy27 --notest; fi",
"lint": "eslint --no-color zaqar_ui/static",
"lintq": "eslint --quiet zaqar_ui/static",
"test": "karma start zaqar_ui/karma.conf.js --single-run"
}
}

View File

@ -1,3 +0,0 @@
---
other:
- Switch to reno for managing release notes.

View File

@ -1,6 +0,0 @@
---
features:
- >
Use initAction() instead initScope(). initScope() is
deprecated from Horizon in Ocata and will be removed
in Queens.

View File

@ -1,8 +0,0 @@
---
features:
- >
Storage pool flavors management panel is added. This
panel is added into Admin dashboard. Also create,
update and delete actions are implemeted. Create action
is implemented as globalAction, so it is callable from
other panels.

View File

@ -1,8 +0,0 @@
---
features:
- >
Storage pools management panel is added. This panel is
added into Admin dashboard. Also create, update and
delete actions are implemeted. Create action is
implemented as globalAction, so it is callable from
other panels.

View File

@ -1,280 +0,0 @@
# -*- coding: utf-8 -*-
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# 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.
# 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 of source filenames.
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'Zaqar UI Release Notes'
copyright = u'2017, Zaqar UI Developers'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
from zaqar_ui.version import version_info as zaqar_ui_version
# The full version, including alpha/beta/rc tags.
release = zaqar_ui_version.version_string_with_vcs()
# The short X.Y version.
version = zaqar_ui_version.canonical_version_string()
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
# 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.
exclude_patterns = []
# 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
# -- 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/zaqar-ui'
bug_project = 'zaqar-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. If None, it defaults to
# "<project> v<release> documentation".
# html_title = None
# 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 (within the static path) to use as 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 = ['']
# 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 <link> 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
# Output file base name for HTML help builder.
htmlhelp_basename = 'ZaqarUIReleaseNotesDoc'
# -- 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': '',
}
# 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 = [
('index', 'ZaqarUIReleaseNotes.tex',
u'Zaqar UI Release Notes Documentation',
u'Zaqar UI Developers', '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 = []
# 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 = [
('index', 'ZaqarUIReleaseNotes',
u'Zaqar UI Release Notes Documentation',
[u'Zaqar UI Developers'], 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 = [
('index', 'ZaqarUIReleaseNotes',
u'Zaqar UI Release Notes Documentation',
u'Zaqar UI Developers', 'ZaqarUIReleaseNotes',
'User Interface for Zaqar.',
'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/']

View File

@ -1,11 +0,0 @@
========================
Zaqar UI Release Notes
========================
.. toctree::
:maxdepth: 1
unreleased
ocata

View File

@ -1,65 +0,0 @@
# Andreas Jaeger <jaegerandi@gmail.com>, 2017. #zanata
# Robert Simai <robert.simai@suse.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: Zaqar UI Release Notes 2.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-03-08 02: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-03-28 08:48+0000\n"
"Last-Translator: Robert Simai <robert.simai@suse.com>\n"
"Language-Team: German\n"
"Language: de\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 "Current Series Release Notes"
msgstr "Aktuelle Serie Releasenotes"
msgid "New Features"
msgstr "Neue Features"
msgid "Ocata Series Release Notes"
msgstr "Ocata Serie Releasenotes"
msgid "Other Notes"
msgstr "Andere Notizen"
msgid ""
"Storage pool flavors management panel is added. This panel is added into "
"Admin dashboard. Also create, update and delete actions are implemeted. "
"Create action is implemented as globalAction, so it is callable from other "
"panels."
msgstr ""
"Management-Paneel für Storage-Pool-Varianten wurde zum Admin Dashboard "
"hinzugefügt. Aktionen zum erstellen, aktualisieren und löschen sind "
"implementiert. Die Erstell-Aktion ist als globalAction angelegt, so dass sie "
"von anderen Paneelen aufgerufen werden kann. "
msgid ""
"Storage pools management panel is added. This panel is added into Admin "
"dashboard. Also create, update and delete actions are implemeted. Create "
"action is implemented as globalAction, so it is callable from other panels."
msgstr ""
"Management-Paneel für Storage-Pools wurde zum Admin Dashboard hinzugefügt. "
"Aktionen zum erstellen, aktualisieren und löschen sind implementiert. Die "
"Erstell-Aktion ist als globalAction angelegt, so dass sie von anderen "
"Paneelen aufgerufen werden kann. "
msgid "Switch to reno for managing release notes."
msgstr "Reno wird für die Verwaltung der Releasenotes verwendet."
msgid ""
"Use initAction() instead initScope(). initScope() is deprecated from Horizon "
"in Ocata and will be removed in Queens."
msgstr ""
"Verwenden Sie initAction() an Stelle von initScope(). initScope() ist "
"veraltet für Horizon in Ocata und wird in Queens entfernt werden."
msgid "Zaqar UI Release Notes"
msgstr "Zaqar UI Releasenotes"

View File

@ -1,63 +0,0 @@
# Andi Chandler <andi@gowling.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: Zaqar UI Release Notes 3.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-11 12:47+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2017-07-11 05:10+0000\n"
"Last-Translator: Andi Chandler <andi@gowling.com>\n"
"Language-Team: English (United Kingdom)\n"
"Language: en-GB\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 "Current Series Release Notes"
msgstr "Current Series Release Notes"
msgid "New Features"
msgstr "New Features"
msgid "Ocata Series Release Notes"
msgstr "Ocata Series Release Notes"
msgid "Other Notes"
msgstr "Other Notes"
msgid ""
"Storage pool flavors management panel is added. This panel is added into "
"Admin dashboard. Also create, update and delete actions are implemeted. "
"Create action is implemented as globalAction, so it is callable from other "
"panels."
msgstr ""
"Storage pool flavours management panel is added. This panel is added into "
"Admin dashboard. Also create, update and delete actions are implemented. "
"Create action is implemented as globalAction, so it is callable from other "
"panels."
msgid ""
"Storage pools management panel is added. This panel is added into Admin "
"dashboard. Also create, update and delete actions are implemeted. Create "
"action is implemented as globalAction, so it is callable from other panels."
msgstr ""
"Storage pools management panel is added. This panel is added into Admin "
"dashboard. Also create, update and delete actions are implemented. Create "
"action is implemented as globalAction, so it is callable from other panels."
msgid "Switch to reno for managing release notes."
msgstr "Switch to reno for managing release notes."
msgid ""
"Use initAction() instead initScope(). initScope() is deprecated from Horizon "
"in Ocata and will be removed in Queens."
msgstr ""
"Use initAction() instead initScope(). initScope() is deprecated from Horizon "
"in Ocata and will be removed in Queens."
msgid "Zaqar UI Release Notes"
msgstr "Zaqar UI Release Notes"

View File

@ -1,64 +0,0 @@
# suhartono <cloudsuhartono@gmail.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: Zaqar UI Release Notes 3.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-17 05:42+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2017-04-17 11:10+0000\n"
"Last-Translator: suhartono <cloudsuhartono@gmail.com>\n"
"Language-Team: Indonesian\n"
"Language: id\n"
"X-Generator: Zanata 3.9.6\n"
"Plural-Forms: nplurals=1; plural=0\n"
msgid "2.0.0"
msgstr "2.0.0"
msgid "Current Series Release Notes"
msgstr "Catatan rilis seri saat ini"
msgid "New Features"
msgstr "Fitur baru"
msgid "Ocata Series Release Notes"
msgstr "Ocata Series Release Notes"
msgid "Other Notes"
msgstr "Catatan lainnya"
msgid ""
"Storage pool flavors management panel is added. This panel is added into "
"Admin dashboard. Also create, update and delete actions are implemeted. "
"Create action is implemented as globalAction, so it is callable from other "
"panels."
msgstr ""
"Panel manajemen flavor kolam penyimpanan ditambahkan. Panel ini ditambahkan "
"ke dalam dashboard Admin. Juga pembuatan, pembaharuan dan penghapusan "
"tindakan dilaksanakan. Buat tindakan yang diimplementasikan sebagai "
"globalAction, sehingga hal itu menjadi callable dari panel lainnya."
msgid ""
"Storage pools management panel is added. This panel is added into Admin "
"dashboard. Also create, update and delete actions are implemeted. Create "
"action is implemented as globalAction, so it is callable from other panels."
msgstr ""
"Panel manajemen kolam penyimpanan ditambahkan. Panel ini ditambahkan ke "
"dalam dashboard Admin. Juga pembuatan, pembaharuan dan penghapusan tindakan "
"dilaksanakan. Buat tindakan yang diimplementasikan sebagai globalAction, "
"sehingga hal itu menjadi callable dari panel lainnya."
msgid "Switch to reno for managing release notes."
msgstr "Switch ke Reno untuk mengelola catatan rilis."
msgid ""
"Use initAction() instead initScope(). initScope() is deprecated from Horizon "
"in Ocata and will be removed in Queens."
msgstr ""
"Gunakan initAction() bukannya initScope(). initScope() sudah ditinggalkan "
"dari Horizon di Ocata dan akan dihapus di Queens."
msgid "Zaqar UI Release Notes"
msgstr "Catatan Rilis Zaqar UI"

View File

@ -1,64 +0,0 @@
# Shu Muto <shu-mutou@rf.jp.nec.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: Zaqar UI Release Notes 2.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-11 01:18+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2017-04-11 03:48+0000\n"
"Last-Translator: Shu Muto <shu-mutou@rf.jp.nec.com>\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 "Current Series Release Notes"
msgstr "開発中バージョンのリリースノート"
msgid "New Features"
msgstr "新機能"
msgid "Ocata Series Release Notes"
msgstr "Ocata バージョンのリリースノート"
msgid "Other Notes"
msgstr "その他の注意点"
msgid ""
"Storage pool flavors management panel is added. This panel is added into "
"Admin dashboard. Also create, update and delete actions are implemeted. "
"Create action is implemented as globalAction, so it is callable from other "
"panels."
msgstr ""
"ストレージプールのフレーバー管理パネルが追加されました。このパネルは管理ダッ"
"シュボードに追加されています。また、作成、更新、および削除アクションが実装さ"
"れました。作成アクションはグローバルアクションとして実装されており、他のパネ"
"ルから呼び出し可能です。"
msgid ""
"Storage pools management panel is added. This panel is added into Admin "
"dashboard. Also create, update and delete actions are implemeted. Create "
"action is implemented as globalAction, so it is callable from other panels."
msgstr ""
"ストレージのプール管理パネルが追加されました。このパネルは管理ダッシュボード"
"に追加されています。また、作成、更新、および削除アクションが実装されました。"
"作成アクションはグローバルアクションとして実装されており、他のパネルから呼び"
"出し可能です。"
msgid "Switch to reno for managing release notes."
msgstr "リリースノートの管理を reno に切り替えました。"
msgid ""
"Use initAction() instead initScope(). initScope() is deprecated from Horizon "
"in Ocata and will be removed in Queens."
msgstr ""
"initScope 関数の代わりに、 initAction 関数を使用します。initScope 関数は、 "
"Horizon において Ocata で非推奨になり、 Queens で削除される予定です。"
msgid "Zaqar UI Release Notes"
msgstr "Zaqar UI リリースノート"

View File

@ -1,6 +0,0 @@
===================================
Ocata Series Release Notes
===================================
.. release-notes::
:branch: origin/stable/ocata

View File

@ -1,6 +0,0 @@
==============================
Current Series Release Notes
==============================
.. release-notes::

View File

@ -1,14 +0,0 @@
# 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.
# Order matters to the pip dependency resolver, so sorting this file
# changes how packages are installed. New dependencies should be
# added in alphabetical order, however, some dependencies may need to
# be installed in a specific order.
#
# PBR should always appear first
pbr!=2.1.0,>=2.0.0 # Apache-2.0
python-zaqarclient>=1.0.0 # Apache-2.0
Babel!=2.4.0,>=2.3.4 # BSD
Django<2.0,>=1.8 # BSD
django-babel>=0.5.1 # BSD

View File

@ -1,34 +0,0 @@
[metadata]
name = zaqar-ui
summary = Zaqar User Interface
description-file =
README.rst
author = OpenStack
author-email = openstack-dev@lists.openstack.org
home-page = http://docs.openstack.org/developer/zaqar/
classifier =
Environment :: OpenStack
Framework :: Django
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
[files]
packages =
zaqar_ui
[build_sphinx]
all_files = 1
build-dir = doc/build
source-dir = doc/source
warning-is-error = 1
[pbr]
autodoc_index_modules = True
api_doc_dir = contributor/api

View File

@ -1,29 +0,0 @@
# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
#
# 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.
# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
import setuptools
# In python < 2.7.4, a lazy loading of package `pbr` will break
# setuptools if some other modules registered functions in `atexit`.
# solution from: http://bugs.python.org/issue15881#msg170215
try:
import multiprocessing # noqa
except ImportError:
pass
setuptools.setup(
setup_requires=['pbr>=2.0.0'],
pbr=True)

View File

@ -1,30 +0,0 @@
# 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.
# Order matters to the pip dependency resolver, so sorting this file
# changes how packages are installed. New dependencies should be
# added in alphabetical order, however, some dependencies may need to
# be installed in a specific order.
#
# Hacking should appear first in case something else depends on pep8
hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
#
coverage!=4.4,>=4.0 # Apache-2.0
django-nose>=1.4.4 # BSD
mock>=2.0 # BSD
mox3!=0.19.0,>=0.7.0 # Apache-2.0
nodeenv>=0.9.4 # BSD
nose # LGPL
nose-exclude # LGPL
nosehtmloutput>=0.0.3 # Apache-2.0
nosexcover # BSD
openstack.nose-plugin>=0.7 # Apache-2.0
openstackdocstheme>=1.11.0 # Apache-2.0
reno!=2.3.1,>=1.8.0 # Apache-2.0
selenium>=2.50.1 # Apache-2.0
sphinx>=1.6.2 # BSD
testtools>=1.4.0 # MIT
# This also needs xvfb library installed on your OS
xvfbwrapper>=0.1.3 #license: MIT
# Include horizon as test requirement
http://tarballs.openstack.org/horizon/horizon-master.tar.gz#egg=horizon

View File

@ -1,97 +0,0 @@
/*
* 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));

View File

@ -1,71 +0,0 @@
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
# Copyright 2010 OpenStack Foundation
# Copyright 2013 IBM Corp.
#
# 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 install_venv_common as install_venv
def print_help(venv, root):
help = """
OpenStack development environment setup is complete.
OpenStack development uses virtualenv to track and manage Python
dependencies while in development and testing.
To activate the OpenStack virtualenv for the extent of your current shell
session you can run:
$ source %s/bin/activate
Or, if you prefer, you can run commands in the virtualenv on a case by case
basis by running:
$ %s/tools/with_venv.sh <your command>
Also, make test will automatically use the virtualenv.
"""
print(help % (venv, root))
def main(argv):
root = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
if os.environ.get('tools_path'):
root = os.environ['tools_path']
venv = os.path.join(root, '.venv')
if os.environ.get('venv'):
venv = os.environ['venv']
pip_requires = os.path.join(root, 'requirements.txt')
test_requires = os.path.join(root, 'test-requirements.txt')
py_version = "python%s.%s" % (sys.version_info[0], sys.version_info[1])
project = 'OpenStack'
install = install_venv.InstallVenv(root, venv, pip_requires, test_requires,
py_version, project)
options = install.parse_args(argv)
install.check_python_version()
install.check_dependencies()
install.create_virtualenv(no_site_packages=options.no_site_packages)
install.install_dependencies()
print_help(venv, root)
if __name__ == '__main__':
main(sys.argv)

View File

@ -1,172 +0,0 @@
# Copyright 2013 OpenStack Foundation
# Copyright 2013 IBM Corp.
#
# 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.
"""Provides methods needed by installation script for OpenStack development
virtual environments.
Since this script is used to bootstrap a virtualenv from the system's Python
environment, it should be kept strictly compatible with Python 2.6.
Synced in from openstack-common
"""
from __future__ import print_function
import optparse
import os
import subprocess
import sys
class InstallVenv(object):
def __init__(self, root, venv, requirements,
test_requirements, py_version,
project):
self.root = root
self.venv = venv
self.requirements = requirements
self.test_requirements = test_requirements
self.py_version = py_version
self.project = project
def die(self, message, *args):
print(message % args, file=sys.stderr)
sys.exit(1)
def check_python_version(self):
if sys.version_info < (2, 6):
self.die("Need Python Version >= 2.6")
def run_command_with_code(self, cmd, redirect_output=True,
check_exit_code=True):
"""Runs a command in an out-of-process shell.
Returns the output of that command. Working directory is self.root.
"""
if redirect_output:
stdout = subprocess.PIPE
else:
stdout = None
proc = subprocess.Popen(cmd, cwd=self.root, stdout=stdout)
output = proc.communicate()[0]
if check_exit_code and proc.returncode != 0:
self.die('Command "%s" failed.\n%s', ' '.join(cmd), output)
return (output, proc.returncode)
def run_command(self, cmd, redirect_output=True, check_exit_code=True):
return self.run_command_with_code(cmd, redirect_output,
check_exit_code)[0]
def get_distro(self):
if (os.path.exists('/etc/fedora-release') or
os.path.exists('/etc/redhat-release')):
return Fedora(
self.root, self.venv, self.requirements,
self.test_requirements, self.py_version, self.project)
else:
return Distro(
self.root, self.venv, self.requirements,
self.test_requirements, self.py_version, self.project)
def check_dependencies(self):
self.get_distro().install_virtualenv()
def create_virtualenv(self, no_site_packages=True):
"""Creates the virtual environment and installs PIP.
Creates the virtual environment and installs PIP only into the
virtual environment.
"""
if not os.path.isdir(self.venv):
print('Creating venv...', end=' ')
if no_site_packages:
self.run_command(['virtualenv', '-q', '--no-site-packages',
self.venv])
else:
self.run_command(['virtualenv', '-q', self.venv])
print('done.')
else:
print("venv already exists...")
pass
def pip_install(self, *args):
self.run_command(['tools/with_venv.sh',
'pip', 'install', '--upgrade'] + list(args),
redirect_output=False)
def install_dependencies(self):
print('Installing dependencies with pip (this can take a while)...')
# First things first, make sure our venv has the latest pip and
# setuptools and pbr
self.pip_install('pip>=1.4')
self.pip_install('setuptools')
self.pip_install('pbr')
self.pip_install('-r', self.requirements, '-r', self.test_requirements)
def parse_args(self, argv):
"""Parses command-line arguments."""
parser = optparse.OptionParser()
parser.add_option('-n', '--no-site-packages',
action='store_true',
help="Do not inherit packages from global Python "
"install.")
return parser.parse_args(argv[1:])[0]
class Distro(InstallVenv):
def check_cmd(self, cmd):
return bool(self.run_command(['which', cmd],
check_exit_code=False).strip())
def install_virtualenv(self):
if self.check_cmd('virtualenv'):
return
if self.check_cmd('easy_install'):
print('Installing virtualenv via easy_install...', end=' ')
if self.run_command(['easy_install', 'virtualenv']):
print('Succeeded')
return
else:
print('Failed')
self.die('ERROR: virtualenv not found.\n\n%s development'
' requires virtualenv, please install it using your'
' favorite package management tool' % self.project)
class Fedora(Distro):
"""This covers all Fedora-based distributions.
Includes: Fedora, RHEL, CentOS, Scientific Linux
"""
def check_pkg(self, pkg):
return self.run_command_with_code(['rpm', '-q', pkg],
check_exit_code=False)[1] == 0
def install_virtualenv(self):
if self.check_cmd('virtualenv'):
return
if not self.check_pkg('python-virtualenv'):
self.die("Please install 'python-virtualenv'.")
super(Fedora, self).install_virtualenv()

View File

@ -1,13 +0,0 @@
#!/bin/bash
TOOLS_PATH=${TOOLS_PATH:-$(dirname $0)}
VENV_PATH=${VENV_PATH:-${TOOLS_PATH}}
VENV_DIR=${VENV_NAME:-/../.venv}
TOOLS=${TOOLS_PATH}
VENV=${VENV:-${VENV_PATH}/${VENV_DIR}}
HORIZON_DIR=${TOOLS%/tools}
# This horrible mangling of the PYTHONPATH is required to get the
# babel-angular-gettext extractor to work. To fix this the extractor needs to
# be packaged on pypi and added to global requirements. That work is in progress.
export PYTHONPATH="$HORIZON_DIR"
source ${VENV}/bin/activate && "$@"

63
tox.ini
View File

@ -1,63 +0,0 @@
[tox]
envlist = pep8,py35,py27,py27dj18
minversion = 2.3.2
skipsdist = True
[testenv]
usedevelop = True
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=zaqar_ui.test.settings
install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} -U {opts} {packages}
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
commands = rm -f .testrepository/times.dbm
python manage.py test {posargs}
[testenv:pep8]
commands = flake8 {posargs}
[testenv:venv]
commands = {posargs}
[testenv:cover]
commands =
coverage erase
coverage run {toxinidir}/manage.py test zaqar_ui
coverage xml --omit '.tox/cover/*' -o 'cover/coverage.xml'
coverage html --omit '.tox/cover/*' -d 'cover/htmlcov'
[testenv:py27dj18]
basepython = python2.7
commands =
pip install django>=1.8,<1.9
python manage.py test {posargs}
[testenv:eslint]
whitelist_externals = npm
commands =
npm install
npm run {posargs:postinstall}
npm run {posargs:lint}
[testenv:karma]
whitelist_externals = npm
commands =
npm install
npm run {posargs:postinstall}
npm run {posargs:test}
[testenv:docs]
commands = python setup.py build_sphinx
[testenv:releasenotes]
commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
[flake8]
exclude = .venv,.git,.tox,dist,*lib/python*,*egg,build,panel_template,dash_template,local_settings.py,*/local/*,*/test/test_plugins/*,.ropeproject,node_modules
max-complexity = 20

View File

@ -1,18 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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(
'neutron_lbaas_dashboard').version_string()

View File

@ -1,30 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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.
"""
Methods and interface objects used to interact with external APIs.
API method calls return objects that are in many cases objects with
attributes that are direct maps to the data returned from the API http call.
Unfortunately, these objects are also often constructed dynamically, making
it difficult to know what data is available from the API object. Because of
this, all API calls should wrap their returned object in one defined here,
using only explicitly defined attributes and/or methods.
In other words, Horizon developers not working on openstack_dashboard.api
shouldn't need to understand the finer details of APIs for
Keystone/Nova/Glance/Swift et. al.
"""
from zaqar_ui.api import zaqar # noqa: F401

View File

@ -1,24 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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.
"""This package holds the REST API that supports the LBaaS v2 dashboard
Javascript code.
It is not intended to be used outside of Horizon, and makes no promises of
stability or fitness for purpose outside of that scope.
It does not promise to adhere to the general OpenStack API Guidelines set out
in https://wiki.openstack.org/wiki/APIChangeGuidelines.
"""
# import REST API modules here
from zaqar_ui.api.rest import zaqar # noqa: F401

View File

@ -1,372 +0,0 @@
# Copyright 2015 Cisco Systems.
#
# 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 json
import six
import yaml
from django.views import generic
from openstack_dashboard.api.rest import urls
from openstack_dashboard.api.rest import utils as rest_utils
from zaqar_ui.api import zaqar
def _convert_to_yaml(data, default_flow_style=False):
if not data:
return ''
try:
return yaml.safe_dump(data, default_flow_style=default_flow_style)
except Exception:
return ''
def _load_yaml(data):
if not data:
loaded_data = {}
else:
try:
loaded_data = yaml.load(data)
except Exception as ex:
raise Exception(_('The specified input is not a valid '
'YAML format: %s') % six.text_type(ex))
return loaded_data
@urls.register
class Queue(generic.View):
"""API for retrieving a single queue"""
url_regex = r'zaqar/queues/(?P<queue_name>[^/]+)$'
@rest_utils.ajax()
def get(self, request, queue_name):
"""Get a specific queue"""
queue = zaqar.queue_get(request, queue_name)
stats = queue.stats['messages']
queue_info = {'name': queue_name,
'claimed': stats['claimed'],
'free': stats['free'],
'total': stats['total'],
'metadata': queue.metadata()}
return queue_info
@rest_utils.ajax(data_required=True)
def post(self, request, queue_name):
"""Update a queue.
Returns the updated queue object on success.
"""
queue = zaqar.queue_update(request, queue_name, **request.DATA)
location = '/api/zaqars/queue/%s' % queue._name
response = {'name': queue._name,
'metadata': queue._metadata}
return rest_utils.CreatedResponse(location, response)
@urls.register
class QueueActions(generic.View):
"""API for actions on a single queue"""
url_regex = r'zaqar/queues/(?P<queue_name>[^/]+)/(?P<action>[^/]+)$'
@rest_utils.ajax(data_required=True)
def post(self, request, queue_name, action):
"""Actions for a queue"""
if action == "purge":
resource_types = request.DATA.get("resource_types")
zaqar.queue_purge(request, queue_name, resource_types)
elif action == "share":
paths = request.DATA.get("paths")
ttl_seconds = request.DATA.get("ttl_seconds")
methods = request.DATA.get("methods")
return zaqar.queue_signed_url(request, queue_name, paths,
ttl_seconds, methods)
@urls.register
class Queues(generic.View):
"""API for queues"""
url_regex = r'zaqar/queues/$'
@rest_utils.ajax()
def get(self, request):
"""Get a list of the Queues for a project.
The returned result is an object with property 'items' and each
item under this is a queue.
"""
result = zaqar.queue_list(request)
queues = []
for q in result:
stats = q.stats['messages']
queues.append({'name': q.name,
'claimed': stats['claimed'],
'free': stats['free'],
'total': stats['total'],
'metadata': q.metadata()})
return queues
@rest_utils.ajax(data_required=True)
def delete(self, request):
"""Delete one or more queue by name.
Returns HTTP 204 (no content) on successful deletion.
"""
for queue_name in request.DATA:
zaqar.queue_delete(request, queue_name)
@rest_utils.ajax(data_required=True)
def put(self, request):
"""Create a new queue.
Returns the new queue object on success.
"""
new_queue = zaqar.queue_create(request, **request.DATA)
location = '/api/zaqar/queues/%s' % new_queue.name
response = {'name': new_queue.name,
'claimed': 0,
'free': 0,
'total': 0,
'metadata': new_queue._metadata}
return rest_utils.CreatedResponse(location, response)
@urls.register
class Subscriptions(generic.View):
"""API for Subscriptions"""
url_regex = r'zaqar/queues/(?P<queue_name>[^/]+)/subscriptions/$'
@rest_utils.ajax()
def get(self, request, queue_name):
"""Get a list of the Subscriptions for a queue."""
return zaqar.subscription_list(request, queue_name)
@rest_utils.ajax(data_required=True)
def delete(self, request, queue_name):
"""Delete one or more queue by name.
Returns HTTP 204 (no content) on successful deletion.
"""
zaqar.subscription_delete(request, queue_name, request.DATA)
@rest_utils.ajax(data_required=True)
def put(self, request, queue_name):
"""Create a new subscription.
Returns the new queue object on success.
"""
return zaqar.subscription_create(request, queue_name, request.DATA)
@urls.register
class Messages(generic.View):
"""API for messages"""
url_regex = r'zaqar/queues/(?P<queue_name>[^/]+)/messages/$'
@rest_utils.ajax()
def get(self, request, queue_name):
"""Get a list of messages"""
result = zaqar.message_list(request, queue_name)
messages = []
for m in result:
claim_id = None
if m.claim_id:
claim_id = m.claim_id()
messages.append({'age': m.age,
'body': m.body,
'claim_id': claim_id,
'id': m.id,
'href': m.href,
'ttl': m.ttl})
return messages
@rest_utils.ajax(data_required=True)
def post(self, request, queue_name):
"""Create new messages"""
messages = json.loads(request.DATA.get("messages"))
return zaqar.message_post(request, queue_name, messages)
@urls.register
class Subscription(generic.View):
"""API for retrieving a single subscription"""
url_regex = r'zaqar/queues/(?P<queue_name>[^/]+)/' \
r'subscription/(?P<subscriber>[^/]+)/$'
@rest_utils.ajax(data_required=True)
def post(self, request, queue_name, subscriber):
zaqar.subscription_update(request, queue_name,
{'id': subscriber}, request.DATA)
@urls.register
class Pool(generic.View):
"""API for retrieving a single pool"""
url_regex = r'zaqar/pools/(?P<pool_name>[^/]+)$'
@rest_utils.ajax()
def get(self, request, pool_name):
"""Get a specific pool"""
pool = zaqar.pool_get(request, pool_name)
pool['id'] = pool.get('name')
pool['options'] = _convert_to_yaml(pool.get('options'))
return pool
@rest_utils.ajax(data_required=True)
def post(self, request, pool_name):
"""Update a pool.
Returns the updated pool object on success.
"""
request.DATA["options"] = _load_yaml(request.DATA.get("options"))
params = request.DATA
pool_name = params.pop('name')
new_pool = zaqar.pool_update(request, pool_name, params)
location = '/api/zaqar/pools/%s' % new_pool.name
response = {'name': new_pool.name,
'uri': new_pool.uri,
'weight': new_pool.weight,
'group': new_pool.group,
'options': new_pool.options}
return rest_utils.CreatedResponse(location, response)
@urls.register
class Pools(generic.View):
"""API for pools"""
url_regex = r'zaqar/pools/$'
@rest_utils.ajax()
def get(self, request):
"""Get a list of the Pools for admin.
The returned result is an object with property 'items' and each
item under this is a pool.
"""
result = zaqar.pool_list(request)
pools = []
for p in result:
options = _convert_to_yaml(p.options)
pools.append({'id': p.name,
'name': p.name,
'uri': p.uri,
'weight': p.weight,
'group': p.group,
'options': options})
return {'items': pools}
@rest_utils.ajax(data_required=True)
def delete(self, request):
"""Delete one or more pool by name.
Returns HTTP 204 (no content) on successful deletion.
"""
for pool_name in request.DATA:
zaqar.pool_delete(request, pool_name)
@rest_utils.ajax(data_required=True)
def put(self, request):
"""Create a new pool.
Returns the new pool object on success.
"""
request.DATA['options'] = _load_yaml(request.DATA.get('options'))
params = request.DATA
pool_name = params.pop('name')
new_pool = zaqar.pool_create(request, pool_name, params)
location = '/api/zaqar/pools/%s' % new_pool.name
response = {'name': new_pool.name,
'uri': new_pool.uri,
'weight': new_pool.weight,
'group': new_pool.group,
'options': new_pool.options}
return rest_utils.CreatedResponse(location, response)
@urls.register
class Flavor(generic.View):
"""API for retrieving a single flavor"""
url_regex = r'zaqar/flavors/(?P<flavor_name>[^/]+)$'
@rest_utils.ajax()
def get(self, request, flavor_name):
"""Get a specific flavor"""
flavor = zaqar.flavor_get(request, flavor_name)
flavor['id'] = flavor.get('name')
flavor['capabilities'] = _convert_to_yaml(flavor.get('capabilities'))
return flavor
@rest_utils.ajax(data_required=True)
def post(self, request, flavor_name):
"""Update a flavor.
Returns the updated flavor object on success.
"""
capabilities = request.DATA.get('capabilities')
request.DATA['capabilities'] = _load_yaml(capabilities)
params = request.DATA
flavor_name = params.pop('name')
new_flavor = zaqar.flavor_update(request, flavor_name, params)
location = '/api/zaqar/flavors/%s' % new_flavor.name
response = {'name': new_flavor.name,
'pool_group': new_flavor.pool_group,
'capabilities': new_flavor.capabilities}
return rest_utils.CreatedResponse(location, response)
@urls.register
class Flavors(generic.View):
"""API for flavors"""
url_regex = r'zaqar/flavors/$'
@rest_utils.ajax()
def get(self, request):
"""Get a list of the Flavors for admin.
The returned result is an object with property 'items' and each
item under this is a flavor.
"""
result = zaqar.flavor_list(request)
flavors = []
for f in result:
capabilities = _convert_to_yaml(f.capabilities)
flavors.append({'id': f.name,
'name': f.name,
'pool_group': f.pool_group,
'capabilities': capabilities})
return {'items': flavors}
@rest_utils.ajax(data_required=True)
def delete(self, request):
"""Delete one or more flavor by name.
Returns HTTP 204 (no content) on successful deletion.
"""
for flavor_name in request.DATA:
zaqar.flavor_delete(request, flavor_name)
@rest_utils.ajax(data_required=True)
def put(self, request):
"""Create a new flavor.
Returns the new flavor object on success.
"""
capabilities = request.DATA.get('capabilities')
request.DATA['capabilities'] = _load_yaml(capabilities)
params = request.DATA
flavor_name = params.pop('name')
new_flavor = zaqar.flavor_create(request, flavor_name, params)
location = '/api/zaqar/flavors/%s' % new_flavor.name
response = {'name': new_flavor.name,
'pool_group': new_flavor.pool_group,
'capabilities': new_flavor.capabilities}
return rest_utils.CreatedResponse(location, response)

View File

@ -1,191 +0,0 @@
# Copyright 2015 Catalyst IT Ltd.
#
# 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 __future__ import absolute_import
import logging
import six
from zaqarclient.queues import client as zaqar_client
from horizon import exceptions
from horizon.utils.memoized import memoized
from openstack_dashboard.api import base
LOG = logging.getLogger(__name__)
RESERVED_QUEUE_METADATA = ["_max_messages_post_size", "_default_message_ttl"]
@memoized
def zaqarclient(request):
zaqar_url = ""
service_type = 'messaging'
try:
zaqar_url = base.url_for(request, service_type)
except exceptions.ServiceCatalogException:
LOG.debug('No messaging service is configured.')
return None
LOG.debug('zaqarclient connection created using the token "%s" and url'
'"%s"' % (request.user.token.id, zaqar_url))
opts = {'os_auth_token': request.user.token.id,
'os_auth_url': base.url_for(request, 'identity'),
'os_project_id': request.user.tenant_id,
'os_service_type': service_type}
auth_opts = {'backend': 'keystone',
'options': opts}
conf = {'auth_opts': auth_opts}
return zaqar_client.Client(url=zaqar_url, version=2, conf=conf)
def queue_list(request, limit=None, marker=None):
return zaqarclient(request).queues(limit=limit, marker=marker)
def queue_create(request, queue_name, metadata):
# Pop up a modal form, which contains several inputbox:
# 1. queue_name
# 2. ttl
# 3. max message size
# 4. Metadata
queue = zaqarclient(request).queue(queue_name, force_create=True)
queue.metadata(new_meta=metadata)
return queue
def queue_delete(request, queue_name):
queue = zaqarclient(request).queue(queue_name, auto_create=False)
queue.delete()
def queue_update(request, queue_name, metadata):
# Popup a modal form, the queue name is a realonly label or inputbox.
# user can change ttl, max message size and metadata
queue = zaqarclient(request).queue(queue_name, auto_create=False)
for key in RESERVED_QUEUE_METADATA:
if (key in metadata and isinstance(metadata[key], six.string_types)):
metadata[key] = int(metadata[key])
queue.metadata(new_meta=metadata)
return queue
def queue_get(request, queue_name):
return zaqarclient(request).queue(queue_name, auto_create=False)
def queue_purge(request, queue_name, resource_types):
queue = zaqarclient(request).queue(queue_name, auto_create=False)
queue.purge(resource_types=resource_types)
def message_post(request, queue_name, messages_data):
return zaqarclient(request).queue(queue_name).post(messages_data)
def message_list(request, queue_name):
return zaqarclient(request).queue(queue_name).messages()
def queue_signed_url(request, queue_name, paths, ttl_seconds, methods):
queue = zaqarclient(request).queue(queue_name, auto_create=False)
return queue.signed_url(paths=paths, ttl_seconds=ttl_seconds,
methods=methods)
def subscription_list(request, queue_name):
return [{'subscriber': s.subscriber,
'id': s.id,
'ttl': s.ttl,
'age': s.age,
'confirmed': s.confirmed,
'options': s.options}
for s in zaqarclient(request).subscriptions(queue_name)]
def subscription_create(request, queue_name, sub_data):
subscription = zaqarclient(request).subscription(queue_name, **sub_data)
return {'subscriber': subscription.subscriber,
'id': subscription.id,
'ttl': subscription.ttl,
'age': subscription.age,
'confirmed': subscription.confirmed,
'options': subscription.options}
def subscription_delete(request, queue_name, sub_data):
subscription = zaqarclient(request).subscription(queue_name, **sub_data)
subscription.delete()
def subscription_update(request, queue_name, old_data, new_data):
subscription = zaqarclient(request).subscription(queue_name, **old_data)
subscription.update(new_data)
return subscription
def pool_list(request, limit=None, marker=None):
return zaqarclient(request).pools(limit=limit,
marker=marker,
detailed=True)
def pool_create(request, pool_name, params):
pool = zaqarclient(request).pool(pool_name, **params)
return pool
def pool_delete(request, pool_name):
pool = zaqarclient(request).pool(pool_name, auto_create=False)
pool.delete()
def pool_update(request, pool_name, params):
pool = zaqarclient(request).pool(pool_name, auto_create=False)
pool.update(params)
return pool
def pool_get(request, pool_name):
return zaqarclient(request).pool(pool_name, auto_create=False).get()
def flavor_list(request, limit=None, marker=None):
return zaqarclient(request).flavors(limit=limit,
marker=marker,
detailed=True)
def flavor_create(request, flavor_name, params):
flavor = zaqarclient(request).flavor(flavor_name, **params)
return flavor
def flavor_delete(request, flavor_name):
flavor = zaqarclient(request).flavor(flavor_name, auto_create=False)
flavor.delete()
def flavor_update(request, flavor_name, params):
flavor = zaqarclient(request).flavor(flavor_name, auto_create=False)
flavor.update(params)
return flavor
def flavor_get(request, flavor_name):
return zaqarclient(request).flavor(flavor_name, auto_create=False).get()

View File

@ -1,22 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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
class PoolFlavors(horizon.Panel):
name = _("Pool Flavors")
slug = "pool_flavors"

View File

@ -1,19 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from django.conf import urls
from horizon.browsers import views
urlpatterns = [
urls.url(r'^$', views.AngularIndexView.as_view(), name='index'),
]

View File

@ -1,22 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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
class Pools(horizon.Panel):
name = _("Pools")
slug = "pools"

View File

@ -1,19 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from django.conf import urls
from horizon.browsers import views
urlpatterns = [
urls.url(r'^$', views.AngularIndexView.as_view(), name='index'),
]

View File

@ -1,16 +0,0 @@
# Copyright 2016 IBM Corp.
#
# 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.
# Register the REST API URLs so they can be called from the JavaScript files
import zaqar_ui.api.rest # noqa: F401

View File

@ -1,22 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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
class Queues(horizon.Panel):
name = _("Queues")
slug = "queues"

View File

@ -1,22 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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 urls
from horizon.browsers import views
from zaqar_ui.content.queues import panel
title = panel.Queues.name
urlpatterns = [
urls.url(r'^$', views.AngularIndexView.as_view(title=title), name='index'),
]

View File

@ -1,24 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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 _
# The slug of the panel group to be added to HORIZON_CONFIG. Required.
PANEL_GROUP = 'messaging'
# The display name of the PANEL_GROUP. Required.
PANEL_GROUP_NAME = _('Messaging')
# The slug of the dashboard the PANEL_GROUP associated with. Required.
PANEL_GROUP_DASHBOARD = 'project'

View File

@ -1,24 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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.
PANEL = 'queues'
PANEL_GROUP = 'messaging'
PANEL_DASHBOARD = 'project'
ADD_PANEL = ('zaqar_ui.content.queues.panel.Queues')
ADD_INSTALLED_APPS = ['zaqar_ui']
ADD_ANGULAR_MODULES = ['horizon.dashboard.project.queues']
ADD_SCSS_FILES = ['dashboard/project/queues/queues.scss']
AUTO_DISCOVER_STATIC_FILES = True

View File

@ -1,24 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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 _
# The slug of the panel group to be added to HORIZON_CONFIG. Required.
PANEL_GROUP = 'messaging'
# The display name of the PANEL_GROUP. Required.
PANEL_GROUP_NAME = _('Messaging')
# The slug of the dashboard the PANEL_GROUP associated with. Required.
PANEL_GROUP_DASHBOARD = 'admin'

View File

@ -1,22 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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.
PANEL = 'pools'
PANEL_GROUP = 'messaging'
PANEL_DASHBOARD = 'admin'
ADD_PANEL = ('zaqar_ui.content.pools.panel.Pools')
ADD_ANGULAR_MODULES = ['horizon.dashboard.admin.pools']
AUTO_DISCOVER_STATIC_FILES = True

View File

@ -1,23 +0,0 @@
# Copyright 2015 IBM Corp.
#
# 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.
PANEL = 'pool_flavors'
PANEL_GROUP = 'messaging'
PANEL_DASHBOARD = 'admin'
ADD_PANEL = ('zaqar_ui.content.pool_flavors.panel.PoolFlavors')
ADD_ANGULAR_MODULES = ['horizon.dashboard.admin.pool-flavors']
ADD_SCSS_FILES = ['dashboard/admin/pool-flavors/pool-flavors.scss']
AUTO_DISCOVER_STATIC_FILES = True

View File

@ -1,156 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
var fs = require('fs');
var path = require('path');
module.exports = function (config) {
// This tox venv is setup in the post-install npm step
var toxPath = '../.tox/py27/lib/python2.7/site-packages/';
config.set({
preprocessors: {
// Used to collect templates for preprocessing.
// NOTE: the templates must also be listed in the files section below.
'./static/**/*.html': ['ng-html2js'],
// Used to indicate files requiring coverage reports.
'./static/**/!(*.spec).js': ['coverage'],
},
// Sets up module to process templates.
ngHtml2JsPreprocessor: {
prependPrefix: '/',
moduleName: 'templates'
},
basePath: './',
// Contains both source and test files.
files: [
/*
* shim, partly stolen from /i18n/js/horizon/
* Contains expected items not provided elsewhere (dynamically by
* Django or via jasmine template.
*/
'../test-shim.js',
// from jasmine.html
toxPath + 'xstatic/pkg/jquery/data/jquery.js',
toxPath + 'xstatic/pkg/angular/data/angular.js',
toxPath + 'xstatic/pkg/angular/data/angular-route.js',
toxPath + 'xstatic/pkg/angular/data/angular-mocks.js',
toxPath + 'xstatic/pkg/angular/data/angular-cookies.js',
toxPath + 'xstatic/pkg/angular_bootstrap/data/angular-bootstrap.js',
toxPath + 'xstatic/pkg/angular_gettext/data/angular-gettext.js',
toxPath + 'xstatic/pkg/angular/data/angular-sanitize.js',
toxPath + 'xstatic/pkg/d3/data/d3.js',
toxPath + 'xstatic/pkg/rickshaw/data/rickshaw.js',
toxPath + 'xstatic/pkg/angular_smart_table/data/smart-table.js',
toxPath + 'xstatic/pkg/angular_lrdragndrop/data/lrdragndrop.js',
toxPath + 'xstatic/pkg/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 + 'xstatic/pkg/angular_fileupload/data/ng-file-upload.js',
// TODO: These should be mocked.
toxPath + '/horizon/static/horizon/js/horizon.js',
/**
* Include framework source code from horizon that we need.
* Otherwise, karma will not be able to find them when testing.
* These files should be mocked in the foreseeable future.
*/
toxPath + 'horizon/static/framework/**/*.module.js',
toxPath + 'horizon/static/framework/**/!(*.spec|*.mock).js',
toxPath + 'openstack_dashboard/static/**/*.module.js',
toxPath + 'openstack_dashboard/static/**/!(*.spec|*.mock).js',
toxPath + 'openstack_dashboard/dashboards/**/static/**/*.module.js',
toxPath + 'openstack_dashboard/dashboards/**/static/**/!(*.spec|*.mock).js',
/**
* First, list all the files that defines application's angular modules.
* Those files have extension of `.module.js`. The order among them is
* not significant.
*/
'./static/**/*.module.js',
/**
* Followed by other JavaScript files that defines angular providers
* on the modules defined in files listed above. And they are not mock
* files or spec files defined below. The order among them is not
* significant.
*/
'./static/**/!(*.spec|*.mock).js',
/**
* Then, list files for mocks with `mock.js` extension. The order
* among them should not be significant.
*/
toxPath + 'openstack_dashboard/static/**/*.mock.js',
/**
* Finally, list files for spec with `spec.js` extension. The order
* among them should not be significant.
*/
'./static/**/*.spec.js',
/**
* Angular external templates
*/
'./static/**/*.html'
],
autoWatch: true,
frameworks: ['jasmine'],
browsers: ['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-phantomjs-launcher',
'karma-jasmine',
'karma-ng-html2js-preprocessor',
'karma-coverage',
'karma-threshold-reporter'
],
// Places coverage report in HTML format in the subdirectory below.
coverageReporter: {
type: 'html',
dir: '../cover/karma/'
},
// Coverage threshold values.
thresholdReporter: {
statements: 10, // target 100
branches: 0, // target 100
functions: 10, // target 100
lines: 10 // target 100
}
});
};

View File

@ -1,32 +0,0 @@
# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
# Andreas Jaeger <jaegerandi@gmail.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 2.0.0.0b3.dev12\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-01-27 21:41+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-29 06:56+0000\n"
"Last-Translator: Andreas Jaeger <jaegerandi@gmail.com>\n"
"Language-Team: German\n"
"Language: de\n"
"X-Generator: Zanata 3.7.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
msgid "Messaging"
msgstr "Nachrichten"
msgid "Pool Flavors"
msgstr "Pool Varianten"
msgid "Pools"
msgstr "Pools"
msgid "Queues"
msgstr "Warteschlangen"
#, python-format
msgid "The specified input is not a valid YAML format: %s"
msgstr "Die angegebene Eingabe ist kein gültiges YAML-Format: %s"

View File

@ -1,485 +0,0 @@
# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
# Monika Wolf <vcomas3@de.ibm.com>, 2016. #zanata
# Andreas Jaeger <jaegerandi@gmail.com>, 2017. #zanata
# Robert Simai <robert.simai@suse.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 3.0.0.0b3.dev20\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-07-02 22:48+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2017-07-04 10:31+0000\n"
"Last-Translator: Robert Simai <robert.simai@suse.com>\n"
"Language-Team: German\n"
"Language: de\n"
"X-Generator: Zanata 3.9.6\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
msgid "A queue name between 1-256 characters is required."
msgstr "Ein Warteschlangenname zwischen 1 und 256 Zeichen ist erforderlich."
msgid "Actions"
msgstr "Aktionen"
msgid "Age"
msgstr "Alter"
msgid ""
"An optional request component related to storage-specific options in YAML "
"format."
msgstr ""
"Eine optionale Anfragekomponente für Storage-spezifische Optionen im YAML-"
"Format."
msgid "Body"
msgstr "Nachrichtentext"
msgid "Capabilities"
msgstr "Fähigkeiten"
msgid "Choose resource to purge"
msgstr "Ressource zum Bereinigen wählen"
msgid "Claimed Messages"
msgstr "Beanspruchte Nachrichten"
msgid "Confirm Delete Pool"
msgid_plural "Confirm Delete Pools"
msgstr[0] "Pool löschen bestätigen"
msgstr[1] "Pools löschen bestätigen"
msgid "Confirm Delete Pool Flavor"
msgid_plural "Confirm Delete Pool Flavors"
msgstr[0] "Pool-Variante löschen bestätigen"
msgstr[1] "Pool-Varianten löschen bestätigen"
msgid "Confirm Delete Queue"
msgid_plural "Confirm Delete queues"
msgstr[0] "Bestätige Löschung Warteschlange"
msgstr[1] "Bestätige Löschung Warteschlangen"
msgid "Confirmed"
msgstr "Bestätigt"
msgid "Create"
msgstr "Erstellen"
msgid "Create Pool"
msgstr "Pool erstellen"
msgid "Create Pool Flavor"
msgstr "Pool-Variante erstellen"
msgid "Create Queue"
msgstr "Erstelle Warteschlange"
msgid "Create Queues"
msgstr "Erstelle Warteschlange"
msgid "Create Subscription"
msgstr "Erstelle Abonnement"
msgid "Creating Signed URL"
msgstr "Erstelle signierte URL"
msgid "DELETE"
msgstr "LÖSCHEN"
msgid "Delete"
msgstr "Löschen"
msgid "Delete Pool"
msgid_plural "Delete Pools"
msgstr[0] "Pool löschen"
msgstr[1] "Pools löschen"
msgid "Delete Pool Flavor"
msgid_plural "Delete Pool Flavors"
msgstr[0] "Pool-Variante löschen"
msgstr[1] "Pool-Varianten löschen"
msgid "Delete Pool Flavors"
msgstr "Pool-Varianten löschen"
msgid "Delete Pools"
msgstr "Pool löschen"
msgid "Delete Queue"
msgid_plural "Delete Queues"
msgstr[0] "Lösche Warteschlange"
msgstr[1] "Lösche Warteschlangen"
msgid "Delete Queues"
msgstr "Lösche Warteschlange"
#, python-format
msgid "Deleted Pool Flavor: %s."
msgid_plural "Deleted Pool Flavors: %s."
msgstr[0] "Gelöschte Pool-Variante: %s"
msgstr[1] "Gelöschte Pool-Varianten: %s"
#, python-format
msgid "Deleted Pool: %s."
msgid_plural "Deleted Pools: %s."
msgstr[0] "Gelöschter Pool: %s"
msgstr[1] "Gelöschte Pools: %s"
#, python-format
msgid "Deleted Queue: %s."
msgid_plural "Deleted Queues: %s."
msgstr[0] "Gelösche Warteschlange: %s."
msgstr[1] "Gelöschte Warteschlangen: %s."
msgid "Describes flavor-specific capabilities in YAML format."
msgstr "Beschreibt Varianten-spezifische Eigenschaften im YAML-Format."
msgid "Enter a queue name"
msgstr "Warteschlangenname eingeben"
msgid "Enter a subscriber"
msgstr "Abonent eingeben"
msgid "Free Messages"
msgstr "Freie Nachrichten"
msgid "GET"
msgstr "GET"
msgid "Group"
msgstr "Gruppe"
msgid "Group of the pool."
msgstr "Gruppe des Pools."
msgid "HEAD"
msgstr "HEAD"
msgid "ID"
msgstr "ID"
msgid "List Messages"
msgstr "Nachrichten anzeigen"
msgid "Messages"
msgstr "Nachrichten"
#, python-format
msgid "Messages has been posted to queue %s successfully."
msgstr "Nachricht wurde erfolgreich in die Warteschlange %s gestellt."
msgid "Methods"
msgstr "Methoden"
msgid "Name"
msgstr "Name"
msgid "Name of the flavor."
msgstr "Name der Variante."
msgid "Name of the pool."
msgstr "Name des Pools."
msgid ""
"Note that you can create a queue without defining metadata.\n"
" The metadata step is optional but recommended."
msgstr ""
"Beachten Sie, dass Sie eine Warteschlange ohne definierte Metadaten "
"erstellen können.\n"
" Erstellung Metadaten ist optional aber empfohlen."
msgid "Note that you can create a subscription without defining options."
msgstr "Beachten Sie, dass Sie ein Abonnement ohne Optionen erstellen können."
msgid "OPTIONS"
msgstr "OPTIONEN"
msgid "Options"
msgstr "Optionen"
msgid "POST"
msgstr "POST"
msgid "PUT"
msgstr "PUT"
msgid "Paths"
msgstr "Pfade"
msgid "Pool"
msgstr "Pool"
#, python-format
msgid "Pool %s was successfully created."
msgstr "Pool %s wurde erfolgreich erstellt."
#, python-format
msgid "Pool %s was successfully updated."
msgstr "Pool %s wurde erfolgreich aktualisiert."
msgid "Pool Flavor"
msgstr "Pool Variante"
msgid "Pool Flavors"
msgstr "Pool Varianten"
msgid "Pool Group"
msgstr "Pool Gruppe"
#, python-format
msgid "Pool flavor %s was successfully created."
msgstr "Pool-Variante %s wurde erfolgreich erstellt."
#, python-format
msgid "Pool flavor %s was successfully updated."
msgstr "Pool-Variante %s wurde erfolgreich aktualisiert."
msgid "Pool group for flavor."
msgstr "Pool-Gruppe der Variante."
msgid "Pools"
msgstr "Pools"
msgid "Post"
msgstr "Abschicken"
msgid "Post Messages"
msgstr "Nachrichten senden"
msgid "Purge"
msgstr "Bereinigen"
msgid "Purge Queue"
msgstr "Warteschlange bereinigen"
#, python-format
msgid "Queue %s has been purged successfully."
msgstr "Warteschlange %s wurde erfolgreich bereinigt."
#, python-format
msgid "Queue %s was successfully created."
msgstr "Warteschlange %s erfolgreich erstellt."
#, python-format
msgid "Queue %s was successfully updated."
msgstr "Warteschlange %s erfolgreich aktualisiert."
msgid "Queue Details"
msgstr "Warteschlangendetails"
msgid "Queue Metadata"
msgstr "Warteschlangen Metadaten"
msgid "Queue Name"
msgstr "Warteschlangenname"
msgid "Queues"
msgstr "Warteschlangen"
#, python-format
msgid "Removed %(subscriber)s subscriber from the %(queue)s queue."
msgstr "%(subscriber)s Abonnementen von der %(queue)s Warteschlange gelöscht."
msgid "See a sample as below:"
msgstr "In Folgenden finden Sie ein Beispiel:"
msgid "Signed URL"
msgstr "Signierte URL"
#, python-format
msgid "Signed URL for %s"
msgstr "Signierte URL für %s"
#, python-format
msgid ""
"Signed URL was successfully created for the queue %s with expires %s and "
"signature %s."
msgstr ""
"Eine signierte URL für die Queue %s mit Ablaufdatum %s und Signatur %s wurde "
"erstellt."
msgid "Subscriber"
msgstr "Abonnent"
msgid "Subscribers must be in the form of mailto, HTTP, or HTTPS."
msgstr "Abonnement muss in der Form mailto, HTTP, oder HTTPS sein."
msgid "Subscription"
msgstr "Abonnement"
#, python-format
msgid "Subscription %s was successfully created."
msgstr "Abonnement %s wurde erfolgreich erstellt."
msgid "Subscriptions"
msgstr " Abonnements"
msgid "TTL Seconds"
msgstr "TTL Sekunden"
msgid "The TTL for a subscription must be at least 60 seconds long."
msgstr "Die TTL für ein Abonnement muss wenigstens 60 Sekunden lang sein."
msgid ""
"The client specifies only the body and TTL for the message. The server\n"
" inserts metadata, such as ID and age."
msgstr ""
"Der Client gibt nur den Körper und die TTL der Nachricht an. Der Server\n"
" fügt Metadaten wie ID und Alter hinzu."
msgid "Time To Live"
msgstr "Lebenszeit"
msgid "Time to Live"
msgstr "Lebenszeit"
msgid "Total Messages"
msgstr "Alle Nachrichten"
msgid "URI"
msgstr "URI"
msgid "URI for storage engine of this pool."
msgstr "URI für die Storage Engine dieses Pools."
msgid "Unable to add subscription."
msgstr "Konnte Abonnement nicht hinzufügen."
msgid "Unable to create signed URL."
msgstr "Signierte URL kann nicht erstellt werden."
msgid "Unable to create the flavor."
msgstr "Die Variante kann nicht erstellt werden."
msgid "Unable to create the pool."
msgstr "Der Pool kann nicht erzeugt werden."
msgid "Unable to create the queue."
msgstr "Konnte Warteschlange nicht erstellen."
#, python-format
msgid "Unable to delete Pool Flavor: %s."
msgid_plural "Unable to delete Pool Flavors: %s."
msgstr[0] "Pool-Variante kann nicht gelöscht werden: %s"
msgstr[1] "Pool-Varianten können nicht gelöscht werden: %s"
#, python-format
msgid "Unable to delete Pool: %s."
msgid_plural "Unable to delete Pools: %s."
msgstr[0] "Pool kann nicht gelöscht werden: %s"
msgstr[1] "Pools können nicht gelöscht werden: %s"
#, python-format
msgid "Unable to delete Queue: %s."
msgid_plural "Unable to delete Queues: %s."
msgstr[0] "Konnte Warteschlange %s nicht löschen."
msgstr[1] "Konnte Warteschlangen %s nicht löschen."
msgid "Unable to delete subscription."
msgstr "Konnte Abonnement nicht löschen."
msgid "Unable to post messages."
msgstr "Nachrichten können nicht abgeschickt werden."
msgid "Unable to purge the queue."
msgstr "Warteschlange konnte nicht bereinigt werden."
msgid "Unable to retrieve the Queue."
msgstr "Warteschlange konnte nicht abgerufen werden."
msgid "Unable to retrieve the Queues."
msgstr "Konnte die Warteschlangen nicht abrufen."
msgid "Unable to retrieve the flavor."
msgstr "Die Variante kann nicht abgerufen werden."
msgid "Unable to retrieve the flavors."
msgstr "Die Varianten können nicht abgerufen werden."
msgid "Unable to retrieve the pool."
msgstr "Der Pool kann nicht abgerufen werden."
msgid "Unable to retrieve the pools."
msgstr "Die Pools können nicht abgerufen werden."
msgid "Unable to update the flavor."
msgstr "Die Variante kann nicht aktualisiert werden."
msgid "Unable to update the pool."
msgstr "Der Pool kann nicht aktualisiert werden."
msgid "Unable to update the queue."
msgstr "Konnte Warteschlange nicht aktualisieren."
msgid "Update"
msgstr "Aktualisieren"
msgid "Update Pool"
msgstr "Pool aktualiseren"
msgid "Update Pool Flavor"
msgstr "Pool-Varianten aktualisieren"
msgid "Update Queue"
msgstr "Aktualisiere Warteschlange"
msgid "View Messages"
msgstr "Nachrichten ansehen"
msgid "Weight"
msgstr "Gewicht"
msgid "Weight of the pool."
msgstr "Gewichtung des Pools."
#, python-format
msgid "You are not allowed to delete pool flavors: %s"
msgstr "Sie haben keine Berechtigung zum löschen von Pool-Varianten: %s"
#, python-format
msgid "You are not allowed to delete pools: %s"
msgstr "Sie haben keine Berechtigung zum löschen von Pools: %s"
#, python-format
msgid "You are not allowed to delete queues: %s"
msgstr "SIe sind nicht berechtig, die Warteschlangen zu löschen: %s"
#, python-format
msgid "You have selected \"%s\". Deleted Pool Flavor is not recoverable."
msgid_plural ""
"You have selected \"%s\". Deleted Pool Flavors are not recoverable."
msgstr[0] ""
"Sie haben %s gewählt. Eine gelöschte Pool-Variante kann nicht wieder "
"hergestellt werden."
msgstr[1] ""
"Sie haben %s gewählt. Gelöschte Pool-Varianten können nicht wieder "
"hergestellt werden."
#, python-format
msgid "You have selected \"%s\". Deleted Pool is not recoverable."
msgid_plural "You have selected \"%s\". Deleted Pools are not recoverable."
msgstr[0] ""
"Sie haben %s ausgewählt. Ein gelöschter Pool kann nicht wieder hergestellt "
"werden."
msgstr[1] ""
"Sie haben %s ausgewählt. Gelöschte Pools können nicht wieder hergestellt "
"werden."
#, python-format
msgid "You have selected \"%s\". Deleted queue is not recoverable."
msgid_plural "You have selected \"%s\". Deleted queues are not recoverable."
msgstr[0] ""
"Sie haben ausgewählt \"%s\". Gelöschte Warteschlange kann nicht "
"wiederhergestellt werden."
msgstr[1] ""
"Sie haben ausgewählt \"%s\". Gelöschte Warteschlangen können nicht "
"wiederhergestellt werden."
msgid ""
"You must specify one of the pool groups that is configured in storage pools."
msgstr ""
"Sie müssen eine der in Storage Pools konfigurierten Pool-Gruppe angeben."
msgid "e.g. mongodb://127.0.0.1:27017"
msgstr "z.B. mongodb://127.0.0.1:27017"

View File

@ -1,31 +0,0 @@
# Andi Chandler <andi@gowling.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 3.0.0.0b3.dev25\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-07-11 12:47+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2017-07-11 05:10+0000\n"
"Last-Translator: Andi Chandler <andi@gowling.com>\n"
"Language-Team: English (United Kingdom)\n"
"Language: en-GB\n"
"X-Generator: Zanata 3.9.6\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
msgid "Messaging"
msgstr "Messaging"
msgid "Pool Flavors"
msgstr "Pool Flavours"
msgid "Pools"
msgstr "Pools"
msgid "Queues"
msgstr "Queues"
#, python-format
msgid "The specified input is not a valid YAML format: %s"
msgstr "The specified input is not a valid YAML format: %s"

View File

@ -1,21 +0,0 @@
# Gérald LONLAS <g.lonlas@gmail.com>, 2016. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui unknown\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2016-11-02 22:52+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2016-11-01 07:14+0000\n"
"Last-Translator: Gérald LONLAS <g.lonlas@gmail.com>\n"
"Language-Team: French\n"
"Language: fr\n"
"X-Generator: Zanata 3.7.3\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
msgid "Messaging"
msgstr "Messagerie"
msgid "Queues"
msgstr "Files d'attente"

View File

@ -1,32 +0,0 @@
# suhartono <cloudsuhartono@gmail.com>, 2016. #zanata
# suhartono <cloudsuhartono@gmail.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 2.0.0.0b4.dev2\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-01-31 09:28+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-31 03:31+0000\n"
"Last-Translator: suhartono <cloudsuhartono@gmail.com>\n"
"Language-Team: Indonesian\n"
"Language: id\n"
"X-Generator: Zanata 3.7.3\n"
"Plural-Forms: nplurals=1; plural=0\n"
msgid "Messaging"
msgstr "Messaging (pesan)"
msgid "Pool Flavors"
msgstr "Pool Flavors (flavor kolam)"
msgid "Pools"
msgstr "Pools (kolam)"
msgid "Queues"
msgstr "Queues (antrian)"
#, python-format
msgid "The specified input is not a valid YAML format: %s"
msgstr "Input yang ditetapkan tidak format YAML yang valid: %s"

View File

@ -1,503 +0,0 @@
# OpenStack Infra <zanata@openstack.org>, 2015. #zanata
# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
# suhartono <cloudsuhartono@gmail.com>, 2016. #zanata
# suhartono <cloudsuhartono@gmail.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 3.0.0.0b3.dev24\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-07-07 03:58+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2017-07-08 02:55+0000\n"
"Last-Translator: suhartono <cloudsuhartono@gmail.com>\n"
"Language-Team: Indonesian\n"
"Language: id\n"
"X-Generator: Zanata 3.9.6\n"
"Plural-Forms: nplurals=1; plural=0\n"
msgid "A queue name between 1-256 characters is required."
msgstr "Sebuah nama antrian antara 1-256 karakter diperlukan."
msgid "Actions"
msgstr "Aksi"
msgid "Age"
msgstr "Age"
msgid ""
"An optional request component related to storage-specific options in YAML "
"format."
msgstr ""
"Opsional permintaan komponen yang terkait dengan opsi storage-specific dalam "
"format YAML."
msgid "Body"
msgstr "Body"
msgid "Capabilities"
msgstr "Capabilities (kemampuan)"
msgid "Choose resource to purge"
msgstr "Choose resource to purge"
msgid "Claimed Messages"
msgstr "Claimed Messages (pesan diklaim)"
msgid "Claims"
msgstr "Claims"
msgid "Confirm Delete Pool"
msgid_plural "Confirm Delete Pools"
msgstr[0] "Confirm Delete Pool"
msgid "Confirm Delete Pool Flavor"
msgid_plural "Confirm Delete Pool Flavors"
msgstr[0] "Confirm Delete Pool Flavor"
msgid "Confirm Delete Queue"
msgid_plural "Confirm Delete queues"
msgstr[0] "Confirm Delete Queue (konfirmasi penghapusan antrian)"
msgid "Confirmed"
msgstr "Confirmed"
msgid "Create"
msgstr "Membuat"
msgid "Create Pool"
msgstr "Buat pool"
msgid "Create Pool Flavor"
msgstr "Create Pool Flavor (buat pool flavor)"
msgid "Create Queue"
msgstr "Buat Queue (antrian)"
msgid "Create Queues"
msgstr "Buat Queues (antrian)"
msgid "Create Subscription"
msgstr "Buat Langganan"
msgid "Creating Signed URL"
msgstr "Pembuatan Signed URL"
msgid "DELETE"
msgstr "DELETE"
msgid "Delete"
msgstr "Hapus"
msgid "Delete Pool"
msgid_plural "Delete Pools"
msgstr[0] "Delete Pool"
msgid "Delete Pool Flavor"
msgid_plural "Delete Pool Flavors"
msgstr[0] "Delete Pool Flavor"
msgid "Delete Pool Flavors"
msgstr "Delete Pool Flavors (hapus pool flavor)"
msgid "Delete Pools"
msgstr "Hapus pool"
msgid "Delete Queue"
msgid_plural "Delete Queues"
msgstr[0] "Delete Queue (hapus antrian)"
msgid "Delete Queues"
msgstr "Hapus Queues (antrian)"
#, python-format
msgid "Deleted Pool Flavor: %s."
msgid_plural "Deleted Pool Flavors: %s."
msgstr[0] "Deleted Pool Flavor: %s."
#, python-format
msgid "Deleted Pool: %s."
msgid_plural "Deleted Pools: %s."
msgstr[0] "Deleted Pool: %s."
#, python-format
msgid "Deleted Queue: %s."
msgid_plural "Deleted Queues: %s."
msgstr[0] "Antrian terhapus: %s."
msgid "Describes flavor-specific capabilities in YAML format."
msgstr "Menjelaskan kemampuan flavor-specific dalam format YAML."
msgid "Enter a queue name"
msgstr "Masukkan nama antrian"
msgid "Enter a subscriber"
msgstr "Masukkan pelanggan"
msgid "Free Messages"
msgstr "Free Messages (pesan bebas)"
msgid "GET"
msgstr "GET"
msgid "Group"
msgstr "Group (grup))"
msgid "Group of the pool."
msgstr "Grup pool."
msgid "HEAD"
msgstr "HEAD"
msgid "ID"
msgstr "ID"
msgid "List Messages"
msgstr "List Messages"
msgid "Messages"
msgstr "Messages"
#, python-format
msgid "Messages has been posted to queue %s successfully."
msgstr "Messages telah dikirim ke antrian %s dengan sukses."
msgid "Methods"
msgstr "Methods"
msgid "Name"
msgstr "Nama"
msgid "Name of the flavor."
msgstr "Nama flavor."
msgid "Name of the pool."
msgstr "Nama pool."
msgid ""
"Note that you can create a queue without defining metadata.\n"
" The metadata step is optional but recommended."
msgstr ""
"Perhatikan bahwa Anda dapat membuat antrian tanpa mendefinisikan metadata.\n"
"       Langkah metadata adalah opsional, tetapi dianjurkan."
msgid "Note that you can create a subscription without defining options."
msgstr ""
"Perhatikan bahwa Anda dapat membuat berlangganan tanpa opsi yang menentukan."
msgid "OPTIONS"
msgstr "OPTIONS"
msgid "Options"
msgstr "Options (opsi)"
msgid "POST"
msgstr "POST"
msgid "PUT"
msgstr "PUT"
msgid "Paths"
msgstr "Paths"
msgid "Pool"
msgstr "Pool (kolam)"
#, python-format
msgid "Pool %s was successfully created."
msgstr "Pool %s berhasil dibuat."
#, python-format
msgid "Pool %s was successfully updated."
msgstr "Pool %s telah berhasil diperbarui."
msgid "Pool Flavor"
msgstr "Pool Flavor (flavor kolam)"
msgid "Pool Flavors"
msgstr "Pool Flavors (flavor kolam)"
msgid "Pool Group"
msgstr "Pool Group (group kolam)"
#, python-format
msgid "Pool flavor %s was successfully created."
msgstr "Pool flavor %s berhasil dibuat."
#, python-format
msgid "Pool flavor %s was successfully updated."
msgstr "Pool flavor %s telah berhasil diperbarui."
msgid "Pool group for flavor."
msgstr "Grup pool flavor."
msgid "Pools"
msgstr "Pools (kolam)"
msgid "Post"
msgstr "Post"
msgid "Post Messages"
msgstr "Post Messages"
msgid "Purge"
msgstr "Purge"
msgid "Purge Queue"
msgstr "Purge Queue"
#, python-format
msgid "Queue %s has been purged successfully."
msgstr "Queue %s has been purged successfully."
#, python-format
msgid "Queue %s was successfully created."
msgstr "Antian %s berhasil dibuat."
#, python-format
msgid "Queue %s was successfully updated."
msgstr "Queue %s telah berhasil diperbarui."
msgid "Queue Details"
msgstr "Rincian Queue (antrian)"
msgid "Queue Metadata"
msgstr "Metadata Queue (antrian)"
msgid "Queue Name"
msgstr "Queue Name (nama antrian)"
msgid "Queues"
msgstr "Queues (antrian)"
#, python-format
msgid "Removed %(subscriber)s subscriber from the %(queue)s queue."
msgstr "Dihapus %(subscriber)s pelanggan dari %(queue)s antre."
msgid "See a sample as below:"
msgstr "Lihat contoh seperti di bawah ini:"
msgid "Signed URL"
msgstr "Signed URL"
#, python-format
msgid "Signed URL for %s"
msgstr "Signed URL untuk %s"
#, python-format
msgid ""
"Signed URL was successfully created for the queue %s with expires %s and "
"signature %s."
msgstr ""
"Signed URL berhasil dibuat untuk antrian %s dengan kadaluarsa %s dan tanda "
"tangan %s."
msgid "Subscriber"
msgstr "Subscriber (langganan)"
msgid "Subscribers must be in the form of mailto, HTTP, or HTTPS."
msgstr "Pelanggan harus dalam bentuk mailto, HTTP, atau HTTPS."
msgid "Subscription"
msgstr "Abonemen"
#, python-format
msgid "Subscription %s was successfully created."
msgstr "Abonemen %s berhasil dibuat."
msgid "Subscriptions"
msgstr "Subscriptions"
msgid "TTL Seconds"
msgstr "TTL Seconds"
msgid "The TTL for a subscription must be at least 60 seconds long."
msgstr "TTL untuk berlangganan harus minimal 60 detik."
msgid ""
"The client specifies only the body and TTL for the message. The server\n"
" inserts metadata, such as ID and age."
msgstr ""
"Klien hanya menentukan tubuh dan TTL untuk pesannya. Server\n"
"     memasukkan metadata, seperti ID dan usia."
msgid "Time To Live"
msgstr "Time To Live (waktu untuk hidup)"
msgid "Time to Live"
msgstr "Time to Live (waktu untuk hidup)"
msgid "Total Messages"
msgstr "Total Messages (total pesan)"
msgid "URI"
msgstr "URI"
msgid "URI for storage engine of this pool."
msgstr "URI untuk mesin penyimpanan pool ini."
msgid "Unable to add subscription."
msgstr "Tidak dapat menambahkan langganan."
msgid "Unable to create signed URL."
msgstr "Tidak dapat membuat URL yang ditandatangan (signed URL)."
msgid "Unable to create the flavor."
msgstr "Tidak dapat membuat flavor."
msgid "Unable to create the pool."
msgstr "Tidak dapat membuat kolam."
msgid "Unable to create the queue."
msgstr "Tidak dapat membuat antrian."
#, python-format
msgid "Unable to delete Pool Flavor: %s."
msgid_plural "Unable to delete Pool Flavors: %s."
msgstr[0] "Unable to delete Pool Flavor: %s."
#, python-format
msgid "Unable to delete Pool: %s."
msgid_plural "Unable to delete Pools: %s."
msgstr[0] "Unable to delete Pool: %s."
#, python-format
msgid "Unable to delete Queue: %s."
msgid_plural "Unable to delete Queues: %s."
msgstr[0] "Tidak dapat menghapus antrian: %s."
msgid "Unable to delete subscription."
msgstr "Tidak dapat menghapus langganan."
msgid "Unable to post messages."
msgstr "Tidak dapat mengeposkan pesan"
msgid "Unable to purge the queue."
msgstr "Unable to purge the queue."
msgid "Unable to retrieve the Queue."
msgstr "Unable to retrieve the Queue."
msgid "Unable to retrieve the Queues."
msgstr "Tidak dapat mengambil Queues (antrian)"
msgid "Unable to retrieve the flavor."
msgstr "Tidak dapat mengambil flavor."
msgid "Unable to retrieve the flavors."
msgstr "Tidak dapat mengambil flavor."
msgid "Unable to retrieve the pool."
msgstr "Tidak dapat mengambil kolam (pool)."
msgid "Unable to retrieve the pools."
msgstr "Tidak dapat mengambil kolam (pool)."
msgid "Unable to update the flavor."
msgstr "Tidak dapat memperbarui flavor."
msgid "Unable to update the pool."
msgstr "Tidak dapat memperbarui kolam."
msgid "Unable to update the queue."
msgstr "Tidak dapat memperbarui antrian."
msgid "Update"
msgstr "Perbaharui"
msgid "Update Pool"
msgstr "Perbaharui pool"
msgid "Update Pool Flavor"
msgstr "Update Pool Flavor (perbaharui pool flavor)"
msgid "Update Queue"
msgstr "Perbaharui Queue"
msgid "View Messages"
msgstr "View Messages"
msgid "Weight"
msgstr "Weight (berat)"
msgid "Weight of the pool."
msgstr "Berat pool."
#, python-format
msgid "You are not allowed to delete pool flavors: %s"
msgstr "Anda tidak diizinkan untuk menghapus pool flavors: %s"
#, python-format
msgid "You are not allowed to delete pools: %s"
msgstr "Anda tidak diizinkan untuk menghapus pool: %s"
#, python-format
msgid "You are not allowed to delete queues: %s"
msgstr "Anda tidak diizinkan untuk menghapus queues: %s"
msgid ""
"You can submit up to 10 messages in a single request, but you must always\n"
" encapsulate the messages in a collection container (an array in JSON, "
"even\n"
" for a single message - without the JSON array, you receive the "
"\"Invalid\n"
" request body\" message). The resulting value of the Location header or\n"
" response body might be used to retrieve the created messages for "
"further\n"
" processing."
msgstr ""
"Anda bisa mengirimkan hingga 10 message dalam satu permintaan, tapi Anda "
"harus selalu\n"
"     Encapsulate pesan dalam wadah koleksi (sebuah array di JSON, genap\n"
"     Untuk satu pesan - tanpa array JSON, Anda akan menerima \"Invalid\n"
"     Permintaan tubuh \"). Nilai yang dihasilkan dari header Lokasi atau\n"
"     Tubuh respons mungkin digunakan untuk mengambil pesan yang dibuat untuk "
"lebih jauh\n"
"     pengolahan."
#, python-format
msgid "You have selected \"%s\". Deleted Pool Flavor is not recoverable."
msgid_plural ""
"You have selected \"%s\". Deleted Pool Flavors are not recoverable."
msgstr[0] "You have selected \"%s\". Deleted Pool Flavor is not recoverable."
#, python-format
msgid "You have selected \"%s\". Deleted Pool is not recoverable."
msgid_plural "You have selected \"%s\". Deleted Pools are not recoverable."
msgstr[0] "You have selected \"%s\". Deleted Pool is not recoverable."
#, python-format
msgid "You have selected \"%s\". Deleted queue is not recoverable."
msgid_plural "You have selected \"%s\". Deleted queues are not recoverable."
msgstr[0] "Anda telah memilih \"%s\". Antrian dihapus tidak dapat dipulihkan."
msgid ""
"You must specify one of the pool groups that is configured in storage pools."
msgstr ""
"Anda harus menentukan salah satu kelompok pool yang dikonfigurasi dalam pool "
"penyimpanan."
msgid ""
"[\n"
" {\n"
" \"body\": {\n"
" \"event\": \"BackupProgress\",\n"
" \"current_bytes\": \"2341134\",\n"
" \"total_bytes\": \"99614720\"\n"
" }\n"
" }\n"
"]"
msgstr ""
"[\n"
" {\n"
" \"body\": {\n"
" \"event\": \"BackupProgress\",\n"
" \"current_bytes\": \"2341134\",\n"
" \"total_bytes\": \"99614720\"\n"
" }\n"
" }\n"
"]"
msgid "e.g. mongodb://127.0.0.1:27017"
msgstr "e.g. mongodb://127.0.0.1:27017"

View File

@ -1,32 +0,0 @@
# Shu Muto <shu-mutou@rf.jp.nec.com>, 2016. #zanata
# Shu Muto <shu-mutou@rf.jp.nec.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 2.0.0.0b4.dev2\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-01-31 09:28+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-01 04:17+0000\n"
"Last-Translator: Shu Muto <shu-mutou@rf.jp.nec.com>\n"
"Language-Team: Japanese\n"
"Language: ja\n"
"X-Generator: Zanata 3.7.3\n"
"Plural-Forms: nplurals=1; plural=0\n"
msgid "Messaging"
msgstr "メッセージング"
msgid "Pool Flavors"
msgstr "プールフレーバー"
msgid "Pools"
msgstr "プール"
msgid "Queues"
msgstr "キュー"
#, python-format
msgid "The specified input is not a valid YAML format: %s"
msgstr "指定された入力は有効な YAML 形式ではありません: %s"

View File

@ -1,500 +0,0 @@
# Shu Muto <shu-mutou@rf.jp.nec.com>, 2016. #zanata
# Shu Muto <shu-mutou@rf.jp.nec.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 3.0.0.0b3.dev20\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-07-02 22:48+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2017-07-06 07:30+0000\n"
"Last-Translator: Shu Muto <shu-mutou@rf.jp.nec.com>\n"
"Language-Team: Japanese\n"
"Language: ja\n"
"X-Generator: Zanata 3.9.6\n"
"Plural-Forms: nplurals=1; plural=0\n"
msgid "A queue name between 1-256 characters is required."
msgstr "1-256 文字のキュー名が必要です。"
msgid "Actions"
msgstr "アクション"
msgid "Age"
msgstr "年齢"
msgid ""
"An optional request component related to storage-specific options in YAML "
"format."
msgstr ""
"ストレージ固有のオプションに関連付ける追加の要素を YAML 形式で入力してくださ"
"い。"
msgid "Body"
msgstr "本文"
msgid "Capabilities"
msgstr "機能"
msgid "Choose resource to purge"
msgstr "削除するリソースを選択してください。"
msgid "Claimed Messages"
msgstr "要求メッセージ数"
msgid "Claims"
msgstr "請求"
msgid "Confirm Delete Pool"
msgid_plural "Confirm Delete Pools"
msgstr[0] "プールの削除の確認"
msgid "Confirm Delete Pool Flavor"
msgid_plural "Confirm Delete Pool Flavors"
msgstr[0] "プールフレーバーの削除の確認"
msgid "Confirm Delete Queue"
msgid_plural "Confirm Delete queues"
msgstr[0] "キューの削除の確認"
msgid "Confirmed"
msgstr "確認済み"
msgid "Create"
msgstr "作成"
msgid "Create Pool"
msgstr "プールの作成"
msgid "Create Pool Flavor"
msgstr "プールフレーバーの作成"
msgid "Create Queue"
msgstr "キューの作成"
msgid "Create Queues"
msgstr "キューの作成"
msgid "Create Subscription"
msgstr "サブスクリプションの作成"
msgid "Creating Signed URL"
msgstr "署名済み URL の作成中"
msgid "DELETE"
msgstr "DELETE"
msgid "Delete"
msgstr "削除"
msgid "Delete Pool"
msgid_plural "Delete Pools"
msgstr[0] "プールの削除"
msgid "Delete Pool Flavor"
msgid_plural "Delete Pool Flavors"
msgstr[0] "プールフレーバーの削除"
msgid "Delete Pool Flavors"
msgstr "プールフレーバーの削除"
msgid "Delete Pools"
msgstr "プールの削除"
msgid "Delete Queue"
msgid_plural "Delete Queues"
msgstr[0] "キューの削除"
msgid "Delete Queues"
msgstr "キューの削除"
#, python-format
msgid "Deleted Pool Flavor: %s."
msgid_plural "Deleted Pool Flavors: %s."
msgstr[0] "プールフレーバー %s を削除しました。"
#, python-format
msgid "Deleted Pool: %s."
msgid_plural "Deleted Pools: %s."
msgstr[0] "プール %s を削除しました。"
#, python-format
msgid "Deleted Queue: %s."
msgid_plural "Deleted Queues: %s."
msgstr[0] "キュー %s を削除しました。"
msgid "Describes flavor-specific capabilities in YAML format."
msgstr "フレーバー固有の機能を YAML 形式で記述してください。"
msgid "Enter a queue name"
msgstr "キューの名前を入力してください。"
msgid "Enter a subscriber"
msgstr "サブスクライバーを入力してください"
msgid "Free Messages"
msgstr "空きメッセージ数"
msgid "GET"
msgstr "GET"
msgid "Group"
msgstr "グループ"
msgid "Group of the pool."
msgstr "プールのグループ"
msgid "HEAD"
msgstr "HEAD"
msgid "ID"
msgstr "ID"
msgid "List Messages"
msgstr "メッセージ一覧"
msgid "Messages"
msgstr "メッセージ"
#, python-format
msgid "Messages has been posted to queue %s successfully."
msgstr "キュー %s にメッセージが正常に送信されました。"
msgid "Methods"
msgstr "メソッド"
msgid "Name"
msgstr "名前"
msgid "Name of the flavor."
msgstr "フレーバーの名前。"
msgid "Name of the pool."
msgstr "プールの名前。"
msgid ""
"Note that you can create a queue without defining metadata.\n"
" The metadata step is optional but recommended."
msgstr ""
"メタデータを定義しないでキューを作成できることに留意してください。\n"
" メタデータのステップはオプションですが、推奨されています。"
msgid "Note that you can create a subscription without defining options."
msgstr ""
"オプションを定義しないでサブスクリプションを作成できることに留意してくださ"
"い。"
msgid "OPTIONS"
msgstr "OPTIONS"
msgid "Options"
msgstr "オプション"
msgid "POST"
msgstr "POST"
msgid "PUT"
msgstr "PUT"
msgid "Paths"
msgstr "パス"
msgid "Pool"
msgstr "プール"
#, python-format
msgid "Pool %s was successfully created."
msgstr "プール %s が正常に作成されました。"
#, python-format
msgid "Pool %s was successfully updated."
msgstr "プール %s が正常に更新されました。"
msgid "Pool Flavor"
msgstr "プールフレーバー"
msgid "Pool Flavors"
msgstr "プールフレーバー"
msgid "Pool Group"
msgstr "プールグループ"
#, python-format
msgid "Pool flavor %s was successfully created."
msgstr "プールフレーバー %s が正常に作成されました。"
#, python-format
msgid "Pool flavor %s was successfully updated."
msgstr "プールフレーバー %s が正常に更新されました。"
msgid "Pool group for flavor."
msgstr "フレーバーのプールグループ"
msgid "Pools"
msgstr "プール"
msgid "Post"
msgstr "送信"
msgid "Post Messages"
msgstr "メッセージの送信"
msgid "Purge"
msgstr "空にする"
msgid "Purge Queue"
msgstr "キューを空にする"
#, python-format
msgid "Queue %s has been purged successfully."
msgstr "キュー %s が正常に空にされました。"
#, python-format
msgid "Queue %s was successfully created."
msgstr "キュー %s が正常に作成されました。"
#, python-format
msgid "Queue %s was successfully updated."
msgstr "キュー %s が正常に更新されました。"
msgid "Queue Details"
msgstr "キューの詳細"
msgid "Queue Metadata"
msgstr "キューのメタデータ"
msgid "Queue Name"
msgstr "キュー名"
msgid "Queues"
msgstr "キュー"
#, python-format
msgid "Removed %(subscriber)s subscriber from the %(queue)s queue."
msgstr ""
"キュー %(queue)s から、サブスクライバー %(subscriber)s が削除されました。"
msgid "See a sample as below:"
msgstr "以下の例を参照してください:"
msgid "Signed URL"
msgstr "署名済み URL"
#, python-format
msgid "Signed URL for %s"
msgstr "%s の署名済み URL"
#, python-format
msgid ""
"Signed URL was successfully created for the queue %s with expires %s and "
"signature %s."
msgstr ""
"キュー %s の署名済み URL が期限 %s および署名 %s で正常に作成されました。"
msgid "Subscriber"
msgstr "サブスクライバー"
msgid "Subscribers must be in the form of mailto, HTTP, or HTTPS."
msgstr ""
"サブスクライバーは、 mailto 、HTTP 、あるいは HTTPSの形式である必要がありま"
"す。"
msgid "Subscription"
msgstr "サブスクリプション"
#, python-format
msgid "Subscription %s was successfully created."
msgstr "サブスクリプション %s が正常に作成されました。"
msgid "Subscriptions"
msgstr "サブスクリプション"
msgid "TTL Seconds"
msgstr "TTL 秒数"
msgid "The TTL for a subscription must be at least 60 seconds long."
msgstr "サブスクリプションの有効期間は、少なくとも 60 秒でなければなりません。"
msgid ""
"The client specifies only the body and TTL for the message. The server\n"
" inserts metadata, such as ID and age."
msgstr ""
"クライアントは、メッセージの本文と TTL のみ指定可能です。サーバーは、ID や "
"age などのメタデータを挿入します。"
msgid "Time To Live"
msgstr "有効期間"
msgid "Time to Live"
msgstr "有効期間"
msgid "Total Messages"
msgstr "合計メッセージ数"
msgid "URI"
msgstr "URI"
msgid "URI for storage engine of this pool."
msgstr "このプールのストレージプールの URI"
msgid "Unable to add subscription."
msgstr "サブスクリプションを追加できません。"
msgid "Unable to create signed URL."
msgstr "署名済み URL を作成できません。"
msgid "Unable to create the flavor."
msgstr "フレーバーを作成できません。"
msgid "Unable to create the pool."
msgstr "プールを作成できません。"
msgid "Unable to create the queue."
msgstr "キューを作成できません。"
#, python-format
msgid "Unable to delete Pool Flavor: %s."
msgid_plural "Unable to delete Pool Flavors: %s."
msgstr[0] "プールフレーバーを削除できません: %s"
#, python-format
msgid "Unable to delete Pool: %s."
msgid_plural "Unable to delete Pools: %s."
msgstr[0] "プールを削除できません: %s"
#, python-format
msgid "Unable to delete Queue: %s."
msgid_plural "Unable to delete Queues: %s."
msgstr[0] "キューを削除できません: %s"
msgid "Unable to delete subscription."
msgstr "サブスクリプションを削除できません。"
msgid "Unable to post messages."
msgstr "メッセージを送信できません。"
msgid "Unable to purge the queue."
msgstr "キューを空にできません。"
msgid "Unable to retrieve the Queue."
msgstr "キューを取得できません。"
msgid "Unable to retrieve the Queues."
msgstr "キューの一覧を取得できません。"
msgid "Unable to retrieve the flavor."
msgstr "フレーバーを取得できません。"
msgid "Unable to retrieve the flavors."
msgstr "フレーバーの一覧を取得できません。"
msgid "Unable to retrieve the pool."
msgstr "プールを取得できません。"
msgid "Unable to retrieve the pools."
msgstr "プール一覧を取得できません。"
msgid "Unable to update the flavor."
msgstr "フレーバーを更新できません。"
msgid "Unable to update the pool."
msgstr "プールを更新できません。"
msgid "Unable to update the queue."
msgstr "キューを更新できません。"
msgid "Update"
msgstr "更新"
msgid "Update Pool"
msgstr "プールの更新"
msgid "Update Pool Flavor"
msgstr "プールフレーバーの更新"
msgid "Update Queue"
msgstr "キューの更新"
msgid "View Messages"
msgstr "メッセージ一覧の閲覧"
msgid "Weight"
msgstr "重み"
msgid "Weight of the pool."
msgstr "プールの重み。"
#, python-format
msgid "You are not allowed to delete pool flavors: %s"
msgstr "プールフレーバーの削除は許可されていません: %s"
#, python-format
msgid "You are not allowed to delete pools: %s"
msgstr "プールの削除は許可されていません: %s"
#, python-format
msgid "You are not allowed to delete queues: %s"
msgstr "キューの削除は許可されていません: %s"
msgid ""
"You can submit up to 10 messages in a single request, but you must always\n"
" encapsulate the messages in a collection container (an array in JSON, "
"even\n"
" for a single message - without the JSON array, you receive the "
"\"Invalid\n"
" request body\" message). The resulting value of the Location header or\n"
" response body might be used to retrieve the created messages for "
"further\n"
" processing."
msgstr ""
"1つのリクエストでメッセージを 10 個まで送信できますが、メッセージを1つのコ"
"レクションコンテナー(1つのメッセージでも JSON の中の1つの配列)に格納する"
"必要があります。そうでなければ、「無効なリクエスト本文です。」というメッセー"
"ジを受け取ります。Location ヘッダーやレスポンス本文の結果の値は、作成された"
"メッセージの更なる処理のために取得するときに利用できます。"
#, python-format
msgid "You have selected \"%s\". Deleted Pool Flavor is not recoverable."
msgid_plural ""
"You have selected \"%s\". Deleted Pool Flavors are not recoverable."
msgstr[0] "\"%s\" を選択しました。削除されたプールフレーバーは元に戻せません。"
#, python-format
msgid "You have selected \"%s\". Deleted Pool is not recoverable."
msgid_plural "You have selected \"%s\". Deleted Pools are not recoverable."
msgstr[0] "\"%s\" を選択しました。削除されたプールは元に戻せません。"
#, python-format
msgid "You have selected \"%s\". Deleted queue is not recoverable."
msgid_plural "You have selected \"%s\". Deleted queues are not recoverable."
msgstr[0] "\"%s\" を選択しました。削除されたキューは元に戻せません。"
msgid ""
"You must specify one of the pool groups that is configured in storage pools."
msgstr ""
"ストレージプールで設定されているプールグループの1つを指定する必要があります。"
msgid ""
"[\n"
" {\n"
" \"body\": {\n"
" \"event\": \"BackupProgress\",\n"
" \"current_bytes\": \"2341134\",\n"
" \"total_bytes\": \"99614720\"\n"
" }\n"
" }\n"
"]"
msgstr ""
"[\n"
" {\n"
" \"body\": {\n"
" \"event\": \"BackupProgress\",\n"
" \"current_bytes\": \"2341134\",\n"
" \"total_bytes\": \"99614720\"\n"
" }\n"
" }\n"
"]"
msgid "e.g. mongodb://127.0.0.1:27017"
msgstr "例: mongodb://127.0.0.1:27017"

View File

@ -1,32 +0,0 @@
# Ian Y. Choi <ianyrchoi@gmail.com>, 2016. #zanata
# Eunseop Shin <kairos9603@khu.ac.kr>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 2.0.1.dev18\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-03-08 02: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-02-11 03:30+0000\n"
"Last-Translator: Eunseop Shin <kairos9603@khu.ac.kr>\n"
"Language-Team: Korean (South Korea)\n"
"Language: ko-KR\n"
"X-Generator: Zanata 3.9.6\n"
"Plural-Forms: nplurals=1; plural=0\n"
msgid "Messaging"
msgstr "메시징"
msgid "Pool Flavors"
msgstr "Pool Flavors"
msgid "Pools"
msgstr "풀"
msgid "Queues"
msgstr "큐"
#, python-format
msgid "The specified input is not a valid YAML format: %s"
msgstr "입력한 값이 YAML 포멧에 맞지 않습니다: %s"

View File

@ -1,325 +0,0 @@
# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
# Ian Y. Choi <ianyrchoi@gmail.com>, 2016. #zanata
# Sungjin Kang <gang.sungjin@gmail.com>, 2016. #zanata
# Eunseop Shin <kairos9603@khu.ac.kr>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 2.0.1.dev18\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-03-08 02: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-02-11 03:41+0000\n"
"Last-Translator: Eunseop Shin <kairos9603@khu.ac.kr>\n"
"Language-Team: Korean (South Korea)\n"
"Language: ko-KR\n"
"X-Generator: Zanata 3.9.6\n"
"Plural-Forms: nplurals=1; plural=0\n"
msgid "A queue name between 1-256 characters is required."
msgstr "큐 이름은 1-256 문자로 되어야 합니다."
msgid "Actions"
msgstr "작업"
msgid "Capabilities"
msgstr "기능들"
msgid "Claimed Messages"
msgstr "요청 메시지"
msgid "Confirm Delete Pool"
msgid_plural "Confirm Delete Pools"
msgstr[0] "Pool 삭제 확인"
msgid "Confirm Delete Pool Flavor"
msgid_plural "Confirm Delete Pool Flavors"
msgstr[0] "Pool Flavor 삭제 확인"
msgid "Confirm Delete Queue"
msgid_plural "Confirm Delete queues"
msgstr[0] "큐 삭제 확인"
msgid "Create"
msgstr "생성"
msgid "Create Pool"
msgstr "Pool 생성"
msgid "Create Pool Flavor"
msgstr "Pool Flavor 생성"
msgid "Create Queue"
msgstr "큐 생성"
msgid "Create Queues"
msgstr "큐 생성"
msgid "Create Subscription"
msgstr "구독 생성"
msgid "Delete"
msgstr "삭제"
msgid "Delete Pool"
msgid_plural "Delete Pools"
msgstr[0] "풀 삭제"
msgid "Delete Pool Flavor"
msgid_plural "Delete Pool Flavors"
msgstr[0] "Pool Flavor 삭제"
msgid "Delete Pool Flavors"
msgstr "Pool Flavors 삭제"
msgid "Delete Pools"
msgstr "Pool 삭제"
msgid "Delete Queue"
msgid_plural "Delete Queues"
msgstr[0] "큐 삭제"
msgid "Delete Queues"
msgstr "큐 삭제"
#, python-format
msgid "Deleted Pool Flavor: %s."
msgid_plural "Deleted Pool Flavors: %s."
msgstr[0] "삭제된 Pool Flavor: %s."
#, python-format
msgid "Deleted Pool: %s."
msgid_plural "Deleted Pools: %s."
msgstr[0] "삭제된 풀: %s."
#, python-format
msgid "Deleted Queue: %s."
msgid_plural "Deleted Queues: %s."
msgstr[0] "큐 삭제됨: %s."
msgid "Enter a queue name"
msgstr "큐 이름을 입력합니다"
msgid "Enter a subscriber"
msgstr "구독자를 입력합니다"
msgid "Free Messages"
msgstr "프리 메시지"
msgid "Group"
msgstr "Group"
msgid "Group of the pool."
msgstr "풀 그룹입니다."
msgid "Name"
msgstr "이름"
msgid "Name of the flavor."
msgstr "Flavor의 이름."
msgid "Name of the pool."
msgstr "풀 이름입니다."
msgid ""
"Note that you can create a queue without defining metadata.\n"
" The metadata step is optional but recommended."
msgstr ""
"참고로 메타데이터 정의 없이 큐 생성이 가능합니다.\n"
" 메타데이터 단계는 옵션이지만 권장합니다."
msgid "Note that you can create a subscription without defining options."
msgstr "참고로 옵션 정의 없이 구독 생성이 가능합니다."
msgid "Options"
msgstr "옵션"
msgid "Pool"
msgstr "Pool"
#, python-format
msgid "Pool %s was successfully created."
msgstr "Pool %s가 성공적으로 생성되었습니다."
#, python-format
msgid "Pool %s was successfully updated."
msgstr "풀 %s가 성공적으로 업데이트되었습니다."
msgid "Pool Flavor"
msgstr "Pool Flavor"
msgid "Pool Flavors"
msgstr "Pool Flavors"
msgid "Pool Group"
msgstr "풀 그룹"
#, python-format
msgid "Pool flavor %s was successfully created."
msgstr "Pool flavor %s가 성공적으로 생성되었습니다."
#, python-format
msgid "Pool flavor %s was successfully updated."
msgstr "Pool flavor %s가 성공적으로 업데이트 되었습니다."
msgid "Pool group for flavor."
msgstr "Flavor를 위한 Pool Group."
msgid "Pools"
msgstr "Pools"
#, python-format
msgid "Queue %s was successfully created."
msgstr "큐 %s 를 성공적으로 생성하였습니다."
#, python-format
msgid "Queue %s was successfully updated."
msgstr "큐 %s를 성공적으로 삭제하였습니다."
msgid "Queue Details"
msgstr "큐 세부사항"
msgid "Queue Metadata"
msgstr "큐 메타데이터"
msgid "Queue Name"
msgstr "큐 이름"
msgid "Queues"
msgstr "큐"
#, python-format
msgid "Removed %(subscriber)s subscriber from the %(queue)s queue."
msgstr "%(subscriber)s 구독자를 %(queue)s 큐에서 제거하였습니다."
msgid "Subscriber"
msgstr "구독자"
msgid "Subscribers must be in the form of mailto, HTTP, or HTTPS."
msgstr "구독자는 mailto, HTTP, 또는 HTTPS 형태로 되어야 합니다."
msgid "Subscription"
msgstr "구독"
#, python-format
msgid "Subscription %s was successfully created."
msgstr "큐 %s 를 성공적으로 생성하였습니다."
msgid "The TTL for a subscription must be at least 60 seconds long."
msgstr "구독자에 대한 TTL은 적어도 60초 길이여야 합니다."
msgid "Time To Live"
msgstr "지속 시간"
msgid "Time to Live"
msgstr "Time to Live"
msgid "Total Messages"
msgstr "총 메시지"
msgid "URI"
msgstr "URI"
msgid "Unable to add subscription."
msgstr "구독을 추가할 수 없습니다."
msgid "Unable to create the flavor."
msgstr "Flavor 생성을 할 수 없습니다."
msgid "Unable to create the pool."
msgstr "풀을 생성 할 수 없습니다."
msgid "Unable to create the queue."
msgstr "큐를 생성할 수 없습니다."
#, python-format
msgid "Unable to delete Pool Flavor: %s."
msgid_plural "Unable to delete Pool Flavors: %s."
msgstr[0] "Pool Flavor를 삭제 할 수 없습니다.: %s."
#, python-format
msgid "Unable to delete Pool: %s."
msgid_plural "Unable to delete Pools: %s."
msgstr[0] "Pool을 삭제할 수 없습니다: %s."
#, python-format
msgid "Unable to delete Queue: %s."
msgid_plural "Unable to delete Queues: %s."
msgstr[0] "큐를 삭제할 수 없습니다: %s."
msgid "Unable to delete subscription."
msgstr "구독을 삭제할 수 없습니다."
msgid "Unable to retrieve the Queues."
msgstr "큐를 가져올 수 없습니다."
msgid "Unable to retrieve the flavor."
msgstr "Flavor를 찾지 못했습니다."
msgid "Unable to retrieve the flavors."
msgstr "Flavor들을 찾지 못했습니다."
msgid "Unable to retrieve the pool."
msgstr "풀을 찾을 수 없습니다."
msgid "Unable to retrieve the pools."
msgstr "풀을 찾을 수 없습니다."
msgid "Unable to update the flavor."
msgstr "Flavor 업데이트를 할 수 없습니다."
msgid "Unable to update the pool."
msgstr "풀을 업데이트 할 수 없습니다."
msgid "Unable to update the queue."
msgstr "큐를 업데이트할 수 없습니다."
msgid "Update"
msgstr "업데이트"
msgid "Update Pool"
msgstr "풀 업데이트"
msgid "Update Pool Flavor"
msgstr "Pool Flavor 업데이트"
msgid "Update Queue"
msgstr "큐 업데이트"
msgid "Weight"
msgstr "Weight"
msgid "Weight of the pool."
msgstr "풀에서 풀 멤버 가중치입니다."
#, python-format
msgid "You are not allowed to delete pool flavors: %s"
msgstr "pool flavors 삭제가 허용되지 않았습니다 : %s"
#, python-format
msgid "You are not allowed to delete pools: %s"
msgstr "Pool 삭제가 허용되어 있지 않습니다: %s"
#, python-format
msgid "You are not allowed to delete queues: %s"
msgstr "큐 삭제가 허용되어 있지 않습니다: %s"
#, python-format
msgid "You have selected \"%s\". Deleted Pool Flavor is not recoverable."
msgid_plural ""
"You have selected \"%s\". Deleted Pool Flavors are not recoverable."
msgstr[0] "\"%s\"를 선택했습니다. 삭제된 Pool Flavor는 복구 할 수 없습니다."
#, python-format
msgid "You have selected \"%s\". Deleted Pool is not recoverable."
msgid_plural "You have selected \"%s\". Deleted Pools are not recoverable."
msgstr[0] "\"%s\"를 선택했습니다. 삭제된 Pool은 복구 할 수 없습니다."
#, python-format
msgid "You have selected \"%s\". Deleted queue is not recoverable."
msgid_plural "You have selected \"%s\". Deleted queues are not recoverable."
msgstr[0] "\"%s\"를 선택했습니다. 삭제된 큐는 복구 할 수 없습니다."
msgid "e.g. mongodb://127.0.0.1:27017"
msgstr "e.g. mongodb://127.0.0.1:27017"

View File

@ -1,33 +0,0 @@
# Artem <amikhalev90@gmail.com>, 2016. #zanata
# Artem <amikhalev90@gmail.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 2.0.1.dev18\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-03-08 02: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-02-06 02:32+0000\n"
"Last-Translator: Artem <amikhalev90@gmail.com>\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 "Messaging"
msgstr "Обмен сообщениями"
msgid "Pool Flavors"
msgstr "Типы инстансов пула"
msgid "Pools"
msgstr "Пулы"
msgid "Queues"
msgstr "Очереди"
#, python-format
msgid "The specified input is not a valid YAML format: %s"
msgstr "Введенная информация не соответствует формату YAML: %s"

View File

@ -1,286 +0,0 @@
# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
# Artem <amikhalev90@gmail.com>, 2016. #zanata
# Valentin Chikunov <vchikunov@hystax.com>, 2016. #zanata
# Artem <amikhalev90@gmail.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 2.0.1.dev18\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-03-08 02: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-02-06 02:57+0000\n"
"Last-Translator: Artem <amikhalev90@gmail.com>\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 "A queue name between 1-256 characters is required."
msgstr "Имя очереди должно состоять из 1-256 символов."
msgid "Actions"
msgstr "Действия"
msgid "Capabilities"
msgstr "Возможности"
msgid "Claimed Messages"
msgstr "Помеченные сообщения"
msgid "Confirm Delete Pool"
msgid_plural "Confirm Delete Pools"
msgstr[0] "Подтвердите удаление пула"
msgstr[1] "Подтвердите удаление пулов"
msgstr[2] "Подтвердите удаление пулов"
msgid "Confirm Delete Queue"
msgid_plural "Confirm Delete queues"
msgstr[0] "Подтвердите удаление Очереди"
msgstr[1] "Подтвердите удаление очередей"
msgstr[2] "Подтвердите удаление очередей"
msgid "Create"
msgstr "Создать"
msgid "Create Pool"
msgstr "Создать пул"
msgid "Create Queue"
msgstr "Создать Очередь"
msgid "Create Queues"
msgstr "Создать Очереди"
msgid "Create Subscription"
msgstr "Создать Подписку"
msgid "Delete"
msgstr "Удалить"
msgid "Delete Pool"
msgid_plural "Delete Pools"
msgstr[0] "Удалить пул"
msgstr[1] "Удалить пулы"
msgstr[2] "Удалить пулы"
msgid "Delete Pools"
msgstr "Удалить пулы"
msgid "Delete Queue"
msgid_plural "Delete Queues"
msgstr[0] "Удалить Очередь"
msgstr[1] "Удалить Очереди"
msgstr[2] "Удалить Очереди"
msgid "Delete Queues"
msgstr "Удалить Очереди"
#, python-format
msgid "Deleted Pool: %s."
msgid_plural "Deleted Pools: %s."
msgstr[0] "Пул удален: %s."
msgstr[1] "Пулы удалены: %s."
msgstr[2] "Пулы удалены: %s."
#, python-format
msgid "Deleted Queue: %s."
msgid_plural "Deleted Queues: %s."
msgstr[0] "Удалена Очередь: %s."
msgstr[1] "Удалены Очереди: %s."
msgstr[2] "Удалены Очереди: %s."
msgid "Enter a queue name"
msgstr "Введите имя очереди"
msgid "Enter a subscriber"
msgstr "Введите подписчика"
msgid "Free Messages"
msgstr "Свободные сообщения"
msgid "Group"
msgstr "Группа"
msgid "Group of the pool."
msgstr "Группа пула."
msgid "Name"
msgstr "Имя"
msgid "Name of the flavor."
msgstr "Название типа инстансов:"
msgid "Name of the pool."
msgstr "Имя пула."
msgid ""
"Note that you can create a queue without defining metadata.\n"
" The metadata step is optional but recommended."
msgstr ""
"Обратите внимание, что можно создать очередь не определяя метаданные..\n"
" Этап метаданных не обязателен, но рекомендуется."
msgid "Note that you can create a subscription without defining options."
msgstr "Обратите внимание, что можно создать подписку не определяя параметры."
msgid "Options"
msgstr "Параметры"
msgid "Pool"
msgstr "Пул"
#, python-format
msgid "Pool %s was successfully created."
msgstr "Пул %s успешно создан."
#, python-format
msgid "Pool %s was successfully updated."
msgstr "Пул %s успешно обновлен."
msgid "Pools"
msgstr "Пулы"
#, python-format
msgid "Queue %s was successfully created."
msgstr "Очередь %s создана успешно."
#, python-format
msgid "Queue %s was successfully updated."
msgstr "Очередь %s успешно обновлена."
msgid "Queue Details"
msgstr "Информация об Очереди"
msgid "Queue Metadata"
msgstr "Метаданные Очереди"
msgid "Queue Name"
msgstr "Имя Очереди."
msgid "Queues"
msgstr "Очереди"
#, python-format
msgid "Removed %(subscriber)s subscriber from the %(queue)s queue."
msgstr "Подписчик %(subscriber)s удален из очереди %(queue)s."
msgid "Subscriber"
msgstr "Подписчик"
msgid "Subscribers must be in the form of mailto, HTTP, or HTTPS."
msgstr "Подписчики должны быть формата mailto, HTTP или HTTPS."
msgid "Subscription"
msgstr "Подписка"
#, python-format
msgid "Subscription %s was successfully created."
msgstr "Подписка %s создана успешно."
msgid "The TTL for a subscription must be at least 60 seconds long."
msgstr "TTL подписки должно быть по крайней мере 60 секунд."
msgid "Time To Live"
msgstr "Время жизни"
msgid "Time to Live"
msgstr "Время жизни"
msgid "Total Messages"
msgstr "Всего Сообщений"
msgid "URI"
msgstr "URI"
msgid "Unable to add subscription."
msgstr "Не удалось добавить подписку."
msgid "Unable to create the flavor."
msgstr "Не удалось создать тип инстанса."
msgid "Unable to create the pool."
msgstr "Не удалось создать пул."
msgid "Unable to create the queue."
msgstr "Не удалось создать очередь."
#, python-format
msgid "Unable to delete Pool: %s."
msgid_plural "Unable to delete Pools: %s."
msgstr[0] "Не удалось удалить пул: %s."
msgstr[1] "Не удалось удалить пулы: %s."
msgstr[2] "Не удалось удалить пулы: %s."
#, python-format
msgid "Unable to delete Queue: %s."
msgid_plural "Unable to delete Queues: %s."
msgstr[0] "Не удалось удалить Очередь: %s."
msgstr[1] "Не удалось удалить Очереди: %s."
msgstr[2] "Не удалось удалить Очереди: %s."
msgid "Unable to delete subscription."
msgstr "Не удалось удалить подписку."
msgid "Unable to retrieve the Queues."
msgstr "Не удалось получить очереди."
msgid "Unable to retrieve the flavor."
msgstr "Не удалось получить тип инстанса."
msgid "Unable to retrieve the pool."
msgstr "Не удалось получить пул."
msgid "Unable to retrieve the pools."
msgstr "Не удалось получить пулы."
msgid "Unable to update the flavor."
msgstr "Не удалось обновить тип инстанса."
msgid "Unable to update the pool."
msgstr "Не удалось обновить пул."
msgid "Unable to update the queue."
msgstr "Не удалось обновить очередь."
msgid "Update"
msgstr "Обновить"
msgid "Update Pool"
msgstr "Обновить пул"
msgid "Update Queue"
msgstr "Обновить Очередь"
msgid "Weight"
msgstr "Вес"
msgid "Weight of the pool."
msgstr "Вес пула."
#, python-format
msgid "You are not allowed to delete pools: %s"
msgstr "Вам не разрешено удалять пулы: %s"
#, python-format
msgid "You are not allowed to delete queues: %s"
msgstr "Вам не разрешено удалять образы: %s"
#, python-format
msgid "You have selected \"%s\". Deleted Pool is not recoverable."
msgid_plural "You have selected \"%s\". Deleted Pools are not recoverable."
msgstr[0] "Вы выбрали \"%s\". Восстановить удаленный пул невозможно."
msgstr[1] "Вы выбрали \"%s\". Восстановить удаленные пулы невозможно."
msgstr[2] "Вы выбрали \"%s\". Восстановить удаленные пулы невозможно."
#, python-format
msgid "You have selected \"%s\". Deleted queue is not recoverable."
msgid_plural "You have selected \"%s\". Deleted queues are not recoverable."
msgstr[0] "Вы выбрали \"%s\". Восстановить удаленную очередь невозможно."
msgstr[1] "Вы выбрали \"%s\". Восстановить удаленные очереди невозможно."
msgstr[2] "Вы выбрали \"%s\". Восстановить удаленные очереди невозможно."
msgid "e.g. mongodb://127.0.0.1:27017"
msgstr "т.е. mongodb://127.0.0.1:27017"

View File

@ -1,32 +0,0 @@
# işbaran akçayır <isbaran@gmail.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 3.0.0.0b2.dev12\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-05-18 00:09+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-25 11:52+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Turkish (Turkey)\n"
"Language: tr-TR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Zanata 3.9.6\n"
"X-POOTLE-MTIME: 1495711591.000000\n"
msgid "Messaging"
msgstr "İletiler"
msgid "Pool Flavors"
msgstr "Havuz Nitelikleri"
msgid "Pools"
msgstr "Havuzlar"
msgid "Queues"
msgstr "Kuyruklar"
#, python-format
msgid "The specified input is not a valid YAML format: %s"
msgstr "Belirtilen girdi geçerli YAML biçiminde değil: %s"

View File

@ -1,391 +0,0 @@
# Mücahit Büyükyılmaz <mucahit@deltanoc.com>, 2015. #zanata
# OpenStack Infra <zanata@openstack.org>, 2015. #zanata
# Andreas Jaeger <jaegerandi@gmail.com>, 2016. #zanata
# işbaran akçayır <isbaran@gmail.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 3.0.0.0b2.dev12\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-05-18 00:09+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-25 11:52+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Turkish (Turkey)\n"
"Language: tr-TR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Zanata 3.9.6\n"
"X-POOTLE-MTIME: 1495713078.000000\n"
msgid "A queue name between 1-256 characters is required."
msgstr "1-256 karakter uzunluğunda kuyruk ismi gerekiyor."
msgid "Actions"
msgstr "İşlemler"
msgid "Age"
msgstr "Yaş"
msgid ""
"An optional request component related to storage-specific options in YAML "
"format."
msgstr ""
"İsteğe bağlı, depolamaya-özel seçeneklerle ilgili YAML biçiminde istek "
"bileşeni."
msgid "Capabilities"
msgstr "Yetenekler"
msgid "Choose resource to purge"
msgstr "Temizlenecek kaynağı seçin"
msgid "Claimed Messages"
msgstr "İstenen İletiler"
msgid "Confirm Delete Pool"
msgid_plural "Confirm Delete Pools"
msgstr[0] "Havuz Silmeyi Onayla"
msgstr[1] "Havuzları Silmeyi Onayla"
msgid "Confirm Delete Pool Flavor"
msgid_plural "Confirm Delete Pool Flavors"
msgstr[0] "Havuz Niteliği Silmeyi Onayla"
msgstr[1] "Havuz Niteliklerini Silmeyi Onayla"
msgid "Confirm Delete Queue"
msgid_plural "Confirm Delete queues"
msgstr[0] "Kuyruk Silmeyi Onayla"
msgstr[1] "Kuyrukları Silmeyi Onayla"
msgid "Confirmed"
msgstr "Onaylandı"
msgid "Create"
msgstr "Oluştur"
msgid "Create Pool"
msgstr "Havuz Oluştur"
msgid "Create Pool Flavor"
msgstr "Havuz Niteliği Oluştur"
msgid "Create Queue"
msgstr "Kuyruk Oluştur"
msgid "Create Queues"
msgstr "Kuyruklar Oluştur"
msgid "Create Subscription"
msgstr "Abonelik Oluştur"
msgid "Delete"
msgstr "Sil"
msgid "Delete Pool"
msgid_plural "Delete Pools"
msgstr[0] "Havuzu Sil"
msgstr[1] "Havuzları Sil"
msgid "Delete Pool Flavor"
msgid_plural "Delete Pool Flavors"
msgstr[0] "Havuz Niteliğini Sil"
msgstr[1] "Havuz Niteliklerini Sil"
msgid "Delete Pool Flavors"
msgstr "Havuz Niteliklerini Sil"
msgid "Delete Pools"
msgstr "Havuzları Sil"
msgid "Delete Queue"
msgid_plural "Delete Queues"
msgstr[0] "Kuyruğu Sil"
msgstr[1] "Kuyrukları Sil"
msgid "Delete Queues"
msgstr "Kuyrukları Sil"
#, python-format
msgid "Deleted Pool Flavor: %s."
msgid_plural "Deleted Pool Flavors: %s."
msgstr[0] "Havuz Niteliği Silindi: %s."
msgstr[1] "Havuz Nitelikleri Silindi: %s."
#, python-format
msgid "Deleted Pool: %s."
msgid_plural "Deleted Pools: %s."
msgstr[0] "Havuz Silindi: %s."
msgstr[1] "Havuzlar Silindi: %s."
#, python-format
msgid "Deleted Queue: %s."
msgid_plural "Deleted Queues: %s."
msgstr[0] "Kuyruk Silindi: %s."
msgstr[1] "Kuyruklar Silindi: %s."
msgid "Describes flavor-specific capabilities in YAML format."
msgstr "Niteliğe-özel yetenekleri YAML biçiminde tanımlar."
msgid "Enter a queue name"
msgstr "Bir kuyruk ismi girin"
msgid "Enter a subscriber"
msgstr "Bir abone girin"
msgid "Free Messages"
msgstr "Bağımsız İletiler"
msgid "Group"
msgstr "Grup"
msgid "Group of the pool."
msgstr "Havuzun grubu."
msgid "Messages"
msgstr "İletiler"
msgid "Name"
msgstr "İsim"
msgid "Name of the flavor."
msgstr "Nitelik adı."
msgid "Name of the pool."
msgstr "Havuz ismi."
msgid ""
"Note that you can create a queue without defining metadata.\n"
" The metadata step is optional but recommended."
msgstr ""
"Metaveri tanımlamadan kuyruk oluşturabileceğinizi unutmayın.\n"
"Metaveri adımı tavsiye edilir ama isteğe bağlıdır."
msgid "Note that you can create a subscription without defining options."
msgstr "Seçenekleri belirtmeden abonelik oluşturabileceğinizi unutmayın."
msgid "Options"
msgstr "Seçenekler"
msgid "Pool"
msgstr "Havuz"
#, python-format
msgid "Pool %s was successfully created."
msgstr "Havuz %s başarıyla oluşturuldu."
#, python-format
msgid "Pool %s was successfully updated."
msgstr "Havuz %s başarıyla güncellendi."
msgid "Pool Flavor"
msgstr "Havuz Niteliği"
msgid "Pool Flavors"
msgstr "Havuz Nitelikleri"
msgid "Pool Group"
msgstr "Havuz Grubu"
#, python-format
msgid "Pool flavor %s was successfully created."
msgstr "Havuz niteliği %s başarıyla oluşturuldu."
#, python-format
msgid "Pool flavor %s was successfully updated."
msgstr "Havuz niteliği %s başarıyla güncellendi."
msgid "Pool group for flavor."
msgstr "Nitelik için havuz grubu."
msgid "Pools"
msgstr "Havuzlar"
msgid "Purge"
msgstr "Temizle"
msgid "Purge Queue"
msgstr "Kuyruğu Temizle"
#, python-format
msgid "Queue %s has been purged successfully."
msgstr "Kuyruk %s başarıyla temizlendi."
#, python-format
msgid "Queue %s was successfully created."
msgstr "Kuyruk %s başarıyla oluşturuldu."
#, python-format
msgid "Queue %s was successfully updated."
msgstr "Kuyruk %s başarıyla güncellendi."
msgid "Queue Details"
msgstr "Kuyruk Ayrıntıları"
msgid "Queue Metadata"
msgstr "Kuyruk Metaverisi"
msgid "Queue Name"
msgstr "Kuyruk İsmi"
msgid "Queues"
msgstr "Kuyruklar"
#, python-format
msgid "Removed %(subscriber)s subscriber from the %(queue)s queue."
msgstr "%(subscriber)s abonesi %(queue)s kuyruğundan çıkarıldı."
msgid "Subscriber"
msgstr "Abone"
msgid "Subscribers must be in the form of mailto, HTTP, or HTTPS."
msgstr "Aboneler mailto, HTTP, veya HTTPS biçiminde olmalı."
msgid "Subscription"
msgstr "Abonelik"
#, python-format
msgid "Subscription %s was successfully created."
msgstr "%s aboneliği başarıyla oluşturuldu."
msgid "Subscriptions"
msgstr "Abonelikler"
msgid "The TTL for a subscription must be at least 60 seconds long."
msgstr "Bir abonelik için TTL en az 60 sn uzunluğunda olmalı."
msgid "Time To Live"
msgstr "Yaşam Süresi"
msgid "Time to Live"
msgstr "Yaşama Süresi"
msgid "Total Messages"
msgstr "Toplam İleti"
msgid "URI"
msgstr "URI"
msgid "URI for storage engine of this pool."
msgstr "Bu havuzun depolama motoru için URI."
msgid "Unable to add subscription."
msgstr "Abonelik eklenemedi."
msgid "Unable to create the flavor."
msgstr "Nitelik oluşturulamadı."
msgid "Unable to create the pool."
msgstr "Havuz oluşturulamadı."
msgid "Unable to create the queue."
msgstr "Kuyruk oluşturulamadı."
#, python-format
msgid "Unable to delete Pool Flavor: %s."
msgid_plural "Unable to delete Pool Flavors: %s."
msgstr[0] "Havuz Niteliği silinemiyor: %s."
msgstr[1] "Havuz Nitelikleri silinemiyor: %s."
#, python-format
msgid "Unable to delete Pool: %s."
msgid_plural "Unable to delete Pools: %s."
msgstr[0] "Havuz silinemedi: %s."
msgstr[1] "Havuzlar silinemedi: %s."
#, python-format
msgid "Unable to delete Queue: %s."
msgid_plural "Unable to delete Queues: %s."
msgstr[0] "Kuyruk silinemiyor: %s."
msgstr[1] "Kuyruklar silinemiyor: %s."
msgid "Unable to delete subscription."
msgstr "Abonelik silinemedi."
msgid "Unable to purge the queue."
msgstr "Kuyruk temizlenemedi."
msgid "Unable to retrieve the Queue."
msgstr "Kuyruk alınamadı."
msgid "Unable to retrieve the Queues."
msgstr "Kuyruklar alınamadı."
msgid "Unable to retrieve the flavor."
msgstr "Nitelik alınamadı."
msgid "Unable to retrieve the flavors."
msgstr "Nitelikler alınamadı."
msgid "Unable to retrieve the pool."
msgstr "Havuz alınamadı."
msgid "Unable to retrieve the pools."
msgstr "Havuzlar alınamadı."
msgid "Unable to update the flavor."
msgstr "Nitelik güncellenemedi."
msgid "Unable to update the pool."
msgstr "Havuz güncellenemedi."
msgid "Unable to update the queue."
msgstr "Kuyruk güncellenemedi."
msgid "Update"
msgstr "Güncelle"
msgid "Update Pool"
msgstr "Havuzu Güncelle"
msgid "Update Pool Flavor"
msgstr "Havuz Niteliğini Güncelle"
msgid "Update Queue"
msgstr "Kuyruğu Güncelle"
msgid "Weight"
msgstr "Ağırlık"
msgid "Weight of the pool."
msgstr "Havuz ağırlığı."
#, python-format
msgid "You are not allowed to delete pool flavors: %s"
msgstr "Havuz niteliklerini silme yetkiniz yok: %s"
#, python-format
msgid "You are not allowed to delete pools: %s"
msgstr "Havuzları silme yetkiniz yok: %s"
#, python-format
msgid "You are not allowed to delete queues: %s"
msgstr "Kuyruk silme yetkiniz yok: %s"
#, python-format
msgid "You have selected \"%s\". Deleted Pool Flavor is not recoverable."
msgid_plural ""
"You have selected \"%s\". Deleted Pool Flavors are not recoverable."
msgstr[0] "\"%s\" seçtiniz. Silinen Havuz Niteliği geri getirilemez."
msgstr[1] "\"%s\" seçtiniz. Silinen Havuz Nitelikleri geri getirilemez."
#, python-format
msgid "You have selected \"%s\". Deleted Pool is not recoverable."
msgid_plural "You have selected \"%s\". Deleted Pools are not recoverable."
msgstr[0] "\"%s\" seçtiniz. Silinen Havuz geri alınamaz."
msgstr[1] "\"%s\" seçtiniz. Silinen Havuzlar geri alınamaz."
#, python-format
msgid "You have selected \"%s\". Deleted queue is not recoverable."
msgid_plural "You have selected \"%s\". Deleted queues are not recoverable."
msgstr[0] "\"%s\" seçtiniz. Silinen kuyruk geri getirilemez."
msgstr[1] "\"%s\" seçtiniz. Silinen kuyruklar geri getirilemez."
msgid ""
"You must specify one of the pool groups that is configured in storage pools."
msgstr ""
"Depolama havuzlarında yapılandırılmış havuz gruplarından birini "
"belirtmelisiniz."
msgid "e.g. mongodb://127.0.0.1:27017"
msgstr "örn. mongodb://127.0.0.1:27017"

View File

@ -1,31 +0,0 @@
# liujunpeng <liujunpeng@inspur.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 2.0.1.dev18\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-03-08 02: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-02-10 03:39+0000\n"
"Last-Translator: liujunpeng <liujunpeng@inspur.com>\n"
"Language-Team: Chinese (China)\n"
"Language: zh-CN\n"
"X-Generator: Zanata 3.9.6\n"
"Plural-Forms: nplurals=1; plural=0\n"
msgid "Messaging"
msgstr "消息"
msgid "Pool Flavors"
msgstr "池类型"
msgid "Pools"
msgstr "池"
msgid "Queues"
msgstr "队列"
#, python-format
msgid "The specified input is not a valid YAML format: %s"
msgstr "给的的输入不是有效的YAML格式%s"

View File

@ -1,340 +0,0 @@
# Linda <duleish@cn.ibm.com>, 2016. #zanata
# hanchao <han.chaoB@h3c.com>, 2016. #zanata
# zenglulu <zengluul@gmail.com>, 2016. #zanata
# liujunpeng <liujunpeng@inspur.com>, 2017. #zanata
msgid ""
msgstr ""
"Project-Id-Version: zaqar-ui 2.0.1.dev18\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
"POT-Creation-Date: 2017-03-08 02: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-02-10 03:41+0000\n"
"Last-Translator: liujunpeng <liujunpeng@inspur.com>\n"
"Language-Team: Chinese (China)\n"
"Language: zh-CN\n"
"X-Generator: Zanata 3.9.6\n"
"Plural-Forms: nplurals=1; plural=0\n"
msgid "A queue name between 1-256 characters is required."
msgstr "队列名称必须为1~256字符之间。 "
msgid "Actions"
msgstr "行为。"
msgid ""
"An optional request component related to storage-specific options in YAML "
"format."
msgstr "在YAML格式中一个可选请求组件与指定存储选项有关。"
msgid "Capabilities"
msgstr "容量"
msgid "Claimed Messages"
msgstr "声明消息"
msgid "Confirm Delete Pool"
msgid_plural "Confirm Delete Pools"
msgstr[0] "确认删除池"
msgid "Confirm Delete Pool Flavor"
msgid_plural "Confirm Delete Pool Flavors"
msgstr[0] "确认删除类型"
msgid "Confirm Delete Queue"
msgid_plural "Confirm Delete queues"
msgstr[0] "确认删除队列。"
msgid "Create"
msgstr "已创建"
msgid "Create Pool"
msgstr "创建池"
msgid "Create Pool Flavor"
msgstr "创建类型池"
msgid "Create Queue"
msgstr "创建队列。"
msgid "Create Queues"
msgstr "创建队列。"
msgid "Create Subscription"
msgstr "新建订阅"
msgid "Delete"
msgstr "删除"
msgid "Delete Pool"
msgid_plural "Delete Pools"
msgstr[0] "删除池"
msgid "Delete Pool Flavor"
msgid_plural "Delete Pool Flavors"
msgstr[0] "类型池"
msgid "Delete Pool Flavors"
msgstr "删除类型池"
msgid "Delete Pools"
msgstr "删除池"
msgid "Delete Queue"
msgid_plural "Delete Queues"
msgstr[0] "删除队列。"
msgid "Delete Queues"
msgstr "删除队列。"
#, python-format
msgid "Deleted Pool Flavor: %s."
msgid_plural "Deleted Pool Flavors: %s."
msgstr[0] "删除类型: %s."
#, python-format
msgid "Deleted Pool: %s."
msgid_plural "Deleted Pools: %s."
msgstr[0] "删除池:%s。"
#, python-format
msgid "Deleted Queue: %s."
msgid_plural "Deleted Queues: %s."
msgstr[0] "删除队列: %s。"
msgid "Describes flavor-specific capabilities in YAML format."
msgstr "以YAML格式描述指定类型的容量。"
msgid "Enter a queue name"
msgstr "输入队列名称。"
msgid "Enter a subscriber"
msgstr "输入一个订阅者"
msgid "Free Messages"
msgstr "免费消息"
msgid "Group"
msgstr "组"
msgid "Group of the pool."
msgstr "池组。"
msgid "Name"
msgstr "名字"
msgid "Name of the flavor."
msgstr "类型名"
msgid "Name of the pool."
msgstr "池的名称。"
msgid ""
"Note that you can create a queue without defining metadata.\n"
" The metadata step is optional but recommended."
msgstr ""
"请注意您已完成创建队列操作,该队列未定义元数据。\n"
" 定义元数据为可选操作,但推荐为您创建的队列应以元数据。"
msgid "Note that you can create a subscription without defining options."
msgstr "请注意,您可以创建一个不带任何选项的订阅。"
msgid "Options"
msgstr "选项"
msgid "Pool"
msgstr "池"
#, python-format
msgid "Pool %s was successfully created."
msgstr "更新池%s 成功。"
#, python-format
msgid "Pool %s was successfully updated."
msgstr "已成功更新池 %s。"
msgid "Pool Flavor"
msgstr "类型池"
msgid "Pool Flavors"
msgstr "类型池"
msgid "Pool Group"
msgstr "池组"
#, python-format
msgid "Pool flavor %s was successfully created."
msgstr "创建类型池 %s 成功。"
#, python-format
msgid "Pool flavor %s was successfully updated."
msgstr "类型%s 更新成功。"
msgid "Pool group for flavor."
msgstr "型的池组。"
msgid "Pools"
msgstr "池"
#, python-format
msgid "Queue %s was successfully created."
msgstr "创建队列 %s成功。"
#, python-format
msgid "Queue %s was successfully updated."
msgstr "修改队列%s成功。"
msgid "Queue Details"
msgstr "队列详情。"
msgid "Queue Metadata"
msgstr "队列元数据。"
msgid "Queue Name"
msgstr "队列名称。"
msgid "Queues"
msgstr "队列"
#, python-format
msgid "Removed %(subscriber)s subscriber from the %(queue)s queue."
msgstr "将订阅者 %(subscriber)s从队列 %(queue)s中移除。 "
msgid "Subscriber"
msgstr "订阅者"
msgid "Subscribers must be in the form of mailto, HTTP, or HTTPS."
msgstr "订阅者必须为mailto、HTTP或HTTPS的格式。"
msgid "Subscription"
msgstr "订阅"
#, python-format
msgid "Subscription %s was successfully created."
msgstr "新建订阅%s 成功。"
msgid "The TTL for a subscription must be at least 60 seconds long."
msgstr "一次订阅的生存时间必须至少为60s时长。"
msgid "Time To Live"
msgstr "生存时间"
msgid "Time to Live"
msgstr "生存时间"
msgid "Total Messages"
msgstr "消息总计。"
msgid "URI"
msgstr "URI"
msgid "URI for storage engine of this pool."
msgstr "池存储引擎的URI"
msgid "Unable to add subscription."
msgstr "无法添加订阅。"
msgid "Unable to create the flavor."
msgstr "无法创建类型。"
msgid "Unable to create the pool."
msgstr "无法创建池。"
msgid "Unable to create the queue."
msgstr "无法创建队列。"
#, python-format
msgid "Unable to delete Pool Flavor: %s."
msgid_plural "Unable to delete Pool Flavors: %s."
msgstr[0] "不能删除类型:%s。"
#, python-format
msgid "Unable to delete Pool: %s."
msgid_plural "Unable to delete Pools: %s."
msgstr[0] "不能删除池:%s。"
#, python-format
msgid "Unable to delete Queue: %s."
msgid_plural "Unable to delete Queues: %s."
msgstr[0] "无法删除队列: %s。"
msgid "Unable to delete subscription."
msgstr "无法删除订阅。"
msgid "Unable to retrieve the Queues."
msgstr "无法检索队列。"
msgid "Unable to retrieve the flavor."
msgstr "无法获取类型。"
msgid "Unable to retrieve the flavors."
msgstr "无法获取类型。"
msgid "Unable to retrieve the pool."
msgstr "无法获取池。"
msgid "Unable to retrieve the pools."
msgstr "无法获取池。"
msgid "Unable to update the flavor."
msgstr "无法更新类型。"
msgid "Unable to update the pool."
msgstr "无法更新池。"
msgid "Unable to update the queue."
msgstr "无法更新此队列。"
msgid "Update"
msgstr "更新"
msgid "Update Pool"
msgstr "更新池"
msgid "Update Pool Flavor"
msgstr "更新类型池"
msgid "Update Queue"
msgstr "修改队列。"
msgid "Weight"
msgstr "权重"
msgid "Weight of the pool."
msgstr "池的权重。"
#, python-format
msgid "You are not allowed to delete pool flavors: %s"
msgstr "你不被允许删除类型池:%s"
#, python-format
msgid "You are not allowed to delete pools: %s"
msgstr "您不被允许删除池:%s"
#, python-format
msgid "You are not allowed to delete queues: %s"
msgstr "您不被允许删除这些队列:%s"
#, python-format
msgid "You have selected \"%s\". Deleted Pool Flavor is not recoverable."
msgid_plural ""
"You have selected \"%s\". Deleted Pool Flavors are not recoverable."
msgstr[0] "已选择 \"%s\"。删除类型不可恢复。"
#, python-format
msgid "You have selected \"%s\". Deleted Pool is not recoverable."
msgid_plural "You have selected \"%s\". Deleted Pools are not recoverable."
msgstr[0] "已选择 \"%s\"。删除池操作将不可恢复。"
#, python-format
msgid "You have selected \"%s\". Deleted queue is not recoverable."
msgid_plural "You have selected \"%s\". Deleted queues are not recoverable."
msgstr[0] "已选择 \"%s\"。删除队列操作将不可恢复。"
msgid ""
"You must specify one of the pool groups that is configured in storage pools."
msgstr "你必须指定一个在存储池中配置的池组。"
msgid "e.g. mongodb://127.0.0.1:27017"
msgstr "比如 mongodb://127.0.0.1:27017"

View File

@ -1,191 +0,0 @@
/**
* Copyright 2015 Catalyst IT Ltd.
*
* 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.app.core.openstack-service-api')
.factory('horizon.app.core.openstack-service-api.zaqar', ZaqarAPI);
ZaqarAPI.$inject = [
'horizon.framework.util.http.service',
'horizon.framework.widgets.toast.service'
];
function ZaqarAPI(apiService, toast) {
var queuePath = '/api/zaqar/queues/';
var msgPath = '/api/zaqar/queues/%s/messages/';
var subPath = '/api/zaqar/queues/%s/subscriptions/';
var poolPath = '/api/zaqar/pools/';
var flavorPath = '/api/zaqar/flavors/';
var service = {
getQueues: getQueues,
getQueue: getQueue,
createQueue: createQueue,
deleteQueue: deleteQueue,
updateQueue: updateQueue,
purgeQueue: purgeQueue,
postMessages: postMessages,
getMessages: getMessages,
signedUrl: signedUrl,
getSubscriptions: getSubscriptions,
addSubscription: addSubscription,
deleteSubscription: deleteSubscription,
getPools: getPools,
getPool: getPool,
createPool: createPool,
deletePool: deletePool,
updatePool: updatePool,
getFlavors: getFlavors,
getFlavor: getFlavor,
createFlavor: createFlavor,
deleteFlavor: deleteFlavor,
updateFlavor: updateFlavor
};
return service;
//////////
function getQueues() {
var msg = gettext('Unable to retrieve the Queues.');
return apiService.get(queuePath).error(error(msg));
}
function getQueue(queueName) {
var msg = gettext('Unable to retrieve the Queue.');
return apiService.get(queuePath + queueName).error(error(msg));
}
function createQueue(newQueue) {
var msg = gettext('Unable to create the queue.');
return apiService.put(queuePath, newQueue).error(error(msg));
}
function deleteQueue(queueName) {
return apiService.delete(queuePath, [queueName]);
}
function updateQueue(queue) {
var msg = gettext('Unable to update the queue.');
var url = queuePath + queue.queue_name;
var form = { metadata: queue.metadata };
return apiService.post(url, form).error(error(msg));
}
function purgeQueue(queueName, resourceTypes) {
var msg = gettext('Unable to purge the queue.');
var url = queuePath + queueName + '/purge';
var form = resourceTypes;
return apiService.post(url, form).error(error(msg));
}
function getMessages(queueName) {
var url = interpolate(msgPath, [queueName]);
return apiService.get(url);
}
function postMessages(queueName, msgs) {
var msg = gettext('Unable to post messages.');
var url = interpolate(msgPath, [queueName]);
return apiService.post(url, msgs).error(error(msg));
}
function signedUrl(queueName, form) {
var msg = gettext('Unable to create signed URL.');
var url = queuePath + queueName + '/share';
return apiService.post(url, form).error(error(msg));
}
function getSubscriptions(queue) {
var url = interpolate(subPath, [queue.name]);
return apiService.get(url);
}
function addSubscription(sub) {
var msg = gettext('Unable to add subscription.');
var url = interpolate(subPath, [sub.queueName]);
return apiService.put(url, sub).error(error(msg));
}
function deleteSubscription(queueName, subscription) {
var msg = gettext('Unable to delete subscription.');
var url = interpolate(subPath, [queueName]);
return apiService.delete(url, subscription).error(error(msg));
}
function getPools() {
var msg = gettext('Unable to retrieve the pools.');
return apiService.get(poolPath).error(error(msg));
}
function getPool(poolName) {
var msg = gettext('Unable to retrieve the pool.');
var url = poolPath + poolName;
return apiService.get(url).error(error(msg));
}
function createPool(newPool) {
var msg = gettext('Unable to create the pool.');
return apiService.put(poolPath, newPool).error(error(msg));
}
function deletePool(poolName) {
return apiService.delete(poolPath, [poolName]);
}
function updatePool(pool) {
var msg = gettext('Unable to update the pool.');
var url = poolPath + pool.name;
return apiService.post(url, pool).error(error(msg));
}
function getFlavors() {
var msg = gettext('Unable to retrieve the flavors.');
return apiService.get(flavorPath).error(error(msg));
}
function getFlavor(flavorName) {
var msg = gettext('Unable to retrieve the flavor.');
var url = flavorPath + flavorName;
return apiService.get(url).error(error(msg));
}
function createFlavor(newFlavor) {
var msg = gettext('Unable to create the flavor.');
return apiService.put(flavorPath, newFlavor).error(error(msg));
}
function deleteFlavor(flavorName) {
return apiService.delete(flavorPath, [flavorName]);
}
function updateFlavor(flavor) {
var msg = gettext('Unable to update the flavor.');
var url = flavorPath + flavor.name;
return apiService.post(url, flavor).error(error(msg));
}
function error(message) {
return function() {
toast.add('error', message);
};
}
}
}());

View File

@ -1,86 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc overview
* @ngname horizon.dashboard.admin.pool-flavors.actions
*
* @description
* Provides all of the actions for pool flavors.
*/
angular.module('horizon.dashboard.admin.pool-flavors.actions', [
'horizon.framework.conf',
'horizon.dashboard.admin.pool-flavors'
])
.run(registerPoolFlavorActions);
registerPoolFlavorActions.$inject = [
'horizon.framework.conf.resource-type-registry.service',
'horizon.dashboard.admin.pool-flavors.actions.create.service',
'horizon.dashboard.admin.pool-flavors.actions.delete.service',
'horizon.dashboard.admin.pool-flavors.actions.update.service',
'horizon.dashboard.admin.pool-flavors.resourceType'
];
function registerPoolFlavorActions(
registry,
createPoolFlavorService,
deletePoolFlavorService,
updatePoolFlavorService,
flavorResourceType
) {
var resourceType = registry.getResourceType(flavorResourceType);
resourceType.globalActions
.append({
id: 'createPoolFlavorAction',
service: createPoolFlavorService,
template: {
text: gettext('Create Pool Flavor'),
type: 'create'
}
});
resourceType.batchActions
.append({
id: 'batchDeletePoolFlavorAction',
service: deletePoolFlavorService,
template: {
type: 'delete-selected',
text: gettext('Delete Pool Flavors')
}
});
resourceType.itemActions
.append({
id: 'updatePoolFlavorAction',
service: updatePoolFlavorService,
template: {
text: gettext('Update Pool Flavor'),
type: 'row'
}
})
.append({
id: 'deletePoolFlavorAction',
service: deletePoolFlavorService,
template: {
text: gettext('Delete Pool Flavor'),
type: 'delete'
}
});
}
})();

View File

@ -1,84 +0,0 @@
/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc factory
* @name horizon.dashboard.admin.pool-flavors.actions.create.service
* @description
* Service for the pool flavor create modal
*/
angular
.module('horizon.dashboard.admin.pool-flavors.actions')
.factory('horizon.dashboard.admin.pool-flavors.actions.create.service', createService);
createService.$inject = [
'horizon.app.core.openstack-service-api.policy',
'horizon.app.core.openstack-service-api.zaqar',
'horizon.dashboard.admin.pool-flavors.actions.workflow',
'horizon.dashboard.admin.pool-flavors.resourceType',
'horizon.framework.util.actions.action-result.service',
'horizon.framework.util.i18n.gettext',
'horizon.framework.util.q.extensions',
'horizon.framework.widgets.form.ModalFormService',
'horizon.framework.widgets.toast.service'
];
function createService(
policy, zaqar, workflow, resourceType,
actionResult, gettext, $qExtensions, modal, toast
) {
var message = {
success: gettext('Pool flavor %s was successfully created.')
};
var service = {
initAction: initAction,
perform: perform,
allowed: allowed
};
return service;
//////////////
function initAction() {
}
function perform() {
var title, submitText;
title = gettext('Create Pool Flavor');
submitText = gettext('Create');
var config = workflow.init('create', title, submitText);
return modal.open(config).then(submit);
}
function allowed() {
return policy.ifAllowed({ rules: [['pool_flavor', 'add_flavor']] });
}
function submit(context) {
return zaqar.createFlavor(context.model, true).then(success, true);
}
function success(response) {
toast.add('success', interpolate(message.success, [response.data.id]));
var result = actionResult.getActionResult().created(resourceType, response.data.name);
return result.result;
}
}
})();

View File

@ -1,138 +0,0 @@
/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use self 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 factory
* @name horizon.dashboard.admin.pool-flavors.actions.delete.service
* @Description
* Brings up the delete pool flavors confirmation modal dialog.
* On submit, delete given pool flavors.
* On cancel, do nothing.
*/
angular
.module('horizon.dashboard.admin.pool-flavors.actions')
.factory('horizon.dashboard.admin.pool-flavors.actions.delete.service', deleteService);
deleteService.$inject = [
'$q',
'horizon.app.core.openstack-service-api.policy',
'horizon.app.core.openstack-service-api.zaqar',
'horizon.dashboard.admin.pool-flavors.resourceType',
'horizon.framework.util.actions.action-result.service',
'horizon.framework.util.i18n.gettext',
'horizon.framework.util.q.extensions',
'horizon.framework.widgets.modal.deleteModalService',
'horizon.framework.widgets.toast.service'
];
function deleteService(
$q, policy, zaqar, resourceType, actionResult, gettext, $qExtensions,
deleteModal, toast
) {
var scope, context;
var notAllowedMessage = gettext("You are not allowed to delete pool flavors: %s");
var service = {
initAction: initAction,
allowed: allowed,
perform: perform
};
return service;
//////////////
function initAction() {
context = { };
}
function perform(items, newScope) {
scope = newScope;
var flavors = angular.isArray(items) ? items : [items];
context.labels = labelize(flavors.length);
context.deleteEntity = deleteFlavor;
return $qExtensions.allSettled(flavors.map(checkPermission)).then(afterCheck);
}
function allowed() {
return policy.ifAllowed({ rules: [['pool_flavor', 'delete_flavor']] });
}
function checkPermission(flavor) {
return {promise: allowed(), context: flavor};
}
function afterCheck(result) {
var outcome = $q.reject(); // Reject the promise by default
if (result.fail.length > 0) {
toast.add('error', getMessage(notAllowedMessage, result.fail));
outcome = $q.reject(result.fail);
}
if (result.pass.length > 0) {
outcome = deleteModal.open(scope, result.pass.map(getEntity), context).then(createResult);
}
return outcome;
}
function createResult(deleteModalResult) {
var result = actionResult.getActionResult();
deleteModalResult.pass.forEach(function markDeleted(item) {
result.deleted(resourceType, getEntity(item).name);
});
deleteModalResult.fail.forEach(function markFailed(item) {
result.failed(resourceType, getEntity(item).name);
});
return result.result;
}
function labelize(count) {
return {
title: ngettext(
'Confirm Delete Pool Flavor',
'Confirm Delete Pool Flavors', count),
message: ngettext(
'You have selected "%s". Deleted Pool Flavor is not recoverable.',
'You have selected "%s". Deleted Pool Flavors are not recoverable.', count),
submit: ngettext(
'Delete Pool Flavor',
'Delete Pool Flavors', count),
success: ngettext(
'Deleted Pool Flavor: %s.',
'Deleted Pool Flavors: %s.', count),
error: ngettext(
'Unable to delete Pool Flavor: %s.',
'Unable to delete Pool Flavors: %s.', count)
};
}
function deleteFlavor(flavor) {
return zaqar.deleteFlavor(flavor, true);
}
function getMessage(message, entities) {
return interpolate(message, [entities.map(getName).join(", ")]);
}
function getName(result) {
return getEntity(result).name;
}
function getEntity(result) {
return result.context;
}
}
})();

View File

@ -1,93 +0,0 @@
/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc factory
* @name horizon.dashboard.admin.pool-flavors.actions.update.service
* @description
* Service for the pool flavor update modal
*/
angular
.module('horizon.dashboard.admin.pool-flavors.actions')
.factory('horizon.dashboard.admin.pool-flavors.actions.update.service', updateService);
updateService.$inject = [
'horizon.app.core.openstack-service-api.policy',
'horizon.app.core.openstack-service-api.zaqar',
'horizon.dashboard.admin.pool-flavors.actions.workflow',
'horizon.dashboard.admin.pool-flavors.resourceType',
'horizon.framework.util.actions.action-result.service',
'horizon.framework.util.i18n.gettext',
'horizon.framework.util.q.extensions',
'horizon.framework.widgets.form.ModalFormService',
'horizon.framework.widgets.toast.service'
];
function updateService(
policy, zaqar, workflow, resourceType,
actionResult, gettext, $qExtensions, modal, toast
) {
var message = {
success: gettext('Pool flavor %s was successfully updated.')
};
var service = {
initAction: initAction,
perform: perform,
allowed: allowed
};
return service;
//////////////
function initAction() {
}
function perform(selected) {
var title, submitText;
title = gettext('Update Pool Flavor');
submitText = gettext('Update');
var config = workflow.init('update', title, submitText);
// load current data
zaqar.getFlavor(selected.name).then(onLoad);
function onLoad(response) {
config.model.name = response.data.name;
config.model.pool_group = response.data.pool_group;
config.model.capabilities = response.data.capabilities;
}
return modal.open(config).then(submit);
}
function allowed() {
return policy.ifAllowed({ rules: [['pool_flavor', 'update_flavor']] });
}
function submit(context) {
return zaqar.updateFlavor(context.model, true).then(success, true);
}
function success(response) {
toast.add('success', interpolate(message.success, [response.data.name]));
var result = actionResult.getActionResult().updated(resourceType, response.data.name);
return result.result;
}
}
})();

View File

@ -1,120 +0,0 @@
/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc factory
* @name horizon.dashboard.admin.pool-flavors.actions.workflow
* @description
* Workflow for creating/updating storage pool flavor
*/
angular
.module('horizon.dashboard.admin.pool-flavors.actions')
.factory('horizon.dashboard.admin.pool-flavors.actions.workflow', workflow);
workflow.$inject = [
'horizon.framework.util.i18n.gettext'
];
function workflow(gettext) {
var workflow = {
init: init
};
function init(actionType, title, submitText) {
var schema, form, model;
var capabilitiesPlaceholder = gettext(
'Describes flavor-specific capabilities in YAML format.');
// schema
schema = {
type: 'object',
properties: {
name: {
title: gettext('Name'),
type: 'string'
},
pool_group: {
title: gettext('Pool Group'),
type: 'string'
},
capabilities: {
title: gettext('Capabilities'),
type: 'string'
}
}
};
// form
form = [
{
type: 'section',
htmlClass: 'row',
items: [
{
type: 'section',
htmlClass: 'col-sm-6',
items: [
{
key: 'name',
placeholder: gettext('Name of the flavor.'),
required: true,
"readonly": actionType === 'update'
},
{
key: 'pool_group',
placeholder: gettext('Pool group for flavor.'),
/* eslint-disable max-len */
description: gettext('You must specify one of the pool groups that is configured in storage pools.'),
required: true
}
]
},
{
type: 'section',
htmlClass: 'col-sm-6',
items: [
{
key: 'capabilities',
type: 'textarea',
placeholder: capabilitiesPlaceholder
}
]
}
]
}
]; // form
model = {
name: '',
pool_group: '',
capabilities: ''
};
var config = {
title: title,
submitText: submitText,
schema: schema,
form: form,
model: model
};
return config;
}
return workflow;
}
})();

View File

@ -1,5 +0,0 @@
<hz-resource-property-list
resource-type-name="OS::Zaqar::Flavors"
item="item"
property-groups="[['capabilities']]">
</hz-resource-property-list>

View File

@ -1,4 +0,0 @@
<hz-resource-panel resource-type-name="OS::Zaqar::Flavors">
<hz-resource-table resource-type-name="OS::Zaqar::Flavors" track-by="trackBy">
</hz-resource-table>
</hz-resource-panel>

View File

@ -1,101 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function () {
'use strict';
/**
* @ngdoc overview
* @name horizon.dashboard.admin.pool-flavors
* @description Flavors module for messaging pool.
*/
angular
.module('horizon.dashboard.admin.pool-flavors', [
'ngRoute',
'horizon.dashboard.admin.pool-flavors.actions'
])
.constant('horizon.dashboard.admin.pool-flavors.resourceType', 'OS::Zaqar::Flavors')
.run(run)
.config(config);
run.$inject = [
'horizon.app.core.openstack-service-api.zaqar',
'horizon.dashboard.admin.pool-flavors.basePath',
'horizon.dashboard.admin.pool-flavors.resourceType',
'horizon.dashboard.admin.pool-flavors.service',
'horizon.framework.conf.resource-type-registry.service'
];
function run(zaqar, basePath, resourceType, flavorsService, registry) {
registry.getResourceType(resourceType)
.setNames(gettext('Pool Flavor'), gettext('Pool Flavors'))
.setSummaryTemplateUrl(basePath + 'drawer.html')
.setProperties(flavorProperties())
.setListFunction(flavorsService.getFlavorsPromise)
.tableColumns
.append({
id: 'name',
priority: 1,
sortDefault: true
})
.append({
id: 'pool_group',
priority: 1
});
// for magic-search
registry.getResourceType(resourceType).filterFacets
.append({
label: gettext('Name'),
name: 'name',
singleton: true
})
.append({
label: gettext('Pool Group'),
name: 'pool_group',
singleton: true
});
}
function flavorProperties() {
return {
name: { label: gettext('Name'), filters: [] },
pool_group: { label: gettext('Pool Group'), filters: ['noName'] },
capabilities: { label: gettext('Capabilities'), filters: ['noValue'] }
};
}
config.$inject = [
'$provide',
'$windowProvider',
'$routeProvider'
];
/**
* @ndoc config
* @name horizon.dashboard.admin.pool-flavors.basePath
* @param {Object} $provide
* @param {Object} $windowProvider
* @param {Object} $routeProvider
* @returns {undefined} Returns nothing
* @description Base path for the pool-flavors panel
*/
function config($provide, $windowProvider, $routeProvider) {
var path = $windowProvider.$get().STATIC_URL + 'dashboard/admin/pool-flavors/';
$provide.constant('horizon.dashboard.admin.pool-flavors.basePath', path);
$routeProvider.when('/admin/pool_flavors', {
templateUrl: path + 'panel.html'
});
}
}());

View File

@ -1,4 +0,0 @@
textarea#capabilities {
height: 10em;
}

View File

@ -1,61 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function() {
"use strict";
angular
.module('horizon.dashboard.admin.pool-flavors')
.factory('horizon.dashboard.admin.pool-flavors.service', flavorsService);
flavorsService.$inject = [
'horizon.app.core.openstack-service-api.zaqar'
];
/*
* @ngdoc factory
* @name horizon.dashboard.admin.pool-flavors.service
*
* @description
* This service provides functions that are used through
* the Pool Flavors features.
*/
function flavorsService(zaqar) {
return {
getFlavorsPromise: getFlavorsPromise
};
/*
* @ngdoc function
* @name getFlavorsPromise
* @description
* Given filter/query parameters, returns a promise for the matching
* flavors. This is used in displaying lists of Pool Flavors.
*/
function getFlavorsPromise(params) {
return zaqar.getFlavors(params).then(modifyResponse);
}
function modifyResponse(response) {
return {data: {items: response.data.items.map(modifyItem)}};
function modifyItem(item) {
// we should set 'trackBy' as follows ideally.
// item.trackBy = item.id + item.updated_at;
var timestamp = new Date();
item.trackBy = item.name.concat(timestamp.getTime());
return item;
}
}
}
})();

View File

@ -1,86 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc overview
* @ngname horizon.dashboard.admin.pools.actions
*
* @description
* Provides all of the actions for pools.
*/
angular.module('horizon.dashboard.admin.pools.actions', [
'horizon.framework.conf',
'horizon.dashboard.admin.pools'
])
.run(registerPoolActions);
registerPoolActions.$inject = [
'horizon.framework.conf.resource-type-registry.service',
'horizon.dashboard.admin.pools.actions.create.service',
'horizon.dashboard.admin.pools.actions.delete.service',
'horizon.dashboard.admin.pools.actions.update.service',
'horizon.dashboard.admin.pools.resourceType'
];
function registerPoolActions(
registry,
createPoolService,
deletePoolService,
updatePoolService,
poolResourceType
) {
var resourceType = registry.getResourceType(poolResourceType);
resourceType.globalActions
.append({
id: 'createPoolAction',
service: createPoolService,
template: {
text: gettext('Create Pool'),
type: 'create'
}
});
resourceType.batchActions
.append({
id: 'batchDeletePoolAction',
service: deletePoolService,
template: {
type: 'delete-selected',
text: gettext('Delete Pools')
}
});
resourceType.itemActions
.append({
id: 'updatePoolAction',
service: updatePoolService,
template: {
text: gettext('Update Pool'),
type: 'row'
}
})
.append({
id: 'deletePoolAction',
service: deletePoolService,
template: {
text: gettext('Delete Pool'),
type: 'delete'
}
});
}
})();

View File

@ -1,84 +0,0 @@
/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc factory
* @name horizon.dashboard.admin.pools.actions.create.service
* @description
* Service for the storage pool create modal
*/
angular
.module('horizon.dashboard.admin.pools.actions')
.factory('horizon.dashboard.admin.pools.actions.create.service', createPoolService);
createPoolService.$inject = [
'horizon.app.core.openstack-service-api.policy',
'horizon.app.core.openstack-service-api.zaqar',
'horizon.dashboard.admin.pools.actions.workflow',
'horizon.dashboard.admin.pools.resourceType',
'horizon.framework.util.actions.action-result.service',
'horizon.framework.util.i18n.gettext',
'horizon.framework.util.q.extensions',
'horizon.framework.widgets.form.ModalFormService',
'horizon.framework.widgets.toast.service'
];
function createPoolService(
policy, zaqar, workflow, resourceType,
actionResult, gettext, $qExtensions, modal, toast
) {
var message = {
success: gettext('Pool %s was successfully created.')
};
var service = {
initAction: initAction,
perform: perform,
allowed: allowed
};
return service;
//////////////
function initAction() {
}
function perform() {
var title, submitText;
title = gettext('Create Pool');
submitText = gettext('Create');
var config = workflow.init('create', title, submitText);
return modal.open(config).then(submit);
}
function allowed() {
return policy.ifAllowed({ rules: [['pool', 'add_pool']] });
}
function submit(context) {
return zaqar.createPool(context.model, true).then(success, true);
}
function success(response) {
toast.add('success', interpolate(message.success, [response.data.id]));
var result = actionResult.getActionResult().created(resourceType, response.data.name);
return result.result;
}
}
})();

View File

@ -1,138 +0,0 @@
/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use self 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 factory
* @name horizon.dashboard.admin.pools.actions.delete.service
* @Description
* Brings up the delete pools confirmation modal dialog.
* On submit, delete given pools.
* On cancel, do nothing.
*/
angular
.module('horizon.dashboard.admin.pools.actions')
.factory('horizon.dashboard.admin.pools.actions.delete.service', deleteService);
deleteService.$inject = [
'$q',
'horizon.app.core.openstack-service-api.policy',
'horizon.app.core.openstack-service-api.zaqar',
'horizon.dashboard.admin.pools.resourceType',
'horizon.framework.util.actions.action-result.service',
'horizon.framework.util.i18n.gettext',
'horizon.framework.util.q.extensions',
'horizon.framework.widgets.modal.deleteModalService',
'horizon.framework.widgets.toast.service'
];
function deleteService(
$q, policy, zaqar, resourceType, actionResult, gettext, $qExtensions,
deleteModal, toast
) {
var scope, context;
var notAllowedMessage = gettext("You are not allowed to delete pools: %s");
var service = {
initAction: initAction,
allowed: allowed,
perform: perform
};
return service;
//////////////
function initAction() {
context = { };
}
function perform(items, newScope) {
scope = newScope;
var pools = angular.isArray(items) ? items : [items];
context.labels = labelize(pools.length);
context.deleteEntity = deletePool;
return $qExtensions.allSettled(pools.map(checkPermission)).then(afterCheck);
}
function allowed() {
return policy.ifAllowed({ rules: [['pool', 'delete_pool']] });
}
function checkPermission(pool) {
return {promise: allowed(), context: pool};
}
function afterCheck(result) {
var outcome = $q.reject(); // Reject the promise by default
if (result.fail.length > 0) {
toast.add('error', getMessage(notAllowedMessage, result.fail));
outcome = $q.reject(result.fail);
}
if (result.pass.length > 0) {
outcome = deleteModal.open(scope, result.pass.map(getEntity), context).then(createResult);
}
return outcome;
}
function createResult(deleteModalResult) {
var result = actionResult.getActionResult();
deleteModalResult.pass.forEach(function markDeleted(item) {
result.deleted(resourceType, getEntity(item).name);
});
deleteModalResult.fail.forEach(function markFailed(item) {
result.failed(resourceType, getEntity(item).name);
});
return result.result;
}
function labelize(count) {
return {
title: ngettext(
'Confirm Delete Pool',
'Confirm Delete Pools', count),
message: ngettext(
'You have selected "%s". Deleted Pool is not recoverable.',
'You have selected "%s". Deleted Pools are not recoverable.', count),
submit: ngettext(
'Delete Pool',
'Delete Pools', count),
success: ngettext(
'Deleted Pool: %s.',
'Deleted Pools: %s.', count),
error: ngettext(
'Unable to delete Pool: %s.',
'Unable to delete Pools: %s.', count)
};
}
function deletePool(pool) {
return zaqar.deletePool(pool, true);
}
function getMessage(message, entities) {
return interpolate(message, [entities.map(getName).join(", ")]);
}
function getName(result) {
return getEntity(result).name;
}
function getEntity(result) {
return result.context;
}
}
})();

View File

@ -1,95 +0,0 @@
/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc factory
* @name horizon.dashboard.admin.pools.actions.update.service
* @description
* Service for the storage pool update modal
*/
angular
.module('horizon.dashboard.admin.pools.actions')
.factory('horizon.dashboard.admin.pools.actions.update.service', updateService);
updateService.$inject = [
'horizon.app.core.openstack-service-api.policy',
'horizon.app.core.openstack-service-api.zaqar',
'horizon.dashboard.admin.pools.actions.workflow',
'horizon.dashboard.admin.pools.resourceType',
'horizon.framework.util.actions.action-result.service',
'horizon.framework.util.i18n.gettext',
'horizon.framework.util.q.extensions',
'horizon.framework.widgets.form.ModalFormService',
'horizon.framework.widgets.toast.service'
];
function updateService(
policy, zaqar, workflow, resourceType,
actionResult, gettext, $qExtensions, modal, toast
) {
var message = {
success: gettext('Pool %s was successfully updated.')
};
var service = {
initAction: initAction,
perform: perform,
allowed: allowed
};
return service;
//////////////
function initAction() {
}
function perform(selected) {
var title, submitText;
title = gettext('Update Pool');
submitText = gettext('Update');
var config = workflow.init('update', title, submitText);
// load current data
zaqar.getPool(selected.name).then(onLoad);
function onLoad(response) {
config.model.name = response.data.name;
config.model.group = response.data.group;
config.model.weight = response.data.weight;
config.model.uri = response.data.uri;
config.model.options = response.data.options;
}
return modal.open(config).then(submit);
}
function allowed() {
return policy.ifAllowed({ rules: [['pool', 'update_pool']] });
}
function submit(context) {
return zaqar.updatePool(context.model, true).then(success, true);
}
function success(response) {
toast.add('success', interpolate(message.success, [response.data.name]));
var result = actionResult.getActionResult().updated(resourceType, response.data.name);
return result.result;
}
}
})();

View File

@ -1,138 +0,0 @@
/**
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
(function() {
'use strict';
/**
* @ngdoc factory
* @name horizon.dashboard.admin.pools.actions.workflow
* @description
* Workflow for creating/updating storage pool
*/
angular
.module('horizon.dashboard.admin.pools.actions')
.factory('horizon.dashboard.admin.pools.actions.workflow', workflow);
workflow.$inject = [
'horizon.framework.util.i18n.gettext'
];
function workflow(gettext) {
var workflow = {
init: init
};
function init(actionType, title, submitText) {
var schema, form, model;
var optionsPlaceholder = gettext(
'An optional request component related to storage-specific options in YAML format.');
// schema
schema = {
type: 'object',
properties: {
name: {
title: gettext('Name'),
type: 'string'
},
group: {
title: gettext('Group'),
type: 'string'
},
weight: {
title: gettext('Weight'),
type: 'number'
},
uri: {
title: gettext('URI'),
type: 'string'
},
options: {
title: gettext('Options'),
type: 'string'
}
}
};
// form
form = [
{
type: 'section',
htmlClass: 'row',
items: [
{
type: 'section',
htmlClass: 'col-sm-6',
items: [
{
key: 'name',
placeholder: gettext('Name of the pool.'),
required: true,
"readonly": actionType === 'update'
},
{
key: 'weight',
placeholder: gettext('Weight of the pool.'),
required: true
},
{
key: 'uri',
placeholder: gettext('URI for storage engine of this pool.'),
description: gettext('e.g. mongodb://127.0.0.1:27017'),
required: true
}
]
},
{
type: 'section',
htmlClass: 'col-sm-6',
items: [
{
key: 'group',
placeholder: gettext('Group of the pool.')
},
{
key: 'options',
type: 'textarea',
placeholder: optionsPlaceholder
}
]
}
]
}
]; // form
model = {
name: '',
group: '',
weight: 0,
uri: '',
options: ''
};
var config = {
title: title,
submitText: submitText,
schema: schema,
form: form,
model: model
};
return config;
}
return workflow;
}
})();

View File

@ -1,5 +0,0 @@
<hz-resource-property-list
resource-type-name="OS::Zaqar::Pools"
item="item"
property-groups="[['uri', 'options']]">
</hz-resource-property-list>

View File

@ -1,4 +0,0 @@
<hz-resource-panel resource-type-name="OS::Zaqar::Pools">
<hz-resource-table resource-type-name="OS::Zaqar::Pools" track-by="trackBy">
</hz-resource-table>
</hz-resource-panel>

View File

@ -1,121 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function () {
'use strict';
/**
* @ngdoc overview
* @name horizon.dashboard.admin.pools
* @description Pools module for messaging.
*/
angular
.module('horizon.dashboard.admin.pools', [
'ngRoute',
'horizon.dashboard.admin.pools.actions'
])
.constant('horizon.dashboard.admin.pools.resourceType', 'OS::Zaqar::Pools')
.run(run)
.config(config);
run.$inject = [
'horizon.app.core.openstack-service-api.zaqar',
'horizon.dashboard.admin.pools.basePath',
'horizon.dashboard.admin.pools.resourceType',
'horizon.dashboard.admin.pools.service',
'horizon.framework.conf.resource-type-registry.service'
];
function run(zaqar, basePath, resourceType, poolsService, registry) {
registry.getResourceType(resourceType)
.setNames(gettext('Pool'), gettext('Pools'))
.setSummaryTemplateUrl(basePath + 'drawer.html')
.setProperties(poolProperties())
.setListFunction(poolsService.getPoolsPromise)
.tableColumns
.append({
id: 'name',
priority: 1,
sortDefault: true
})
.append({
id: 'group',
priority: 1
})
.append({
id: 'weight',
priority: 1
})
.append({
id: 'uri',
priority: 2
});
// for magic-search
registry.getResourceType(resourceType).filterFacets
.append({
label: gettext('Name'),
name: 'name',
singleton: true
})
.append({
label: gettext('Group'),
name: 'group',
singleton: true
})
.append({
label: gettext('Weight'),
name: 'weight',
singleton: true
})
.append({
label: gettext('URI'),
name: 'uri',
singleton: true
});
}
function poolProperties() {
return {
name: { label: gettext('Name'), filters: [] },
group: { label: gettext('Group'), filters: ['noName'] },
weight: { label: gettext('Weight'), filters: ['noValue'] },
uri: { label: gettext('URI'), filters: ['noValue'] },
options: { label: gettext('Options'), filters: ['noValue'] }
};
}
config.$inject = [
'$provide',
'$windowProvider',
'$routeProvider'
];
/**
* @ndoc config
* @name horizon.dashboard.admin.pools.basePath
* @param {Object} $provide
* @param {Object} $windowProvider
* @param {Object} $routeProvider
* @returns {undefined} Returns nothing
* @description Base path for the pools panel
*/
function config($provide, $windowProvider, $routeProvider) {
var path = $windowProvider.$get().STATIC_URL + 'dashboard/admin/pools/';
$provide.constant('horizon.dashboard.admin.pools.basePath', path);
$routeProvider.when('/admin/pools', {
templateUrl: path + 'panel.html'
});
}
}());

View File

@ -1,61 +0,0 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function() {
"use strict";
angular
.module('horizon.dashboard.admin.pools')
.factory('horizon.dashboard.admin.pools.service', poolsService);
poolsService.$inject = [
'horizon.app.core.openstack-service-api.zaqar'
];
/*
* @ngdoc factory
* @name horizon.dashboard.admin.pools.service
*
* @description
* This service provides functions that are used through
* the Pools features.
*/
function poolsService(zaqar) {
return {
getPoolsPromise: getPoolsPromise
};
/*
* @ngdoc function
* @name getPoolsPromise
* @description
* Given filter/query parameters, returns a promise for the matching
* pools. This is used in displaying lists of Pools.
*/
function getPoolsPromise(params) {
return zaqar.getPools(params).then(modifyResponse);
}
function modifyResponse(response) {
return {data: {items: response.data.items.map(modifyItem)}};
function modifyItem(item) {
// we should set 'trackBy' as follows ideally.
// item.trackBy = item.id + item.updated_at;
var timestamp = new Date();
item.trackBy = item.name.concat(timestamp.getTime());
return item;
}
}
}
})();

Some files were not shown because too many files have changed in this diff Show More