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:
parent
c9021bbcd5
commit
a6d8ede9ed
60
.eslintrc
60
.eslintrc
|
@ -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
|
|
||||||
|
|
|
@ -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
|
|
|
@ -1,4 +0,0 @@
|
||||||
[gerrit]
|
|
||||||
host=review.openstack.org
|
|
||||||
port=29418
|
|
||||||
project=openstack/zaqar-ui.git
|
|
176
LICENSE
176
LICENSE
|
@ -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.
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
include setup.py
|
|
||||||
|
|
||||||
recursive-include zaqar_ui/content/queues/templates *
|
|
||||||
recursive-include zaqar_ui/static *
|
|
|
@ -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.
|
69
README.rst
69
README.rst
|
@ -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/
|
|
|
@ -1,5 +0,0 @@
|
||||||
[extractors]
|
|
||||||
django = django_babel.extract:extract_django
|
|
||||||
|
|
||||||
[python: **.py]
|
|
||||||
[django: templates/**.html]
|
|
|
@ -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]
|
|
|
@ -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
|
|
|
@ -1,3 +0,0 @@
|
||||||
# settings file for zaqar-ui plugin
|
|
||||||
enable_service zaqar-ui
|
|
||||||
|
|
153
doc/Makefile
153
doc/Makefile
|
@ -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."
|
|
|
@ -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
|
|
|
@ -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.
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
=====================
|
|
||||||
Source Code Reference
|
|
||||||
=====================
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:glob:
|
|
||||||
|
|
||||||
api/*
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
23
manage.py
23
manage.py
|
@ -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)
|
|
35
package.json
35
package.json
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
other:
|
|
||||||
- Switch to reno for managing release notes.
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
features:
|
|
||||||
- >
|
|
||||||
Use initAction() instead initScope(). initScope() is
|
|
||||||
deprecated from Horizon in Ocata and will be removed
|
|
||||||
in Queens.
|
|
|
@ -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.
|
|
|
@ -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.
|
|
|
@ -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/']
|
|
|
@ -1,11 +0,0 @@
|
||||||
========================
|
|
||||||
Zaqar UI Release Notes
|
|
||||||
========================
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
|
|
||||||
unreleased
|
|
||||||
ocata
|
|
||||||
|
|
||||||
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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 リリースノート"
|
|
|
@ -1,6 +0,0 @@
|
||||||
===================================
|
|
||||||
Ocata Series Release Notes
|
|
||||||
===================================
|
|
||||||
|
|
||||||
.. release-notes::
|
|
||||||
:branch: origin/stable/ocata
|
|
|
@ -1,6 +0,0 @@
|
||||||
==============================
|
|
||||||
Current Series Release Notes
|
|
||||||
==============================
|
|
||||||
|
|
||||||
.. release-notes::
|
|
||||||
|
|
|
@ -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
|
|
34
setup.cfg
34
setup.cfg
|
@ -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
|
|
29
setup.py
29
setup.py
|
@ -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)
|
|
|
@ -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
|
|
97
test-shim.js
97
test-shim.js
|
@ -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));
|
|
||||||
|
|
|
@ -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)
|
|
|
@ -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()
|
|
|
@ -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
63
tox.ini
|
@ -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
|
|
||||||
|
|
|
@ -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()
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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)
|
|
|
@ -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()
|
|
|
@ -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"
|
|
|
@ -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'),
|
|
||||||
]
|
|
|
@ -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"
|
|
|
@ -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'),
|
|
||||||
]
|
|
|
@ -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
|
|
|
@ -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"
|
|
|
@ -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'),
|
|
||||||
]
|
|
|
@ -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'
|
|
|
@ -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
|
|
|
@ -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'
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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"
|
|
|
@ -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);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}());
|
|
|
@ -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'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -1,5 +0,0 @@
|
||||||
<hz-resource-property-list
|
|
||||||
resource-type-name="OS::Zaqar::Flavors"
|
|
||||||
item="item"
|
|
||||||
property-groups="[['capabilities']]">
|
|
||||||
</hz-resource-property-list>
|
|
|
@ -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>
|
|
|
@ -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'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}());
|
|
|
@ -1,4 +0,0 @@
|
||||||
|
|
||||||
textarea#capabilities {
|
|
||||||
height: 10em;
|
|
||||||
}
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -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'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -1,5 +0,0 @@
|
||||||
<hz-resource-property-list
|
|
||||||
resource-type-name="OS::Zaqar::Pools"
|
|
||||||
item="item"
|
|
||||||
property-groups="[['uri', 'options']]">
|
|
||||||
</hz-resource-property-list>
|
|
|
@ -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>
|
|
|
@ -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'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}());
|
|
|
@ -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
Loading…
Reference in New Issue