Compare commits
9 Commits
victoria-e
...
4.0.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e033d7b96 | ||
|
|
0543ccfe74 | ||
|
|
ec62bbe5bd | ||
|
|
cbb06e6765 | ||
|
|
6e1be3cca4 | ||
|
|
043ebb71c6 | ||
|
|
870e6d75e0 | ||
|
|
3069f83731 | ||
|
|
d7d534f5d1 |
@@ -2,4 +2,4 @@
|
||||
host=review.opendev.org
|
||||
port=29418
|
||||
project=openstack/watcher.git
|
||||
defaultbranch=stable/victoria
|
||||
defaultbranch=stable/ussuri
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
- project:
|
||||
queue: watcher
|
||||
templates:
|
||||
- check-requirements
|
||||
- openstack-cover-jobs
|
||||
- openstack-lower-constraints-jobs
|
||||
- openstack-python3-victoria-jobs
|
||||
- openstack-python3-ussuri-jobs
|
||||
- publish-openstack-docs-pti
|
||||
- release-notes-jobs-python3
|
||||
check:
|
||||
@@ -17,6 +16,7 @@
|
||||
- watcher-tls-test
|
||||
- watcher-tempest-functional-ipv6-only
|
||||
gate:
|
||||
queue: watcher
|
||||
jobs:
|
||||
- watcher-tempest-functional
|
||||
- watcher-tempest-functional-ipv6-only
|
||||
@@ -102,7 +102,7 @@
|
||||
- job:
|
||||
name: watcher-tempest-multinode
|
||||
parent: watcher-tempest-functional
|
||||
nodeset: openstack-two-node-focal
|
||||
nodeset: openstack-two-node-bionic
|
||||
roles:
|
||||
- zuul: openstack/tempest
|
||||
group-vars:
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
from watcher import version as watcher_version
|
||||
|
||||
|
||||
extensions = [
|
||||
'openstackdocstheme',
|
||||
'os_api_ref',
|
||||
@@ -43,13 +46,21 @@ project = u'Infrastructure Optimization API Reference'
|
||||
copyright = u'2010-present, OpenStack Foundation'
|
||||
|
||||
# openstackdocstheme options
|
||||
openstackdocs_repo_name = 'openstack/watcher'
|
||||
openstackdocs_auto_name = False
|
||||
openstackdocs_bug_project = 'watcher'
|
||||
openstackdocs_bug_tag = ''
|
||||
repository_name = 'openstack/watcher'
|
||||
bug_project = 'watcher'
|
||||
bug_tag = ''
|
||||
|
||||
# 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 full version, including alpha/beta/rc tags.
|
||||
release = watcher_version.version_info.release_string()
|
||||
# The short X.Y version.
|
||||
version = watcher_version.version_string
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'native'
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# -- Options for HTML output --------------------------------------------------
|
||||
|
||||
@@ -64,6 +75,10 @@ html_theme_options = {
|
||||
"sidebar_mode": "toc",
|
||||
}
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
html_last_updated_fmt = '%Y-%m-%d %H:%M'
|
||||
|
||||
# -- Options for LaTeX output -------------------------------------------------
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
|
||||
@@ -298,7 +298,7 @@ function start_watcher_api {
|
||||
service_protocol="http"
|
||||
fi
|
||||
if [[ "$WATCHER_USE_WSGI_MODE" == "uwsgi" ]]; then
|
||||
run_process "watcher-api" "$(which uwsgi) --procname-prefix watcher-api --ini $WATCHER_UWSGI_CONF"
|
||||
run_process "watcher-api" "$WATCHER_BIN_DIR/uwsgi --procname-prefix watcher-api --ini $WATCHER_UWSGI_CONF"
|
||||
watcher_url=$service_protocol://$SERVICE_HOST/infra-optim
|
||||
else
|
||||
watcher_url=$service_protocol://$SERVICE_HOST:$service_port
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import importlib
|
||||
import inspect
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# 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.
|
||||
openstackdocstheme>=2.2.1 # Apache-2.0
|
||||
sphinx>=2.0.0,!=2.1.0 # BSD
|
||||
openstackdocstheme>=1.20.0 # Apache-2.0
|
||||
sphinx>=1.8.0,!=2.1.0,!=3.0.0 # BSD
|
||||
sphinxcontrib-pecanwsme>=0.8.0 # Apache-2.0
|
||||
sphinxcontrib-svg2pdfconverter>=0.1.0 # BSD
|
||||
reno>=3.1.0 # Apache-2.0
|
||||
reno>=2.7.0 # Apache-2.0
|
||||
sphinxcontrib-apidoc>=0.2.0 # BSD
|
||||
os-api-ref>=1.4.0 # Apache-2.0
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
from watcher import version as watcher_version
|
||||
from watcher import objects
|
||||
|
||||
objects.register_all()
|
||||
@@ -59,6 +60,16 @@ master_doc = 'index'
|
||||
project = u'Watcher'
|
||||
copyright = u'OpenStack Foundation'
|
||||
|
||||
# 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.
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = watcher_version.version_info.release_string()
|
||||
# The short X.Y version.
|
||||
version = watcher_version.version_string
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
modindex_common_prefix = ['watcher.']
|
||||
|
||||
@@ -83,7 +94,7 @@ add_module_names = True
|
||||
suppress_warnings = ['app.add_directive']
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'native'
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# -- Options for man page output --------------------------------------------
|
||||
|
||||
@@ -114,13 +125,12 @@ html_theme = 'openstackdocs'
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = '%sdoc' % project
|
||||
|
||||
html_last_updated_fmt = '%Y-%m-%d %H:%M'
|
||||
|
||||
#openstackdocstheme options
|
||||
openstackdocs_repo_name = 'openstack/watcher'
|
||||
openstackdocs_pdf_link = True
|
||||
openstackdocs_auto_name = False
|
||||
openstackdocs_bug_project = 'watcher'
|
||||
openstackdocs_bug_tag = ''
|
||||
repository_name = 'openstack/watcher'
|
||||
bug_project = 'watcher'
|
||||
bug_tag = ''
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title, author, documentclass
|
||||
@@ -128,7 +138,7 @@ openstackdocs_bug_tag = ''
|
||||
latex_documents = [
|
||||
('index',
|
||||
'doc-watcher.tex',
|
||||
u'Watcher Documentation',
|
||||
u'%s Documentation' % project,
|
||||
u'OpenStack Foundation', 'manual'),
|
||||
]
|
||||
|
||||
|
||||
@@ -5,10 +5,11 @@ appdirs==1.4.3
|
||||
APScheduler==3.5.1
|
||||
asn1crypto==0.24.0
|
||||
automaton==1.14.0
|
||||
Babel==2.5.3
|
||||
beautifulsoup4==4.6.0
|
||||
cachetools==2.0.1
|
||||
certifi==2018.1.18
|
||||
cffi==1.14.0
|
||||
cffi==1.11.5
|
||||
chardet==3.0.4
|
||||
cliff==2.11.0
|
||||
cmd2==0.8.1
|
||||
@@ -30,11 +31,12 @@ extras==1.0.0
|
||||
fasteners==0.14.1
|
||||
fixtures==3.0.0
|
||||
freezegun==0.3.10
|
||||
future==0.16.0
|
||||
futurist==1.8.0
|
||||
gitdb2==2.0.3
|
||||
GitPython==2.1.8
|
||||
gnocchiclient==7.0.1
|
||||
greenlet==0.4.15
|
||||
greenlet==0.4.13
|
||||
idna==2.6
|
||||
imagesize==1.0.0
|
||||
iso8601==0.1.12
|
||||
@@ -42,23 +44,26 @@ Jinja2==2.10
|
||||
jmespath==0.9.3
|
||||
jsonpatch==1.21
|
||||
jsonpointer==2.0
|
||||
jsonschema==3.2.0
|
||||
jsonschema==2.6.0
|
||||
keystoneauth1==3.4.0
|
||||
keystonemiddleware==4.21.0
|
||||
kombu==5.0.0
|
||||
kombu==4.1.0
|
||||
linecache2==1.0.0
|
||||
logutils==0.3.5
|
||||
lxml==4.5.1
|
||||
lxml==4.1.1
|
||||
Mako==1.0.7
|
||||
MarkupSafe==1.1.1
|
||||
MarkupSafe==1.0
|
||||
mccabe==0.2.1
|
||||
microversion_parse==0.2.1
|
||||
mock==2.0.0
|
||||
monotonic==1.4
|
||||
mox3==0.25.0
|
||||
msgpack==0.5.6
|
||||
munch==2.2.0
|
||||
netaddr==0.7.19
|
||||
netifaces==0.10.6
|
||||
networkx==2.4
|
||||
networkx==2.2
|
||||
openstackdocstheme==1.20.0
|
||||
openstacksdk==0.12.0
|
||||
os-api-ref===1.4.0
|
||||
os-client-config==1.29.0
|
||||
@@ -70,7 +75,7 @@ oslo.cache==1.29.0
|
||||
oslo.concurrency==3.26.0
|
||||
oslo.config==5.2.0
|
||||
oslo.context==2.21.0
|
||||
oslo.db==4.44.0
|
||||
oslo.db==4.35.0
|
||||
oslo.i18n==3.20.0
|
||||
oslo.log==3.37.0
|
||||
oslo.messaging==8.1.2
|
||||
@@ -113,7 +118,8 @@ python-novaclient==14.1.0
|
||||
python-openstackclient==3.14.0
|
||||
python-subunit==1.2.0
|
||||
pytz==2018.3
|
||||
PyYAML==3.13
|
||||
PyYAML==3.12
|
||||
reno==2.7.0
|
||||
repoze.lru==0.7
|
||||
requests==2.18.4
|
||||
requestsexceptions==1.4.0
|
||||
@@ -122,17 +128,22 @@ rfc3986==1.1.0
|
||||
Routes==2.4.1
|
||||
simplegeneric==0.8.1
|
||||
simplejson==3.13.2
|
||||
six==1.11.0
|
||||
smmap2==2.0.3
|
||||
snowballstemmer==1.2.1
|
||||
Sphinx==1.6.5
|
||||
sphinxcontrib-httpdomain==1.6.1
|
||||
sphinxcontrib-pecanwsme==0.8.0
|
||||
sphinxcontrib-websupport==1.0.1
|
||||
SQLAlchemy==1.2.5
|
||||
sqlalchemy-migrate==0.11.0
|
||||
sqlparse==0.2.4
|
||||
statsd==3.2.2
|
||||
stestr==2.0.0
|
||||
stevedore==1.28.0
|
||||
taskflow==3.8.0
|
||||
taskflow==3.7.1
|
||||
Tempita==0.5.2
|
||||
tenacity==4.12.0
|
||||
tenacity==4.9.0
|
||||
testresources==2.0.1
|
||||
testscenarios==0.5.0
|
||||
testtools==2.3.0
|
||||
|
||||
@@ -53,6 +53,7 @@ source_suffix = '.rst'
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'watcher'
|
||||
copyright = u'2016, Watcher developers'
|
||||
|
||||
# Release notes are version independent
|
||||
@@ -90,15 +91,11 @@ exclude_patterns = ['_build']
|
||||
#show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'native'
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
|
||||
# openstackdocstheme options
|
||||
openstackdocs_repo_name = 'openstack/watcher'
|
||||
openstackdocs_bug_project = 'watcher'
|
||||
openstackdocs_bug_tag = ''
|
||||
|
||||
# -- Options for HTML output --------------------------------------------------
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ Contents:
|
||||
:maxdepth: 1
|
||||
|
||||
unreleased
|
||||
ussuri
|
||||
train
|
||||
stein
|
||||
rocky
|
||||
|
||||
@@ -1,651 +0,0 @@
|
||||
# Andi Chandler <andi@gowling.com>, 2017. #zanata
|
||||
# Andi Chandler <andi@gowling.com>, 2018. #zanata
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: python-watcher\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-11-08 01:22+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2018-11-07 06:15+0000\n"
|
||||
"Last-Translator: Andi Chandler <andi@gowling.com>\n"
|
||||
"Language-Team: English (United Kingdom)\n"
|
||||
"Language: en_GB\n"
|
||||
"X-Generator: Zanata 4.3.3\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
msgid "0.29.0"
|
||||
msgstr "0.29.0"
|
||||
|
||||
msgid "0.34.0"
|
||||
msgstr "0.34.0"
|
||||
|
||||
msgid "1.0.0"
|
||||
msgstr "1.0.0"
|
||||
|
||||
msgid "1.1.0"
|
||||
msgstr "1.1.0"
|
||||
|
||||
msgid "1.10.0"
|
||||
msgstr "1.10.0"
|
||||
|
||||
msgid "1.11.0"
|
||||
msgstr "1.11.0"
|
||||
|
||||
msgid "1.3.0"
|
||||
msgstr "1.3.0"
|
||||
|
||||
msgid "1.4.0"
|
||||
msgstr "1.4.0"
|
||||
|
||||
msgid "1.4.1"
|
||||
msgstr "1.4.1"
|
||||
|
||||
msgid "1.5.0"
|
||||
msgstr "1.5.0"
|
||||
|
||||
msgid "1.6.0"
|
||||
msgstr "1.6.0"
|
||||
|
||||
msgid "1.7.0"
|
||||
msgstr "1.7.0"
|
||||
|
||||
msgid "1.9.0"
|
||||
msgstr "1.9.0"
|
||||
|
||||
msgid "Add a service supervisor to watch Watcher deamons."
|
||||
msgstr "Add a service supervisor to watch Watcher daemons."
|
||||
|
||||
msgid "Add action for compute node power on/off"
|
||||
msgstr "Add action for compute node power on/off"
|
||||
|
||||
msgid ""
|
||||
"Add description property for dynamic action. Admin can see detail "
|
||||
"information of any specify action."
|
||||
msgstr ""
|
||||
"Add description property for dynamic action. Admin can see detail "
|
||||
"information of any specify action."
|
||||
|
||||
msgid "Add notifications related to Action object."
|
||||
msgstr "Add notifications related to Action object."
|
||||
|
||||
msgid "Add notifications related to Action plan object."
|
||||
msgstr "Add notifications related to Action plan object."
|
||||
|
||||
msgid "Add notifications related to Audit object."
|
||||
msgstr "Add notifications related to Audit object."
|
||||
|
||||
msgid "Add notifications related to Service object."
|
||||
msgstr "Add notifications related to Service object."
|
||||
|
||||
msgid ""
|
||||
"Add start_time and end_time fields in audits table. User can set the start "
|
||||
"time and/or end time when creating CONTINUOUS audit."
|
||||
msgstr ""
|
||||
"Add start_time and end_time fields in audits table. User can set the start "
|
||||
"time and/or end time when creating CONTINUOUS audit."
|
||||
|
||||
msgid ""
|
||||
"Add superseded state for an action plan if the cluster data model has "
|
||||
"changed after it has been created."
|
||||
msgstr ""
|
||||
"Add superseded state for an action plan if the cluster data model has "
|
||||
"changed after it has been created."
|
||||
|
||||
msgid "Added SUSPENDED audit state"
|
||||
msgstr "Added SUSPENDED audit state"
|
||||
|
||||
msgid ""
|
||||
"Added a generic scoring engine module, which will standarize interactions "
|
||||
"with scoring engines through the common API. It is possible to use the "
|
||||
"scoring engine by different Strategies, which improve the code and data "
|
||||
"model re-use."
|
||||
msgstr ""
|
||||
"Added a generic scoring engine module, which will standardise interactions "
|
||||
"with scoring engines through the common API. It is possible to use the "
|
||||
"scoring engine by different Strategies, which improve the code and data "
|
||||
"model re-use."
|
||||
|
||||
msgid ""
|
||||
"Added a new strategy based on the airflow of servers. This strategy makes "
|
||||
"decisions to migrate VMs to make the airflow uniform."
|
||||
msgstr ""
|
||||
"Added a new strategy based on the airflow of servers. This strategy makes "
|
||||
"decisions to migrate VMs to make the airflow uniform."
|
||||
|
||||
msgid ""
|
||||
"Added a standard way to both declare and fetch configuration options so that "
|
||||
"whenever the administrator generates the Watcher configuration sample file, "
|
||||
"it contains the configuration options of the plugins that are currently "
|
||||
"available."
|
||||
msgstr ""
|
||||
"Added a standard way to both declare and fetch configuration options so that "
|
||||
"whenever the administrator generates the Watcher configuration sample file, "
|
||||
"it contains the configuration options of the plugins that are currently "
|
||||
"available."
|
||||
|
||||
msgid ""
|
||||
"Added a strategy based on the VM workloads of hypervisors. This strategy "
|
||||
"makes decisions to migrate workloads to make the total VM workloads of each "
|
||||
"hypervisor balanced, when the total VM workloads of hypervisor reaches "
|
||||
"threshold."
|
||||
msgstr ""
|
||||
"Added a strategy based on the VM workloads of hypervisors. This strategy "
|
||||
"makes decisions to migrate workloads to make the total VM workloads of each "
|
||||
"hypervisor balanced, when the total VM workloads of hypervisor reaches "
|
||||
"threshold."
|
||||
|
||||
msgid ""
|
||||
"Added a strategy for one compute node maintenance, without having the user's "
|
||||
"application been interrupted. If given one backup node, the strategy will "
|
||||
"firstly migrate all instances from the maintenance node to the backup node. "
|
||||
"If the backup node is not provided, it will migrate all instances, relying "
|
||||
"on nova-scheduler."
|
||||
msgstr ""
|
||||
"Added a strategy for one compute node maintenance, without having the user's "
|
||||
"application been interrupted. If given one backup node, the strategy will "
|
||||
"firstly migrate all instances from the maintenance node to the backup node. "
|
||||
"If the backup node is not provided, it will migrate all instances, relying "
|
||||
"on nova-scheduler."
|
||||
|
||||
msgid ""
|
||||
"Added a strategy that monitors if there is a higher load on some hosts "
|
||||
"compared to other hosts in the cluster and re-balances the work across hosts "
|
||||
"to minimize the standard deviation of the loads in the cluster."
|
||||
msgstr ""
|
||||
"Added a strategy that monitors if there is a higher load on some hosts "
|
||||
"compared to other hosts in the cluster and re-balances the work across hosts "
|
||||
"to minimise the standard deviation of the loads in the cluster."
|
||||
|
||||
msgid ""
|
||||
"Added a way to add a new action without having to amend the source code of "
|
||||
"the default planner."
|
||||
msgstr ""
|
||||
"Added a way to add a new action without having to amend the source code of "
|
||||
"the default planner."
|
||||
|
||||
msgid ""
|
||||
"Added a way to check state of strategy before audit's execution. "
|
||||
"Administrator can use \"watcher strategy state <strategy_name>\" command to "
|
||||
"get information about metrics' availability, datasource's availability and "
|
||||
"CDM's availability."
|
||||
msgstr ""
|
||||
"Added a way to check state of strategy before audit's execution. "
|
||||
"Administrator can use \"watcher strategy state <strategy_name>\" command to "
|
||||
"get information about metrics' availability, datasource's availability and "
|
||||
"CDM's availability."
|
||||
|
||||
msgid ""
|
||||
"Added a way to compare the efficacy of different strategies for a give "
|
||||
"optimization goal."
|
||||
msgstr ""
|
||||
"Added a way to compare the efficacy of different strategies for a give "
|
||||
"optimisation goal."
|
||||
|
||||
msgid ""
|
||||
"Added a way to create periodic audit to be able to optimize continuously the "
|
||||
"cloud infrastructure."
|
||||
msgstr ""
|
||||
"Added a way to create periodic audit to be able to continuously optimise the "
|
||||
"cloud infrastructure."
|
||||
|
||||
msgid ""
|
||||
"Added a way to return the of available goals depending on which strategies "
|
||||
"have been deployed on the node where the decison engine is running."
|
||||
msgstr ""
|
||||
"Added a way to return the of available goals depending on which strategies "
|
||||
"have been deployed on the node where the decision engine is running."
|
||||
|
||||
msgid ""
|
||||
"Added an in-memory cache of the cluster model built up and kept fresh via "
|
||||
"notifications from services of interest in addition to periodic syncing "
|
||||
"logic."
|
||||
msgstr ""
|
||||
"Added an in-memory cache of the cluster model built up and kept fresh via "
|
||||
"notifications from services of interest in addition to periodic syncing "
|
||||
"logic."
|
||||
|
||||
msgid ""
|
||||
"Added binding between apscheduler job and Watcher decision engine service. "
|
||||
"It will allow to provide HA support in the future."
|
||||
msgstr ""
|
||||
"Added binding between apscheduler job and Watcher decision engine service. "
|
||||
"It will allow to provide HA support in the future."
|
||||
|
||||
msgid "Added cinder cluster data model"
|
||||
msgstr "Added cinder cluster data model"
|
||||
|
||||
msgid ""
|
||||
"Added gnocchi support as data source for metrics. Administrator can change "
|
||||
"data source for each strategy using config file."
|
||||
msgstr ""
|
||||
"Added Gnocchi support as data source for metrics. Administrator can change "
|
||||
"data source for each strategy using config file."
|
||||
|
||||
msgid "Added new tool ``watcher-status upgrade check``."
|
||||
msgstr "Added new tool ``watcher-status upgrade check``."
|
||||
|
||||
msgid ""
|
||||
"Added notifications about cancelling of action plan. Now event based plugins "
|
||||
"know when action plan cancel started and completed."
|
||||
msgstr ""
|
||||
"Added notifications about cancelling of action plan. Now event based plugins "
|
||||
"know when action plan cancel started and completed."
|
||||
|
||||
msgid "Added policies to handle user rights to access Watcher API."
|
||||
msgstr "Added policies to handle user rights to access Watcher API."
|
||||
|
||||
msgid "Added storage capacity balance strategy."
|
||||
msgstr "Added storage capacity balance strategy."
|
||||
|
||||
msgid ""
|
||||
"Added strategy \"Zone migration\" and it's goal \"Hardware maintenance\". "
|
||||
"The strategy migrates many instances and volumes efficiently with minimum "
|
||||
"downtime automatically."
|
||||
msgstr ""
|
||||
"Added strategy \"Zone migration\" and it's goal \"Hardware maintenance\". "
|
||||
"The strategy migrates many instances and volumes efficiently with minimum "
|
||||
"downtime automatically."
|
||||
|
||||
msgid ""
|
||||
"Added strategy to identify and migrate a Noisy Neighbor - a low priority VM "
|
||||
"that negatively affects peformance of a high priority VM by over utilizing "
|
||||
"Last Level Cache."
|
||||
msgstr ""
|
||||
"Added strategy to identify and migrate a Noisy Neighbour - a low priority VM "
|
||||
"that negatively affects performance of a high priority VM by over utilising "
|
||||
"Last Level Cache."
|
||||
|
||||
msgid ""
|
||||
"Added the functionality to filter out instances which have metadata field "
|
||||
"'optimize' set to False. For now, this is only available for the "
|
||||
"basic_consolidation strategy (if \"check_optimize_metadata\" configuration "
|
||||
"option is enabled)."
|
||||
msgstr ""
|
||||
"Added the functionality to filter out instances which have metadata field "
|
||||
"'optimize' set to False. For now, this is only available for the "
|
||||
"basic_consolidation strategy (if \"check_optimize_metadata\" configuration "
|
||||
"option is enabled)."
|
||||
|
||||
msgid "Added using of JSONSchema instead of voluptuous to validate Actions."
|
||||
msgstr "Added using of JSONSchema instead of voluptuous to validate Actions."
|
||||
|
||||
msgid "Added volume migrate action"
|
||||
msgstr "Added volume migrate action"
|
||||
|
||||
msgid ""
|
||||
"Adds audit scoper for storage data model, now watcher users can specify "
|
||||
"audit scope for storage CDM in the same manner as compute scope."
|
||||
msgstr ""
|
||||
"Adds audit scoper for storage data model, now watcher users can specify "
|
||||
"audit scope for storage CDM in the same manner as compute scope."
|
||||
|
||||
msgid "Adds baremetal data model in Watcher"
|
||||
msgstr "Adds baremetal data model in Watcher"
|
||||
|
||||
msgid ""
|
||||
"Allow decision engine to pass strategy parameters, like optimization "
|
||||
"threshold, to selected strategy, also strategy to provide parameters info to "
|
||||
"end user."
|
||||
msgstr ""
|
||||
"Allow decision engine to pass strategy parameters, like optimisation "
|
||||
"threshold, to selected strategy, also strategy to provide parameters info to "
|
||||
"end user."
|
||||
|
||||
msgid ""
|
||||
"Audits have 'name' field now, that is more friendly to end users. Audit's "
|
||||
"name can't exceed 63 characters."
|
||||
msgstr ""
|
||||
"Audits have 'name' field now, that is more friendly to end users. Audit's "
|
||||
"name can't exceed 63 characters."
|
||||
|
||||
msgid "Bug Fixes"
|
||||
msgstr "Bug Fixes"
|
||||
|
||||
msgid "Centralize all configuration options for Watcher."
|
||||
msgstr "Centralise all configuration options for Watcher."
|
||||
|
||||
msgid "Contents:"
|
||||
msgstr "Contents:"
|
||||
|
||||
msgid ""
|
||||
"Copy all audit templates parameters into audit instead of having a reference "
|
||||
"to the audit template."
|
||||
msgstr ""
|
||||
"Copy all audit templates parameters into audit instead of having a reference "
|
||||
"to the audit template."
|
||||
|
||||
msgid "Current Series Release Notes"
|
||||
msgstr "Current Series Release Notes"
|
||||
|
||||
msgid "Deprecation Notes"
|
||||
msgstr "Deprecation Notes"
|
||||
|
||||
msgid ""
|
||||
"Each CDM collector can have its own CDM scoper now. This changed Scope JSON "
|
||||
"schema definition for the audit template POST data. Please see audit "
|
||||
"template create help message in python-watcherclient."
|
||||
msgstr ""
|
||||
"Each CDM collector can have its own CDM scoper now. This changed Scope JSON "
|
||||
"schema definition for the audit template POST data. Please see audit "
|
||||
"template create help message in python-watcherclient."
|
||||
|
||||
msgid ""
|
||||
"Enhancement of vm_workload_consolidation strategy by using 'memory.resident' "
|
||||
"metric in place of 'memory.usage', as memory.usage shows the memory usage "
|
||||
"inside guest-os and memory.resident represents volume of RAM used by "
|
||||
"instance on host machine."
|
||||
msgstr ""
|
||||
"Enhancement of vm_workload_consolidation strategy by using 'memory.resident' "
|
||||
"metric in place of 'memory.usage', as memory.usage shows the memory usage "
|
||||
"inside guest-os and memory.resident represents volume of RAM used by "
|
||||
"instance on host machine."
|
||||
|
||||
msgid ""
|
||||
"Existing workload_balance strategy based on the VM workloads of CPU. This "
|
||||
"feature improves the strategy. By the input parameter \"metrics\", it makes "
|
||||
"decision to migrate a VM base on CPU or memory utilization."
|
||||
msgstr ""
|
||||
"Existing workload_balance strategy based on the VM workloads of CPU. This "
|
||||
"feature improves the strategy. By the input parameter \"metrics\", it makes "
|
||||
"decision to migrate a VM base on CPU or memory utilisation."
|
||||
|
||||
msgid ""
|
||||
"Feature to exclude instances from audit scope based on project_id is added. "
|
||||
"Now instances from particular project in OpenStack can be excluded from "
|
||||
"audit defining scope in audit templates."
|
||||
msgstr ""
|
||||
"Feature to exclude instances from audit scope based on project_id is added. "
|
||||
"Now instances from particular project in OpenStack can be excluded from "
|
||||
"audit defining scope in audit templates."
|
||||
|
||||
msgid ""
|
||||
"Instance cold migration logic is now replaced with using Nova migrate "
|
||||
"Server(migrate Action) API which has host option since v2.56."
|
||||
msgstr ""
|
||||
"Instance cold migration logic is now replaced with using Nova migrate "
|
||||
"Server(migrate Action) API which has host option since v2.56."
|
||||
|
||||
msgid "New Features"
|
||||
msgstr "New Features"
|
||||
|
||||
msgid ""
|
||||
"New framework for ``watcher-status upgrade check`` command is added. This "
|
||||
"framework allows adding various checks which can be run before a Watcher "
|
||||
"upgrade to ensure if the upgrade can be performed safely."
|
||||
msgstr ""
|
||||
"New framework for ``watcher-status upgrade check`` command is added. This "
|
||||
"framework allows adding various checks which can be run before a Watcher "
|
||||
"upgrade to ensure if the upgrade can be performed safely."
|
||||
|
||||
msgid "Newton Series Release Notes"
|
||||
msgstr "Newton Series Release Notes"
|
||||
|
||||
msgid ""
|
||||
"Nova API version is now set to 2.56 by default. This needs the migrate "
|
||||
"action of migration type cold with destination_node parameter to work."
|
||||
msgstr ""
|
||||
"Nova API version is now set to 2.56 by default. This needs the migrate "
|
||||
"action of migration type cold with destination_node parameter to work."
|
||||
|
||||
msgid "Ocata Series Release Notes"
|
||||
msgstr "Ocata Series Release Notes"
|
||||
|
||||
msgid ""
|
||||
"Operator can now use new CLI tool ``watcher-status upgrade check`` to check "
|
||||
"if Watcher deployment can be safely upgraded from N-1 to N release."
|
||||
msgstr ""
|
||||
"Operator can now use new CLI tool ``watcher-status upgrade check`` to check "
|
||||
"if Watcher deployment can be safely upgraded from N-1 to N release."
|
||||
|
||||
msgid "Pike Series Release Notes"
|
||||
msgstr "Pike Series Release Notes"
|
||||
|
||||
msgid "Prelude"
|
||||
msgstr "Prelude"
|
||||
|
||||
msgid ""
|
||||
"Provide a notification mechanism into Watcher that supports versioning. "
|
||||
"Whenever a Watcher object is created, updated or deleted, a versioned "
|
||||
"notification will, if it's relevant, be automatically sent to notify in "
|
||||
"order to allow an event-driven style of architecture within Watcher. "
|
||||
"Moreover, it will also give other services and/or 3rd party softwares (e.g. "
|
||||
"monitoring solutions or rules engines) the ability to react to such events."
|
||||
msgstr ""
|
||||
"Provide a notification mechanism into Watcher that supports versioning. "
|
||||
"Whenever a Watcher object is created, updated or deleted, a versioned "
|
||||
"notification will, if it's relevant, be automatically sent to notify in "
|
||||
"order to allow an event-driven style of architecture within Watcher. "
|
||||
"Moreover, it will also give other services and/or 3rd party software (e.g. "
|
||||
"monitoring solutions or rules engines) the ability to react to such events."
|
||||
|
||||
msgid ""
|
||||
"Provides a generic way to define the scope of an audit. The set of audited "
|
||||
"resources will be called \"Audit scope\" and will be defined in each audit "
|
||||
"template (which contains the audit settings)."
|
||||
msgstr ""
|
||||
"Provides a generic way to define the scope of an audit. The set of audited "
|
||||
"resources will be called \"Audit scope\" and will be defined in each audit "
|
||||
"template (which contains the audit settings)."
|
||||
|
||||
msgid "Queens Series Release Notes"
|
||||
msgstr "Queens Series Release Notes"
|
||||
|
||||
msgid "Rocky Series Release Notes"
|
||||
msgstr "Rocky Series Release Notes"
|
||||
|
||||
msgid ""
|
||||
"The graph model describes how VMs are associated to compute hosts. This "
|
||||
"allows for seeing relationships upfront between the entities and hence can "
|
||||
"be used to identify hot/cold spots in the data center and influence a "
|
||||
"strategy decision."
|
||||
msgstr ""
|
||||
"The graph model describes how VMs are associated to compute hosts. This "
|
||||
"allows for seeing relationships upfront between the entities and hence can "
|
||||
"be used to identify hot/cold spots in the data centre and influence a "
|
||||
"strategy decision."
|
||||
|
||||
msgid ""
|
||||
"The migrate action of migration type cold with destination_node parameter "
|
||||
"was fixed. Before fixing, it booted an instance in the service project as a "
|
||||
"migrated instance."
|
||||
msgstr ""
|
||||
"The migrate action of migration type cold with destination_node parameter "
|
||||
"was fixed. Before fixing, it booted an instance in the service project as a "
|
||||
"migrated instance."
|
||||
|
||||
msgid ""
|
||||
"There is new ability to create Watcher continuous audits with cron interval. "
|
||||
"It means you may use, for example, optional argument '--interval \"\\*/5 \\* "
|
||||
"\\* \\* \\*\"' to launch audit every 5 minutes. These jobs are executed on a "
|
||||
"best effort basis and therefore, we recommend you to use a minimal cron "
|
||||
"interval of at least one minute."
|
||||
msgstr ""
|
||||
"There is new ability to create Watcher continuous audits with cron interval. "
|
||||
"It means you may use, for example, optional argument '--interval \"\\*/5 \\* "
|
||||
"\\* \\* \\*\"' to launch audit every 5 minutes. These jobs are executed on a "
|
||||
"best effort basis and therefore, we recommend you to use a minimal cron "
|
||||
"interval of at least one minute."
|
||||
|
||||
msgid "Upgrade Notes"
|
||||
msgstr "Upgrade Notes"
|
||||
|
||||
msgid ""
|
||||
"Watcher can continuously optimize the OpenStack cloud for a specific "
|
||||
"strategy or goal by triggering an audit periodically which generates an "
|
||||
"action plan and run it automatically."
|
||||
msgstr ""
|
||||
"Watcher can continuously optimise the OpenStack cloud for a specific "
|
||||
"strategy or goal by triggering an audit periodically which generates an "
|
||||
"action plan and run it automatically."
|
||||
|
||||
msgid ""
|
||||
"Watcher can now run specific actions in parallel improving the performances "
|
||||
"dramatically when executing an action plan."
|
||||
msgstr ""
|
||||
"Watcher can now run specific actions in parallel improving the performance "
|
||||
"dramatically when executing an action plan."
|
||||
|
||||
msgid ""
|
||||
"Watcher consumes Nova notifications to update its internal Compute "
|
||||
"CDM(Cluster Data Model). All the notifications as below"
|
||||
msgstr ""
|
||||
"Watcher consumes Nova notifications to update its internal Compute "
|
||||
"CDM(Cluster Data Model). All the notifications as below"
|
||||
|
||||
msgid "Watcher database can now be upgraded thanks to Alembic."
|
||||
msgstr "Watcher database can now be upgraded thanks to Alembic."
|
||||
|
||||
msgid ""
|
||||
"Watcher got an ability to calculate multiple global efficacy indicators "
|
||||
"during audit's execution. Now global efficacy can be calculated for many "
|
||||
"resource types (like volumes, instances, network) if strategy supports "
|
||||
"efficacy indicators."
|
||||
msgstr ""
|
||||
"Watcher got an ability to calculate multiple global efficacy indicators "
|
||||
"during audit's execution. Now global efficacy can be calculated for many "
|
||||
"resource types (like volumes, instances, network) if strategy supports "
|
||||
"efficacy indicators."
|
||||
|
||||
msgid ""
|
||||
"Watcher has a whole scope of the cluster, when building compute CDM which "
|
||||
"includes all instances. It filters excluded instances when migration during "
|
||||
"the audit."
|
||||
msgstr ""
|
||||
"Watcher has a whole scope of the cluster, when building compute CDM which "
|
||||
"includes all instances. It filters excluded instances when migration during "
|
||||
"the audit."
|
||||
|
||||
msgid ""
|
||||
"Watcher removes the support to Nova legacy notifications because of Nova "
|
||||
"will deprecate them."
|
||||
msgstr ""
|
||||
"Watcher removes the support to Nova legacy notifications because of Nova "
|
||||
"will deprecate them."
|
||||
|
||||
msgid ""
|
||||
"Watcher services can be launched in HA mode. From now on Watcher Decision "
|
||||
"Engine and Watcher Applier services may be deployed on different nodes to "
|
||||
"run in active-active or active-passive mode. Any ONGOING Audits or Action "
|
||||
"Plans will be CANCELLED if service they are executed on is restarted."
|
||||
msgstr ""
|
||||
"Watcher services can be launched in HA mode. From now on Watcher Decision "
|
||||
"Engine and Watcher Applier services may be deployed on different nodes to "
|
||||
"run in active-active or active-passive mode. Any ONGOING Audits or Action "
|
||||
"Plans will be CANCELLED if service they are executed on is restarted."
|
||||
|
||||
msgid ""
|
||||
"Watcher starts to support API microversions since Stein cycle. From now "
|
||||
"onwards all API changes should be made with saving backward compatibility. "
|
||||
"To specify API version operator should use OpenStack-API-Version HTTP "
|
||||
"header. If operator wants to know the mininum and maximum supported versions "
|
||||
"by API, he/she can access /v1 resource and Watcher API will return "
|
||||
"appropriate headers in response."
|
||||
msgstr ""
|
||||
"Watcher starts to support API microversions since the Stein cycle. From now "
|
||||
"onwards all API changes should be made with saving backward compatibility. "
|
||||
"To specify API version operator should use OpenStack-API-Version HTTP "
|
||||
"header. If operator wants to know the minimum and maximum supported versions "
|
||||
"by API, he/she can access /v1 resource and Watcher API will return "
|
||||
"appropriate headers in response."
|
||||
|
||||
msgid ""
|
||||
"Watcher supports multiple metrics backend and relies on Ceilometer and "
|
||||
"Monasca."
|
||||
msgstr ""
|
||||
"Watcher supports multiple metrics backend and relies on Ceilometer and "
|
||||
"Monasca."
|
||||
|
||||
msgid "Welcome to watcher's Release Notes documentation!"
|
||||
msgstr "Welcome to watcher's Release Notes documentation!"
|
||||
|
||||
msgid ""
|
||||
"all Watcher objects have been refactored to support OVO (oslo."
|
||||
"versionedobjects) which was a prerequisite step in order to implement "
|
||||
"versioned notifications."
|
||||
msgstr ""
|
||||
"all Watcher objects have been refactored to support OVO (oslo."
|
||||
"versionedobjects) which was a prerequisite step in order to implement "
|
||||
"versioned notifications."
|
||||
|
||||
msgid "instance.create.end"
|
||||
msgstr "instance.create.end"
|
||||
|
||||
msgid "instance.delete.end"
|
||||
msgstr "instance.delete.end"
|
||||
|
||||
msgid "instance.live_migration_force_complete.end"
|
||||
msgstr "instance.live_migration_force_complete.end"
|
||||
|
||||
msgid "instance.live_migration_post_dest.end"
|
||||
msgstr "instance.live_migration_post_dest.end"
|
||||
|
||||
msgid "instance.lock"
|
||||
msgstr "instance.lock"
|
||||
|
||||
msgid "instance.pause.end"
|
||||
msgstr "instance.pause.end"
|
||||
|
||||
msgid "instance.power_off.end"
|
||||
msgstr "instance.power_off.end"
|
||||
|
||||
msgid "instance.power_on.end"
|
||||
msgstr "instance.power_on.end"
|
||||
|
||||
msgid "instance.rebuild.end"
|
||||
msgstr "instance.rebuild.end"
|
||||
|
||||
msgid "instance.rescue.end"
|
||||
msgstr "instance.rescue.end"
|
||||
|
||||
msgid "instance.resize_confirm.end"
|
||||
msgstr "instance.resize_confirm.end"
|
||||
|
||||
msgid "instance.restore.end"
|
||||
msgstr "instance.restore.end"
|
||||
|
||||
msgid "instance.resume.end"
|
||||
msgstr "instance.resume.end"
|
||||
|
||||
msgid "instance.shelve.end"
|
||||
msgstr "instance.shelve.end"
|
||||
|
||||
msgid "instance.shutdown.end"
|
||||
msgstr "instance.shutdown.end"
|
||||
|
||||
msgid "instance.soft_delete.end"
|
||||
msgstr "instance.soft_delete.end"
|
||||
|
||||
msgid "instance.suspend.end"
|
||||
msgstr "instance.suspend.end"
|
||||
|
||||
msgid "instance.unlock"
|
||||
msgstr "instance.unlock"
|
||||
|
||||
msgid "instance.unpause.end"
|
||||
msgstr "instance.unpause.end"
|
||||
|
||||
msgid "instance.unrescue.end"
|
||||
msgstr "instance.unrescue.end"
|
||||
|
||||
msgid "instance.unshelve.end"
|
||||
msgstr "instance.unshelve.end"
|
||||
|
||||
msgid "instance.update"
|
||||
msgstr "instance.update"
|
||||
|
||||
msgid "new:"
|
||||
msgstr "new:"
|
||||
|
||||
msgid "pre-existing:"
|
||||
msgstr "pre-existing:"
|
||||
|
||||
msgid "service.create"
|
||||
msgstr "service.create"
|
||||
|
||||
msgid "service.delete"
|
||||
msgstr "service.delete"
|
||||
|
||||
msgid "service.update"
|
||||
msgstr "service.update"
|
||||
@@ -1,33 +0,0 @@
|
||||
# Gérald LONLAS <g.lonlas@gmail.com>, 2016. #zanata
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: python-watcher\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-03-22 02:21+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2016-10-22 06:44+0000\n"
|
||||
"Last-Translator: Gérald LONLAS <g.lonlas@gmail.com>\n"
|
||||
"Language-Team: French\n"
|
||||
"Language: fr\n"
|
||||
"X-Generator: Zanata 4.3.3\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
||||
|
||||
msgid "0.29.0"
|
||||
msgstr "0.29.0"
|
||||
|
||||
msgid "Contents:"
|
||||
msgstr "Contenu :"
|
||||
|
||||
msgid "Current Series Release Notes"
|
||||
msgstr "Note de la release actuelle"
|
||||
|
||||
msgid "New Features"
|
||||
msgstr "Nouvelles fonctionnalités"
|
||||
|
||||
msgid "Newton Series Release Notes"
|
||||
msgstr "Note de release pour Newton"
|
||||
|
||||
msgid "Welcome to watcher's Release Notes documentation!"
|
||||
msgstr "Bienvenue dans la documentation de la note de Release de Watcher"
|
||||
@@ -1,6 +0,0 @@
|
||||
===========================
|
||||
Ussuri Series Release Notes
|
||||
===========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/ussuri
|
||||
@@ -5,16 +5,16 @@
|
||||
apscheduler>=3.5.1 # MIT License
|
||||
jsonpatch>=1.21 # BSD
|
||||
keystoneauth1>=3.4.0 # Apache-2.0
|
||||
jsonschema>=3.2.0 # MIT
|
||||
jsonschema>=2.6.0 # MIT
|
||||
keystonemiddleware>=4.21.0 # Apache-2.0
|
||||
lxml>=4.5.1 # BSD
|
||||
lxml>=4.1.1 # BSD
|
||||
croniter>=0.3.20 # MIT License
|
||||
os-resource-classes>=0.4.0
|
||||
oslo.concurrency>=3.26.0 # Apache-2.0
|
||||
oslo.cache>=1.29.0 # Apache-2.0
|
||||
oslo.config>=5.2.0 # Apache-2.0
|
||||
oslo.context>=2.21.0 # Apache-2.0
|
||||
oslo.db>=4.44.0 # Apache-2.0
|
||||
oslo.db>=4.35.0 # Apache-2.0
|
||||
oslo.i18n>=3.20.0 # Apache-2.0
|
||||
oslo.log>=3.37.0 # Apache-2.0
|
||||
oslo.messaging>=8.1.2 # Apache-2.0
|
||||
@@ -39,11 +39,12 @@ python-neutronclient>=6.7.0 # Apache-2.0
|
||||
python-novaclient>=14.1.0 # Apache-2.0
|
||||
python-openstackclient>=3.14.0 # Apache-2.0
|
||||
python-ironicclient>=2.5.0 # Apache-2.0
|
||||
six>=1.11.0 # MIT
|
||||
SQLAlchemy>=1.2.5 # MIT
|
||||
stevedore>=1.28.0 # Apache-2.0
|
||||
taskflow>=3.8.0 # Apache-2.0
|
||||
taskflow>=3.7.1 # Apache-2.0
|
||||
WebOb>=1.8.5 # MIT
|
||||
WSME>=0.9.2 # MIT
|
||||
networkx>=2.4 # BSD
|
||||
networkx>=2.2;python_version>='3.4' # BSD
|
||||
microversion_parse>=0.2.1 # Apache-2.0
|
||||
futurist>=1.8.0 # Apache-2.0
|
||||
|
||||
16
setup.cfg
16
setup.cfg
@@ -19,7 +19,6 @@ classifier =
|
||||
Programming Language :: Python :: 3
|
||||
Programming Language :: Python :: 3.6
|
||||
Programming Language :: Python :: 3.7
|
||||
Programming Language :: Python :: 3.8
|
||||
|
||||
[files]
|
||||
packages =
|
||||
@@ -108,3 +107,18 @@ watcher_cluster_data_model_collectors =
|
||||
compute = watcher.decision_engine.model.collector.nova:NovaClusterDataModelCollector
|
||||
storage = watcher.decision_engine.model.collector.cinder:CinderClusterDataModelCollector
|
||||
baremetal = watcher.decision_engine.model.collector.ironic:BaremetalClusterDataModelCollector
|
||||
|
||||
|
||||
[compile_catalog]
|
||||
directory = watcher/locale
|
||||
domain = watcher
|
||||
|
||||
[update_catalog]
|
||||
domain = watcher
|
||||
output_dir = watcher/locale
|
||||
input_file = watcher/locale/watcher.pot
|
||||
|
||||
[extract_messages]
|
||||
keywords = _ gettext ngettext l_ lazy_gettext _LI _LW _LE _LC
|
||||
mapping_file = babel.cfg
|
||||
output_file = watcher/locale/watcher.pot
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
coverage>=4.5.1 # Apache-2.0
|
||||
doc8>=0.8.0 # Apache-2.0
|
||||
freezegun>=0.3.10 # Apache-2.0
|
||||
hacking>=3.0.1,<3.1.0 # Apache-2.0
|
||||
hacking>=3.0,<3.1.0 # Apache-2.0
|
||||
mock>=2.0.0 # BSD
|
||||
oslotest>=3.3.0 # Apache-2.0
|
||||
os-testr>=1.0.0 # Apache-2.0
|
||||
testscenarios>=0.5.0 # Apache-2.0/BSD
|
||||
|
||||
7
tox.ini
7
tox.ini
@@ -13,7 +13,7 @@ install_command = pip install {opts} {packages}
|
||||
setenv =
|
||||
VIRTUAL_ENV={envdir}
|
||||
deps =
|
||||
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
|
||||
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/ussuri}
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
-r{toxinidir}/requirements.txt
|
||||
commands =
|
||||
@@ -26,12 +26,12 @@ passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
|
||||
commands =
|
||||
doc8 doc/source/ CONTRIBUTING.rst HACKING.rst README.rst
|
||||
flake8
|
||||
bandit -r watcher -x watcher/tests/* -n5 -ll -s B320,B322
|
||||
bandit -r watcher -x watcher/tests/* -n5 -ll -s B320
|
||||
|
||||
[testenv:venv]
|
||||
setenv = PYTHONHASHSEED=0
|
||||
deps =
|
||||
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/victoria}
|
||||
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/ussuri}
|
||||
-r{toxinidir}/doc/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
-r{toxinidir}/requirements.txt
|
||||
@@ -105,7 +105,6 @@ extension =
|
||||
N340 = checks:check_oslo_i18n_wrapper
|
||||
N341 = checks:check_builtins_gettext
|
||||
N342 = checks:no_redundant_import_alias
|
||||
N366 = checks:import_stock_mock
|
||||
paths = ./watcher/hacking
|
||||
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from oslo_config import cfg
|
||||
from watcher.api import hooks
|
||||
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
# under the License.
|
||||
|
||||
|
||||
from http import client as http_client
|
||||
from oslo_config import cfg
|
||||
from pecan import hooks
|
||||
from six.moves import http_client
|
||||
|
||||
from watcher.common import context
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ from xml import etree as et
|
||||
|
||||
from oslo_log import log
|
||||
from oslo_serialization import jsonutils
|
||||
import six
|
||||
import webob
|
||||
|
||||
from watcher._i18n import _
|
||||
@@ -83,10 +84,12 @@ class ParsableErrorMiddleware(object):
|
||||
'</error_message>' % state['status_code']]
|
||||
state['headers'].append(('Content-Type', 'application/xml'))
|
||||
else:
|
||||
app_iter = [i.decode('utf-8') for i in app_iter]
|
||||
if six.PY3:
|
||||
app_iter = [i.decode('utf-8') for i in app_iter]
|
||||
body = [jsonutils.dumps(
|
||||
{'error_message': '\n'.join(app_iter)})]
|
||||
body = [item.encode('utf-8') for item in body]
|
||||
if six.PY3:
|
||||
body = [item.encode('utf-8') for item in body]
|
||||
state['headers'].append(('Content-Type', 'application/json'))
|
||||
state['headers'].append(('Content-Length', str(len(body[0]))))
|
||||
else:
|
||||
|
||||
@@ -20,6 +20,7 @@ import itertools
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
from oslo_utils import timeutils
|
||||
import six
|
||||
|
||||
from watcher.common import context as watcher_context
|
||||
from watcher.common import scheduling
|
||||
@@ -82,7 +83,7 @@ class APISchedulingService(scheduling.BackgroundSchedulerService):
|
||||
service = objects.Service.get(context, service_id)
|
||||
last_heartbeat = (service.last_seen_up or service.updated_at or
|
||||
service.created_at)
|
||||
if isinstance(last_heartbeat, str):
|
||||
if isinstance(last_heartbeat, six.string_types):
|
||||
# NOTE(russellb) If this service came in over rpc via
|
||||
# conductor, then the timestamp will be a string and needs to be
|
||||
# converted back to a datetime.
|
||||
|
||||
@@ -18,9 +18,11 @@
|
||||
#
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
|
||||
class BaseActionPlanHandler(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseActionPlanHandler(object):
|
||||
@abc.abstractmethod
|
||||
def execute(self):
|
||||
raise NotImplementedError()
|
||||
|
||||
@@ -19,12 +19,14 @@
|
||||
import abc
|
||||
|
||||
import jsonschema
|
||||
import six
|
||||
|
||||
from watcher.common import clients
|
||||
from watcher.common.loader import loadable
|
||||
|
||||
|
||||
class BaseAction(loadable.Loadable, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseAction(loadable.Loadable):
|
||||
# NOTE(jed): by convention we decided
|
||||
# that the attribute "resource_id" is the unique id of
|
||||
# the resource to which the Action applies to allow us to use it in the
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from oslo_log import log
|
||||
|
||||
from watcher.applier.loading import default
|
||||
|
||||
@@ -186,7 +186,7 @@ class Migrate(base.BaseAction):
|
||||
return self.migrate(destination=self.destination_node)
|
||||
|
||||
def revert(self):
|
||||
return self.migrate(destination=self.source_node)
|
||||
LOG.info('Migrate action do not revert!')
|
||||
|
||||
def abort(self):
|
||||
nova = nova_helper.NovaHelper(osc=self.osc)
|
||||
|
||||
@@ -95,7 +95,7 @@ class Resize(base.BaseAction):
|
||||
return self.resize()
|
||||
|
||||
def revert(self):
|
||||
LOG.warning("revert not supported")
|
||||
return self.migrate(destination=self.source_node)
|
||||
|
||||
def pre_condition(self):
|
||||
# TODO(jed): check if the instance exists / check if the instance is on
|
||||
|
||||
@@ -26,9 +26,11 @@ See: :doc:`../architecture` for more details on this component.
|
||||
"""
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
|
||||
class BaseApplier(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseApplier(object):
|
||||
@abc.abstractmethod
|
||||
def execute(self, action_plan_uuid):
|
||||
raise NotImplementedError()
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
from watcher.common.loader import default
|
||||
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#
|
||||
|
||||
import abc
|
||||
import six
|
||||
import time
|
||||
|
||||
import eventlet
|
||||
@@ -39,7 +40,8 @@ CANCEL_STATE = [objects.action_plan.State.CANCELLING,
|
||||
objects.action_plan.State.CANCELLED]
|
||||
|
||||
|
||||
class BaseWorkFlowEngine(loadable.Loadable, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseWorkFlowEngine(loadable.Loadable):
|
||||
|
||||
def __init__(self, config, context=None, applier_manager=None):
|
||||
"""Constructor
|
||||
|
||||
@@ -25,11 +25,8 @@ from taskflow import task as flow_task
|
||||
|
||||
from watcher.applier.workflow_engine import base
|
||||
from watcher.common import exception
|
||||
from watcher import conf
|
||||
from watcher import objects
|
||||
|
||||
CONF = conf.CONF
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -130,11 +127,9 @@ class DefaultWorkFlowEngine(base.BaseWorkFlowEngine):
|
||||
|
||||
class TaskFlowActionContainer(base.BaseTaskFlowActionContainer):
|
||||
def __init__(self, db_action, engine):
|
||||
self.name = "action_type:{0} uuid:{1}".format(db_action.action_type,
|
||||
db_action.uuid)
|
||||
super(TaskFlowActionContainer, self).__init__(self.name,
|
||||
db_action,
|
||||
engine)
|
||||
name = "action_type:{0} uuid:{1}".format(db_action.action_type,
|
||||
db_action.uuid)
|
||||
super(TaskFlowActionContainer, self).__init__(name, db_action, engine)
|
||||
|
||||
def do_pre_execute(self):
|
||||
db_action = self.engine.notify(self._db_action,
|
||||
@@ -163,12 +158,6 @@ class TaskFlowActionContainer(base.BaseTaskFlowActionContainer):
|
||||
self.action.post_condition()
|
||||
|
||||
def do_revert(self, *args, **kwargs):
|
||||
# NOTE: Not rollback action plan
|
||||
if not CONF.watcher_applier.rollback_when_actionplan_failed:
|
||||
LOG.info("Failed actionplan rollback option is turned off, and "
|
||||
"the following action will be skipped: %s", self.name)
|
||||
return
|
||||
|
||||
LOG.warning("Revert action: %s", self.name)
|
||||
try:
|
||||
# TODO(jed): do we need to update the states in case of failure?
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
from oslo_context import context
|
||||
from oslo_log import log
|
||||
from oslo_utils import timeutils
|
||||
import six
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
@@ -68,7 +69,7 @@ class RequestContext(context.RequestContext):
|
||||
self.project_id = project_id
|
||||
if not timestamp:
|
||||
timestamp = timeutils.utcnow()
|
||||
if isinstance(timestamp, str):
|
||||
if isinstance(timestamp, six.string_types):
|
||||
timestamp = timeutils.parse_isotime(timestamp)
|
||||
self.timestamp = timestamp
|
||||
self.user_name = user_name
|
||||
|
||||
@@ -14,10 +14,14 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
|
||||
class BaseLoader(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseLoader(object):
|
||||
|
||||
@abc.abstractmethod
|
||||
def list_available(self):
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
from stevedore import driver as drivermanager
|
||||
|
||||
@@ -16,10 +16,13 @@
|
||||
|
||||
import abc
|
||||
|
||||
import six
|
||||
|
||||
from watcher.common import service
|
||||
|
||||
|
||||
class Loadable(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class Loadable(object):
|
||||
"""Generic interface for dynamically loading a driver/entry point.
|
||||
|
||||
This defines the contract in order to let the loader manager inject
|
||||
@@ -45,7 +48,8 @@ LoadableSingletonMeta = type(
|
||||
"LoadableSingletonMeta", (abc.ABCMeta, service.Singleton), {})
|
||||
|
||||
|
||||
class LoadableSingleton(object, metaclass=LoadableSingletonMeta):
|
||||
@six.add_metaclass(LoadableSingletonMeta)
|
||||
class LoadableSingleton(object):
|
||||
"""Generic interface for dynamically loading a driver as a singleton.
|
||||
|
||||
This defines the contract in order to let the loader manager inject
|
||||
|
||||
@@ -15,9 +15,11 @@
|
||||
# under the License.
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
|
||||
class ServiceManager(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class ServiceManager(object):
|
||||
|
||||
@abc.abstractproperty
|
||||
def service_name(self):
|
||||
|
||||
@@ -28,6 +28,7 @@ from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
from oslo_utils import strutils
|
||||
from oslo_utils import uuidutils
|
||||
import six
|
||||
|
||||
from watcher.common import exception
|
||||
|
||||
@@ -81,7 +82,7 @@ def safe_rstrip(value, chars=None):
|
||||
:return: Stripped value.
|
||||
|
||||
"""
|
||||
if not isinstance(value, str):
|
||||
if not isinstance(value, six.string_types):
|
||||
LOG.warning(
|
||||
"Failed to remove trailing character. Returning original object."
|
||||
"Supplied object is not a string: %s,", value)
|
||||
@@ -103,7 +104,7 @@ def is_hostname_safe(hostname):
|
||||
|
||||
"""
|
||||
m = r'^[a-z0-9]([a-z0-9\-]{0,61}[a-z0-9])?$'
|
||||
return (isinstance(hostname, str) and
|
||||
return (isinstance(hostname, six.string_types) and
|
||||
(re.match(m, hostname) is not None))
|
||||
|
||||
|
||||
|
||||
@@ -43,20 +43,11 @@ APPLIER_MANAGER_OPTS = [
|
||||
help='Select the engine to use to execute the workflow'),
|
||||
]
|
||||
|
||||
APPLIER_OPTS = [
|
||||
cfg.BoolOpt('rollback_when_actionplan_failed',
|
||||
default=False,
|
||||
help='If set True, the failed actionplan will rollback '
|
||||
'when executing. Defaule value is False.'),
|
||||
]
|
||||
|
||||
|
||||
def register_opts(conf):
|
||||
conf.register_group(watcher_applier)
|
||||
conf.register_opts(APPLIER_MANAGER_OPTS, group=watcher_applier)
|
||||
conf.register_opts(APPLIER_OPTS, group=watcher_applier)
|
||||
|
||||
|
||||
def list_opts():
|
||||
return [(watcher_applier, APPLIER_MANAGER_OPTS),
|
||||
(watcher_applier, APPLIER_OPTS)]
|
||||
return [(watcher_applier, APPLIER_MANAGER_OPTS)]
|
||||
|
||||
@@ -18,6 +18,7 @@ Base classes for storage engines
|
||||
import abc
|
||||
from oslo_config import cfg
|
||||
from oslo_db import api as db_api
|
||||
import six
|
||||
|
||||
_BACKEND_MAPPING = {'sqlalchemy': 'watcher.db.sqlalchemy.api'}
|
||||
IMPL = db_api.DBAPI.from_config(cfg.CONF, backend_mapping=_BACKEND_MAPPING,
|
||||
@@ -29,7 +30,8 @@ def get_instance():
|
||||
return IMPL
|
||||
|
||||
|
||||
class BaseConnection(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseConnection(object):
|
||||
"""Base class for storage system connections."""
|
||||
|
||||
@abc.abstractmethod
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import collections
|
||||
import datetime
|
||||
import itertools
|
||||
@@ -23,6 +25,7 @@ import sys
|
||||
from oslo_log import log
|
||||
from oslo_utils import strutils
|
||||
import prettytable as ptable
|
||||
from six.moves import input
|
||||
|
||||
from watcher._i18n import _
|
||||
from watcher._i18n import lazy_translation_enabled
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
import abc
|
||||
import six
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
@@ -35,11 +36,9 @@ CONF = cfg.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
class BaseMetaClass(service.Singleton, abc.ABCMeta):
|
||||
pass
|
||||
|
||||
|
||||
class BaseAuditHandler(object, metaclass=BaseMetaClass):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
@six.add_metaclass(service.Singleton)
|
||||
class BaseAuditHandler(object):
|
||||
|
||||
@abc.abstractmethod
|
||||
def execute(self, audit, request_context):
|
||||
@@ -58,7 +57,8 @@ class BaseAuditHandler(object, metaclass=BaseMetaClass):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class AuditHandler(BaseAuditHandler, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class AuditHandler(BaseAuditHandler):
|
||||
|
||||
def __init__(self):
|
||||
super(AuditHandler, self).__init__()
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from urllib import parse as urlparse
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
import six.moves.urllib.parse as urlparse
|
||||
|
||||
from watcher.common import clients
|
||||
from watcher.common import exception
|
||||
|
||||
@@ -15,11 +15,13 @@
|
||||
# limitations under the License.
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
from watcher.common.loader import loadable
|
||||
|
||||
|
||||
class Goal(loadable.Loadable, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class Goal(loadable.Loadable):
|
||||
|
||||
def __init__(self, config):
|
||||
super(Goal, self).__init__(config)
|
||||
|
||||
@@ -27,8 +27,11 @@ import abc
|
||||
import jsonschema
|
||||
from oslo_serialization import jsonutils
|
||||
|
||||
import six
|
||||
|
||||
class EfficacySpecification(object, metaclass=abc.ABCMeta):
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class EfficacySpecification(object):
|
||||
|
||||
def __init__(self):
|
||||
self._indicators_specs = self.get_indicators_specifications()
|
||||
|
||||
@@ -18,6 +18,7 @@ import abc
|
||||
import jsonschema
|
||||
from jsonschema import SchemaError
|
||||
from jsonschema import ValidationError
|
||||
import six
|
||||
|
||||
from oslo_log import log
|
||||
from oslo_serialization import jsonutils
|
||||
@@ -28,7 +29,8 @@ from watcher.common import exception
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
class IndicatorSpecification(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class IndicatorSpecification(object):
|
||||
|
||||
def __init__(self, name=None, description=None, unit=None, required=True):
|
||||
self.name = name
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
from watcher.common.loader import default
|
||||
|
||||
|
||||
|
||||
@@ -25,9 +25,11 @@ See: :doc:`../architecture` for more details on this component.
|
||||
"""
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
|
||||
class Model(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class Model(object):
|
||||
|
||||
@abc.abstractmethod
|
||||
def to_string(self):
|
||||
|
||||
@@ -110,6 +110,7 @@ import time
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
import six
|
||||
|
||||
from watcher.common import clients
|
||||
from watcher.common.loader import loadable
|
||||
@@ -119,8 +120,8 @@ LOG = log.getLogger(__name__)
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
class BaseClusterDataModelCollector(loadable.LoadableSingleton,
|
||||
metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseClusterDataModelCollector(loadable.LoadableSingleton):
|
||||
|
||||
STALE_MODEL = model_root.ModelRoot(stale=True)
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import six
|
||||
|
||||
from oslo_log import log
|
||||
|
||||
from watcher.common import cinder_helper
|
||||
@@ -287,7 +289,7 @@ class CinderModelBuilder(base.BaseModelBuilder):
|
||||
:param instance: Cinder Volume object.
|
||||
:return: A volume node for the graph.
|
||||
"""
|
||||
attachments = [{k: v for k, v in iter(d.items()) if k in (
|
||||
attachments = [{k: v for k, v in six.iteritems(d) if k in (
|
||||
'server_id', 'attachment_id')} for d in volume.attachments]
|
||||
|
||||
volume_attributes = {
|
||||
|
||||
@@ -16,12 +16,14 @@
|
||||
|
||||
import abc
|
||||
|
||||
import six
|
||||
|
||||
from watcher.decision_engine.model.element import base
|
||||
from watcher.objects import fields as wfields
|
||||
|
||||
|
||||
class BaremetalResource(base.Element, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaremetalResource(base.Element):
|
||||
|
||||
VERSION = '1.0'
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import collections
|
||||
|
||||
from lxml import etree
|
||||
from oslo_log import log
|
||||
import six
|
||||
|
||||
from watcher.objects import base
|
||||
from watcher.objects import fields as wfields
|
||||
@@ -28,8 +29,9 @@ from watcher.objects import fields as wfields
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class Element(base.WatcherObject, base.WatcherObjectDictCompat,
|
||||
base.WatcherComparableObject, metaclass=abc.ABCMeta):
|
||||
base.WatcherComparableObject):
|
||||
|
||||
# Initial version
|
||||
VERSION = '1.0'
|
||||
|
||||
@@ -16,12 +16,14 @@
|
||||
|
||||
import abc
|
||||
|
||||
import six
|
||||
|
||||
from watcher.decision_engine.model.element import base
|
||||
from watcher.objects import fields as wfields
|
||||
|
||||
|
||||
class ComputeResource(base.Element, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class ComputeResource(base.Element):
|
||||
|
||||
VERSION = '1.0'
|
||||
|
||||
|
||||
@@ -16,12 +16,14 @@
|
||||
|
||||
import abc
|
||||
|
||||
import six
|
||||
|
||||
from watcher.decision_engine.model.element import base
|
||||
from watcher.objects import fields as wfields
|
||||
|
||||
|
||||
class StorageResource(base.Element, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class StorageResource(base.Element):
|
||||
|
||||
VERSION = '1.0'
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ from lxml import etree
|
||||
import networkx as nx
|
||||
from oslo_concurrency import lockutils
|
||||
from oslo_log import log
|
||||
import six
|
||||
|
||||
from watcher._i18n import _
|
||||
from watcher.common import exception
|
||||
@@ -92,9 +93,9 @@ class ModelRoot(nx.DiGraph, base.Model):
|
||||
:param node: :py:class:`~.node.ComputeNode` object or node UUID
|
||||
:type node: str or :py:class:`~.instance.Instance`
|
||||
"""
|
||||
if isinstance(instance, str):
|
||||
if isinstance(instance, six.string_types):
|
||||
instance = self.get_instance_by_uuid(instance)
|
||||
if isinstance(node, str):
|
||||
if isinstance(node, six.string_types):
|
||||
node = self.get_node_by_uuid(node)
|
||||
self.assert_node(node)
|
||||
self.assert_instance(instance)
|
||||
@@ -103,9 +104,9 @@ class ModelRoot(nx.DiGraph, base.Model):
|
||||
|
||||
@lockutils.synchronized("model_root")
|
||||
def unmap_instance(self, instance, node):
|
||||
if isinstance(instance, str):
|
||||
if isinstance(instance, six.string_types):
|
||||
instance = self.get_instance_by_uuid(instance)
|
||||
if isinstance(node, str):
|
||||
if isinstance(node, six.string_types):
|
||||
node = self.get_node_by_uuid(node)
|
||||
|
||||
self.remove_edge(instance.uuid, node.uuid)
|
||||
@@ -366,9 +367,9 @@ class StorageModelRoot(nx.DiGraph, base.Model):
|
||||
:param pool: :py:class:`~.node.Pool` object or pool name
|
||||
:param node: :py:class:`~.node.StorageNode` object or node host
|
||||
"""
|
||||
if isinstance(pool, str):
|
||||
if isinstance(pool, six.string_types):
|
||||
pool = self.get_pool_by_pool_name(pool)
|
||||
if isinstance(node, str):
|
||||
if isinstance(node, six.string_types):
|
||||
node = self.get_node_by_name(node)
|
||||
self.assert_node(node)
|
||||
self.assert_pool(pool)
|
||||
@@ -382,9 +383,9 @@ class StorageModelRoot(nx.DiGraph, base.Model):
|
||||
:param pool: :py:class:`~.node.Pool` object or pool name
|
||||
:param node: :py:class:`~.node.StorageNode` object or node name
|
||||
"""
|
||||
if isinstance(pool, str):
|
||||
if isinstance(pool, six.string_types):
|
||||
pool = self.get_pool_by_pool_name(pool)
|
||||
if isinstance(node, str):
|
||||
if isinstance(node, six.string_types):
|
||||
node = self.get_node_by_name(node)
|
||||
|
||||
self.remove_edge(pool.name, node.host)
|
||||
@@ -410,9 +411,9 @@ class StorageModelRoot(nx.DiGraph, base.Model):
|
||||
:param volume: :py:class:`~.volume.Volume` object or volume UUID
|
||||
:param pool: :py:class:`~.node.Pool` object or pool name
|
||||
"""
|
||||
if isinstance(volume, str):
|
||||
if isinstance(volume, six.string_types):
|
||||
volume = self.get_volume_by_uuid(volume)
|
||||
if isinstance(pool, str):
|
||||
if isinstance(pool, six.string_types):
|
||||
pool = self.get_pool_by_pool_name(pool)
|
||||
self.assert_pool(pool)
|
||||
self.assert_volume(volume)
|
||||
@@ -426,9 +427,9 @@ class StorageModelRoot(nx.DiGraph, base.Model):
|
||||
:param volume: :py:class:`~.volume.Volume` object or volume UUID
|
||||
:param pool: :py:class:`~.node.Pool` object or pool name
|
||||
"""
|
||||
if isinstance(volume, str):
|
||||
if isinstance(volume, six.string_types):
|
||||
volume = self.get_volume_by_uuid(volume)
|
||||
if isinstance(pool, str):
|
||||
if isinstance(pool, six.string_types):
|
||||
pool = self.get_pool_by_pool_name(pool)
|
||||
|
||||
self.remove_edge(volume.uuid, pool.name)
|
||||
|
||||
@@ -17,9 +17,11 @@
|
||||
# limitations under the License.
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
|
||||
class NotificationEndpoint(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class NotificationEndpoint(object):
|
||||
|
||||
def __init__(self, collector):
|
||||
super(NotificationEndpoint, self).__init__()
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import six
|
||||
|
||||
from oslo_log import log
|
||||
from watcher.common import cinder_helper
|
||||
from watcher.common import exception
|
||||
@@ -159,7 +161,7 @@ class CinderNotification(base.NotificationEndpoint):
|
||||
return 'attachment_id'
|
||||
|
||||
attachments = [
|
||||
{_keyReplace(k): v for k, v in iter(d.items())
|
||||
{_keyReplace(k): v for k, v in six.iteritems(d)
|
||||
if k in ('instance_uuid', 'id')}
|
||||
for d in data['volume_attachment']
|
||||
]
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
import re
|
||||
|
||||
import oslo_messaging as om
|
||||
import six
|
||||
|
||||
|
||||
class NotificationFilter(om.NotificationFilter):
|
||||
@@ -80,7 +81,7 @@ class NotificationFilter(om.NotificationFilter):
|
||||
elif regex is not None and data is None:
|
||||
return True
|
||||
elif (regex is not None and
|
||||
isinstance(data, str) and
|
||||
isinstance(data, six.string_types) and
|
||||
not regex.match(data)):
|
||||
return True
|
||||
|
||||
|
||||
@@ -45,11 +45,13 @@ See :doc:`../architecture` for more details on this component.
|
||||
"""
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
from watcher.common.loader import loadable
|
||||
|
||||
|
||||
class BasePlanner(loadable.Loadable, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BasePlanner(loadable.Loadable):
|
||||
|
||||
@classmethod
|
||||
def get_config_opts(cls):
|
||||
|
||||
@@ -16,11 +16,13 @@
|
||||
#
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
from watcher.common import context
|
||||
|
||||
|
||||
class BaseScope(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseScope(object):
|
||||
"""A base class for Scope mechanism
|
||||
|
||||
Child of this class is called when audit launches strategy. This strategy
|
||||
|
||||
@@ -17,11 +17,13 @@
|
||||
# limitations under the License.
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
from watcher.common.loader import loadable
|
||||
|
||||
|
||||
class ScoringEngine(loadable.Loadable, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class ScoringEngine(loadable.Loadable):
|
||||
"""A base class for all the Scoring Engines.
|
||||
|
||||
A Scoring Engine is an instance of a data model, to which the learning
|
||||
@@ -95,7 +97,8 @@ class ScoringEngine(loadable.Loadable, metaclass=abc.ABCMeta):
|
||||
return []
|
||||
|
||||
|
||||
class ScoringEngineContainer(loadable.Loadable, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class ScoringEngineContainer(loadable.Loadable):
|
||||
"""A base class for all the Scoring Engines Containers.
|
||||
|
||||
A Scoring Engine Container is an abstraction which allows to plugin
|
||||
|
||||
@@ -56,11 +56,13 @@ Two approaches to dealing with this can be envisaged:
|
||||
"""
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
from watcher.decision_engine.solution import efficacy
|
||||
|
||||
|
||||
class BaseSolution(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseSolution(object):
|
||||
def __init__(self, goal, strategy):
|
||||
"""Base Solution constructor
|
||||
|
||||
|
||||
@@ -17,9 +17,11 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
import abc
|
||||
import six
|
||||
|
||||
|
||||
class BaseSolutionComparator(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseSolutionComparator(object):
|
||||
@abc.abstractmethod
|
||||
def compare(self, sol1, sol2):
|
||||
raise NotImplementedError()
|
||||
|
||||
@@ -17,9 +17,11 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
import abc
|
||||
import six
|
||||
|
||||
|
||||
class BaseSolutionEvaluator(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseSolutionEvaluator(object):
|
||||
@abc.abstractmethod
|
||||
def evaluate(self, solution):
|
||||
raise NotImplementedError()
|
||||
|
||||
@@ -18,12 +18,14 @@
|
||||
# limitations under the License.
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
from watcher import notifications
|
||||
from watcher.objects import fields
|
||||
|
||||
|
||||
class StrategyContext(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class StrategyContext(object):
|
||||
|
||||
def execute_strategy(self, audit, request_context):
|
||||
"""Execute the strategy for the given an audit
|
||||
|
||||
@@ -17,9 +17,11 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
import abc
|
||||
import six
|
||||
|
||||
|
||||
class BaseSelector(object, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseSelector(object):
|
||||
|
||||
@abc.abstractmethod
|
||||
def select(self):
|
||||
|
||||
@@ -37,6 +37,7 @@ which are dynamically loaded by Watcher at launch time.
|
||||
"""
|
||||
|
||||
import abc
|
||||
import six
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
@@ -120,7 +121,8 @@ class StrategyEndpoint(object):
|
||||
return [available_datasource, available_metrics, available_cdm]
|
||||
|
||||
|
||||
class BaseStrategy(loadable.Loadable, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class BaseStrategy(loadable.Loadable):
|
||||
"""A base class for all the strategies
|
||||
|
||||
A Strategy is an algorithm implementation which is able to find a
|
||||
@@ -469,7 +471,8 @@ class BaseStrategy(loadable.Loadable, metaclass=abc.ABCMeta):
|
||||
input_parameters=parameters)
|
||||
|
||||
|
||||
class DummyBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class DummyBaseStrategy(BaseStrategy):
|
||||
|
||||
@classmethod
|
||||
def get_goal_name(cls):
|
||||
@@ -482,7 +485,8 @@ class DummyBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
return []
|
||||
|
||||
|
||||
class UnclassifiedStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class UnclassifiedStrategy(BaseStrategy):
|
||||
"""This base class is used to ease the development of new strategies
|
||||
|
||||
The goal defined within this strategy can be used to simplify the
|
||||
@@ -496,7 +500,8 @@ class UnclassifiedStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
return "unclassified"
|
||||
|
||||
|
||||
class ServerConsolidationBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class ServerConsolidationBaseStrategy(BaseStrategy):
|
||||
|
||||
REASON_FOR_DISABLE = 'watcher_disabled'
|
||||
|
||||
@@ -505,14 +510,16 @@ class ServerConsolidationBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
return "server_consolidation"
|
||||
|
||||
|
||||
class ThermalOptimizationBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class ThermalOptimizationBaseStrategy(BaseStrategy):
|
||||
|
||||
@classmethod
|
||||
def get_goal_name(cls):
|
||||
return "thermal_optimization"
|
||||
|
||||
|
||||
class WorkloadStabilizationBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class WorkloadStabilizationBaseStrategy(BaseStrategy):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(WorkloadStabilizationBaseStrategy, self
|
||||
@@ -524,14 +531,16 @@ class WorkloadStabilizationBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
return "workload_balancing"
|
||||
|
||||
|
||||
class NoisyNeighborBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class NoisyNeighborBaseStrategy(BaseStrategy):
|
||||
|
||||
@classmethod
|
||||
def get_goal_name(cls):
|
||||
return "noisy_neighbor"
|
||||
|
||||
|
||||
class SavingEnergyBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class SavingEnergyBaseStrategy(BaseStrategy):
|
||||
|
||||
@classmethod
|
||||
def get_goal_name(cls):
|
||||
@@ -544,7 +553,8 @@ class SavingEnergyBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
return []
|
||||
|
||||
|
||||
class ZoneMigrationBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class ZoneMigrationBaseStrategy(BaseStrategy):
|
||||
|
||||
@classmethod
|
||||
def get_goal_name(cls):
|
||||
@@ -557,7 +567,8 @@ class ZoneMigrationBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
return []
|
||||
|
||||
|
||||
class HostMaintenanceBaseStrategy(BaseStrategy, metaclass=abc.ABCMeta):
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class HostMaintenanceBaseStrategy(BaseStrategy):
|
||||
|
||||
REASON_FOR_MAINTAINING = 'watcher_maintaining'
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#
|
||||
|
||||
from oslo_log import log
|
||||
import six
|
||||
|
||||
from watcher._i18n import _
|
||||
from watcher.common import exception
|
||||
@@ -131,7 +132,7 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy):
|
||||
|
||||
:param instance:
|
||||
"""
|
||||
if isinstance(instance.state, str):
|
||||
if isinstance(instance.state, six.string_types):
|
||||
return instance.state
|
||||
elif isinstance(instance.state, element.InstanceState):
|
||||
return instance.state.value
|
||||
@@ -147,7 +148,7 @@ class VMWorkloadConsolidation(base.ServerConsolidationBaseStrategy):
|
||||
|
||||
:param node:
|
||||
"""
|
||||
if isinstance(node.status, str):
|
||||
if isinstance(node.status, six.string_types):
|
||||
return node.status
|
||||
elif isinstance(node.status, element.ServiceState):
|
||||
return node.status.value
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
from __future__ import division
|
||||
|
||||
from oslo_log import log
|
||||
|
||||
from watcher._i18n import _
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#
|
||||
|
||||
from dateutil.parser import parse
|
||||
import six
|
||||
|
||||
from oslo_log import log
|
||||
|
||||
@@ -281,7 +282,7 @@ class ZoneMigration(base.ZoneMigrationBaseStrategy):
|
||||
action_counter = ActionCounter(total_limit,
|
||||
per_pool_limit, per_node_limit)
|
||||
|
||||
for k, targets in iter(filtered_targets.items()):
|
||||
for k, targets in six.iteritems(filtered_targets):
|
||||
if k == VOLUME:
|
||||
self.volumes_migration(targets, action_counter)
|
||||
elif k == INSTANCE:
|
||||
@@ -579,7 +580,7 @@ class ZoneMigration(base.ZoneMigrationBaseStrategy):
|
||||
filter_list = []
|
||||
priority_filter_map = self.get_priority_filter_map()
|
||||
|
||||
for k, v in iter(self.priority.items()):
|
||||
for k, v in six.iteritems(self.priority):
|
||||
if k in priority_filter_map:
|
||||
filter_list.append(priority_filter_map[k](v))
|
||||
|
||||
@@ -709,7 +710,7 @@ class BaseFilter(object):
|
||||
return {}
|
||||
|
||||
for cond in list(reversed(self.condition)):
|
||||
for k, v in iter(targets.items()):
|
||||
for k, v in six.iteritems(targets):
|
||||
if not self.is_allowed(k):
|
||||
continue
|
||||
LOG.debug("filter:%s with the key: %s", cond, k)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
import copy
|
||||
import futurist
|
||||
from futurist import waiters
|
||||
import six
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
@@ -28,7 +29,8 @@ CONF = cfg.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
class DecisionEngineThreadPool(object, metaclass=service.Singleton):
|
||||
@six.add_metaclass(service.Singleton)
|
||||
class DecisionEngineThreadPool(object):
|
||||
"""Singleton threadpool to submit general tasks to"""
|
||||
|
||||
def __init__(self):
|
||||
|
||||
@@ -285,31 +285,3 @@ def no_redundant_import_alias(logical_line):
|
||||
"""
|
||||
if re.match(re_redundant_import_alias, logical_line):
|
||||
yield(0, "N342: No redundant import alias.")
|
||||
|
||||
|
||||
@flake8ext
|
||||
def import_stock_mock(logical_line):
|
||||
"""Use python's mock, not the mock library.
|
||||
|
||||
Since we `dropped support for python 2`__, we no longer need to use the
|
||||
mock library, which existed to backport py3 functionality into py2.
|
||||
Which must be done by saying::
|
||||
|
||||
from unittest import mock
|
||||
|
||||
...because if you say::
|
||||
|
||||
import mock
|
||||
|
||||
...you definitely will not be getting the standard library mock. That will
|
||||
always import the third party mock library. This check can be removed in
|
||||
the future (and we can start saying ``import mock`` again) if we manage to
|
||||
purge these transitive dependencies.
|
||||
|
||||
.. __: https://review.opendev.org/#/c/717540
|
||||
|
||||
N366
|
||||
"""
|
||||
if logical_line == 'import mock':
|
||||
yield (0, "N366: You must explicitly import python's mock: "
|
||||
"``from unittest import mock``")
|
||||
|
||||
@@ -4,7 +4,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: watcher VERSION\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
|
||||
"POT-Creation-Date: 2020-04-26 02:09+0000\n"
|
||||
"POT-Creation-Date: 2020-04-26 01:47+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -4,7 +4,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: watcher VERSION\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
|
||||
"POT-Creation-Date: 2020-04-26 02:09+0000\n"
|
||||
"POT-Creation-Date: 2020-04-26 01:47+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"""Utility methods for objects"""
|
||||
|
||||
import ast
|
||||
import six
|
||||
|
||||
from oslo_serialization import jsonutils
|
||||
from oslo_versionedobjects import fields
|
||||
@@ -66,7 +67,7 @@ class ListOfUUIDsField(fields.AutoTypedField):
|
||||
class FlexibleDict(fields.FieldType):
|
||||
@staticmethod
|
||||
def coerce(obj, attr, value):
|
||||
if isinstance(value, str):
|
||||
if isinstance(value, six.string_types):
|
||||
value = ast.literal_eval(value)
|
||||
return dict(value)
|
||||
|
||||
@@ -86,7 +87,7 @@ class FlexibleDictField(fields.AutoTypedField):
|
||||
class FlexibleListOfDict(fields.FieldType):
|
||||
@staticmethod
|
||||
def coerce(obj, attr, value):
|
||||
if isinstance(value, str):
|
||||
if isinstance(value, six.string_types):
|
||||
value = ast.literal_eval(value)
|
||||
return list(value)
|
||||
|
||||
@@ -105,7 +106,7 @@ class FlexibleListOfDictField(fields.AutoTypedField):
|
||||
|
||||
class Json(fields.FieldType):
|
||||
def coerce(self, obj, attr, value):
|
||||
if isinstance(value, str):
|
||||
if isinstance(value, six.string_types):
|
||||
loaded = jsonutils.loads(value)
|
||||
return loaded
|
||||
return value
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
# NOTE(deva): import auth_token so we can override a config option
|
||||
|
||||
import copy
|
||||
from unittest import mock
|
||||
from urllib import parse as urlparse
|
||||
import mock
|
||||
|
||||
from oslo_config import cfg
|
||||
import pecan
|
||||
import pecan.testing
|
||||
from six.moves.urllib import parse as urlparse
|
||||
|
||||
from watcher.api import hooks
|
||||
from watcher.common import context as watcher_context
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import importlib
|
||||
import imp
|
||||
from oslo_config import cfg
|
||||
from watcher.api import config as api_config
|
||||
from watcher.tests.api import base
|
||||
@@ -23,13 +23,13 @@ class TestRoot(base.FunctionalTest):
|
||||
def test_config_enable_webhooks_auth(self):
|
||||
acl_public_routes = ['/']
|
||||
cfg.CONF.set_override('enable_webhooks_auth', True, 'api')
|
||||
importlib.reload(api_config)
|
||||
imp.reload(api_config)
|
||||
self.assertEqual(acl_public_routes,
|
||||
api_config.app['acl_public_routes'])
|
||||
|
||||
def test_config_disable_webhooks_auth(self):
|
||||
acl_public_routes = ['/', '/v1/webhooks/.*']
|
||||
cfg.CONF.set_override('enable_webhooks_auth', False, 'api')
|
||||
importlib.reload(api_config)
|
||||
imp.reload(api_config)
|
||||
self.assertEqual(acl_public_routes,
|
||||
api_config.app['acl_public_routes'])
|
||||
|
||||
@@ -14,8 +14,9 @@
|
||||
|
||||
"""Tests for the Pecan API hooks."""
|
||||
|
||||
from unittest import mock
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import mock
|
||||
from oslo_config import cfg
|
||||
import oslo_messaging as messaging
|
||||
from oslo_serialization import jsonutils
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
from apscheduler.schedulers import background
|
||||
import datetime
|
||||
import freezegun
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
from watcher.api import scheduling
|
||||
from watcher.notifications import service
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from oslo_config import cfg
|
||||
import wsme
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
import datetime
|
||||
import itertools
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_serialization import jsonutils
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
import datetime
|
||||
import itertools
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_serialization import jsonutils
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
|
||||
import datetime
|
||||
import itertools
|
||||
from unittest import mock
|
||||
from urllib import parse as urlparse
|
||||
import mock
|
||||
from webtest.app import AppError
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_serialization import jsonutils
|
||||
from oslo_utils import timeutils
|
||||
import webtest.app as webtest_app
|
||||
from six.moves.urllib import parse as urlparse
|
||||
from wsme import types as wtypes
|
||||
|
||||
from watcher.api.controllers.v1 import audit_template as api_audit_template
|
||||
@@ -603,7 +603,7 @@ class TestPost(FunctionalTestWithSetup):
|
||||
audit_template_dict = post_get_test_audit_template(
|
||||
goal=self.fake_goal1.uuid,
|
||||
strategy=self.fake_strategy1.uuid, scope=scope)
|
||||
with self.assertRaisesRegex(webtest_app.AppError,
|
||||
with self.assertRaisesRegex(AppError,
|
||||
"be included and excluded together"):
|
||||
self.post_json('/audit_templates', audit_template_dict)
|
||||
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
import datetime
|
||||
from dateutil import tz
|
||||
import itertools
|
||||
from unittest import mock
|
||||
from urllib import parse as urlparse
|
||||
import mock
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_serialization import jsonutils
|
||||
from oslo_utils import timeutils
|
||||
from wsme import types as wtypes
|
||||
|
||||
from six.moves.urllib import parse as urlparse
|
||||
from watcher.api.controllers.v1 import audit as api_audit
|
||||
from watcher.common import utils
|
||||
from watcher.db import api as db_api
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
from oslo_serialization import jsonutils
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_serialization import jsonutils
|
||||
from urllib import parse as urlparse
|
||||
from six.moves.urllib import parse as urlparse
|
||||
|
||||
from watcher.common import utils
|
||||
from watcher.tests.api import base as api_base
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_serialization import jsonutils
|
||||
from urllib import parse as urlparse
|
||||
from six.moves.urllib import parse as urlparse
|
||||
|
||||
from watcher.tests.api import base as api_base
|
||||
from watcher.tests.objects import utils as obj_utils
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from unittest import mock
|
||||
from urllib import parse as urlparse
|
||||
import mock
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_serialization import jsonutils
|
||||
from six.moves.urllib import parse as urlparse
|
||||
|
||||
from watcher.common import utils
|
||||
from watcher.decision_engine import rpcapi as deapi
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from unittest import mock
|
||||
import mock
|
||||
import webtest
|
||||
import wsme
|
||||
from wsme import types as wtypes
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
from watcher.decision_engine import rpcapi as deapi
|
||||
from watcher import objects
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
from watcher.applier.action_plan import default
|
||||
from watcher.applier import default as ap_applier
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
# implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from watcher.applier.actions import base as abase
|
||||
from watcher.applier.loading import default
|
||||
|
||||
@@ -13,9 +13,10 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from unittest import mock
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import jsonschema
|
||||
import mock
|
||||
|
||||
from watcher.applier.actions import base as baction
|
||||
from watcher.applier.actions import change_node_power_state
|
||||
|
||||
@@ -13,9 +13,10 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from unittest import mock
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import jsonschema
|
||||
import mock
|
||||
|
||||
from watcher.applier.actions import base as baction
|
||||
from watcher.applier.actions import change_nova_service_state
|
||||
|
||||
@@ -13,9 +13,11 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from unittest import mock
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
import jsonschema
|
||||
import mock
|
||||
|
||||
from watcher.applier.actions import base as baction
|
||||
from watcher.applier.actions import migration
|
||||
@@ -185,29 +187,6 @@ class TestMigration(base.TestCase):
|
||||
dest_hostname="compute2-hostname"
|
||||
)
|
||||
|
||||
def test_revert_live_migration(self):
|
||||
self.m_helper.find_instance.return_value = self.INSTANCE_UUID
|
||||
|
||||
self.action.revert()
|
||||
|
||||
self.m_helper_cls.assert_called_once_with(osc=self.m_osc)
|
||||
self.m_helper.live_migrate_instance.assert_called_once_with(
|
||||
instance_id=self.INSTANCE_UUID,
|
||||
dest_hostname="compute1-hostname"
|
||||
)
|
||||
|
||||
def test_revert_cold_migration(self):
|
||||
self.m_helper.find_instance.return_value = self.INSTANCE_UUID
|
||||
|
||||
self.action_cold.revert()
|
||||
|
||||
self.m_helper_cls.assert_called_once_with(osc=self.m_osc)
|
||||
self.m_helper.watcher_non_live_migrate_instance.\
|
||||
assert_called_once_with(
|
||||
instance_id=self.INSTANCE_UUID,
|
||||
dest_hostname="compute1-hostname"
|
||||
)
|
||||
|
||||
def test_abort_live_migrate(self):
|
||||
migration = mock.MagicMock()
|
||||
migration.id = "2"
|
||||
|
||||
@@ -13,8 +13,9 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import jsonschema
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
from watcher.applier.actions import base as baction
|
||||
from watcher.applier.actions import resize
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
|
||||
import jsonschema
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
from watcher.applier.actions import sleep
|
||||
from watcher.tests import base
|
||||
|
||||
@@ -12,9 +12,10 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from unittest import mock
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import jsonschema
|
||||
import mock
|
||||
|
||||
from watcher.applier.actions import base as baction
|
||||
from watcher.applier.actions import volume_migration
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#
|
||||
|
||||
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
from watcher.applier.messaging import trigger
|
||||
from watcher.common import utils
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
from unittest import mock
|
||||
import mock
|
||||
|
||||
import oslo_messaging as om
|
||||
from watcher.applier import manager as applier_manager
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
from unittest import mock
|
||||
|
||||
import mock
|
||||
import oslo_messaging as om
|
||||
from watcher.applier import rpcapi
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user