Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70a24cb009 | ||
|
|
69a9e4bee4 | ||
|
|
8ef9d14a54 | ||
|
|
4422878ec7 | ||
|
|
e37bbf3be3 | ||
|
|
8e143ca8bf | ||
|
|
e5884a963b | ||
|
|
85763ccfce | ||
|
|
1ffb7ef0e7 | ||
|
|
c02ddd58a1 | ||
|
|
7abb57dcd3 | ||
|
|
963d026d06 |
@@ -2,3 +2,4 @@
|
||||
host=review.opendev.org
|
||||
port=29418
|
||||
project=openstack/watcher.git
|
||||
defaultbranch=stable/train
|
||||
|
||||
@@ -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
@@ -11,7 +11,7 @@ install_command = pip install {opts} {packages}
|
||||
setenv =
|
||||
VIRTUAL_ENV={envdir}
|
||||
deps =
|
||||
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
||||
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/train}
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
-r{toxinidir}/requirements.txt
|
||||
commands =
|
||||
@@ -31,7 +31,7 @@ commands =
|
||||
basepython = python3
|
||||
setenv = PYTHONHASHSEED=0
|
||||
deps =
|
||||
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
||||
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/train}
|
||||
-r{toxinidir}/doc/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
-r{toxinidir}/requirements.txt
|
||||
|
||||
@@ -138,6 +138,9 @@ class AuditTemplatePostType(wtypes.Base):
|
||||
raise exception.InvalidGoal(goal=audit_template.goal)
|
||||
|
||||
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(
|
||||
AuditTemplatePostType._build_schema()
|
||||
).validate(audit_template.scope)
|
||||
@@ -158,18 +161,23 @@ class AuditTemplatePostType(wtypes.Base):
|
||||
"included and excluded together"))
|
||||
|
||||
if audit_template.strategy:
|
||||
available_strategies = objects.Strategy.list(
|
||||
AuditTemplatePostType._ctx)
|
||||
available_strategies_map = {
|
||||
s.uuid: s for s in available_strategies}
|
||||
if audit_template.strategy not in available_strategies_map:
|
||||
try:
|
||||
if (common_utils.is_uuid_like(audit_template.strategy) or
|
||||
common_utils.is_int_like(audit_template.strategy)):
|
||||
strategy = objects.Strategy.get(
|
||||
AuditTemplatePostType._ctx, audit_template.strategy)
|
||||
else:
|
||||
strategy = objects.Strategy.get_by_name(
|
||||
AuditTemplatePostType._ctx, audit_template.strategy)
|
||||
except Exception:
|
||||
raise exception.InvalidStrategy(
|
||||
strategy=audit_template.strategy)
|
||||
|
||||
strategy = available_strategies_map[audit_template.strategy]
|
||||
# Check that the strategy we indicate is actually related to the
|
||||
# specified goal
|
||||
if strategy.goal_id != goal.id:
|
||||
available_strategies = objects.Strategy.list(
|
||||
AuditTemplatePostType._ctx)
|
||||
choices = ["'%s' (%s)" % (s.uuid, s.name)
|
||||
for s in available_strategies]
|
||||
raise exception.InvalidStrategy(
|
||||
|
||||
@@ -19,8 +19,6 @@ import time
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
|
||||
from watcher.common import exception
|
||||
|
||||
CONF = cfg.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
@@ -79,7 +77,6 @@ class DataSourceBase(object):
|
||||
LOG.warning("Retry {0} of {1} while retrieving metrics retry "
|
||||
"in {2} seconds".format(i+1, num_retries, timeout))
|
||||
time.sleep(timeout)
|
||||
raise exception.DataSourceNotAvailable(datasource=self.NAME)
|
||||
|
||||
@abc.abstractmethod
|
||||
def query_retry_reset(self, exception_instance):
|
||||
|
||||
@@ -136,19 +136,18 @@ class CeilometerHelper(base.DataSourceBase):
|
||||
|
||||
def list_metrics(self):
|
||||
"""List the user's meters."""
|
||||
try:
|
||||
meters = self.query_retry(f=self.ceilometer.meters.list)
|
||||
except Exception:
|
||||
meters = self.query_retry(f=self.ceilometer.meters.list)
|
||||
if not meters:
|
||||
return set()
|
||||
else:
|
||||
return meters
|
||||
|
||||
def check_availability(self):
|
||||
try:
|
||||
self.query_retry(self.ceilometer.resources.list)
|
||||
except Exception:
|
||||
status = self.query_retry(self.ceilometer.resources.list)
|
||||
if status:
|
||||
return 'available'
|
||||
else:
|
||||
return 'not available'
|
||||
return 'available'
|
||||
|
||||
def query_sample(self, meter_name, query, limit=1):
|
||||
return self.query_retry(f=self.ceilometer.samples.list,
|
||||
|
||||
@@ -52,17 +52,16 @@ class GnocchiHelper(base.DataSourceBase):
|
||||
self.gnocchi = self.osc.gnocchi()
|
||||
|
||||
def check_availability(self):
|
||||
try:
|
||||
self.query_retry(self.gnocchi.status.get)
|
||||
except Exception:
|
||||
status = self.query_retry(self.gnocchi.status.get)
|
||||
if status:
|
||||
return 'available'
|
||||
else:
|
||||
return 'not available'
|
||||
return 'available'
|
||||
|
||||
def list_metrics(self):
|
||||
"""List the user's meters."""
|
||||
try:
|
||||
response = self.query_retry(f=self.gnocchi.metric.list)
|
||||
except Exception:
|
||||
response = self.query_retry(f=self.gnocchi.metric.list)
|
||||
if not response:
|
||||
return set()
|
||||
else:
|
||||
return set([metric['name'] for metric in response])
|
||||
@@ -91,8 +90,9 @@ class GnocchiHelper(base.DataSourceBase):
|
||||
f=self.gnocchi.resource.search, **kwargs)
|
||||
|
||||
if not resources:
|
||||
raise exception.ResourceNotFound(name='gnocchi',
|
||||
id=resource_id)
|
||||
LOG.warning("The {0} resource {1} could not be "
|
||||
"found".format(self.NAME, resource_id))
|
||||
return
|
||||
|
||||
resource_id = resources[0]['id']
|
||||
|
||||
@@ -110,6 +110,7 @@ class GnocchiHelper(base.DataSourceBase):
|
||||
statistics = self.query_retry(
|
||||
f=self.gnocchi.metric.get_measures, **kwargs)
|
||||
|
||||
return_value = None
|
||||
if statistics:
|
||||
# return value of latest measure
|
||||
# measure has structure [time, granularity, value]
|
||||
@@ -120,7 +121,7 @@ class GnocchiHelper(base.DataSourceBase):
|
||||
# 1/10 th of actual CFM
|
||||
return_value *= 10
|
||||
|
||||
return return_value
|
||||
return return_value
|
||||
|
||||
def get_host_cpu_usage(self, resource, period, aggregate,
|
||||
granularity=300):
|
||||
|
||||
@@ -179,6 +179,9 @@ class GrafanaHelper(base.DataSourceBase):
|
||||
kwargs = {k: v for k, v in raw_kwargs.items() if k and v}
|
||||
|
||||
resp = self.query_retry(self._request, **kwargs)
|
||||
if not resp:
|
||||
LOG.warning("Datasource {0} is not available.".format(self.NAME))
|
||||
return
|
||||
|
||||
result = translator.extract_result(resp.content)
|
||||
|
||||
|
||||
@@ -73,11 +73,11 @@ class MonascaHelper(base.DataSourceBase):
|
||||
self.monasca = self.osc.monasca()
|
||||
|
||||
def check_availability(self):
|
||||
try:
|
||||
self.query_retry(self.monasca.metrics.list)
|
||||
except Exception:
|
||||
result = self.query_retry(self.monasca.metrics.list)
|
||||
if result:
|
||||
return 'available'
|
||||
else:
|
||||
return 'not available'
|
||||
return 'available'
|
||||
|
||||
def list_metrics(self):
|
||||
# TODO(alexchadin): this method should be implemented in accordance to
|
||||
|
||||
@@ -152,6 +152,9 @@ class CinderClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
||||
if self._audit_scope_handler is None:
|
||||
LOG.debug("No audit, Don't Build storage data model")
|
||||
return
|
||||
if self._data_model_scope is None:
|
||||
LOG.debug("No audit scope, Don't Build storage data model")
|
||||
return
|
||||
|
||||
builder = CinderModelBuilder(self.osc)
|
||||
return builder.execute(self._data_model_scope)
|
||||
|
||||
@@ -63,6 +63,9 @@ class BaremetalClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
||||
if self._audit_scope_handler is None:
|
||||
LOG.debug("No audit, Don't Build Baremetal data model")
|
||||
return
|
||||
if self._data_model_scope is None:
|
||||
LOG.debug("No audit scope, Don't Build Baremetal data model")
|
||||
return
|
||||
|
||||
builder = BareMetalModelBuilder(self.osc)
|
||||
return builder.execute(self._data_model_scope)
|
||||
|
||||
@@ -181,6 +181,9 @@ class NovaClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
||||
if self._audit_scope_handler is None:
|
||||
LOG.debug("No audit, Don't Build compute data model")
|
||||
return
|
||||
if self._data_model_scope is None:
|
||||
LOG.debug("No audit scope, Don't Build compute data model")
|
||||
return
|
||||
|
||||
builder = NovaModelBuilder(self.osc)
|
||||
return builder.execute(self._data_model_scope)
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
# Frank Kloeker <eumel@arcor.de>, 2018. #zanata
|
||||
# Andreas Jaeger <jaegerandi@gmail.com>, 2019. #zanata
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: watcher VERSION\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: 2019-09-23 08:56+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2018-03-06 07:56+0000\n"
|
||||
"Last-Translator: Frank Kloeker <eumel@arcor.de>\n"
|
||||
"PO-Revision-Date: 2019-09-25 09:29+0000\n"
|
||||
"Last-Translator: Andreas Jaeger <jaegerandi@gmail.com>\n"
|
||||
"Language-Team: German\n"
|
||||
"Language: de\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"
|
||||
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
|
||||
msgid "A goal with UUID %(uuid)s already exists"
|
||||
msgstr "Ein Ziel mit UUID %(uuid)s ist bereits vorhanden"
|
||||
@@ -169,10 +166,6 @@ msgstr ""
|
||||
msgid "An indicator value should be a number"
|
||||
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"
|
||||
msgstr "Eine unbekannte Ausnahme ist aufgetreten"
|
||||
|
||||
@@ -211,13 +204,6 @@ msgstr "Audit-Typ %(audit_type)s konnte nicht gefunden werden"
|
||||
msgid "AuditTemplate %(audit_template)s could not be found"
|
||||
msgstr "AuditTemplate %(audit_template)s konnte nicht gefunden werden"
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"AuditTemplate %(audit_template)s is referenced by one or multiple audits"
|
||||
msgstr ""
|
||||
"AuditTemplate %(audit_template)s wird von einem oder mehreren Audits "
|
||||
"referenziert"
|
||||
|
||||
msgid "Audits"
|
||||
msgstr "Audits"
|
||||
|
||||
@@ -445,9 +431,6 @@ msgstr "Ungültiger Status: %(state)s"
|
||||
msgid "JSON list expected in feature argument"
|
||||
msgstr "JSON-Liste in Feature-Argument erwartet"
|
||||
|
||||
msgid "Keystone API endpoint is missing"
|
||||
msgstr "Der Keystone-API-Endpunkt fehlt"
|
||||
|
||||
msgid "Limit must be positive"
|
||||
msgstr "Limit muss positiv sein"
|
||||
|
||||
@@ -461,26 +444,19 @@ msgstr "Maximale Zeit seit dem letzten Check-in für den Up-Service."
|
||||
msgid "Migration of type '%(migration_type)s' is not supported."
|
||||
msgstr "Die Migration vom Typ '%(migration_type)s' wird nicht unterstützt."
|
||||
|
||||
msgid "Minimum Nova API Version"
|
||||
msgstr "Minimale Nova API Version"
|
||||
|
||||
#, python-format
|
||||
msgid "No %(metric)s metric for %(host)s found."
|
||||
msgstr "Keine %(metric)s Metrik für %(host)s gefunden."
|
||||
|
||||
msgid "No rows were returned"
|
||||
msgstr "Es wurden keine Zeilen zurückgegeben"
|
||||
|
||||
#, python-format
|
||||
msgid "No strategy could be found to achieve the '%(goal)s' goal."
|
||||
msgstr ""
|
||||
"Es konnte keine Strategie gefunden werden, um das Ziel '%(goal)s' zu "
|
||||
"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"
|
||||
msgstr "Lauter Nachbar"
|
||||
|
||||
@@ -648,10 +624,6 @@ msgstr "Die UUID oder der Name der Überprüfungsvorlage ist ungültig"
|
||||
msgid "The baremetal resource '%(name)s' could not be found"
|
||||
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
|
||||
msgid "The cluster data model '%(cdm)s' could not be built"
|
||||
msgstr "Das Clusterdatenmodell '%(cdm)s' konnte nicht erstellt werden"
|
||||
@@ -690,9 +662,6 @@ msgstr "Die Instanz '%(name)s' konnte nicht gefunden werden"
|
||||
msgid "The ironic node %(uuid)s could not be found"
|
||||
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."
|
||||
msgstr "Die Anzahl der VM-Migrationen, die ausgeführt werden sollen."
|
||||
|
||||
|
||||
@@ -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: 2019-03-22 02:21+0000\n"
|
||||
"POT-Creation-Date: 2019-09-23 08:56+0000\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\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"
|
||||
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
|
||||
msgid "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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr "Audits"
|
||||
|
||||
@@ -439,9 +425,6 @@ msgstr "Invalid state: %(state)s"
|
||||
msgid "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"
|
||||
msgstr "Limit must be positive"
|
||||
|
||||
@@ -468,20 +451,10 @@ msgstr ""
|
||||
msgid "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
|
||||
msgid "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"
|
||||
msgstr "Noisy Neighbour"
|
||||
|
||||
@@ -575,9 +548,6 @@ msgstr "Role name seems ambiguous: %s"
|
||||
msgid "Role not Found: %s"
|
||||
msgstr "Role not Found: %s"
|
||||
|
||||
msgid "Sample Check"
|
||||
msgstr "Sample Check"
|
||||
|
||||
msgid "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"
|
||||
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
|
||||
msgid "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"
|
||||
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."
|
||||
msgstr "The number of VM migrations to be performed."
|
||||
|
||||
|
||||
@@ -105,7 +105,6 @@ class FunctionalTest(base.DbTestCase):
|
||||
:param path_prefix: prefix of the url path
|
||||
"""
|
||||
full_path = path_prefix + path
|
||||
print('%s: %s %s' % (method.upper(), full_path, params))
|
||||
|
||||
response = getattr(self.app, "%s_json" % method)(
|
||||
str(full_path),
|
||||
@@ -115,7 +114,6 @@ class FunctionalTest(base.DbTestCase):
|
||||
extra_environ=extra_environ,
|
||||
expect_errors=expect_errors
|
||||
)
|
||||
print('GOT:%s' % response)
|
||||
return response
|
||||
|
||||
def put_json(self, path, params, expect_errors=False, headers=None,
|
||||
@@ -192,13 +190,11 @@ class FunctionalTest(base.DbTestCase):
|
||||
:param path_prefix: prefix of the url path
|
||||
"""
|
||||
full_path = path_prefix + path
|
||||
print('DELETE: %s' % (full_path))
|
||||
response = self.app.delete(str(full_path),
|
||||
headers=headers,
|
||||
status=status,
|
||||
extra_environ=extra_environ,
|
||||
expect_errors=expect_errors)
|
||||
print('GOT:%s' % response)
|
||||
return response
|
||||
|
||||
def get_json(self, path, expect_errors=False, headers=None,
|
||||
@@ -229,7 +225,6 @@ class FunctionalTest(base.DbTestCase):
|
||||
all_params.update(params)
|
||||
if q:
|
||||
all_params.update(query_params)
|
||||
print('GET: %s %r' % (full_path, all_params))
|
||||
|
||||
response = self.app.get(full_path,
|
||||
params=all_params,
|
||||
@@ -238,7 +233,6 @@ class FunctionalTest(base.DbTestCase):
|
||||
expect_errors=expect_errors)
|
||||
if return_json and not expect_errors:
|
||||
response = response.json
|
||||
print('GOT:%s' % response)
|
||||
return response
|
||||
|
||||
def validate_link(self, link, bookmark=False):
|
||||
|
||||
@@ -555,6 +555,35 @@ class TestPost(FunctionalTestWithSetup):
|
||||
response.json['created_at']).replace(tzinfo=None)
|
||||
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):
|
||||
scope = [{'compute': [{'host_aggregates': [{'id': '*'}]},
|
||||
{'availability_zones': [{'name': 'AZ1'},
|
||||
@@ -663,6 +692,26 @@ class TestPost(FunctionalTestWithSetup):
|
||||
self.assertEqual(400, response.status_int)
|
||||
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):
|
||||
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
import mock
|
||||
|
||||
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.tests import base as test_base
|
||||
|
||||
@@ -55,3 +58,36 @@ class TestClusterDataModelCollector(test_base.TestCase):
|
||||
self.assertIsNot(
|
||||
collector.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())
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
import mock
|
||||
from oslo_config import cfg
|
||||
|
||||
from watcher.common import exception
|
||||
from watcher.decision_engine.datasources import base as datasource
|
||||
from watcher.tests import base
|
||||
|
||||
@@ -61,9 +60,8 @@ class TestBaseDatasourceHelper(base.BaseTestCase):
|
||||
helper = datasource.DataSourceBase()
|
||||
helper.query_retry_reset = mock.Mock()
|
||||
|
||||
# Maximum number of retries exceeded query_retry should raise error
|
||||
self.assertRaises(exception.DataSourceNotAvailable,
|
||||
helper.query_retry, f=method)
|
||||
# Maximum number of retries exceeded query_retry should return None
|
||||
self.assertIsNone(helper.query_retry(f=method))
|
||||
# query_retry_reset should be called twice
|
||||
helper.query_retry_reset.assert_has_calls(
|
||||
[mock.call(exc), mock.call(exc)])
|
||||
|
||||
@@ -132,11 +132,7 @@ class TestGrafana(base.BaseTestCase):
|
||||
|
||||
t_grafana = grafana.GrafanaHelper(osc=mock.Mock())
|
||||
|
||||
self.assertRaises(
|
||||
exception.DataSourceNotAvailable,
|
||||
t_grafana.get_host_cpu_usage,
|
||||
self.m_compute_node
|
||||
)
|
||||
self.assertIsNone(t_grafana.get_host_cpu_usage(self.m_compute_node))
|
||||
|
||||
def test_no_metric_raise_error(self):
|
||||
"""Test raising error when specified meter does not exist"""
|
||||
|
||||
Reference in New Issue
Block a user