Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e033d7b96 | ||
|
|
0543ccfe74 | ||
|
|
ec62bbe5bd | ||
|
|
cbb06e6765 | ||
|
|
6e1be3cca4 | ||
|
|
043ebb71c6 | ||
|
|
870e6d75e0 | ||
|
|
3069f83731 | ||
|
|
d7d534f5d1 |
@@ -2,3 +2,4 @@
|
|||||||
host=review.opendev.org
|
host=review.opendev.org
|
||||||
port=29418
|
port=29418
|
||||||
project=openstack/watcher.git
|
project=openstack/watcher.git
|
||||||
|
defaultbranch=stable/ussuri
|
||||||
|
|||||||
25
.zuul.yaml
25
.zuul.yaml
@@ -160,7 +160,6 @@
|
|||||||
timeout: 7200
|
timeout: 7200
|
||||||
required-projects: &base_required_projects
|
required-projects: &base_required_projects
|
||||||
- openstack/ceilometer
|
- openstack/ceilometer
|
||||||
- openstack/devstack-gate
|
|
||||||
- openstack/python-openstackclient
|
- openstack/python-openstackclient
|
||||||
- openstack/python-watcherclient
|
- openstack/python-watcherclient
|
||||||
- openstack/watcher
|
- openstack/watcher
|
||||||
@@ -179,14 +178,10 @@
|
|||||||
s-container: false
|
s-container: false
|
||||||
s-object: false
|
s-object: false
|
||||||
s-proxy: false
|
s-proxy: false
|
||||||
devstack_localrc:
|
tempest_plugins:
|
||||||
TEMPEST_PLUGINS: /opt/stack/watcher-tempest-plugin
|
- watcher-tempest-plugin
|
||||||
USE_PYTHON3: true
|
|
||||||
tempest_test_regex: watcher_tempest_plugin.tests.api
|
tempest_test_regex: watcher_tempest_plugin.tests.api
|
||||||
tox_envlist: all
|
tox_envlist: all
|
||||||
tox_environment:
|
|
||||||
# Do we really need to set this? It's cargo culted
|
|
||||||
PYTHONUNBUFFERED: 'true'
|
|
||||||
zuul_copy_output:
|
zuul_copy_output:
|
||||||
/etc/hosts: logs
|
/etc/hosts: logs
|
||||||
|
|
||||||
@@ -200,10 +195,12 @@
|
|||||||
|
|
||||||
- job:
|
- job:
|
||||||
name: watcher-grenade
|
name: watcher-grenade
|
||||||
parent: legacy-dsvm-base
|
parent: grenade
|
||||||
timeout: 10800
|
required-projects:
|
||||||
run: playbooks/legacy/grenade-devstack-watcher/run.yaml
|
- openstack/watcher
|
||||||
post-run: playbooks/legacy/grenade-devstack-watcher/post.yaml
|
- openstack/python-watcherclient
|
||||||
|
- openstack/watcher-tempest-plugin
|
||||||
|
vars: *base_vars
|
||||||
irrelevant-files:
|
irrelevant-files:
|
||||||
- ^(test-|)requirements.txt$
|
- ^(test-|)requirements.txt$
|
||||||
- ^.*\.rst$
|
- ^.*\.rst$
|
||||||
@@ -215,12 +212,6 @@
|
|||||||
- ^setup.cfg$
|
- ^setup.cfg$
|
||||||
- ^tools/.*$
|
- ^tools/.*$
|
||||||
- ^tox.ini$
|
- ^tox.ini$
|
||||||
required-projects:
|
|
||||||
- openstack/grenade
|
|
||||||
- openstack/devstack-gate
|
|
||||||
- openstack/watcher
|
|
||||||
- openstack/python-watcherclient
|
|
||||||
- openstack/watcher-tempest-plugin
|
|
||||||
|
|
||||||
- job:
|
- job:
|
||||||
# This job is used in python-watcherclient repo
|
# This job is used in python-watcherclient repo
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
- hosts: primary
|
|
||||||
tasks:
|
|
||||||
|
|
||||||
- name: Copy files from {{ ansible_user_dir }}/workspace/ on node
|
|
||||||
synchronize:
|
|
||||||
src: '{{ ansible_user_dir }}/workspace/'
|
|
||||||
dest: '{{ zuul.executor.log_root }}'
|
|
||||||
mode: pull
|
|
||||||
copy_links: true
|
|
||||||
verify_host: true
|
|
||||||
rsync_opts:
|
|
||||||
- --include=/logs/**
|
|
||||||
- --include=*/
|
|
||||||
- --exclude=*
|
|
||||||
- --prune-empty-dirs
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
- hosts: all
|
|
||||||
name: legacy-grenade-dsvm-watcher
|
|
||||||
tasks:
|
|
||||||
|
|
||||||
- name: Ensure legacy workspace directory
|
|
||||||
file:
|
|
||||||
path: '{{ ansible_user_dir }}/workspace'
|
|
||||||
state: directory
|
|
||||||
|
|
||||||
- shell:
|
|
||||||
cmd: |
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
cat > clonemap.yaml << EOF
|
|
||||||
clonemap:
|
|
||||||
- name: openstack/devstack-gate
|
|
||||||
dest: devstack-gate
|
|
||||||
EOF
|
|
||||||
/usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \
|
|
||||||
https://opendev.org \
|
|
||||||
openstack/devstack-gate
|
|
||||||
executable: /bin/bash
|
|
||||||
chdir: '{{ ansible_user_dir }}/workspace'
|
|
||||||
environment: '{{ zuul | zuul_legacy_vars }}'
|
|
||||||
|
|
||||||
- shell:
|
|
||||||
cmd: |
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
export PYTHONUNBUFFERED=true
|
|
||||||
|
|
||||||
export PROJECTS="openstack/grenade $PROJECTS"
|
|
||||||
export PROJECTS="openstack/watcher $PROJECTS"
|
|
||||||
export PROJECTS="openstack/watcher-tempest-plugin $PROJECTS"
|
|
||||||
export PROJECTS="openstack/python-watcherclient $PROJECTS"
|
|
||||||
export DEVSTACK_PROJECT_FROM_GIT="python-watcherclient $DEVSTACK_PROJECT_FROM_GIT"
|
|
||||||
|
|
||||||
export GRENADE_PLUGINRC="enable_grenade_plugin watcher https://opendev.org/openstack/watcher"
|
|
||||||
export DEVSTACK_LOCAL_CONFIG+=$'\n'"export TEMPEST_PLUGINS='/opt/stack/new/watcher-tempest-plugin'"
|
|
||||||
|
|
||||||
export DEVSTACK_GATE_TEMPEST_NOTESTS=1
|
|
||||||
export DEVSTACK_GATE_GRENADE=pullup
|
|
||||||
export DEVSTACK_GATE_USE_PYTHON3=True
|
|
||||||
export BRANCH_OVERRIDE=default
|
|
||||||
if [ "$BRANCH_OVERRIDE" != "default" ] ; then
|
|
||||||
export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
|
|
||||||
fi
|
|
||||||
# Add configuration values for enabling security features in local.conf
|
|
||||||
function pre_test_hook {
|
|
||||||
if [ -f /opt/stack/old/watcher-tempest-plugin/tools/pre_test_hook.sh ] ; then
|
|
||||||
. /opt/stack/old/watcher-tempest-plugin/tools/pre_test_hook.sh
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
export -f pre_test_hook
|
|
||||||
|
|
||||||
cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
|
|
||||||
./safe-devstack-vm-gate-wrap.sh
|
|
||||||
executable: /bin/bash
|
|
||||||
chdir: '{{ ansible_user_dir }}/workspace'
|
|
||||||
environment: '{{ zuul | zuul_legacy_vars }}'
|
|
||||||
@@ -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"
|
|
||||||
4
tox.ini
4
tox.ini
@@ -13,7 +13,7 @@ install_command = pip install {opts} {packages}
|
|||||||
setenv =
|
setenv =
|
||||||
VIRTUAL_ENV={envdir}
|
VIRTUAL_ENV={envdir}
|
||||||
deps =
|
deps =
|
||||||
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/ussuri}
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
-r{toxinidir}/requirements.txt
|
-r{toxinidir}/requirements.txt
|
||||||
commands =
|
commands =
|
||||||
@@ -31,7 +31,7 @@ commands =
|
|||||||
[testenv:venv]
|
[testenv:venv]
|
||||||
setenv = PYTHONHASHSEED=0
|
setenv = PYTHONHASHSEED=0
|
||||||
deps =
|
deps =
|
||||||
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/ussuri}
|
||||||
-r{toxinidir}/doc/requirements.txt
|
-r{toxinidir}/doc/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
-r{toxinidir}/requirements.txt
|
-r{toxinidir}/requirements.txt
|
||||||
|
|||||||
@@ -138,6 +138,9 @@ class AuditTemplatePostType(wtypes.Base):
|
|||||||
raise exception.InvalidGoal(goal=audit_template.goal)
|
raise exception.InvalidGoal(goal=audit_template.goal)
|
||||||
|
|
||||||
if audit_template.scope:
|
if audit_template.scope:
|
||||||
|
keys = [list(s)[0] for s in audit_template.scope]
|
||||||
|
if keys[0] not in ('compute', 'storage'):
|
||||||
|
audit_template.scope = [dict(compute=audit_template.scope)]
|
||||||
common_utils.Draft4Validator(
|
common_utils.Draft4Validator(
|
||||||
AuditTemplatePostType._build_schema()
|
AuditTemplatePostType._build_schema()
|
||||||
).validate(audit_template.scope)
|
).validate(audit_template.scope)
|
||||||
@@ -158,18 +161,23 @@ class AuditTemplatePostType(wtypes.Base):
|
|||||||
"included and excluded together"))
|
"included and excluded together"))
|
||||||
|
|
||||||
if audit_template.strategy:
|
if audit_template.strategy:
|
||||||
available_strategies = objects.Strategy.list(
|
try:
|
||||||
AuditTemplatePostType._ctx)
|
if (common_utils.is_uuid_like(audit_template.strategy) or
|
||||||
available_strategies_map = {
|
common_utils.is_int_like(audit_template.strategy)):
|
||||||
s.uuid: s for s in available_strategies}
|
strategy = objects.Strategy.get(
|
||||||
if audit_template.strategy not in available_strategies_map:
|
AuditTemplatePostType._ctx, audit_template.strategy)
|
||||||
|
else:
|
||||||
|
strategy = objects.Strategy.get_by_name(
|
||||||
|
AuditTemplatePostType._ctx, audit_template.strategy)
|
||||||
|
except Exception:
|
||||||
raise exception.InvalidStrategy(
|
raise exception.InvalidStrategy(
|
||||||
strategy=audit_template.strategy)
|
strategy=audit_template.strategy)
|
||||||
|
|
||||||
strategy = available_strategies_map[audit_template.strategy]
|
|
||||||
# Check that the strategy we indicate is actually related to the
|
# Check that the strategy we indicate is actually related to the
|
||||||
# specified goal
|
# specified goal
|
||||||
if strategy.goal_id != goal.id:
|
if strategy.goal_id != goal.id:
|
||||||
|
available_strategies = objects.Strategy.list(
|
||||||
|
AuditTemplatePostType._ctx)
|
||||||
choices = ["'%s' (%s)" % (s.uuid, s.name)
|
choices = ["'%s' (%s)" % (s.uuid, s.name)
|
||||||
for s in available_strategies]
|
for s in available_strategies]
|
||||||
raise exception.InvalidStrategy(
|
raise exception.InvalidStrategy(
|
||||||
|
|||||||
@@ -18,3 +18,10 @@
|
|||||||
import eventlet
|
import eventlet
|
||||||
|
|
||||||
eventlet.monkey_patch()
|
eventlet.monkey_patch()
|
||||||
|
|
||||||
|
# Monkey patch the original current_thread to use the up-to-date _active
|
||||||
|
# global variable. See https://bugs.launchpad.net/bugs/1863021 and
|
||||||
|
# https://github.com/eventlet/eventlet/issues/592
|
||||||
|
import __original_module_threading as orig_threading # noqa
|
||||||
|
import threading # noqa
|
||||||
|
orig_threading.current_thread.__globals__['_active'] = threading._active
|
||||||
|
|||||||
@@ -152,6 +152,9 @@ class CinderClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
|||||||
if self._audit_scope_handler is None:
|
if self._audit_scope_handler is None:
|
||||||
LOG.debug("No audit, Don't Build storage data model")
|
LOG.debug("No audit, Don't Build storage data model")
|
||||||
return
|
return
|
||||||
|
if self._data_model_scope is None:
|
||||||
|
LOG.debug("No audit scope, Don't Build storage data model")
|
||||||
|
return
|
||||||
|
|
||||||
builder = CinderModelBuilder(self.osc)
|
builder = CinderModelBuilder(self.osc)
|
||||||
return builder.execute(self._data_model_scope)
|
return builder.execute(self._data_model_scope)
|
||||||
|
|||||||
@@ -63,6 +63,9 @@ class BaremetalClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
|||||||
if self._audit_scope_handler is None:
|
if self._audit_scope_handler is None:
|
||||||
LOG.debug("No audit, Don't Build Baremetal data model")
|
LOG.debug("No audit, Don't Build Baremetal data model")
|
||||||
return
|
return
|
||||||
|
if self._data_model_scope is None:
|
||||||
|
LOG.debug("No audit scope, Don't Build Baremetal data model")
|
||||||
|
return
|
||||||
|
|
||||||
builder = BareMetalModelBuilder(self.osc)
|
builder = BareMetalModelBuilder(self.osc)
|
||||||
return builder.execute(self._data_model_scope)
|
return builder.execute(self._data_model_scope)
|
||||||
|
|||||||
@@ -184,6 +184,9 @@ class NovaClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
|||||||
if self._audit_scope_handler is None:
|
if self._audit_scope_handler is None:
|
||||||
LOG.debug("No audit, Don't Build compute data model")
|
LOG.debug("No audit, Don't Build compute data model")
|
||||||
return
|
return
|
||||||
|
if self._data_model_scope is None:
|
||||||
|
LOG.debug("No audit scope, Don't Build compute data model")
|
||||||
|
return
|
||||||
|
|
||||||
builder = NovaModelBuilder(self.osc)
|
builder = NovaModelBuilder(self.osc)
|
||||||
return builder.execute(self._data_model_scope)
|
return builder.execute(self._data_model_scope)
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
# Frank Kloeker <eumel@arcor.de>, 2018. #zanata
|
# Frank Kloeker <eumel@arcor.de>, 2018. #zanata
|
||||||
|
# Andreas Jaeger <jaegerandi@gmail.com>, 2020. #zanata
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: watcher VERSION\n"
|
"Project-Id-Version: watcher VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
|
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
|
||||||
"POT-Creation-Date: 2019-03-22 02:21+0000\n"
|
"POT-Creation-Date: 2020-04-26 01:47+0000\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"PO-Revision-Date: 2018-03-06 07:56+0000\n"
|
"PO-Revision-Date: 2020-04-25 11:45+0000\n"
|
||||||
"Last-Translator: Frank Kloeker <eumel@arcor.de>\n"
|
"Last-Translator: Andreas Jaeger <jaegerandi@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"X-Generator: Zanata 4.3.3\n"
|
"X-Generator: Zanata 4.3.3\n"
|
||||||
@@ -62,10 +63,6 @@ msgstr "Der Argumenttyp 'obj' ist nicht gültig"
|
|||||||
msgid "'obj' argument type is not valid: %s"
|
msgid "'obj' argument type is not valid: %s"
|
||||||
msgstr "Der Argumenttyp 'obj' ist nicht gültig: %s"
|
msgstr "Der Argumenttyp 'obj' ist nicht gültig: %s"
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid "A datetime.datetime is required here. Got %s"
|
|
||||||
msgstr "Eine datetime.datetime ist hier erforderlich. Bekam %s"
|
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "A goal with UUID %(uuid)s already exists"
|
msgid "A goal with UUID %(uuid)s already exists"
|
||||||
msgstr "Ein Ziel mit UUID %(uuid)s ist bereits vorhanden"
|
msgstr "Ein Ziel mit UUID %(uuid)s ist bereits vorhanden"
|
||||||
@@ -169,10 +166,6 @@ msgstr ""
|
|||||||
msgid "An indicator value should be a number"
|
msgid "An indicator value should be a number"
|
||||||
msgstr "Ein Indikatorwert sollte eine Zahl sein"
|
msgstr "Ein Indikatorwert sollte eine Zahl sein"
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid "An object of class %s is required here"
|
|
||||||
msgstr "Ein Objekt der Klasse %s ist hier erforderlich"
|
|
||||||
|
|
||||||
msgid "An unknown exception occurred"
|
msgid "An unknown exception occurred"
|
||||||
msgstr "Eine unbekannte Ausnahme ist aufgetreten"
|
msgstr "Eine unbekannte Ausnahme ist aufgetreten"
|
||||||
|
|
||||||
@@ -203,20 +196,21 @@ msgstr "Prüfungsvorlagen"
|
|||||||
msgid "Audit parameter %(parameter)s are not allowed"
|
msgid "Audit parameter %(parameter)s are not allowed"
|
||||||
msgstr "Prüfparameter %(parameter)s sind nicht erlaubt"
|
msgstr "Prüfparameter %(parameter)s sind nicht erlaubt"
|
||||||
|
|
||||||
|
#, python-format
|
||||||
|
msgid "Audit state %(state)s is disallowed."
|
||||||
|
msgstr "Auditstatus %(state)s ist ungültig."
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Audit type %(audit_type)s could not be found"
|
msgid "Audit type %(audit_type)s could not be found"
|
||||||
msgstr "Audit-Typ %(audit_type)s konnte nicht gefunden werden"
|
msgstr "Audit-Typ %(audit_type)s konnte nicht gefunden werden"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "AuditTemplate %(audit_template)s could not be found"
|
msgid "Audit type %(audit_type)s is disallowed."
|
||||||
msgstr "AuditTemplate %(audit_template)s konnte nicht gefunden werden"
|
msgstr "Audit-Typ %(audit_type)s nicht erlaubt."
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid "AuditTemplate %(audit_template)s could not be found"
|
||||||
"AuditTemplate %(audit_template)s is referenced by one or multiple audits"
|
msgstr "AuditTemplate %(audit_template)s konnte nicht gefunden werden"
|
||||||
msgstr ""
|
|
||||||
"AuditTemplate %(audit_template)s wird von einem oder mehreren Audits "
|
|
||||||
"referenziert"
|
|
||||||
|
|
||||||
msgid "Audits"
|
msgid "Audits"
|
||||||
msgstr "Audits"
|
msgstr "Audits"
|
||||||
@@ -293,6 +287,10 @@ msgstr "Patch '%(patch)s' konnte nicht angewendet werden. Grund:%(reason)s"
|
|||||||
msgid "Couldn't delete when state is '%(state)s'."
|
msgid "Couldn't delete when state is '%(state)s'."
|
||||||
msgstr "Konnte nicht gelöscht werden, wenn der Status '%(state)s' ist."
|
msgstr "Konnte nicht gelöscht werden, wenn der Status '%(state)s' ist."
|
||||||
|
|
||||||
|
#, python-format
|
||||||
|
msgid "Couldn't start when state is '%(state)s'."
|
||||||
|
msgstr "Konnte nicht gestartet werden, wenn der Status '%(state)s' ist."
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Datasource %(datasource)s is not available."
|
msgid "Datasource %(datasource)s is not available."
|
||||||
msgstr "Datenquelle %(datasource)s ist nicht verfügbar."
|
msgstr "Datenquelle %(datasource)s ist nicht verfügbar."
|
||||||
@@ -435,6 +433,10 @@ msgstr "Ungültige Abfrage: %(start_time)s > %(end_time)s"
|
|||||||
msgid "Invalid sort direction: %s. Acceptable values are 'asc' or 'desc'"
|
msgid "Invalid sort direction: %s. Acceptable values are 'asc' or 'desc'"
|
||||||
msgstr "Ungültige Sortierrichtung: %s. Akzeptable Werte sind 'asc' oder 'desc'"
|
msgstr "Ungültige Sortierrichtung: %s. Akzeptable Werte sind 'asc' oder 'desc'"
|
||||||
|
|
||||||
|
#, python-format
|
||||||
|
msgid "Invalid sort key: %s"
|
||||||
|
msgstr "Ungültiger Sortierschlüssel: %s"
|
||||||
|
|
||||||
msgid "Invalid state for swapping volume"
|
msgid "Invalid state for swapping volume"
|
||||||
msgstr "Ungültiger Status für das Auslagern des Datenträgers"
|
msgstr "Ungültiger Status für das Auslagern des Datenträgers"
|
||||||
|
|
||||||
@@ -445,9 +447,6 @@ msgstr "Ungültiger Status: %(state)s"
|
|||||||
msgid "JSON list expected in feature argument"
|
msgid "JSON list expected in feature argument"
|
||||||
msgstr "JSON-Liste in Feature-Argument erwartet"
|
msgstr "JSON-Liste in Feature-Argument erwartet"
|
||||||
|
|
||||||
msgid "Keystone API endpoint is missing"
|
|
||||||
msgstr "Der Keystone-API-Endpunkt fehlt"
|
|
||||||
|
|
||||||
msgid "Limit must be positive"
|
msgid "Limit must be positive"
|
||||||
msgstr "Limit muss positiv sein"
|
msgstr "Limit muss positiv sein"
|
||||||
|
|
||||||
@@ -457,30 +456,27 @@ msgstr "Limit sollte positiv sein"
|
|||||||
msgid "Maximum time since last check-in for up service."
|
msgid "Maximum time since last check-in for up service."
|
||||||
msgstr "Maximale Zeit seit dem letzten Check-in für den Up-Service."
|
msgstr "Maximale Zeit seit dem letzten Check-in für den Up-Service."
|
||||||
|
|
||||||
|
#, python-format
|
||||||
|
msgid "Metric: %(metric)s not available"
|
||||||
|
msgstr "Metrik: %(metric)s nicht verfügbar"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Migration of type '%(migration_type)s' is not supported."
|
msgid "Migration of type '%(migration_type)s' is not supported."
|
||||||
msgstr "Die Migration vom Typ '%(migration_type)s' wird nicht unterstützt."
|
msgstr "Die Migration vom Typ '%(migration_type)s' wird nicht unterstützt."
|
||||||
|
|
||||||
|
msgid "Minimum Nova API Version"
|
||||||
|
msgstr "Minimale Nova API Version"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No %(metric)s metric for %(host)s found."
|
msgid "No %(metric)s metric for %(host)s found."
|
||||||
msgstr "Keine %(metric)s Metrik für %(host)s gefunden."
|
msgstr "Keine %(metric)s Metrik für %(host)s gefunden."
|
||||||
|
|
||||||
msgid "No rows were returned"
|
|
||||||
msgstr "Es wurden keine Zeilen zurückgegeben"
|
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No strategy could be found to achieve the '%(goal)s' goal."
|
msgid "No strategy could be found to achieve the '%(goal)s' goal."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Es konnte keine Strategie gefunden werden, um das Ziel '%(goal)s' zu "
|
"Es konnte keine Strategie gefunden werden, um das Ziel '%(goal)s' zu "
|
||||||
"erreichen."
|
"erreichen."
|
||||||
|
|
||||||
msgid "No such metric"
|
|
||||||
msgstr "Keine solche Metrik"
|
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid "No values returned by %(resource_id)s for %(metric_name)s."
|
|
||||||
msgstr "Keine Werte von %(resource_id)s für %(metric_name)s zurückgegeben."
|
|
||||||
|
|
||||||
msgid "Noisy Neighbor"
|
msgid "Noisy Neighbor"
|
||||||
msgstr "Lauter Nachbar"
|
msgstr "Lauter Nachbar"
|
||||||
|
|
||||||
@@ -559,6 +555,9 @@ msgstr ""
|
|||||||
"Verhältnis der freigegebenen Compute-Knoten geteilt durch die Gesamtzahl der "
|
"Verhältnis der freigegebenen Compute-Knoten geteilt durch die Gesamtzahl der "
|
||||||
"aktivierten Compute-Knoten."
|
"aktivierten Compute-Knoten."
|
||||||
|
|
||||||
|
msgid "Request not acceptable."
|
||||||
|
msgstr "Anforderung nicht zulässig."
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role name seems ambiguous: %s"
|
msgid "Role name seems ambiguous: %s"
|
||||||
msgstr "Der Rollenname scheint mehrdeutig: %s"
|
msgstr "Der Rollenname scheint mehrdeutig: %s"
|
||||||
@@ -648,10 +647,6 @@ msgstr "Die UUID oder der Name der Überprüfungsvorlage ist ungültig"
|
|||||||
msgid "The baremetal resource '%(name)s' could not be found"
|
msgid "The baremetal resource '%(name)s' could not be found"
|
||||||
msgstr "Die Barmetal-Ressource '%(name)s' konnte nicht gefunden werden"
|
msgstr "Die Barmetal-Ressource '%(name)s' konnte nicht gefunden werden"
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid "The capacity %(capacity)s is not defined for '%(resource)s'"
|
|
||||||
msgstr "Die Kapazität %(capacity)s ist nicht definiert für '%(resource)s'"
|
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The cluster data model '%(cdm)s' could not be built"
|
msgid "The cluster data model '%(cdm)s' could not be built"
|
||||||
msgstr "Das Clusterdatenmodell '%(cdm)s' konnte nicht erstellt werden"
|
msgstr "Das Clusterdatenmodell '%(cdm)s' konnte nicht erstellt werden"
|
||||||
@@ -690,9 +685,6 @@ msgstr "Die Instanz '%(name)s' konnte nicht gefunden werden"
|
|||||||
msgid "The ironic node %(uuid)s could not be found"
|
msgid "The ironic node %(uuid)s could not be found"
|
||||||
msgstr "Der Ironic Knoten %(uuid)s konnte nicht gefunden werden"
|
msgstr "Der Ironic Knoten %(uuid)s konnte nicht gefunden werden"
|
||||||
|
|
||||||
msgid "The metrics resource collector is not defined"
|
|
||||||
msgstr "Der Metrikressourcen-Collector ist nicht definiert"
|
|
||||||
|
|
||||||
msgid "The number of VM migrations to be performed."
|
msgid "The number of VM migrations to be performed."
|
||||||
msgstr "Die Anzahl der VM-Migrationen, die ausgeführt werden sollen."
|
msgstr "Die Anzahl der VM-Migrationen, die ausgeführt werden sollen."
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: watcher VERSION\n"
|
"Project-Id-Version: watcher VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
|
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
|
||||||
"POT-Creation-Date: 2019-03-22 02:21+0000\n"
|
"POT-Creation-Date: 2020-04-26 01:47+0000\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
@@ -63,10 +63,6 @@ msgstr "'obj' argument type is not valid"
|
|||||||
msgid "'obj' argument type is not valid: %s"
|
msgid "'obj' argument type is not valid: %s"
|
||||||
msgstr "'obj' argument type is not valid: %s"
|
msgstr "'obj' argument type is not valid: %s"
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid "A datetime.datetime is required here. Got %s"
|
|
||||||
msgstr "A datetime.datetime is required here. Got %s"
|
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "A goal with UUID %(uuid)s already exists"
|
msgid "A goal with UUID %(uuid)s already exists"
|
||||||
msgstr "A goal with UUID %(uuid)s already exists"
|
msgstr "A goal with UUID %(uuid)s already exists"
|
||||||
@@ -162,10 +158,6 @@ msgstr "An audit_template with UUID or name %(audit_template)s already exists"
|
|||||||
msgid "An indicator value should be a number"
|
msgid "An indicator value should be a number"
|
||||||
msgstr "An indicator value should be a number"
|
msgstr "An indicator value should be a number"
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid "An object of class %s is required here"
|
|
||||||
msgstr "An object of class %s is required here"
|
|
||||||
|
|
||||||
msgid "An unknown exception occurred"
|
msgid "An unknown exception occurred"
|
||||||
msgstr "An unknown exception occurred"
|
msgstr "An unknown exception occurred"
|
||||||
|
|
||||||
@@ -203,12 +195,6 @@ msgstr "Audit type %(audit_type)s could not be found"
|
|||||||
msgid "AuditTemplate %(audit_template)s could not be found"
|
msgid "AuditTemplate %(audit_template)s could not be found"
|
||||||
msgstr "AuditTemplate %(audit_template)s could not be found"
|
msgstr "AuditTemplate %(audit_template)s could not be found"
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"AuditTemplate %(audit_template)s is referenced by one or multiple audits"
|
|
||||||
msgstr ""
|
|
||||||
"AuditTemplate %(audit_template)s is referenced by one or multiple audits"
|
|
||||||
|
|
||||||
msgid "Audits"
|
msgid "Audits"
|
||||||
msgstr "Audits"
|
msgstr "Audits"
|
||||||
|
|
||||||
@@ -439,9 +425,6 @@ msgstr "Invalid state: %(state)s"
|
|||||||
msgid "JSON list expected in feature argument"
|
msgid "JSON list expected in feature argument"
|
||||||
msgstr "JSON list expected in feature argument"
|
msgstr "JSON list expected in feature argument"
|
||||||
|
|
||||||
msgid "Keystone API endpoint is missing"
|
|
||||||
msgstr "Keystone API endpoint is missing"
|
|
||||||
|
|
||||||
msgid "Limit must be positive"
|
msgid "Limit must be positive"
|
||||||
msgstr "Limit must be positive"
|
msgstr "Limit must be positive"
|
||||||
|
|
||||||
@@ -468,20 +451,10 @@ msgstr ""
|
|||||||
msgid "No %(metric)s metric for %(host)s found."
|
msgid "No %(metric)s metric for %(host)s found."
|
||||||
msgstr "No %(metric)s metric for %(host)s found."
|
msgstr "No %(metric)s metric for %(host)s found."
|
||||||
|
|
||||||
msgid "No rows were returned"
|
|
||||||
msgstr "No rows were returned"
|
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No strategy could be found to achieve the '%(goal)s' goal."
|
msgid "No strategy could be found to achieve the '%(goal)s' goal."
|
||||||
msgstr "No strategy could be found to achieve the '%(goal)s' goal."
|
msgstr "No strategy could be found to achieve the '%(goal)s' goal."
|
||||||
|
|
||||||
msgid "No such metric"
|
|
||||||
msgstr "No such metric"
|
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid "No values returned by %(resource_id)s for %(metric_name)s."
|
|
||||||
msgstr "No values returned by %(resource_id)s for %(metric_name)s."
|
|
||||||
|
|
||||||
msgid "Noisy Neighbor"
|
msgid "Noisy Neighbor"
|
||||||
msgstr "Noisy Neighbour"
|
msgstr "Noisy Neighbour"
|
||||||
|
|
||||||
@@ -575,9 +548,6 @@ msgstr "Role name seems ambiguous: %s"
|
|||||||
msgid "Role not Found: %s"
|
msgid "Role not Found: %s"
|
||||||
msgstr "Role not Found: %s"
|
msgstr "Role not Found: %s"
|
||||||
|
|
||||||
msgid "Sample Check"
|
|
||||||
msgstr "Sample Check"
|
|
||||||
|
|
||||||
msgid "Saving Energy"
|
msgid "Saving Energy"
|
||||||
msgstr "Saving Energy"
|
msgstr "Saving Energy"
|
||||||
|
|
||||||
@@ -667,10 +637,6 @@ msgstr "The audit template UUID or name specified is invalid"
|
|||||||
msgid "The baremetal resource '%(name)s' could not be found"
|
msgid "The baremetal resource '%(name)s' could not be found"
|
||||||
msgstr "The baremetal resource '%(name)s' could not be found"
|
msgstr "The baremetal resource '%(name)s' could not be found"
|
||||||
|
|
||||||
#, python-format
|
|
||||||
msgid "The capacity %(capacity)s is not defined for '%(resource)s'"
|
|
||||||
msgstr "The capacity %(capacity)s is not defined for '%(resource)s'"
|
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The cluster data model '%(cdm)s' could not be built"
|
msgid "The cluster data model '%(cdm)s' could not be built"
|
||||||
msgstr "The cluster data model '%(cdm)s' could not be built"
|
msgstr "The cluster data model '%(cdm)s' could not be built"
|
||||||
@@ -709,9 +675,6 @@ msgstr "The instance '%(name)s' could not be found"
|
|||||||
msgid "The ironic node %(uuid)s could not be found"
|
msgid "The ironic node %(uuid)s could not be found"
|
||||||
msgstr "The Ironic node %(uuid)s could not be found"
|
msgstr "The Ironic node %(uuid)s could not be found"
|
||||||
|
|
||||||
msgid "The metrics resource collector is not defined"
|
|
||||||
msgstr "The metrics resource collector is not defined"
|
|
||||||
|
|
||||||
msgid "The number of VM migrations to be performed."
|
msgid "The number of VM migrations to be performed."
|
||||||
msgstr "The number of VM migrations to be performed."
|
msgstr "The number of VM migrations to be performed."
|
||||||
|
|
||||||
|
|||||||
@@ -555,6 +555,35 @@ class TestPost(FunctionalTestWithSetup):
|
|||||||
response.json['created_at']).replace(tzinfo=None)
|
response.json['created_at']).replace(tzinfo=None)
|
||||||
self.assertEqual(test_time, return_created_at)
|
self.assertEqual(test_time, return_created_at)
|
||||||
|
|
||||||
|
@mock.patch.object(timeutils, 'utcnow')
|
||||||
|
def test_create_audit_template_with_strategy_name(self, mock_utcnow):
|
||||||
|
audit_template_dict = post_get_test_audit_template(
|
||||||
|
goal=self.fake_goal1.uuid,
|
||||||
|
strategy=self.fake_strategy1.name)
|
||||||
|
test_time = datetime.datetime(2000, 1, 1, 0, 0)
|
||||||
|
mock_utcnow.return_value = test_time
|
||||||
|
|
||||||
|
response = self.post_json('/audit_templates', audit_template_dict)
|
||||||
|
self.assertEqual('application/json', response.content_type)
|
||||||
|
self.assertEqual(201, response.status_int)
|
||||||
|
# Check location header
|
||||||
|
self.assertIsNotNone(response.location)
|
||||||
|
expected_location = \
|
||||||
|
'/v1/audit_templates/%s' % response.json['uuid']
|
||||||
|
self.assertEqual(urlparse.urlparse(response.location).path,
|
||||||
|
expected_location)
|
||||||
|
self.assertTrue(utils.is_uuid_like(response.json['uuid']))
|
||||||
|
self.assertNotIn('updated_at', response.json.keys)
|
||||||
|
self.assertNotIn('deleted_at', response.json.keys)
|
||||||
|
self.assertEqual(self.fake_goal1.uuid, response.json['goal_uuid'])
|
||||||
|
self.assertEqual(self.fake_strategy1.uuid,
|
||||||
|
response.json['strategy_uuid'])
|
||||||
|
self.assertEqual(self.fake_strategy1.name,
|
||||||
|
response.json['strategy_name'])
|
||||||
|
return_created_at = timeutils.parse_isotime(
|
||||||
|
response.json['created_at']).replace(tzinfo=None)
|
||||||
|
self.assertEqual(test_time, return_created_at)
|
||||||
|
|
||||||
def test_create_audit_template_validation_with_aggregates(self):
|
def test_create_audit_template_validation_with_aggregates(self):
|
||||||
scope = [{'compute': [{'host_aggregates': [{'id': '*'}]},
|
scope = [{'compute': [{'host_aggregates': [{'id': '*'}]},
|
||||||
{'availability_zones': [{'name': 'AZ1'},
|
{'availability_zones': [{'name': 'AZ1'},
|
||||||
@@ -663,6 +692,26 @@ class TestPost(FunctionalTestWithSetup):
|
|||||||
self.assertEqual(400, response.status_int)
|
self.assertEqual(400, response.status_int)
|
||||||
assert not cn_mock.called
|
assert not cn_mock.called
|
||||||
|
|
||||||
|
def test_create_audit_template_with_old_scope(self):
|
||||||
|
scope = [{'host_aggregates': [{'id': '*'}]},
|
||||||
|
{'availability_zones': [{'name': 'AZ1'},
|
||||||
|
{'name': 'AZ2'}]},
|
||||||
|
{'exclude': [
|
||||||
|
{'instances': [
|
||||||
|
{'uuid': 'INSTANCE_1'},
|
||||||
|
{'uuid': 'INSTANCE_2'}]},
|
||||||
|
{'compute_nodes': [
|
||||||
|
{'name': 'Node_1'},
|
||||||
|
{'name': 'Node_2'}]},
|
||||||
|
]}
|
||||||
|
]
|
||||||
|
audit_template_dict = post_get_test_audit_template(
|
||||||
|
goal=self.fake_goal1.uuid,
|
||||||
|
strategy=self.fake_strategy1.uuid, scope=scope)
|
||||||
|
response = self.post_json('/audit_templates',
|
||||||
|
audit_template_dict)
|
||||||
|
self.assertEqual(201, response.status_int)
|
||||||
|
|
||||||
|
|
||||||
class TestDelete(api_base.FunctionalTest):
|
class TestDelete(api_base.FunctionalTest):
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,9 @@
|
|||||||
import mock
|
import mock
|
||||||
|
|
||||||
from watcher.decision_engine.model.collector import base
|
from watcher.decision_engine.model.collector import base
|
||||||
|
from watcher.decision_engine.model.collector import cinder
|
||||||
|
from watcher.decision_engine.model.collector import ironic
|
||||||
|
from watcher.decision_engine.model.collector import nova
|
||||||
from watcher.decision_engine.model import model_root
|
from watcher.decision_engine.model import model_root
|
||||||
from watcher.tests import base as test_base
|
from watcher.tests import base as test_base
|
||||||
|
|
||||||
@@ -55,3 +58,36 @@ class TestClusterDataModelCollector(test_base.TestCase):
|
|||||||
self.assertIsNot(
|
self.assertIsNot(
|
||||||
collector.cluster_data_model,
|
collector.cluster_data_model,
|
||||||
collector.get_latest_cluster_data_model())
|
collector.get_latest_cluster_data_model())
|
||||||
|
|
||||||
|
|
||||||
|
class TestComputeDataModelCollector(test_base.TestCase):
|
||||||
|
|
||||||
|
def test_model_scope_is_none(self):
|
||||||
|
m_config = mock.Mock()
|
||||||
|
collector = nova.NovaClusterDataModelCollector(config=m_config)
|
||||||
|
|
||||||
|
collector._audit_scope_handler = mock.Mock()
|
||||||
|
collector._data_model_scope = None
|
||||||
|
self.assertIsNone(collector.execute())
|
||||||
|
|
||||||
|
|
||||||
|
class TestStorageDataModelCollector(test_base.TestCase):
|
||||||
|
|
||||||
|
def test_model_scope_is_none(self):
|
||||||
|
m_config = mock.Mock()
|
||||||
|
collector = cinder.CinderClusterDataModelCollector(config=m_config)
|
||||||
|
|
||||||
|
collector._audit_scope_handler = mock.Mock()
|
||||||
|
collector._data_model_scope = None
|
||||||
|
self.assertIsNone(collector.execute())
|
||||||
|
|
||||||
|
|
||||||
|
class TestBareMetalDataModelCollector(test_base.TestCase):
|
||||||
|
|
||||||
|
def test_model_scope_is_none(self):
|
||||||
|
m_config = mock.Mock()
|
||||||
|
collector = ironic.BaremetalClusterDataModelCollector(config=m_config)
|
||||||
|
|
||||||
|
collector._audit_scope_handler = mock.Mock()
|
||||||
|
collector._data_model_scope = None
|
||||||
|
self.assertIsNone(collector.execute())
|
||||||
|
|||||||
Reference in New Issue
Block a user