Compare commits

...

556 Commits

Author SHA1 Message Date
Zuul
25f313a3ef Merge "Remove six[6]" 2020-04-18 09:26:36 +00:00
Zuul
7218947c5b Merge "Remove six[5]" 2020-04-18 09:26:35 +00:00
Zuul
0aa5bb3265 Merge "Remove six[4]" 2020-04-18 09:26:34 +00:00
Zuul
7591beb65d Merge "Remove six[3]" 2020-04-18 09:26:33 +00:00
Zuul
7e9236939f Merge "Remove six[2]" 2020-04-18 09:25:59 +00:00
Zuul
e48c0893e7 Merge "Remove six[1]" 2020-04-18 09:24:34 +00:00
licanwei
38649b2df0 convert EfficacyIndicator.value to float type
EfficacyIndicator.value is Decimal type, it's
not JSON serializable. So we convert value type
before serialization.

Closed-Bug: #1873377
Change-Id: Id38969775c446bece71f7a85c5c5d3efee9befa0
2020-04-17 10:43:26 +08:00
chenke
0ff8248f91 Remove six[6]
Change-Id: I7bf782ac1aa2ff404bef180d9ff37ffcfb29001a
2020-04-16 16:14:54 +08:00
chenke
bf2caf8b1d Remove six[5]
Change-Id: I27b341cb8f48313bd2aad6b7996cd9cbbad94217
2020-04-16 16:12:36 +08:00
chenke
6a6dbc1491 Remove six[4]
Change-Id: I3026b5d3eb20f71d4218873646c69d8328db054d
2020-04-16 16:09:48 +08:00
chenke
244e02c3d5 Remove six[3]
Change-Id: I92535c69f7055a7431ff14d3b9722149950e7f91
2020-04-16 16:04:32 +08:00
chenke
591e4a8f38 Remove six[2]
Change-Id: Id952d00e689c1077d741c742175be06778af6ec1
2020-04-16 16:02:39 +08:00
chenke
4bf59cfe51 Remove six[1]
Change-Id: I2738db925d650af5921b77d0315ec0a8d4ee985b
2020-04-16 16:00:37 +08:00
licanwei
de9d250537 update description about audit argument interval
Change-Id: I5ae8ab672edac1637c2bef4201fec30e896cd8ed
2020-04-13 08:31:11 +00:00
licanwei
3a3a487c71 remove wsmeext.sphinxext
Error when importing wsmeext.sphinxext
Could not import extension wsmeext.sphinxext
(exception: cannot import name 'l_')

Change-Id: Id23c9c1fd35153d67d4ffb50dc1cd40f30b7ab41
2020-04-13 11:27:45 +08:00
zhangbailin
f3c427bdef Cleanup py27 support
This commit cleanup below:
- Remove python 2.7 stanza from setup.py
- Add requires on python >= 3.6 to setup.cfg so that pypi and pip
  know about the requirement
- Add "ignore_basepython_conflict=True" to tox.ini

Change-Id: Ic4fcc1fb15f214ca4204f56ee1ea15dc6a782fc2
2020-04-09 02:37:00 +00:00
zhangbailin
6a0fe94e5c Block Sphinx 3.0.0
Sphinx 3.0.0 breaks the building here, block it for now.

Depends-On: https://review.opendev.org/#/c/717949/

Change-Id: Ibf0c93ea79fec647fbf749257835f1fa99d5f59d
2020-04-08 06:20:24 +00:00
Andreas Jaeger
1bb2aefec3 Update hacking for Python3
The repo is Python 3 now, so update hacking to version 3.0 which
supports Python 3.

Fix problems found.

Update local hacking checks for new flake8.

Remove hacking and friends from lower-constraints, they are not needed
to be installed at run-time.

Change-Id: Ia6af344ec8441dc98a0820176373dcff3a8c80d5
2020-04-02 07:50:02 +02:00
licanwei
60a3f1f072 Removed py27 in testing doc
Change-Id: Ib7e45aec73c4d3b11eaf5288d739edad3b12c4ee
2020-03-23 10:22:31 +08:00
chenke
c17e96d38b Add procname for uwsgi based service watcher-api
Code in grenade and elsewhere rely on the process/service name
when one runs "ps auxw" and they grep for example "grep -e watcher-api"
to check if the service is running. with uwsgi, let us make sure
we use process name prefix so it is easier to spot the services
and be compatible with code elsewhere that relies on this.

Reference:
https://review.opendev.org/#/c/494531/

Change-Id: I69dbe8840e87a8cb0b2720caa95fb17fb7a30848
2020-03-02 16:21:07 +08:00
Zuul
fa37036304 Merge "Add config option enable_webhooks_auth" 2020-02-26 13:25:24 +00:00
Zuul
8140173aa3 Merge "just set necessary config options" 2020-02-22 01:34:24 +00:00
licanwei
18a516b87a just set necessary config options
There are many warning info in the Watcher api log file,
the reason is that keystonemiddleware only need config
section keystone_authtoken.
refer to https://docs.openstack.org/keystonemiddleware/latest/
Closes-Bug: #1864129

Change-Id: Ie790277d55b3a2d93c26781f7e5e8f66b87227d8
2020-02-21 01:29:46 +00:00
licanwei
e71aaa66db simplify doc directory
Change-Id: I11bfa4d3bcb7c01ef638c0fa97cb872e96698e29
2020-02-17 17:19:13 +08:00
licanwei
4255d5b28f Add config option enable_webhooks_auth
Partially Implements: blueprint event-driven-optimization-based

Change-Id: I6cdfc18661b279f0d7200f39212ecdb31e500723
2020-02-15 14:21:13 +08:00
Zuul
2591b03625 Merge "Add releasenote for event-driven-optimization-based" 2020-02-13 07:05:04 +00:00
Zuul
11d55bc9fc Merge "Doc: Add EVENT audit description" 2020-02-13 07:04:44 +00:00
Zuul
42f001d34c Merge "api-ref: Add webhook API reference" 2020-02-12 08:57:52 +00:00
Zuul
4cf722161b Merge "Add api version history" 2020-02-12 00:56:19 +00:00
licanwei
145fccdd23 api-ref: Add webhook API reference
Change-Id: I75c5b2de55df276d414633f16ad9735a9871b59d
Implements: blueprint event-driven-optimization-based
2020-02-12 00:47:09 +00:00
Zuul
3e4eda2a80 Merge "Community Goal: Project PTL & Contrib Docs Update" 2020-02-10 14:44:40 +00:00
Zuul
16b08c39e6 Merge "releasenotes: Fix reference url" 2020-02-10 03:43:58 +00:00
licanwei
9b6629054a Doc: Add EVENT audit description
Change-Id: Ia6db6f8c21282a4755997cf47fd618670148c23f
Implements: blueprint event-driven-optimization-based
2020-02-10 11:13:06 +08:00
licanwei
56b2f113ed Community Goal: Project PTL & Contrib Docs Update
Change-Id: I07de7b94ed51eebc31886793aa5a1e87353dfbc6
Story: #2007236
Task: #38570
2020-02-10 10:09:23 +08:00
licanwei
83d37d2bee Add api version history
Change-Id: I4079f015e59b8acd5460574c67af58b45c46dc4d
Implements: blueprint event-driven-optimization-based
2020-02-06 10:40:24 +08:00
licanwei
58083bb67b releasenotes: Fix reference url
Change-Id: I0da6021f6d39cb7d6e79e8f637046d8dd0285647
2020-02-05 16:48:49 +08:00
licanwei
f79321ceeb Add releasenote for event-driven-optimization-based
Change-Id: If8fa82dab2e7f0ae359805eb68cc8562cfc641e3
Implements: blueprint event-driven-optimization-based
2020-02-04 03:46:32 +00:00
licanwei
05e81c3d88 doc: move Concurrency doc to admin guide
Change-Id: Ia1b034a5f79a5c7eeffdba2df727fd26cf13d1cc
2020-02-03 09:55:23 +00:00
licanwei
ae83ef02e7 doc for event type audit
Partially Implements: blueprint event-driven-optimization-based

Change-Id: I11211b606afd55dfa46a0942132be58dc30e28a4
2020-01-14 17:07:24 +08:00
licanwei
91b58a6775 Move install doc to user guide
Change-Id: I7b4b4ddffbe66a00fdcec4d497c6efa2e9e7729e
2020-01-11 10:16:27 +08:00
Zuul
8835576374 Merge "Add audit type: event" 2020-01-10 03:30:03 +00:00
Zuul
3bc05eaa00 Merge "Add webhook api" 2020-01-10 03:30:02 +00:00
licanwei
693d214166 Update user guide doc
Change-Id: I881b429552e15f13ddcd0ccf1663fb0e2f4123aa
2020-01-09 19:09:15 +08:00
licanwei
775be27719 Add webhook api
Add a new webhook api and its microversion is 1.4

Partially Implements: blueprint event-driven-optimization-based

Change-Id: I50f7c824e52f3c5fc775d5064898ed422e375a99
2020-01-08 09:41:03 +08:00
zhufl
db709691be Fix duplicated words issue like "an active instance instance"
This is to fix the duplicated words issue like
"Pick up an active instance instance to migrate".

Change-Id: I74de4eb06aa1e462f0b499e3fd62a7cdc7570b31
2020-01-06 15:29:25 +08:00
licanwei
6a173a9161 Add audit type: event
This patchset added a new audit type: event,
and the handler to execute event audit.

Partially Implements: blueprint event-driven-optimization-based

Change-Id: I287471ee4d1dcc42af7a6bcc15f8509d4ce73072
2019-12-13 15:14:41 +08:00
Zuul
0c02b08a6a Merge "Add list datamodel microversion to api-ref" 2019-12-04 03:07:50 +00:00
Zuul
58eb481e19 Merge "Add a new microversion for data model API" 2019-12-03 04:09:55 +00:00
licanwei
002ea535ae Add list datamodel microversion to api-ref
Change-Id: I0703a935fa6d9d61f62374dbd7afb09b1dfffd5c
Related-Bug: #1854121
2019-12-03 11:03:16 +08:00
licanwei
6f43f2b003 Add a new microversion for data model API
microversion 1.3 for list data model API

Change-Id: Ibf8774a48c3d13ca9762bd5319f5e1ce2ed82b2f
Closes-Bug: #1854121
2019-12-02 14:37:11 +08:00
Dantali0n
ba43f766b8 Releasenote for decision engine threadpool
Add the releasenote for the general purpose decision engine threadpool.
Including config parameters and how contributors can find relevant
documentation.

Implements: blueprint general-purpose-decision-engine-threadpool

Change-Id: I3560069b4e34f13305950559a0f05f7921f7867e
2019-11-30 03:13:15 +00:00
Zuul
42fea1c568 Merge "Documentation on concurrency for contributors" 2019-11-30 02:59:19 +00:00
Zuul
b7baa88010 Merge "Use threadpool when building compute data model" 2019-11-30 02:23:51 +00:00
Zuul
65ec309050 Merge "General purpose threadpool for decision engine" 2019-11-30 02:22:13 +00:00
Zuul
f4fb4981f0 Merge "Migrate grenade jobs to py3" 2019-11-30 02:22:11 +00:00
Zuul
8ae9375e6b Merge "replace host_url with application_url" 2019-11-30 02:22:11 +00:00
Zuul
012c653432 Merge "Use enum class define microversions" 2019-11-30 02:22:09 +00:00
licanwei
a2f1089038 Use enum class define microversions
Related-Bug: #1854121
Change-Id: I53b51e149be7252093aefcf2878684f42a3209c7
2019-11-29 10:55:20 +08:00
Q.hongtao
5171d84b8d Start README.rst with a better title
Now that we are using gitea the contents of our README.rst are
more prominently displayed. Starting it with a "Team and repository
tags" title is a bit confusing. This change makes it start with the
name of the project instead.

Change-Id: Icfce3764aa9e1aabf5e78443cf7ce102de63a052
2019-11-28 09:56:55 +08:00
licanwei
4a269ba039 Change self.node to self.nodes in model_root
networkx removed G.node in version 2.4[1]
G.node was replaced by G.nodes since version 2.0[2],
and supports Python 2.7, 3.5, 3.6 and 3.7 from 2.2
so the lower constraint version is 2.2.
lib task_flow also invokes lib networkx,
task_flow version is also needed to be updated.
[1]: https://networkx.github.io/documentation/stable/release/release_2.4.html
[2]: https://networkx.github.io/documentation/stable/release/release_2.0.html
Change-Id: I268bcf57ec977bd8132a9f1573b28b681cb4ce1e
Closes-Bug: #1854132
2019-11-27 17:19:29 +08:00
Dantali0n
b5f8e9a910 Documentation on concurrency for contributors
Documentation with details on general concurrency as well as OpenStack
specific libraries.

Describes how different libraries are effectively used across different
Watcher services. This includes describing how futurist is used in the
Decision Engine and how taskflow is used in the Applier.

Finally, this documentation describes how contributors can use the
new DecisionEngineThreadpool effectively and includes examples.

https://docs.openstack.org/futurist/latest/
https://docs.openstack.org/taskflow/latest/

Change-Id: Ic1cd1f3733a0e9a239c9b8d49951e1e4ece49f3a
Partially Implements: blueprint general-purpose-decision-engine-threadpool
2019-11-27 08:48:16 +01:00
licanwei
0032ed9237 replace host_url with application_url
for url http://localhost/infra-optim
pecan.request.host_url is http://localhost
and pecan.request.application_url is http://localhost/infra-optim
we should use application_url to make href in links.

Change-Id: I5d7746b3da196ea2e072fbdf1adb1523ba2bffaf
Closes-Bug: #1854119
2019-11-27 14:47:19 +08:00
Zuul
89055577e6 Merge "[ussuri][goal] Drop python 2.7 support and testing" 2019-11-22 07:12:55 +00:00
Zuul
cc0c2d227e Merge "Refactoring the codes about getting used and free resources" 2019-11-20 03:18:38 +00:00
Ghanshyam Mann
ab9a68c784 Migrate grenade jobs to py3
As part of community goal of dropping py27 support[1], we are
moving the devstack to py3 by default[2]. That will make grenade job
to perform upgrade from py2 to py3 which will not work (we have seen
the failure in neutron-grenade job).

To avoid existing grenade py2 job break, this commit moves grenade
jobs to py3 which is what we planned as part dropping the py2 support.

[1] https://governance.openstack.org/tc/goals/selected/ussuri/drop-py27.html
[2] https://review.opendev.org/#/c/649097/12
    http://lists.openstack.org/pipermail/openstack-discuss/2019-November/010938.html

Depends-On: https://review.opendev.org/#/c/649097/

Change-Id: I36229a3fc0bbcd994907154b638d24737959e6e3
2019-11-19 23:38:04 +00:00
Ghanshyam Mann
17f5a65a62 [ussuri][goal] Drop python 2.7 support and testing
OpenStack is dropping the py2.7 support in ussuri cycle.

Watcher is ready with python 3 and ok to drop the
python 2.7 support.

Complete discussion & schedule can be found in
- http://lists.openstack.org/pipermail/openstack-discuss/2019-October/010142.html
- https://etherpad.openstack.org/p/drop-python2-support

Ussuri Communtiy-wide goal:
https://governance.openstack.org/tc/goals/selected/ussuri/drop-py27.html

Depends-On: https://review.opendev.org/#/c/693631/

Change-Id: I603c6d2c22779e8ef2e70eb6369fc521a77c9c3a
2019-11-16 14:55:01 +00:00
licanwei
689ae25ef5 Refactoring the codes about getting used and free resources
We have provided functions to get used and free resources in
class ModelRoot. So strategies can invoke the functions to
get used and free resources.

Change-Id: I3c74d56539ac6c6eb16b0d254a76260bc791567c
2019-11-12 16:22:09 +08:00
Zuul
b3a3c686bf Merge "tox: Keeping going with docs" 2019-11-12 03:25:16 +00:00
Dantali0n
c644e23ca0 Use threadpool when building compute data model
Use the general purpose threadpool when building the nova compute
data model. Additionally, adds thorough explanation about theory of
operation.

Updates related test cases to better ensure the correct operation
of add_physical_layer.

Partially Implements: blueprint general-purpose-decision-engine-threadpool

Change-Id: I53ed32a4b2a089b05d1ffede629c9f4c5cb720c8
2019-11-01 13:44:15 +01:00
Dantali0n
2b6ee38327 General purpose threadpool for decision engine
Implements the singleton general purpose threadpool for the decision
engine and associated tests.

A threadpool is a collection of one or more threads typically called
'workers' to which tasks can be submitted. These submitted tasks will
be scheduled by the threadpool and subsequently executed. How many
tasks will be executed concurrently is managed by the underlying
threadpool and its configuration. In Python the submission of tasks
to a threadpool returns an object called a 'future'. Futures provide
a method to interface with the task being executed that allows to
retrieve information about its state. Such as if it currently is being
executed, if it is waiting on a condition and if it has completed
succesfully. Finally, futures allow to retrieve what has been returned
by the submitted task.

In the case of most OpenStack projects instead of interfacing with native
Python concurrency the futurist library is used. This library provides
very similar interfaces to native concurrency with some extras such as
the wait_for_any method.

For more information about futurist or Python concurrency the following
references can be consulted:
https://docs.python.org/3/library/concurrent.futures.html
https://docs.openstack.org/futurist/latest/reference/index.html#executors

Partially Implements: blueprint general-purpose-decision-engine-threadpool

Change-Id: I94bd9a17290967f011762f2b9c787ee7c46ff930
2019-11-01 11:33:59 +01:00
jacky06
7d2191d4e6 tox: Keeping going with docs
Sphinx 1.8 introduced [1] the '--keep-going' argument which, as its name
suggests, keeps the build running when it encounters non-fatal errors.
This is exceptionally useful in avoiding a continuous edit-build loop
when undertaking large doc reworks where multiple errors may be
introduced.

[1] https://github.com/sphinx-doc/sphinx/commit/e3483e9b045

Change-Id: If2bbfd8ae6d1fc75cbc494578310c1dc03c367e6
2019-10-24 00:45:42 +00:00
sunjia
a7b24ac6a5 Switch to Ussuri jobs
Change-Id: I681f324c243860255a9ede0794e7d96026bca5a3
2019-10-22 13:39:11 +08:00
Zuul
ff5bc51052 Merge "Don't throw exception when missing metrics" 2019-10-17 12:59:18 +00:00
licanwei
f685bf62ab Don't throw exception when missing metrics
When querying data from datasource, it's possible to miss some data.
In this case if we throw an exception, Audit will failed because of
the exception. We should remove the exception and give the decision
to the strategy.

Change-Id: I1b0e6b78b3bba4df9ba16e093b3910aab1de922e
Closes-Bug: #1847434
2019-10-16 21:01:39 -07:00
Zuul
066f9e02e2 Merge "Remove print()" 2019-10-14 07:43:25 +00:00
licanwei
aa36e6a881 Remove print()
Change-Id: Ida31237b77e98c803cb1ccb3bd5b190289434207
2019-10-11 14:59:14 +08:00
OpenStack Release Bot
e835efaa3f Update master for stable/train
Add file to the reno documentation build to show release notes for
stable/train.

Use pbr instruction to increment the minor version number
automatically so that master versions are higher than the versions on
stable/train.

Change-Id: I0d5ae49a33583514925ad966de067afaa8881ff3
Sem-Ver: feature
2019-09-25 08:46:33 +00:00
Zuul
d13adb4e3c Merge "Fix damodel list return None error When has a compute node" 2019-09-23 08:46:56 +00:00
Zuul
d11f43638c Merge "Fix misspelling" 2019-09-23 06:52:51 +00:00
chenke
2b63a35e86 Fix damodel list return None error When has a compute node
Reason:
When there is a compute node but no virtual machine,
the command 'watcher datamodel list' should display
the information of the compute node instead of return None.

Change-Id: Id5ff7f08ac8a9883af9f0313785b756d813ed5a2
Closes-Bug: #1844948
2019-09-23 14:04:16 +08:00
licanwei
4869449211 Fix misspelling
Depends-on: Ifa21645e19b8311de35cb9b0b8f39371b8713a2f
Depends-on:Ic2ae4cb758eba32f1b1529a24d12a57ca93a2a82
Change-Id: Ia1ea9814b8293e2bed989d700c7a813a97052f04
2019-09-23 04:29:47 +00:00
licanwei
42c1babfa4 skip deleted instance when creating datamodel
Change-Id: Ic2ae4cb758eba32f1b1529a24d12a57ca93a2a82
Closes-Bug: #1844949
2019-09-22 21:26:31 -07:00
licanwei
519ca2c9fb Fix unit test failed
ironic removed 'os_endpoint_type' and instead with 'interface'

Change-Id: Ifa21645e19b8311de35cb9b0b8f39371b8713a2f
2019-09-21 14:39:45 +08:00
Zuul
cca74f4698 Merge "Watcher planner slector releasenote" 2019-09-19 02:25:23 +00:00
Zuul
511a24e011 Merge "Set strategy planner" 2019-09-19 02:25:22 +00:00
Zuul
594a0d9b01 Merge "Get planner from solution" 2019-09-19 02:21:23 +00:00
licanwei
a88e076646 Watcher planner slector releasenote
Change-Id: I632a59d9e3cb6f5d0dad8987b1b01934d9ce0b42
Implements: bp watcher-planner-selector
2019-09-18 01:59:01 -07:00
licanwei
0559cd7a04 Set strategy planner
The default planner can not create actions with right order,
The node_resouce_consolidation strategy needs to use its
own planner.
Partially Implements: blueprint node-resource-consolidation
Depends-on: I586e67f782e2965234826634ba3ff51681af4df8
Change-Id: I05b02905a3335a73b6926966de6331c632842293
2019-09-17 19:42:32 -07:00
licanwei
0c191a2da9 Get planner from solution
support Strategy select different planner
Implements: bp watcher-planner-selector

Change-Id: I586e67f782e2965234826634ba3ff51681af4df8
2019-09-17 19:36:07 -07:00
Zuul
0b21ae333f Merge "Build pdf docs" 2019-09-18 02:00:24 +00:00
Zuul
62020cac30 Merge "Watcher Planner Selector" 2019-09-17 07:42:44 +00:00
Zuul
f5f9c95945 Merge "correct watcher project for oslo_config" 2019-09-17 06:57:22 +00:00
licanwei
ffd8e27bd1 Build pdf docs
Add a new pdf-docs environment to enable PDF build.
 sphinxcontrib-svg2pdfconverter is used to handle SVG properly.

Change-Id: I1563579486da8912ba8a220bb08a5331e7df910b
2019-09-16 23:09:25 -07:00
Zuul
004a46a98a Merge "Add node resource consolidation planner" 2019-09-17 04:44:21 +00:00
Zuul
3edd7f63c4 Merge "Add node_resource_consolidation doc" 2019-09-16 14:44:53 +00:00
Zuul
67e9e16d62 Merge "node resource consolidation" 2019-09-16 14:44:50 +00:00
licanwei
31460ac412 update test about cinderclient v1
Cinderclient removed support for Cinder v1 API
Closes-Bug: #1844094
https://review.opendev.org/#/c/653813/

Change-Id: I58c026f66ff210983367d0c98096347f7207c9fd
2019-09-16 15:18:32 +08:00
Guang Yee
86af6ab8a2 correct watcher project for oslo_config
It should've been "watcher" instead of "python-watcher" as the
config files are expected to be in /etc/watcher/. Though this is
unlikely to cause problems as this patch corrected the default
config dir.

https://review.opendev.org/#/c/658348/

Nevertheless, we should be using the correct name.

Change-Id: If6b58133eecf2fcc37e11d8c45eaa58f238ea2a8
2019-09-13 15:48:27 -07:00
Zuul
696d5d1fb5 Merge "Add releasenote about bp show-datamodel-api" 2019-09-12 05:57:42 +00:00
licanwei
605d7f228f Add node resource consolidation planner
Used for node resource consolidation strategy

Partially Implements: blueprint node-resource-consolidation

Change-Id: I7a51ddace86d512f2416dfd8af0bd3a31ca2d5c4
2019-09-12 11:03:59 +08:00
Egor Panfilov
aa2a084d22 Watcher Planner Selector
This component is responsible for selecting an appropriate Planner based
on predefined property value passed to concrete Strategy.

Change-Id: I86de95886df5d7e9558512569601e9ea3babb0e9
Implements: bp watcher-planner-selector
Co-Authored-By: Canwei Li <li.canwei2@zte.com.cn>
2019-09-12 11:01:47 +08:00
Zuul
e1b1d795a3 Merge "Fix misspell word" 2019-09-11 11:35:01 +00:00
Zuul
c356568fbe Merge "Remove redundant word 'strategy'" 2019-09-10 09:59:18 +00:00
Zuul
f274ef87ed Merge "Implement watcher datamodel list in watcher-api" 2019-09-10 07:34:13 +00:00
Zuul
0732485467 Merge "Implement watcher datamodel list in watcher-decision-engine" 2019-09-10 07:33:34 +00:00
Zuul
7d1b179d32 Merge "Add api-ref doc for data model api" 2019-09-10 07:02:10 +00:00
Zuul
0e40e72b45 Merge "add audit parameter to do_execute" 2019-09-10 07:02:09 +00:00
chenke
03a6216da0 Add releasenote about bp show-datamodel-api
Partially Implements:blueprint show-datamodel-api

Change-Id: I2f8a41cd8f9f805bd3796cbd639bec233546b521
2019-09-10 09:39:10 +08:00
licanwei
f1fe4b6c62 node resource consolidation
This strategy is used to centralize VMs to as few nodes as possible
by VM migration. User can set a input parameter to decide how to
select the destination node.

Implements: blueprint node-resource-consolidation
Closes-Bug: #1843016
Change-Id: I104c864d532c2092f5dc6f0c8f756ebeae12f09e
2019-09-06 18:03:43 -07:00
Q.hongtao
944fda338b Fix misspell word
Change-Id: I10e55a3305f7dbf3d4f5a35f61ba07783b49cc06
2019-09-06 16:49:33 +08:00
licanwei
020a99f077 Remove redundant word 'strategy'
Most of strategies have word 'strategy' in their display name.

Change-Id: I72504ba760c13685b5058524d202f00e01361403
2019-09-05 20:46:51 -07:00
licanwei
10d8a5fbc2 Add node_resource_consolidation doc
Partially Implements: blueprint node-resource-consolidation
Depends-on: Ia979781b32202c1821aa1cb91d24253fe6d7bd2d
Depends-on: I104c864d532c2092f5dc6f0c8f756ebeae12f09e

Change-Id: I8fa33a6559c9821e730f8e0babd8438ef45d7338
2019-09-05 00:58:58 -07:00
Zuul
845a9187e3 Merge "Add watcher-specs link to readme.rst" 2019-09-02 07:49:19 +00:00
liushuobj
3c0ee0caa6 Add watcher-specs link to readme.rst
Change-Id: Ie01f060846cd3876f39b0698879928abe4f504e7
2019-08-30 16:35:57 +08:00
licanwei
7eb10eee01 Add get node used and free resources
Many strategies need get node used or free resources, we define
two new method for the purpose in ModelRoot class.

Change-Id: I8cb41fd560dbac9a78d25bfdba51799533db83c2
2019-08-29 09:23:44 +08:00
Zuul
cdb81e43f6 Merge "improve strategies tempest" 2019-08-26 12:52:22 +00:00
chenke
d0a20fb072 Implement watcher datamodel list in watcher-api
1. Add datamodel api and policy_enfoce file.
2. Add related unittest for data_model api and policy.

Partially Implements:blueprint show-datamodel-api

Change-Id: I1654685d8cf04db5dd132d43a8640ddf91893cad
2019-08-26 20:09:23 +08:00
chenke
49fba60ecd Implement watcher datamodel list in watcher-decision-engine
1. Add datamodel list endpoint and rpc process.
2. Add datamodel list parased and return.
3. Add related unittest.

Partially Implements:blueprint show-datamodel-api

Change-Id: I758b7ca2bc3d8d596d3457277744336c6629bc4e
2019-08-26 18:46:27 +08:00
chenke
5aa4637fcf Add api-ref doc for data model api
Change-Id: I7d2203f35623ac6b0649ba5d99a04e9d6ca4430f
2019-08-26 17:31:06 +08:00
licanwei
b4a02a6d31 add audit parameter to do_execute
The new bp need to get audit type from audit,
so we need to add an audit parameter to do_execute

Partially Implements: blueprint node-resource-consolidation

Change-Id: Ia979781b32202c1821aa1cb91d24253fe6d7bd2d
2019-08-23 18:17:56 -07:00
licanwei
8ca5d65501 improve strategies tempest
watcher-tempest-strategies includes all strategies tempest,
we add it and remove all other individual strategy tempest.

Depends-on: I3e45d4a66a6e1bf55499def8550da38ddf01b638

Change-Id: I182bf0ddc528099f5115098b825e9bddae3b187a
2019-08-23 09:12:08 +00:00
licanwei
6ac6ab2444 add placement min_microversion
for tempest test

Change-Id: Ie98e2c000568ecac63e8981a8b7087029c0d3705
2019-08-22 23:48:11 -07:00
Zuul
7289243624 Merge "[train][goal] Define new 'watcher-tempest-functional-ipv6-only' job" 2019-08-23 03:05:20 +00:00
Zuul
1be3516d36 Merge "set compute min_microversion" 2019-08-22 08:01:23 +00:00
licanwei
d6fbc79742 set compute min_microversion
The min microversion that Watcher needed is 2.56.[1]

[1]:https://github.com/openstack/watcher/blob/master/watcher/common/clients.py

Change-Id: If21b0df50e2f2cc2884f531cb40084e95a688026
2019-08-20 14:18:08 +08:00
Ghanshyam Mann
26cce968e9 [train][goal] Define new 'watcher-tempest-functional-ipv6-only' job
As part of Train community goal 'Support IPv6-Only Deployments and Testing'[1],
Tempest has defined the base job 'devstack-tempest-ipv6' which will
deploy services on IPv6.

This commit adds the new job 'watcher-tempest-functional-ipv6-only'
run on gate which is derived from 'devstack-tempest-ipv6'.

Verification structure will be:
- 'devstack-IPv6' deploy the service on IPv6
- 'devstack-tempest-ipv6' run will verify the IPv6-only setting and listen address
- 'watcher-tempest-functional-ipv6-only' will run the tests.

Story: #2005477
Task: #35939

[1] https://governance.openstack.org/tc/goals/train/ipv6-support-and-testing.html

Change-Id: I42b7e5ff5fd64a21bdb8a32f319759a18c173601
2019-08-18 14:09:20 +00:00
Zuul
1bd580b7a8 Merge "Don't revert Migrate action" 2019-08-16 06:43:04 +00:00
licanwei
99cd009805 Remove unused disk_capacity field
The fields disk and disk_capacity have the same value,
we just need one, so remove disk_capacity field.
Partially Implements: blueprint improve-compute-data-model

Change-Id: If3d385c5e61713bbdc85e22f10cd75e161ff79f0
2019-08-13 17:15:52 +08:00
licanwei
c522e881b1 Don't revert Migrate action
If Migrate action succeed, don't revert instance when the actionplan failed.

Change-Id: Ic1c1151a3152e632ad90c6f006e8c7d5abded223
Closes-Bug: #1839909
2019-08-13 14:09:59 +08:00
Zuul
d55bb1fa95 Merge "update node resource capacity for basic_consolidation" 2019-08-12 02:15:58 +00:00
Zuul
5fe32a62e0 Merge "update workload_balance strategy" 2019-08-12 02:15:57 +00:00
Zuul
398532c995 Merge "update host_maintenance strategy" 2019-08-12 02:10:17 +00:00
Zuul
6d5a6b73e4 Merge "update vm_workload_consolidation strategy" 2019-08-12 02:10:16 +00:00
Zuul
44cd2a7421 Merge "add releasenote for bp improve-compute-data-model" 2019-08-12 02:10:16 +00:00
Zuul
4909c0203f Merge "update outlet_temp_control strategy" 2019-08-12 02:10:15 +00:00
Zuul
335e430f2a Merge "update noisy_neighbor strategy" 2019-08-12 02:07:04 +00:00
licanwei
5a26ceb1b9 update workload_balance strategy
For Compute node, we can use the new property to calculate
resource(VCPU, memory and disk).

Partially Implements: blueprint improve-compute-data-model
Depends-on: I3f9a3279a26f3df444117d9265e74cca57b38d6e
Change-Id: I9fe58603692a9850e86a2c36ad7a31c473070100
2019-08-09 14:30:43 +08:00
licanwei
33d7de12ef update node resource capacity for basic_consolidation
For Compute node, when calculating resource(VCPU, memory and disk)
capacity, we need to consider reserved resource and allocation ratio.

Partially Implements: blueprint improve-compute-data-model
Depends-on: I3f9a3279a26f3df444117d9265e74cca57b38d6e
Change-Id: I70257dd5fb342a67a3ffda1055eddc54b8360ca3
2019-08-09 14:19:51 +08:00
licanwei
3bcd25727f update host_maintenance strategy
For Compute node, we can use the new property to calculate
resource(VCPU, memory and disk).

Partially Implements: blueprint improve-compute-data-model
Depends-on: I3f9a3279a26f3df444117d9265e74cca57b38d6e
Change-Id: I2bb230b5f5a573fb3045261dfdee73f1a8434e0d
2019-08-09 14:15:52 +08:00
licanwei
60ef877626 update noisy_neighbor strategy
For Compute node, we can use the new property to calculate
resource(VCPU, memory and disk).

Partially Implements: blueprint improve-compute-data-model
Depends-on: I3f9a3279a26f3df444117d9265e74cca57b38d6e
Change-Id: I4f041ad25353d575c276fce87fe13c5e6705754f
2019-08-09 11:34:04 +08:00
licanwei
93b40e9262 update outlet_temp_control strategy
For Compute node, we can use the new property to calculate
resource(VCPU, memory and disk).

Partially Implements: blueprint improve-compute-data-model
Depends-on: I3f9a3279a26f3df444117d9265e74cca57b38d6e
Change-Id: Id113b4c19792946329e9ff448bfe636cc8eca057
2019-08-09 11:18:08 +08:00
licanwei
4b2238f9a5 add releasenote for bp improve-compute-data-model
Change-Id: I19780be28912cb0ea1cad49c7c0f43ab3ba8f6e7
Implements: blueprint improve-compute-data-model
2019-08-09 03:06:43 +00:00
licanwei
7420915244 update vm_workload_consolidation strategy
For Compute node, we can use the new property to calculate
resource(VCPU, memory and disk).

Partially Implements: blueprint improve-compute-data-model
Depends-on: I3f9a3279a26f3df444117d9265e74cca57b38d6e
Change-Id: I7872265b2378e5dc37aa2e086ff1f7fb9071db0b
2019-08-09 11:02:29 +08:00
licanwei
4e4cfc959b Remove resource used fields from ComputeNode
The node resource(vcpu, memory and disk) used infomation need
to change when creating or deleting instances. Now Placement do
not send notifications, so there is not a good way to capture
the change. We remove these fields and leave the process to strategy.

Partially Implements: blueprint improve-compute-data-model

Change-Id: I3f9a3279a26f3df444117d9265e74cca57b38d6e
2019-08-09 10:28:40 +08:00
Zuul
152af02bf1 Merge "Fix var src_extra_specs error" 2019-08-08 02:50:48 +00:00
chenke
cbc2b9eb37 Fix var src_extra_specs error
This error was discovered by tool coverity. If we don't
initialize this var src_extra_specs, line 225 may sometimes
raise an error.

Change-Id: I992b56b64d56f35c8355b22707c3db5112964b31
2019-08-06 11:34:59 +08:00
chenke
251ad35c8b Remove stale comment in method execute()
The code associated with virtual has been removed before,
and the relevant comments should be removed here.

Change-Id: I7104c1a6752ad0b8c9837a643e51b0a13194a81b
2019-08-05 09:10:13 +08:00
Zuul
f2020a9283 Merge "Getting data from placement when updating datamodel" 2019-07-29 06:03:32 +00:00
Zuul
503e67f82e Merge "Check resource class before using" 2019-07-29 03:45:25 +00:00
Zuul
c0bba3ecf3 Merge "replace disk_capacity by disk" 2019-07-29 03:43:52 +00:00
licanwei
0b25c884e6 Add resource capacity property
Resource(VCPU, memory and disk) capacity need to be calculated
through formula: capacity = (total-reserved)*ratio.

Partially Implements: blueprint improve-compute-data-model

Change-Id: I15ca66dd2c3a21c5acfebf6f04fa6601aff7918f
2019-07-27 15:41:04 +08:00
licanwei
86d9cf17a2 Getting data from placement when updating datamodel
We have some new fields(vcpus_ratio, vcpus_used, ...)
in the Watcher ComputeNode. During the process of updating
data model by notifications, we need to get data from
placement.

Partially Implements: blueprint improve-compute-data-model

Change-Id: I10587e93bb3e7be6af78bb3a50509d82d8228f78
2019-07-27 15:03:13 +08:00
Zuul
9b4693a105 Merge "set disk field to disk capacity" 2019-07-27 03:05:43 +00:00
licanwei
86ea9c8e7b replace disk_capacity by disk
Partially Implements: blueprint improve-compute-data-model

Change-Id: I9af8d3e5ad3288d56f9ef5ef998b56f9a3e6622d
2019-07-27 10:23:21 +08:00
Zuul
4ae51c58bd Merge "Optimize method list_opts() in watcher/conf/opts.py" 2019-07-26 10:12:38 +00:00
Zuul
56ab717d25 Merge "Remove useless gconfig process in watcher/api/scheduling.py" 2019-07-26 10:12:15 +00:00
licanwei
6cc9ea7cfb set disk field to disk capacity
The node.free_disk_gb does not take allocation ratios used
for overcommit into account so this value may be negative.
We do not need this field and plan to set disk to total disk
capacity and then remove disk_capacity.

Partially Implements: blueprint improve-compute-data-model

Change-Id: I72c4490f5a8d0fbd1039f70ff20f07b743b6bb2d
2019-07-26 17:23:18 +08:00
licanwei
0986168fe6 Check resource class before using
check if the resource class(VCPU, memory, disk) in the return
dictionary. If they are, don't need to use dict.get() with a
default value because the parameters are required.

Partially Implements: blueprint improve-compute-data-model

Change-Id: Icb8c672d0e87e6e5f030a2222f928d1bbd069e3c
2019-07-26 14:26:08 +08:00
Zuul
e0f70cb87c Merge "remove id field from CDM" 2019-07-24 07:30:00 +00:00
Zuul
672066d982 Merge "Update api-ref location" 2019-07-24 07:29:58 +00:00
licanwei
4b83bf33e2 remove id field from CDM
There are 3 related fields(id, uuid and hostname) in ComputeNode[1].
according to [2], after nova api 2.53, the id of the hypervisor as a UUID.
and service.host is equal to hypervisor name for compute node.
so we can remove id and only keep uuid then set uuid to node.id

[1]:https://github.com/openstack/watcher/blob/master/watcher/decision_engine/model/collector/nova.py#L306
[2]:https://developer.openstack.org/api-ref/compute/?expanded=list-hypervisors-details-detail#list-hypervisors-details

Change-Id: Ie1d1ad56808270d936ec25186061f7f12cc49fdc
Closes-Bug: #1835192
Depends-on: I752fbfa560313e28e87d83e46431c283b4db4f23
Depends-on: I0975500f359de92b6d6fdea2e01614cf0ba73f05
2019-07-23 10:28:47 +08:00
Andreas Jaeger
54344208fc Update api-ref location
The api documentation is now published on docs.openstack.org instead
of developer.openstack.org. Update all links that are changed to the
new location.

Note that redirects will be set up as well but let's point now to the
new location.

For details, see:
http://lists.openstack.org/pipermail/openstack-discuss/2019-July/007828.html

Change-Id: I4101eced9c4bd26741f760e5651204f5d2dfea0f
2019-07-22 19:00:11 +02:00
licanwei
3d741d05aa Improve Compute Data Model
The fields(vcpus, memory and disk_capacity) in the Watcher ComputeNode
do not take allocation ratios used for overcommit into account so there
may be disparity between this and the used count.
This patch added some new fields to solve this problem.

Partially Implements: blueprint improve-compute-data-model

Change-Id: Id33496f368fb23cb8e744c7e8451e1cd1397866b
2019-07-22 10:22:35 +08:00
Zuul
cd86e85ae8 Merge "Add reource_name for save_energy in action input parameter field" 2019-07-20 02:59:24 +00:00
Zuul
885ec20c94 Merge "Add call_retry for ModelBuilder for error recovery" 2019-07-20 02:58:10 +00:00
Zuul
1f9abe6785 Merge "Replace human_id with name in grafana doc" 2019-07-20 02:31:19 +00:00
Dantali0n
cadc000f32 Add call_retry for ModelBuilder for error recovery
Add call_retry method for ModelBuilder classes along with configuration
options. This allows ModelBuilder classes to reattempt any failed calls
to external services such as Nova or Ironic.

Change-Id: Ided697adebed957e5ff13b4c6b5b06c816f81c4a
2019-07-19 16:09:18 +02:00
Zuul
1af7ac107c Merge "Baseclass for ModelBuilder with audit scope" 2019-07-19 13:34:42 +00:00
Zuul
3a1e83dd9d Merge "Move datasources folder into decision_engine" 2019-07-19 13:27:10 +00:00
chenke
361f22638f Remove useless gconfig process in watcher/api/scheduling.py
Change-Id: I3849453286a735fbe95984e8496fd8a2fcb156b4
2019-07-18 16:05:24 +08:00
chenke
458ad08693 Optimize method list_opts() in watcher/conf/opts.py
Actually list_opts() return a list like[1], So we don't need to
convert list to dict and then convert to list[2].

The reason why we need to convert it before is to put together
the same group of configuration objects, but we don't need it
actually.

Now, the list_opts()'s result like this[3].

Reference:
[1]. [(Group1,[cfgObj1,cfgObj2....]),(Group2,[cfgObj3,cfgObj3....])..]
[2]. 375ae32fad/watcher/conf/opts.py (L51-L52)
[3]. [(Group1,[cfgObj1]),(Group1,[cfgObj2]),(Group2,[cfgObj3,cfgObj3....])..]

Change-Id: I50fcc5f812be42038852662639fb10c6dd2f6f72
2019-07-18 13:23:04 +08:00
Zuul
375ae32fad Merge "Fix watcher/conf/applier.py default worker value" 2019-07-18 03:08:56 +00:00
chenke
d5126174c0 Fix watcher/conf/applier.py default worker value
The default value of worker should be int type.

Change-Id: Ie2aa0c34ffbb7fa86154cc5c8ce2c365579d3fb1
2019-07-17 13:34:56 +08:00
chenke
904720b020 Remove useless _opts.py
This file has not been used.

Change-Id: Ie53dca6673f87bfeded74e336f3d60fbf500caf8
2019-07-16 19:36:16 +08:00
Zuul
4b8fe2745d Merge "Remove redundant human_id fields when creating and updating datamodel" 2019-07-16 11:11:26 +00:00
Dantali0n
933bc59b39 Baseclass for ModelBuilder with audit scope
This lets all the ModelBuilder classes use one baseclass and forces
ClusterDataModelCollector's to pass the scope.

The scopes are still unused in the case of Ironic and Cinder.

The idea is to do several follow ups to this and in the end have a
similar method to query_retry in the datasources baseclass.

Change-Id: Ibbdedd3087fef5298d7f4c9d3abdba05d1fbb2f0
2019-07-15 22:32:14 +02:00
Zuul
7cc5aef03f Merge "Add get_compute_node_by_uuid" 2019-07-13 08:42:08 +00:00
Dantali0n
433eabb8d1 Move datasources folder into decision_engine
The datasources are only used by the decision_engine, however, they
are placed in a directory one level higher. This patch moves the
datasources code into the decision_engine folder.

Change-Id: Ia54531fb899b79a59bb77adea079ff27c0d518fa
2019-07-12 08:54:09 +02:00
chenke
0727c0e302 Add reource_name for save_energy in action input parameter field
(Partial implement)
Implements: blueprint add-resource-name-in-action-input-parameter-field

Change-Id: Icd9ee099bb769679b0313025e841c898a0fa2c6f
2019-07-12 13:42:45 +08:00
licanwei
3009716ded Add get_compute_node_by_uuid
We want to set the value of uuid field of Watcher ComputeNode
to hypversion id(as uuid). So we need to get hypervisor
information by uuid.

Change-Id: I752fbfa560313e28e87d83e46431c283b4db4f23
Related-Bug: #1835192
2019-07-12 10:27:47 +08:00
Zuul
233a2b5585 Merge "Releasenote for grafana datasource" 2019-07-12 02:19:17 +00:00
Zuul
2365418e1b Merge "Grafana proxy datasource to retrieve metrics" 2019-07-12 02:19:16 +00:00
Zuul
cd70ad0d01 Merge "Add reource_name for zone_migration in action input parameter field" 2019-07-12 02:19:15 +00:00
Zuul
3bc426a590 Merge "remove baremetal nodes when building CDM" 2019-07-12 02:18:25 +00:00
Zuul
a4cbe69d57 Merge "Add get_node_by_name" 2019-07-12 02:18:24 +00:00
Dantali0n
80e8d0002a Resolve aggregate error in workload_stabilization
This error is caused because the condition "is not '':" is not always
true. Sometimes self.aggregation_method['node'] is u'' instead of ''.
This patch ensures that in both cases the behavior is the same.

Change-Id: I7453678cc76892ebeacca23c3501a10a08725d1d
Closes-bug: #1836195
2019-07-11 14:54:04 +02:00
Zuul
5259e5b332 Merge "Add marker option for get_instance_list()" 2019-07-11 09:21:17 +00:00
chenke
6dd35a0058 Remove redundant human_id fields when creating and updating datamodel
For the reason, please see:
[1]. http://eavesdrop.openstack.org/irclogs/%23openstack-watcher/%23openstack-watcher.2019-06-19.log.html
[2]. http://eavesdrop.openstack.org/meetings/watcher/2019/watcher.2019-06-19-08.00.log.html#l-47

Change-Id: I4284397aa987565f4cfc2697907a879d7d6492e9
Related-Bug: #1833665
2019-07-10 15:21:40 +08:00
chenke
8cb7158790 Replace human_id with name in grafana doc
This patch does two things:

1. replace instance's human_id with name.
2. remove ComputeNode human_id.

Now name field in Watcher Compute Data Model is availible.
Use name is better than human_id. For the reason, please see[1].

[1]. https://bugs.launchpad.net/watcher/+bug/1833665

Change-Id: I04f40e7d2a2bda48e9a362f9d0b23f449c40324e
2019-07-10 15:10:59 +08:00
Zuul
a01b4ddc81 Merge "Add reource_name in action input parameter field" 2019-07-10 06:57:36 +00:00
chenke
502ed741d6 Add marker option for get_instance_list()
Change-Id: Iee31369876052a22e5f3263cd5e7fad5d068f68d
2019-07-10 14:42:45 +08:00
licanwei
256104a38a remove baremetal nodes when building CDM
aggregate list and availability_zone list may return ironic type
compute nodes. When building compute data model we should check
the hypervisor_type and remove ironic compute nodes.

Change-Id: Idf404c104c30368baf95ef7d05ad8fc3e7adca38
Related-Bug: #1835183
2019-07-10 14:03:31 +08:00
chenke
612fc12af1 Add reource_name for zone_migration in action input parameter field
(Partial implement)
Implements: blueprint add-resource-name-in-action-input-parameter-field

Depends-on: I708cf63ff1d9a989604e1d5b834c8b7e5b087892
Change-Id: I5428fb7a1195a39f15f36509997ff5ad6fda4bb7
2019-07-10 09:57:42 +08:00
Dantali0n
0541d8c25b Grafana proxy datasource to retrieve metrics
New datasource to retrieve metrics that can be configured in a
flexible way depending on the deployment. Current implemenation only
works with InfluxDB. Slight changes to datasource manager were
necessary because grafana metric_map can only be built at runtime.

The yaml configuration file can still be used to define metrics
but will require that five different attributes are specified per
metric.

Specific databases accesible through grafana can be defined by
creating 'translators' for these specific databases. This patch
introduces a base class for these translators and their methods.

In addition the first translator specific for InfluxDB is
created.

Depends-on: I68475883529610e514aa82f1881105ab0cf24ec3
Depends-on: If1f27dc01e853c5b24bdb21f1e810f64eaee2e5c
Implements: blueprint grafana-proxy-datasource
Change-Id: Ib12b6a7882703e84a27c301e821c1a034b192508
2019-07-09 16:22:00 +02:00
chenke
dc2c361d04 Add reource_name in action input parameter field
(Partial implement)
Implements: blueprint add-resource-name-in-action-input-parameter-field

Depends-on: I51d879e31dee03652ee9d0d94a7f3168012cc060
Change-Id: I708cf63ff1d9a989604e1d5b834c8b7e5b087892
2019-07-09 18:40:49 +08:00
Zuul
de38a171fe Merge "remove baremetal nodes from hypversior list" 2019-07-09 08:38:46 +00:00
Zuul
5b12642c1d Merge "Remove notifier_driver option in Watcher devstack" 2019-07-09 08:24:50 +00:00
licanwei
a3c49cf8a4 Add get_node_by_name
We want to set the value of uuid field of Watcher ComputeNode
to hypversion id(as uuid). We need a method to get compute
node by name.

Change-Id: I0975500f359de92b6d6fdea2e01614cf0ba73f05
Related-Bug: #1835192
2019-07-09 07:03:29 +00:00
Zuul
46cc09f00e Merge "Reduce the query time of the instances when call get_instance_list()" 2019-07-09 03:54:20 +00:00
Zuul
651988448b Merge "Add name field for test data" 2019-07-08 02:36:46 +00:00
chenke
1e8b17ac46 Reduce the query time of the instances when call get_instance_list()
The problem is that watcher is passing limit=-1 to novaclient when
listing servers which will always make at least two API calls to be
sure it's done paging:

https://github.com/openstack/python-novaclient/blob/13.0.1/novaclient/v2/servers.py#L896

If we can determine before we list servers that there are only a
certain number where the number of servers is less than 1000. For
example: 4, we should just pass the limit=len(servers) to novaclient
and avoid the second call for paging which takes extra time and
yields no results.

Change-Id: I797ad934a0f8496dbcbf65798e28b0443f238137
Closes-Bug: #1834679
2019-07-08 09:58:01 +08:00
licanwei
ac53dbf005 remove baremetal nodes from hypversior list
openstack hypervisor list contains ironic nodes. we should
filter out baremetal nodes when get compute node list.

Change-Id: I4ab3e1a63dc6f61cdc3e99fa2cae749a711459cc
Closes-Bug: #1835183
2019-07-04 16:40:01 +08:00
Zuul
242c7feca7 Merge "Blacklist sphinx 2.1.0 (autodoc bug)" 2019-07-04 06:34:40 +00:00
licanwei
8bddafbdc3 Remove notifier_driver option in Watcher devstack
According to https://review.opendev.org/#/c/251791/,
watcher_messaging group and notifier_driver option
were deprecated.

Change-Id: I2cd114060d1960f77dfa8f4fe0a6d0fc05de5d4c
2019-07-04 01:59:57 +00:00
Zuul
e01382cd12 Merge "Add Python 3 Train unit tests" 2019-07-03 15:14:53 +00:00
Zuul
fd2885932d Merge "Improve logging in building of nova data model" 2019-07-03 14:14:07 +00:00
Zuul
daa70cf6b2 Merge "improve OptGroup consistency across configuration" 2019-07-03 11:45:00 +00:00
Dantali0n
052fae4b62 Improve logging in building of nova data model
Improves logging during the building of the nova data model

Change-Id: Ieff571a6ee2d1a2ced9776a8e4800d5d6f2d95eb
2019-07-03 11:25:20 +02:00
Zuul
8ccee88296 Merge "Configure nova notification_format for grenade" 2019-07-02 16:49:51 +00:00
Dantali0n
a45f5abe48 Releasenote for grafana datasource
This is the releasenote for the new grafana datasource it refers to
the documentation on configuring grafana.

Depends-on: Ib12b6a7882703e84a27c301e821c1a034b192508
Change-Id: Icb3939d772f06ad2d66eeba9a59fa8b60822ece0
2019-07-02 10:20:49 +02:00
Dantali0n
cebee2c4d7 improve OptGroup consistency across configuration
This is a follow-up to: https://review.opendev.org/#/c/666897/
and makes sure titles and help information get rendered in
the configuration documentation and configuration samples.

The options for the placement_client group are already changed
and left untouched as a result. The changes to grafana_client
are already done in another patch and also untouched.

Change-Id: Ia33cd4576e4b55e651f3f3779a01f2867126138d
2019-07-01 09:29:14 +02:00
pengyuesheng
dd1800fbc1 Blacklist sphinx 2.1.0 (autodoc bug)
See https://github.com/sphinx-doc/sphinx/issues/6440 for upstream details
Depend-On: https://review.opendev.org/#/c/663060/

Change-Id: I1a5b87b5771b9fd8f7ccdd6fd83f7ed0d7bfef64
2019-07-01 14:59:18 +08:00
pengyuesheng
148ae3688d Add Python 3 Train unit tests
See the Train python3-updates goal document for details:
https://governance.openstack.org/tc/goals/train/python3-updates.html

Change-Id: I11f7aafdfb3a45569b021df748ea32ebddc4ba6b
2019-07-01 14:57:27 +08:00
Zuul
4d35aabfdf Merge "Fix invalid assert states" 2019-07-01 06:24:53 +00:00
zhufl
8fc4a9cbee Fix invalid assert states
"self.assertTrue(action.state, objects.action.State.SUCCEEDED)"
and "self.assertTrue(action.state, objects.action.State.FAILED)"
should use assertEqual.

Co-Authored-By: Canwei Li <li.canwei2@zte.com.cn>
Change-Id: I8e28d651938ca6ed8d12e8a6f5ecf775cf01a39c
2019-07-01 03:20:19 +00:00
chenke
0a435f0b5e Add name field for test data
Change-Id: I51d879e31dee03652ee9d0d94a7f3168012cc060
2019-06-29 14:55:58 +08:00
Zuul
1b41d92b9e Merge "Add uWSGI support" 2019-06-28 02:29:16 +00:00
Zuul
c90c4989f6 Merge "Configure nova notification format in non-grenade CI jobs" 2019-06-28 02:29:14 +00:00
Zuul
f335b6dff2 Merge "improve the process of instance_created.end" 2019-06-28 02:29:11 +00:00
Zuul
0915d991b4 Merge "Add name for instance in Watcher datamodel" 2019-06-28 02:20:27 +00:00
Zuul
f75cf1ddff Merge "Improve the configuration parameters for grafana" 2019-06-27 07:03:21 +00:00
licanwei
c1a5e443fe Add uWSGI support
This patch implements uWSGI support for Watcher API service.
Because mod_wsgi is deprecated, using uwsgi to replace of mod_wsgi.
Most of Openstack projects have finished it.

Closes-Bug: #1834392
Change-Id: I3fad8d30a15aba493fb91da9337c2515ddea5167
2019-06-27 14:56:52 +08:00
Zuul
550b10b586 Merge "Documentation configuring grafana datasource" 2019-06-27 06:30:32 +00:00
chenke
b62965c2bf Add name for instance in Watcher datamodel
Now Watcher's datamodel uses human_id to store the display_name
of the intance. But the value of human_id is not reliable. About
the reason, please see[1].

The solution is to add a 'name' field to save the display_name of
the instance, and ensure that the value of this field is the same
when the datamodel is created and when the datamodel is updated.

About the 'human_id', We will remove it in the future.

References:
[1]. https://bugs.launchpad.net/watcher/+bug/1833665

20190619 Watcher meeting IRC Log:
[1]. http://eavesdrop.openstack.org/irclogs/%23openstack-watcher/%23openstack-watcher.2019-06-19.log.html
[2]. http://eavesdrop.openstack.org/meetings/watcher/2019/watcher.2019-06-19-08.00.log.html#l-47

Change-Id: I6976759629a4feedee09261cc1dac935e050202a
Closes-Bug: #1833665
2019-06-26 22:29:12 +08:00
Dantali0n
fa1642e323 Documentation configuring grafana datasource
Documentation for administrators on how to configure the Grafana
datasource.

Change-Id: I5d1d3129b5d225f0f2fc86d149c046f9aab94d47
2019-06-26 10:58:14 +02:00
Zuul
aa70cd8b1a Merge "Fix placement_client group help docs generation" 2019-06-26 07:29:05 +00:00
Matt Riedemann
9c9f336f10 Configure nova notification_format for grenade
Nova changed the default notification_format from "both" to
"unversioned" in Train [1]. Without configuring nova in the
grenade job we are not testing the nova versioned notification
handler code during upgrades.

Note that grenade only runs stack.sh on the base (old) side so
this change has to depend on a devstack stable/stein change to
add the NOVA_NOTIFICATION_FORMAT variable that we override.

Closes-Bug: #1831917

Depends-On: Ied9d50b07c368d5c2be658c744f340a8d1ee41e0

[1] https://review.opendev.org/603079/

Change-Id: I94c2d14477da185310e0fec596a1ad6436b802f1
2019-06-25 11:06:43 -04:00
Matt Riedemann
5f521471e1 Fix placement_client group help docs generation
To get the placement_client OptGroup help text to generate
in the docs, we have to use the OptGroup object in the
list_opts() method rather than a string for the group name.

https://docs.openstack.org/oslo.config/latest/cli/generator.html#defining-option-discovery-entry-points

Change-Id: Ie728081caa205ded2435c6b95f5e8d4bbd23372c
2019-06-24 14:52:02 -04:00
Dantali0n
d08d7c396e Improve the configuration parameters for grafana
This improves the documentation on configuration parameters for the
Grafana datasource.

Follow-up: If1f27dc01e853c5b24bdb21f1e810f64eaee2e5c
Depends-on: I5d1d3129b5d225f0f2fc86d149c046f9aab94d47
Change-Id: Ifd8be7491669c429482d880fdf0219be5ef03163
2019-06-24 14:38:42 -04:00
Matt Riedemann
966a4dfa5f Configure nova notification format in non-grenade CI jobs
Nova used to emit versioned and unversioned notiifcations
by default but that changed in https://review.opendev.org/603079/
so now nova emits only unversioned notifications by default.
Watcher listens for versioned notifications so we need to configure
nova to emit both versioned (for Watcher) and unversioned
(for Ceilometer) notifications explicitly.

This adds an override-defaults file so devstack will load up
the nova devstack variable to set the notification_format before
importing and stacking the nova lib script.

Note that this only fixes the non-grenade CI jobs since grenade
requires separate handling for overriding defaults which is proving
hard to do and will be addressed in a separate change.

Partial-Bug: #1831917

Change-Id: I7e441608b38338eecd80e663ed3abe66a89e504f
2019-06-24 13:09:34 -04:00
Zuul
899e534761 Merge "check instance state for instance.update" 2019-06-24 03:54:52 +00:00
Zuul
d046606a7e Merge "remove tail_log" 2019-06-22 02:31:12 +00:00
licanwei
dd321e9f21 improve the process of instance_created.end
In the process of handling instance_created.end,
there is a KeyError exception output log. This is because
invoking get_instance_by_uuid before creating the instance
in the data model.
During the review of https://review.opendev.org/#/c/663489/,
reviewers think that it's better to remove the KeyError exception.
This patche seperates the process of instance_created.end from
other Nova notifications and removes the call of get_instance_by_uuid.

Change-Id: Ie9e2d4f5b32ee7a5b52bbcd50abfa81dcabab7bb
2019-06-21 16:53:25 +08:00
Zuul
d98f51c452 Merge "Implement the configuration for Grafana datasource" 2019-06-21 02:52:24 +00:00
Zuul
5effcde632 Merge "Update strategy doc" 2019-06-21 01:37:39 +00:00
licanwei
9b8d1445f1 remove tail_log
tail_log is deprecated and should be removed
https://github.com/openstack/devstack/blob/master/functions-common#L1611

Change-Id: I6012fd63aa6b0cdb8ed1b278880f8f6c3e4d38cf
2019-06-20 15:28:33 +08:00
licanwei
90291923a1 Update strategy doc
Ceilometer removed cpu_util metric in [1].
Another metric compute.node.cpu.percent need to set
compute_monitors option to cpu.virt_driver in the
nova.conf, we should remind user about these.
[1]: https://review.opendev.org/#/c/580709/

Change-Id: I89306ef7c26fa2927945bd4f3ee88b670511d147
2019-06-20 10:57:05 +08:00
Dantali0n
06f8aa712a Implement the configuration for Grafana datasource
This implements the configuration parameters to implement
Grafana as a datasource including the influxdb translator

Change-Id: If1f27dc01e853c5b24bdb21f1e810f64eaee2e5c
Partially-implements: blueprint grafana-proxy-datasource
2019-06-19 15:58:18 +02:00
zhufl
37b11fa404 Fix missing print format
This is to add missing print format in placement_helper.py.

Change-Id: I23492fd33f3df8c8709f6d6317c936221f1108d4
2019-06-19 11:43:18 +08:00
Zuul
fd04c67ed8 Merge "Map instance to its node" 2019-06-19 02:44:58 +00:00
Zuul
08622c6c80 Merge "typo ceilometer url" 2019-06-19 02:44:57 +00:00
licanwei
e4fc5a08ed typo ceilometer url
Change-Id: I2cb24249ed1e82dd85c0f586532e5a7cbc57f2c0
2019-06-18 19:29:00 +08:00
Zuul
413028e527 Merge "Fix base enable_plugin branch for grenade run" 2019-06-18 07:53:31 +00:00
Zuul
f8fef7d774 Merge "Replace removed exceptions and prevent regression" 2019-06-18 05:04:24 +00:00
Zuul
81fc8ac6a8 Merge "Define a new InstanceNotMapped exception" 2019-06-18 02:32:33 +00:00
Zuul
5d385db8a1 Merge "Cleanup ConfFixture" 2019-06-16 08:32:41 +00:00
Zuul
a1dd90bb74 Merge "Fix property access in test_global_preference* tests" 2019-06-14 20:17:17 +00:00
Dantali0n
15754a14dd Replace removed exceptions and prevent regression
Replaces the NoSuchMetric exception that was replaced. The exception
is replaced with MetricNotAvailable and test cases are added to prevent
regression.

The changes in the exceptions were introduced in:
https://review.opendev.org/#/c/658127/

Change-Id: Id0f872e916aaa5dec59ed1ae6c0f653553b3fe46
2019-06-14 22:00:41 +02:00
Zuul
667d2d661a Merge "Move datasource query_retry into baseclass." 2019-06-14 09:04:15 +00:00
Zuul
b2111baf91 Merge "Backwards compatibility for node parameter" 2019-06-14 07:42:09 +00:00
licanwei
a4d978b893 Define a new InstanceNotMapped exception
In get_node_by_instance_uuid, an exception ComputeNodeNotFound
will be thrown if can't find a node through instance uuid.
But the exception information replaces the node name with
instance uuid, which is misleading, so we define a new exception.

Closes-Bug: #1832156

Change-Id: Ic6c44ae44da7c3b9a1c20e9b24a036063af266ba
2019-06-14 10:51:20 +08:00
Zuul
6495e42a60 Merge "Optimize NovaHelper.get_compute_node_by_hostname" 2019-06-14 02:31:13 +00:00
Zuul
e4f80b5461 Merge "Optimize hypervisor API calls" 2019-06-14 02:28:51 +00:00
Zuul
2a2f7902bd Merge "Improve DevStack documentation to support metrics" 2019-06-14 02:28:48 +00:00
Zuul
6502435dc5 Merge "Remove dead code" 2019-06-14 02:28:47 +00:00
Zuul
5f126cffe0 Merge "Add Placement helper" 2019-06-14 02:21:44 +00:00
Dantali0n
584eeefdc8 Move datasource query_retry into baseclass.
Moves the query_retry method into the baseclass and makes the query
retry and timeout options part of the watcher_datasources config group.
This makes the query_retry behavior uniform across all datasources.

A new baseclass method named query_retry_reset is added so datasources
can define operations to perform when recovering from a query error.
Test cases are added to verify the behavior of query_retry.

The query_max_retries and query_timeout config parameters are
deprecated in the gnocchi_client group and will be removed in a future
release.

Change-Id: I33e9dc2d1f5ba8f83fcf1488ff583ca5be5529cc
2019-06-13 15:52:53 +02:00
Matt Riedemann
28df60e275 Fix base enable_plugin branch for grenade run
We should be starting from stable/stein on the "old" side
of grenade runs now. Rather than hard-code the branch, just
use the BASE_DEVSTACK_BRANCH variable.

Change-Id: I1b0406f870ed0ae5622cfa7421a6cca00d0f891c
2019-06-13 09:51:19 -04:00
licanwei
7281f6184f Remove dead code
get_node_by_instance_uuid will never return None,
so the OR condition is dead code.

Change-Id: I26c553e1067a3cbeac6c0afe1c4bfdee4d939055
2019-06-13 17:31:49 +08:00
licanwei
79a57f67e6 Map instance to its node
When receiving Nova notification instance.create.end,
map instance to its node after adding instance to datamodel.
Related-Bug: #1832156

Change-Id: I6f39e8d935195c611f668f71590e1d9ff52ced0d
2019-06-13 15:58:28 +08:00
chenming
731d4bfdf2 update contraints url
http://lists.openstack.org/pipermail/openstack-discuss/2019-May/006478.html

Change-Id: I1929fc98cd728eb0dae66762481880e23cd793c7
2019-06-12 19:11:53 +00:00
Dantali0n
dd119ca1f8 Backwards compatibility for node parameter
Adds backwards compatibility for node parameter used by strategies. If
the node value is set by the user configuration it will override the
value for compute_node which is the value used by the strategies now.

This change was introduced in: https://review.opendev.org/#/c/656622/
Resolution discussed in the meeting on the 5th of June 2019
https://eavesdrop.openstack.org/meetings/watcher/2019/watcher.2019-06-05-08.00.log.html

Change-Id: Idaea062789a6b169e64f556fecc34cfbaaee5076
2019-06-12 16:23:58 +00:00
chenke
00f20ab1d4 Fix property access in test_global_preference* tests
In Python, when we use @property, the method will be
decorated by property.

When we call method self.strategy.datasource_backend()[1],
Actually it did two things:
1. call self.strategy.datasource_backend()
2. according to  the method's return value[2], call self._datasource_backend()

[1]. https://github.com/openstack/watcher/blob/bd8636f3f/watcher/tests/decision_engine/strategy/strategies/test_base.py#L87
[2]. https://github.com/openstack/watcher/blob/bd8636f3f/watcher/decision_engine/strategy/strategies/base.py#L368

But in this part, we just want it to perform the first step.
So we have to use self.strategy.datasource_backend instead of
self.strategy.datasource_backend()

The reason why the unittest does not report an error is
because the returned value is a mock object, and the second step
is executed without error, for example:

python -m unittest  watcher.tests.decision_engine.strategy.strategies.test_base
(Pdb) x=self.strategy.datasource_backend
(Pdb) type(x)
<class 'mock.mock.MagicMock'>
(Pdb) x
<MagicMock name='DataSourceManager().get_backend()' id='139740418102608'>
(Pdb) x()
<MagicMock name='DataSourceManager().get_backend()()' id='139740410824976'>
(Pdb) self.strategy.datasource_backend()
<MagicMock name='DataSourceManager().get_backend()()' id='139740410824976'>

To make the tests more robust, the underlying backend function
is mocked to be not callable.

Co-Authored-By: Matt Riedemann <mriedem.os@gmail.com>

Change-Id: I3305d9afe8ed79e1dc3affe02ba067ac06cece42
2019-06-12 12:00:45 -04:00
licanwei
b57feba5e8 Add Placement helper
This patch added Placement to Watcher
We plan to improve the data model and strategies in
the future specs.

Change-Id: I7141459eef66557cd5d525b5887bd2a381cdac3f
Implements: blueprint support-placement-api
2019-06-12 11:11:13 +08:00
Matt Riedemann
251264b1b6 Cleanup ConfFixture
This makes the ConfFixture extend the Config fixture from
oslo.config which handles cleanup for us. The module level
import_opt calls are also removed since they are no longer
needed.

Change-Id: I869e89c53284c8da45e0b1293f2d35011f5bfbf9
2019-06-11 20:18:20 -04:00
Zuul
46a36d1ad7 Merge "Fix string formatting" 2019-06-11 09:58:38 +00:00
licanwei
2d4bc095db Fix string formatting
Change-Id: Iaf995355ec542db076683374c6128656bee2ee6f
2019-06-10 17:16:51 +08:00
licanwei
f9e267fa42 check instance state for instance.update
In the process of creating an instance, Nova will emit an
instance.update notification with 'building' state.
This will cause a KeyError exception because this instance
isn't in Watcher datamodel.
So we should ignore the notification instance.update with
'building' state.

Closes-Bug: #1832154

Change-Id: I950eec50d2cee38bd22c47a70ae6f88bbf049080
2019-06-10 16:11:46 +08:00
Zuul
8000dd650f Merge "add strategy tempest job" 2019-06-06 09:11:19 +00:00
licanwei
c3e0e41fbf add strategy tempest job
Change-Id: I84a68f92fa34cf19487323f2afb89d379b8d80f5
2019-06-06 07:18:53 +00:00
licanwei
7f37f7b92a Remove apidoc
Now there are some errors when running apidoc,
actually we don't need apidoc, so remove it.
Closes-Bug: #1831515

Change-Id: I3b91a2c05ed62ae7bbd30a29e9db51d0e021410f
2019-06-04 11:34:07 +08:00
Matt Riedemann
374fd2791f Optimize NovaHelper.get_compute_node_by_hostname
The get_compute_node_by_hostname method is given a
compute service hostname and then does two queries to
find the matching hypervisor (compute node) with details:

1. List hypervisors with details and find the one that
   matches the given compute service hostname.

2. Using that node, search for hypervisors with the
   matching hypervisor_hostname.

There are two issues here:

1. The first query is inefficient in that it has to list
   all hypervisors in the deployment to try and match the
   one with the compute service hostname client side.

2. The second query is a fuzzy match on the server side [1]
   so even though we have matched on the node we want,
   get_compute_node_by_name can still return more than
   one hypervisor which will result in the helper method
   raising ComputeNodeNotFound. Consider having compute
   hosts with names compute1, compute10, compute11, compute100,
   and so on. The fuzzy match on compute1 would return all of
   those hypervisors.

For non-ironic nodes in nova, the compute service host and
hypervisor should be 1:1, meaning the hypervisor.service['host']
should be the same as hypervisor.hypervisor_hostname. Knowing
this, we can simplify the code to search just on the given
compute service hostname and if we get more than one result, it
is because of the fuzzy match and we can then do our client-side
filtering on the compute service hostname.

[1] https://github.com/openstack/nova/blob/d4f58f5eb/nova/db/sqlalchemy/api.py#L676

Change-Id: I84f387982f665d7cc11bffe8ec390cc7e7ed5278
2019-06-03 12:18:54 -04:00
Matt Riedemann
3f76f9cfdb Optimize hypervisor API calls
The nova CDM builder code and notification handling
code had some inefficiencies when it came to looking
up a hypevisor to get details. The general pattern
used before was:

1. get the minimal hypervisor information by hypervisor_hostname
2. make another query to get the hypervisor details by id

In the notifications case, it was actually three calls because
the first is listing hyprvisors to filter client-side by service
host.

This change collapses 1 and 2 above into a single API call
to get the hypervisor by hypervisor_hostname with details
which will include the service (compute) host information
which is what get_compute_node_by_id() was being used for.
Now that nothing is using get_compute_node_by_id it is removed.

There is more work we could do in get_compute_node_by_hostname
if the compute API allowed filtering hypervisors by service
host so a TODO is left for that.

One final thing: the TODO in get_compute_node_by_hostname about
there being more than one hypervisor per compute service host
for vmware vcenter is not accurate - nova's vcenter driver
hasn't supported a host:node 1:M topology like that since the
Liberty release [1]. The only in-tree driver in nova that supports
1:M is the ironic baremetal driver, so the comment is updated.

[1] Ifc17c5049e3ed29c8dd130339207907b00433960

Depends-On: https://review.opendev.org/661785/
Change-Id: I5e0e88d7b2dd1a69117ab03e0e66851c687606da
2019-06-03 12:18:54 -04:00
zhufl
9c1b83e610 Add missing ws separator between words
This is to add missing ws separator between words.

Change-Id: Iab23ce2ad081fef18978579594886950b8e2cb01
2019-05-31 14:51:30 +08:00
Zuul
5f94eef027 Merge "Group instance methods together in nova_helper" 2019-05-31 02:58:11 +00:00
Zuul
788f0055c1 Merge "Improve exceptions and logging in ds manager" 2019-05-31 02:57:33 +00:00
Zuul
88fb097539 Merge "Audit API supports new force option" 2019-05-29 10:01:04 +00:00
Zuul
ee3cbe46ef Merge "Fix test_metric_file_override metric from backend" 2019-05-29 08:13:31 +00:00
Dantali0n
a00daf9f26 Group instance methods together in nova_helper
Some of the methods for retrieving data about instances was placed
at the bottom of nova_helper instead of being close to the other
instance based methods.

Change-Id: I68475883529610e514aa82f1881105ab0cf24ec3
2019-05-29 09:02:21 +02:00
Zuul
855bfecf2f Merge "formal datasource interface implementation" 2019-05-28 12:15:06 +00:00
Zuul
5a3d1b741d Merge "Add force field to api-ref" 2019-05-28 02:10:42 +00:00
Zuul
15316a57db Merge "Optimize NovaClusterDataModelCollector.add_instance_node" 2019-05-27 03:02:53 +00:00
Zuul
38131a37b2 Merge "Remove 2.56 version compatibility check" 2019-05-27 03:01:48 +00:00
Zuul
59306b9a47 Merge "Require nova_client.api_version >= 2.56" 2019-05-27 03:01:47 +00:00
licanwei
2afd0dfcf5 Audit API supports new force option
Depends-on:Ia08694d2fb76907ea14e64116af2e722fe930063

Change-Id: Ib2d221ea9c994dea396c54cc8d2d32237025a1d4
Implements: blueprint add-force-field-to-audit
2019-05-27 02:08:33 +00:00
Matt Riedemann
fdea38fb06 Optimize NovaClusterDataModelCollector.add_instance_node
This does two things:

1. Rather than make an API call per server on the host,
   get all of the servers in a single API call by
   filtering on the host. The os-hypervisors API results
   to use make this require a bit of refactoring since
   get_compute_node_by_name does not have the service
   entry in it and get_compute_node_by_id does not have the
   servers entry in it. A TODO is added to clean that up
   with a single call to os-hypervisors once we have the
   support in python-novaclient.

2. Pulls get_node_by_uuid() out of the loop.

A test is added for the nova_helper get_instance_list method
since one did not exist before.

The fake compute node mocks in test_nova_cdmc_execute are
also cleaned up since, as noted above, get_compute_node_by_name
and get_compute_node_by_id don't both return all the details.

Change-Id: Ifd9f83c2f399d4c1765b0c520f4d5a62ad0f5fbd
2019-05-27 02:31:32 +03:00
Zuul
3b9364d4c7 Merge "Add force field to Audit" 2019-05-25 07:48:20 +00:00
Zuul
ba92791117 Merge "support-keystoneclient-option" 2019-05-25 07:01:10 +00:00
Dantali0n
5c492ea862 Fix test_metric_file_override metric from backend
Fix the list of required metrics from a datasource when testing the
existence of this metric in the metric map.

Change-Id: I19b7408a98893bc942c32edb09f1b3798ec8dc79
2019-05-24 15:32:55 +02:00
licanwei
62d181d925 Add force field to Audit
Partially Implements: blueprint add-force-field-to-audit

Change-Id: Ia08694d2fb76907ea14e64116af2e722fe930063
2019-05-24 00:05:13 -07:00
Matt Riedemann
a09cb3fa6c Remove 2.56 version compatibility check
With change Id34938c7bb8a5ca934d997e52cac3b365414c006
we require nova API version 2.56 or greater so we can
remove the compatibliity check in the
watcher_non_live_migrate_instance method.

The _check_nova_api_version method is left in place
for future compability checks.

Change-Id: I69040fbc13b03d90b9687c0d11104d4a5bae51d3
2019-05-23 16:01:44 -04:00
Matt Riedemann
7489126d83 Require nova_client.api_version >= 2.56
The [nova_client]/api_version defaults to 2.56 since
change Idd6ebc94f81ad5d65256c80885f2addc1aaeaae1. There
is compatibility code for that change but if 2.56 is
not available watcher_non_live_migrate_instance will
still fail if a destination host is used.

Since 2.56 has been available since the Queens version of
nova it should be reasonable to require at least that
version of nova is running for using Watcher.

This adds code which enforces the minimum version along
with a release note and "watcher-status upgrade check"
check method.

Note that it's kind of weird for watcher to have a config
option like nova_client.api_version since compute API
microversions are per API request even though novaclient
is constructed with the single configured version. It should
really be something the client (watcher in this case) determines
using version discovery and gracefully enables features if
the required nova API version is available, but that's a bigger
change.

Change-Id: Id34938c7bb8a5ca934d997e52cac3b365414c006
2019-05-23 15:49:19 -04:00
Zuul
1e6ce53273 Merge "Handle no nova CDM in notification code" 2019-05-22 02:57:56 +00:00
Dantali0n
e76c20d1c5 Improve exceptions and logging in ds manager
MetricNotAvailable and NoDatasourceAvailable allow to differentiate
between having no datasources configured and a required metric being
unavailable from the datasource. Both exceptions have comments so
that the use case is clear.

The input validation of the get_backend method in the datasource
manager is improved.

Additional logging information allows to identify which metric caused
the available datasource to be discarded.

Tests are updated to validate the correct functionality of the new
exceptions.

Change-Id: I512976cce2401dbcd249d42686b78843e111a0e7
2019-05-21 20:11:20 +02:00
Dantali0n
5a35b30763 Improve DevStack documentation to support metrics
Support DevStack setups with datasources configured starting with
Gnocchi.

Change-Id: Ibcf0909ccce2dbb646c23a179ca763b6c3e62633
2019-05-21 15:36:46 +02:00
Dantali0n
84cb589aa9 formal datasource interface implementation
Changes to the baseclass for datasources so strategies can be made
compatible with every datasource. Baseclass methods clearly describe
expected values and types for both parameters and for method returns.
query_retry has been added as base method since every current
datasource implements it.

Ceilometer is updated to work with the new baseclass. Several methods
which are not part of the baseclass and are not used by any strategies
are removed. The signature of these methods would have to be changed
to fit with the new base class while it would limit strategies to
only work with Ceilometer.

Gnocchi is updated to work with the new baseclass.

Gnocchi and Ceilometer will perform a transformation for the
host_airflow metric as it retrieves 1/10 th of the actual CFM

Monasca is updated to work with the new baseclass.

FakeMetrics for Gnocchi, Monasca and Ceilometer are updated to work
with the new method signatures of the baseclass.

FakeClusterAndMetrics for Ceilometer and Gnocchi are updated to work
with the new method signatures of the baseclass.

The strategies workload_balance, vm_workload_consolidation,
workload_stabilization, basic_consolidation, noisy_neighbour,
outlet_temp_control and uniform_airflow are updated to work with the
new datasource baseclass.

This patch will break compatibility with plugin strategies and
datasources due to the changes in signatures.

Depends-on: I7aa52a9b82f4aa849f2378d4d1c03453e45c0c78
Change-Id: Ie30ca3dbf01062cbb20d3be5d514ec6b5155cd7c
Implements: blueprint formal-datasource-interface
2019-05-21 11:18:08 +02:00
Zuul
f049815cf4 Merge "Enhance the collector_plugins option help text" 2019-05-21 09:10:12 +00:00
Zuul
7b1a7f0fe4 Merge "Allow using file to override metric map" 2019-05-21 09:04:40 +00:00
Zuul
3af43be7da Merge "Improve Gnocchi and Monasca datasource tests" 2019-05-21 09:04:39 +00:00
Zuul
f731aa1748 Merge "Fix Stein version in watcher-status docs" 2019-05-21 07:17:33 +00:00
Zuul
7d4c587014 Merge "Add doc/requirements.txt to venv tox target" 2019-05-21 07:17:32 +00:00
Zuul
124a942301 Merge "Remove dead code from NovaClusterDataModelCollector" 2019-05-20 13:00:16 +00:00
Dantali0n
dea32c5e1f Improve Gnocchi and Monasca datasource tests
As a follow up to the recent test improvements for Ceilometer this
patch ensures that the same test pattern is used for Gnocchi and
Monasca as well. This ensures that the mocked functions will be called
with matching signatures.

Change-Id: Ic14a4c087f3961a4b4f373e2e3d792aba71868f6
2019-05-20 14:41:24 +02:00
Sumit Jamgade
b620081714 Allow using file to override metric map
Override the metric map of each datasource as soon as it is created by
the manager. This override comes from a file whose path is provided by
a setting in config file.

Loading at creation time allows the correct datasource be used when
get_backend is called, this allows loading a datasource whose metric
names get updated outside the watcher's codebase.

The function 'load_metric_map' returns empty-dict in any error case.
Also in case the file is empty where safe_load is unable finds any
yaml documents, it will return None. [1]

Some minor refactoring in the test_manager file for readability and
added tests for file load and metric override.

1 - https://pyyaml.org/wiki/PyYAMLDocumentation

Change-Id: I1df16245f4c7dfd34066f3ab0553cd67154faa58
Implements: blueprint file-based-metric-map
2019-05-20 10:28:00 +02:00
Zuul
7456975445 Merge "Fix typo in ceilometer datasource" 2019-05-20 07:44:55 +00:00
chenke
f131825690 support-keystoneclient-option
Some users may want to create keystoneclient by specifying the
type of endpoint and region name, so we need to supply the option
for user to choose.

Implements: blueprint support-keystoneclient-option

Change-Id: I49b33a69ec99d2a91568ce27ef89dc80b75e7091
2019-05-18 18:36:19 +00:00
Zuul
1b328f5148 Merge "Update migration notification" 2019-05-18 08:30:15 +00:00
Zhenyu Zheng
f92f77f683 Fix typo in ceilometer datasource
Change I25b4cb0e1b85379ff0c4da9d0c1474380d75ce3a in
Queens refactored the statistic_aggregation method
and renamed the "aggregate" kwarg to "aggregation",
presumably to match the signature of the GnocchiHelper
statistic_aggregation method (the commit message does
not give details) so a base method could be added to
the parent class for all datasource helpers.

As a result, the CeilometerHelper calls to its
statistic_aggregation started passing the new
"granularity" kwarg but failed to match the rename
to the "aggregation" kwarg, which breaks the
CeilometerHelper. This was missed by the unit tests
because the tests were just asserting the erroneous
call that the runtime code made.

This change fixes the kwarg typo and makes the
tests more robust by using the mock spec kwarg
to define a spec for the statistic_aggregation
mock so that it must be called with the correct
parameters defined in the method signature. The
test is refactored to reduce duplicate mocking.
The same test hardening can and should be done
in the gnocchi and monasca helper tests but that
should be done in a separate change.

Co-Authored-By: Matt Riedemann <mriedem.os@gmail.com>

Closes-Bug: #1829542

Change-Id: Idfd099f718873d9056fdc35a97954771c9ae5762
2019-05-17 12:06:42 -04:00
Zuul
78d28427be Merge "pass default_config_dirs variable for config initialization." 2019-05-17 10:20:44 +00:00
Zuul
b45777c497 Merge "Use base_strategy's add_action_migrate method" 2019-05-17 10:13:41 +00:00
Zuul
a0e434042b Merge "Fix_inappropriate_name" 2019-05-17 10:11:52 +00:00
Zuul
ce1d64a16c Merge "Remove unused utilities file" 2019-05-17 03:36:35 +00:00
Matt Riedemann
8a206a6ae5 Handle no nova CDM in notification code
As of change Ic4659d1f18af181203439a8bf1b38805ff34c309 the
nova CDM will not be built until an audit is performed.

Instances and services (compute hosts) can be created and
deleted before an audit is performed which will attempt
to use the notification callback function which relies
on the CDM being built already, and if not results in
an AttributeError.

This change side-steps that issue by checking to see that the
nova CDM exists before trying to call the notification
callback function.

An alternative to this is forcefully create the nova CDM when
notifications are received before an audit which is what happend
before change Ic4659d1f18af181203439a8bf1b38805ff34c309.

Change-Id: I16990afb82019821c443c9df26d3e515e52efa69
Closes-Bug: #1828582
2019-05-16 17:45:44 -04:00
Zuul
a1fa9b8c3f Merge "Fix API version header" 2019-05-16 08:54:58 +00:00
Zuul
96d25d8bfe Merge "update api version history" 2019-05-16 08:10:59 +00:00
Dantali0n
76367afd1d Remove unused utilities file
Change-Id: I26495fe9b0f191f6df953b5c61e971969c767662
2019-05-16 10:10:34 +02:00
licanwei
6d96512188 Update migration notification
_post_live_migration[1] runs on the source host and calls
post_live_migration_at_destination on the dest host which
emits the instance.live_migration_post_dest.end notification:[2]
But it's not the last notification for the live migration operation.
so we should use instance.live_migration_post.end instead of
instance.live_migration_post_dest.end notification.

[1]daa2ac2287/nova/compute/manager.py (L6907)
[2]daa2ac2287/nova/compute/manager.py (L7035)

Change-Id: Id1e2d98f56d5a95d49e32f98d2910660b9f48ce6
2019-05-16 15:48:49 +08:00
Zuul
6b16e7e58f Merge "Remove bandit from lower-constraints" 2019-05-16 02:38:45 +00:00
Zuul
2834610fa6 Merge "docs: fix link to install guide from user guide" 2019-05-15 15:48:00 +00:00
chenke
86a537fe7f Remove bandit from lower-constraints
The version of bandit in lower-constraints (1.4.0) does
not match the version in test-requirements (1.6.0) however
bandit is a test-only dependency and there is no test coverage
for bandit in the lower-constraints tox job target, so there
is really no good reason to have bandit in lower-constraints.
As such, this change simply removes it from lower-constraints.

Co-Authored-By: Matt Riedemann <mriedem.os@gmail.com>

Change-Id: I35f66994e9a3a334b342232587d84491542da755
2019-05-15 14:37:52 +00:00
chenke
15c842fba2 Update Sphinx requirement
Sphinx 2.0 no longer works on python 2.7, so we need to start capping
it there as well.

The errors are as follow:

Requirement(package='sphinx', location='', specifiers='!=1.6.6,!=1.6.7,>=1.6.5'
does not match "python_version>='3.4'"
Requirement(package='sphinx', location='', specifiers='!=1.6.6,!=1.6.7,>=1.6.5'
does not match "python_version=='2.7'"
Could not find a global requirements entry to match package sphinx. If the package
is already included in the global list, the name or platform markers there may not
match the local settings.

Change-Id: I6dad56ffbb9e85e36cacea1a89565c2fc8248fbf
2019-05-15 11:03:48 +08:00
Matt Riedemann
3edafc9ba9 Fix Stein version in watcher-status docs
The final Stein version of Watcher was 2.0.0
so this fixes the version mentioned in the
watcher-status man page docs.

Change-Id: I7fce35471cf31222f9cdafc35e5a7b287bc4598e
2019-05-14 20:51:28 -04:00
Matt Riedemann
efb4aaa0cf Add doc/requirements.txt to venv tox target
This is needed to create a release note using the venv target:

  tox -e venv -- reno new <slug>

Change-Id: I1a0800a90781ede281b22db2892fb91e700d6e7b
2019-05-14 20:42:03 -04:00
Matt Riedemann
4cd8a2f46e Remove dead code from NovaClusterDataModelCollector
The _add_virtual_layer and _add_virtual_servers methods
have not been used since Ic4659d1f18af181203439a8bf1b38805ff34c309
in Stein so this change removes them.

Change-Id: I8c05f29c3c03aa5897cb182bb492948771c42881
2019-05-14 17:40:13 -04:00
Matt Riedemann
aa7442d795 Enhance the collector_plugins option help text
This enhances the [collector]/collector_plugins
config option help text to mention the storage
and baremetal in-tree collectors and the ability
to load out-of-tree collectors via extension point.

While doing this, the help text is formatted for
prettier rst rendering in the docs.

Change-Id: Ifd32c95c664c4e9586c250e6bceaeaba2e2df417
2019-05-14 14:18:32 -04:00
chenke
0df6c0d961 Use base_strategy's add_action_migrate method
Do this before implementing blueprint:
Add resource_name in action input parameter field

Change-Id: I1defb1f114d6eb6d0f2d1baffaa86712966e184a
2019-05-14 21:53:45 +08:00
chenke
d9eb925355 Fix_inappropriate_name
In these places, 'node' should be named 'node_uuid'

Change-Id: I60a7c9aa320e813d2f03c1f389188e142ca22daf
2019-05-14 20:37:42 +08:00
licanwei
a40892c302 update api version history
Partially Implements: blueprint add-force-field-to-audit

Change-Id: Iff858b63add6d3e5929780abfd52a2c4b1a87ed7
2019-05-14 13:42:00 +08:00
Zuul
9922dec025 Merge "allow building docs without ceilometer client" 2019-05-14 02:38:42 +00:00
Zuul
85de4472f1 Merge "Remove watcher.openstack.common=WARN from _DEFAULT_LOG_LEVELS" 2019-05-14 02:38:24 +00:00
Sumit Jamgade
241df0d5f4 allow building docs without ceilometer client
CeilometerClient has been deprecated and is no longer available for
master. Without ceilometer client installed docs fail to build with
an exception [1].

This patch marks the import optional.

1 -
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/sphinx/config.py", line 368, in
eval_config_file
    execfile_(filename, namespace)
  File "/usr/lib/python2.7/site-packages/sphinx/util/pycompat.py", line
150, in execfile_
    exec_(code, _globals)
  File "/usr/lib/python2.7/site-packages/six.py", line 709, in exec_
    exec(""exec _code_ in _globs_, _locs_"")
  File "<string>", line 1, in <module>
  File
"/home/abuild/rpmbuild/BUILD/python-watcher-2.1.0.dev45/doc/source/conf.py",
line 20, in <module>
    objects.register_all()
  File
"/home/abuild/rpmbuild/BUILD/python-watcher-2.1.0.dev45/watcher/objects/__init__.py",
line 31, in register_all
    __import__('watcher.objects.action_plan')
  File
"/home/abuild/rpmbuild/BUILD/python-watcher-2.1.0.dev45/watcher/objects/action_plan.py",
line 78, in <module>
    from watcher import conf
  File
"/home/abuild/rpmbuild/BUILD/python-watcher-2.1.0.dev45/watcher/conf/__init__.py",
line 28, in <module>
    from watcher.conf import datasources
  File
"/home/abuild/rpmbuild/BUILD/python-watcher-2.1.0.dev45/watcher/conf/datasources.py",
line 21, in <module>
    from watcher.datasources import manager
  File
"/home/abuild/rpmbuild/BUILD/python-watcher-2.1.0.dev45/watcher/datasources/manager.py",
line 19, in <module>
    from watcher.datasources import ceilometer as ceil
  File
"/home/abuild/rpmbuild/BUILD/python-watcher-2.1.0.dev45/watcher/datasources/ceilometer.py",
line 21, in <module>
    from ceilometerclient import exc
ImportError: No module named ceilometerclient
)

Change-Id: Idcf582c2495aab39aacf691b687759405bb94dca
2019-05-13 14:42:58 +02:00
Zuul
5722f5f994 Merge "Remove unused exceptions" 2019-05-13 11:19:51 +00:00
Sumit Jamgade
dce23d7eb4 pass default_config_dirs variable for config initialization.
Currently default config files are being for initialization of CONF from
oslo_config. However default config dirs are not being passed as a
result watcher components (eg: decision-engine) are unable to load
files from default directories (eg: /etc/watcher/watcher.conf.d)
supported by oslo_config. This is a short-coming on watcher's side.
Also this forces user to have multiple config for each component.

Without this default set, oslo_config will search for conf with string
'python-watcher' in it, eg: /etc/python-watcher/.... Since there is a
because project=python-watcher a couple of lines below

This patch adds the option after evaluating using project as 'watcher'
which is similar to evaluation of default_config_files and also allows
it to be passed in as a function parameter.

Change-Id: I013f9d03978f8716847f8d1ee6888629faf5779b
2019-05-13 10:59:55 +02:00
Matt Riedemann
14d4cb54fa docs: fix link to install guide from user guide
This fixes the wrong installation guide link from the
user guide which was pointing to the watcherclient docs
for some reason, maybe it was just a copy/paste error.

Change-Id: I38f536e187245523ac37d70054a2df8cdfcbe4b2
Closes-Bug: #1828584
2019-05-10 11:37:28 -04:00
Matt Riedemann
5c2939f23b Remove watcher.openstack.common=WARN from _DEFAULT_LOG_LEVELS
Hard-coding watcher.openstack.common to warning level logging
only makes it hard to debug watcher's interactions with other
services, like when it's triggering and monitoring a server live
migration.

Since debug logging is controlled via the "debug" configuration
option, we can just rely on that to filter out debug logs within
watcher itself.

Note this has been this way since change
I699e0ab082657880998d8618fe29eb7f56c6c661 back in 2015 and there
was no explanation why the watcher.openstack.common logging
was set to WARN level.

Change-Id: I939403a4ae36d1aa9ea83badb9404bc37d18a1a6
Related-Bug: #1828598
2019-05-10 11:29:08 -04:00
Zuul
64d841b3f2 Merge "Add tempest voting" 2019-05-10 07:15:29 +00:00
Zuul
9d15566945 Merge "Use the common logging setup function in devstack runs" 2019-05-10 07:04:29 +00:00
Zuul
583c9d8f6d Merge "Allow for global datasources preference from config" 2019-05-10 06:04:00 +00:00
Zuul
ba82e8b68e Merge "Fix reraising of exceptions" 2019-05-10 03:49:57 +00:00
Zuul
cc809a24ff Merge "update wsme types" 2019-05-10 03:49:56 +00:00
licanwei
76f0ce1d2c Add force field to api-ref
Change-Id: Iddea2359a13ba099e840b9501d4e9335905695f4
Implements: blueprint add-force-field-to-audit
2019-05-10 10:51:37 +08:00
licanwei
606f20b66e Fix API version header
X-OpenStack-Watcher-API-Version should be OpenStack-API-Version

Change-Id: Ibfb7362f4b5df0775e8215b6e0bd83f9bd784244
2019-05-10 09:51:21 +08:00
Dantali0n
567e079848 Remove unused exceptions
Change-Id: Ibb7e3fa4052f04a4e3fc1de60afa6fbafd4a7f9b
2019-05-09 18:54:47 +02:00
Matt Riedemann
838768c76e Fix bandit runs with 1.6.0
The -x option for bandit changed in 1.6.0 and now
supports glob patterns so use that to correctly
exclude test code from bandit scans.

Since this change requires bandit>=1.6.0, we have
to also fix the networkx requirement to pass the
requirements-check job so that the networkx requirement
matches what is in global-requirements from change
I0a9700926c9a0db93e782c853c33f1aaee3d4876.

Change-Id: I4fc1166daee5d8739296419216d11d684be27c0a
Closes-Bug: #1828419
2019-05-09 11:14:40 -04:00
Dantali0n
bd8636f3f0 Allow for global datasources preference from config
Allows to define a global preference for metric datasources with the
ability for strategy specific overrides. In addition, strategies which
do not require datasources have the config options removed this is
done to prevent confusion.

Some documentation that details the inner workings of selecting
datasources is updated.

Imports for some files in watcher/common have been changed to resolve
circular dependencies and now match the overall method to import
configuration.

Addtional datasources will be retrieved by the manager if the
datasource throws an error.

Implements: blueprint global-datasource-preference
Change-Id: I6fc455b288e338c20d2c4cfec5a0c95350bebc36
2019-05-09 11:02:15 +02:00
Matt Riedemann
173bf11a7d Use the common logging setup function in devstack runs
To get log formatting like the other openstack projects
running in devstack the setup_logging function should be
used. This will also give us the "Display level" formatting
in the logs via the os-loganalyze packaged used by infra.

Needed by: https://review.opendev.org/657652

Change-Id: I5e9bd5a142e45804e8d915b370746a2142243088
2019-05-07 13:26:37 -04:00
Sean McGinnis
af0f02d19b Fix reraising of exceptions
Exceptions should be reraised with just "raise" and not "raise e" to
preserve the traceback. This also addresses a couple cases where the
catching and reraising of the exception was not actually doing anything.

Change-Id: I94ba193f728ee7ca6f689f70fc08317a1dd50c92
Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
2019-05-07 11:50:57 -05:00
chenke
e2285777e2 Using node replace resource_id in method add_action_disable_node()
We have a bp to add resource_name in action input parameter field.

Before doing this, one of this method's parameter should be node
instead of resource_id.

Change-Id: I4ce5ae97efce98d80a460fd6003df3cc5cacab82
2019-05-07 15:07:07 +08:00
Zuul
30104ae4ae Merge "Put the method add_migration() in base.py" 2019-05-07 06:00:56 +00:00
chenke
4d480d5ccf Put the method add_migration() in base.py
Change-Id: I00bc03be6a59edf117b66388305486d8f74f77ce
2019-05-06 14:29:21 +08:00
licanwei
8fa8934424 update wsme types
wsproperty and wsattr are in module wsme.types

Change-Id: I6a33c81b7207e14b3bda512381ef809e4a7de4ce
2019-05-05 17:28:29 +08:00
Zuul
8ac5e620f4 Merge "Resolve problems with audit scope and add tests" 2019-04-30 09:20:27 +00:00
licanwei
c99e051a14 Add tempest voting
Change-Id: If09544e96ef23a6c52bde1f7211bf323d9609f63
2019-04-30 16:02:32 +08:00
Dantali0n
d84f8c50f5 Resolve problems with audit scope and add tests
This resolves problems with the audit scope such as the scope being
ignored, the scope not merging due to a type in .append, change update
into .add method when adding single elements to a set and making the
access of dict keys and values as lists work in python 3.7.

All these methods from the model builder now have tests to prevent
regressions.

Co-Authored-By: Canwei Li <li.canwei2@zte.com.cn>

Change-Id: I287763d5e426ff860aefabc4a1f3fe3f51accd76
2019-04-30 07:12:56 +00:00
chenke
d2e1d69d37 Replace git.openstack.org with opendev.org
Change-Id: Ibccf32b71d307d9c80c91035907dc8292722ab31
2019-04-29 09:49:24 +02:00
Zuul
92c94f61ca Merge "Add hardware.cpu_util in workload_stabilization" 2019-04-26 02:36:20 +00:00
Tatiana Kholkina
4db39c527d Add hardware.cpu_util in workload_stabilization
Since commit I8df8921337ea3f4e751c0c822d823e64e3ca7e1c
the check for hardware.cpu.util was removed.
But it can be still used in workload stabilization.

Change-Id: I301487837aac2e1e63bce16a79d0f8136452c313
2019-04-25 07:31:34 +00:00
Zuul
2a1c353014 Merge "separate launching audit scheduler" 2019-04-25 07:03:56 +00:00
zhulingjie
647b5e9483 Drop use of git.openstack.org
Our cgit instance will be going away and opendev.org is the new
preferred URL for browsing our git repos. Redirects will exist for the
foreseeable future, but it's more efficient to just go directly to the
new locations.

Change-Id: I7dd9d454da63167832bab02c89be98a2ce03b72a
2019-04-23 13:20:10 +02:00
Zuul
b880a57a8b Merge "Replace HOST_IP to SERVICE_HOST" 2019-04-20 04:56:17 +00:00
OpenDev Sysadmins
62da2984b8 OpenDev Migration Patch
This commit was bulk generated and pushed by the OpenDev sysadmins
as a part of the Git hosting and code review systems migration
detailed in these mailing list posts:

http://lists.openstack.org/pipermail/openstack-discuss/2019-March/003603.html
http://lists.openstack.org/pipermail/openstack-discuss/2019-April/004920.html

Attempts have been made to correct repository namespaces and
hostnames based on simple pattern matching, but it's possible some
were updated incorrectly or missed entirely. Please reach out to us
via the contact information listed at https://opendev.org/ with any
questions you may have.
2019-04-19 19:40:45 +00:00
licanwei
0def7b4d38 separate launching audit scheduler
Now there are only one scheduler for launching audit task and
executing audit jobs. We have found an exception where the scheduler
stops for some reason when executing audit.
In order to keep launching audit task normal, we need to split into
two schedulers.

Change-Id: I45dccaf062290cfc7d7fcfc27fe11d6f87f38afa
2019-04-19 14:30:09 +08:00
licanwei
f36c25b52f Replace HOST_IP to SERVICE_HOST
HOST_IP only used by ipv4, SERVICE_HOST is used by ipv4 or ipv6.

Change-Id: I50d66f4fbe9cd80e32fe4cf67f8a6ae19b500c0d
2019-04-19 11:42:59 +08:00
licanwei
f52716fcf9 remove py35
We hava python3.6 and python3.7 now, it's enough.

https://governance.openstack.org/tc/reference/runtimes/train.html

Change-Id: I54b18fb0bd7674760603de841c28c8b1fda77c56
2019-04-16 16:24:53 +08:00
Zuul
57fd68128e Merge "Adapt Watcher to Python3.7" 2019-04-12 04:36:42 +00:00
chenke
8cb4c8e406 Uncap jsonschema
Reference commit:
https://review.openstack.org/#/c/649799/
https://review.openstack.org/#/c/649669/2/global-requirements.txt

Change-Id: I01a056ee6ce89ec0416290de84b0043126aa668f
2019-04-11 20:03:42 +08:00
Zuul
721b710e2f Merge "Make datasource methods match names of metrics" 2019-04-11 03:13:51 +00:00
Zuul
0ed016182e Merge "Fix lower-constraint deps handling" 2019-04-04 13:11:21 +00:00
Zuul
33009db64a Merge "Move eventlet monkey patch code" 2019-04-04 11:28:54 +00:00
Zuul
9d96c12441 Merge "Fix openstack-tox-lower-constraint TIMED_OUT Error" 2019-04-04 11:27:58 +00:00
licanwei
2df5ab926e Fix docs gate failed
Change-Id: I334b76ce9284a41583e06bdd05900ba2baf4dc64
2019-04-04 14:56:41 +08:00
Zuul
187b0e6a4b Merge "Update meeting schedule to new bi-weekly format" 2019-04-01 01:28:16 +00:00
Zuul
eafeb94a01 Merge "Replace openstack.org git:// URLs with https://" 2019-04-01 01:28:14 +00:00
Alexander Chadin
6dfeeb7359 Adapt Watcher to Python3.7
There are some issues with bundle of eventlet, taskflow and
apscheduler on Python 3.7.
According to [0], replace ThreadPoolExecutor with
GreenThreadPoolExecutor

[0]: http://lists.openstack.org/pipermail/openstack-dev/2018-July/132481.html

Co-Authored-By: Canwei Li <li.canwei2@zte.com.cn>

Change-Id: I989d7155eb8764088f91b3ca0d1f47ac6332bf11
2019-03-30 14:43:31 +08:00
licanwei
ac3aa94599 Move eventlet monkey patch code
Eventlet monkey patching is not recommended on top level __init__ [1],
because Apache WSGI module uses own concurrency model [2] and API
service under Apache should be runned without eventlet. This patch
moves eventlet monkey patching code to watcher.cmd module __init__
(like in nova).

[1] https://specs.openstack.org/openstack/openstack-specs/specs/eventlet-best-practices.html
[2] http://modwsgi.readthedocs.io/en/develop/user-guides/processes-and-threading.html

Change-Id: Ie5cf67429ea9ef8d00dd7348ce288437ea105c08
2019-03-30 14:28:52 +08:00
Sean McGinnis
68a90b2cfa Fix lower-constraint deps handling
When the lower-constraints tox target was added, it was assumed the
install_command was just running the install and that the dependencies
and constraints were being set using "deps = ".

This fixed the install_command and deps to follow the expected pattern
so the lower-constraints job actual does install the lower constraints.

This also raises the oslo.context minimum as
Ic96c1f1e1a80099d9dafa95a014fc47f05b88e42 added a dependency on a newer
versions kwarg.

Depends-On: https://review.openstack.org/#/c/647726/

Change-Id: I4cc2c3ac158a607b22295c50f83896969a4007ee
Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
2019-03-28 04:43:05 +00:00
chenke
7f495e8e6f Fix openstack-tox-lower-constraint TIMED_OUT Error
When use tox-elower-constraint, we will meet these errors:

1. line 417, in test_clients_ironic:
b"AssertionError: Expected call: Client('1', endpoint_override...
b"Actual call: Client('1', 'http://localhost:6385/'...

2. line 39, in test_wrong_major_version:
b"KeyError: 'HTTP_ACCEPT'"

3. RUN END RESULT_TIMED_OUT:
[untrusted : git.openstack.org/openstack-infra/
zuul-jobs/playbooks/tox/run.yaml@master]

For the first error, The reason is that the unittest for the
ironicclient is too strict and must be adapted to the latest code.
In fact, the watcher can use the previous ironicclient version.
Therefore, we modified the unittest so that the watcher does not
have to rely on the latest ironicclient version.

For the second error, The reason is that we need to update the minimum
version of pecan and webOb.

For the third error, the reason is that the version of the oslo_messaging
is too low.

Change-Id: Icb3eda3d27fa4452e13e2dcd3c016cc76fc2c7c7
2019-03-28 12:34:31 +08:00
Dantali0n
3b80b35270 Update meeting schedule to new bi-weekly format
Change-Id: I24bca9cd07262387282acc9ba458e9ef50587146
2019-03-26 16:36:34 +01:00
Dantali0n
c8e4efcd0b Make datasource methods match names of metrics
Metrics for datasources now match the name of their corresponding
abstract methods. This ensures that developers know how the method
is named if they know the name of the metric and vice versa.

Change-Id: I0f9d400432d8182b3f10a0da97155e6cb786690e
2019-03-26 08:53:25 +01:00
Ian Wienand
b023c9076f Replace openstack.org git:// URLs with https://
This is a mechanically generated change to replace openstack.org
git:// URLs with https:// equivalents.

This is in aid of a planned future move of the git hosting
infrastructure to a self-hosted instance of gitea (https://gitea.io),
which does not support the git wire protocol at this stage.

This update should result in no functional change.

For more information see the thread at

 http://lists.openstack.org/pipermail/openstack-discuss/2019-March/003825.html

Change-Id: I3452a7802dde00d8be32c833d714b2974be58e16
2019-03-24 20:36:25 +00:00
OpenStack Proposal Bot
ab03bf9bb0 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: Ifa76c8ec76263a9c3af0c7d463ec686e4bf4fa22
2019-03-22 09:11:07 +00:00
OpenStack Release Bot
871a01f554 Update master for stable/stein
Add file to the reno documentation build to show release notes for
stable/stein.

Use pbr instruction to increment the minor version number
automatically so that master versions are higher than the versions on
stable/stein.

Change-Id: I25931207ed6066f905fe66ca504fa230e40d12dc
Sem-Ver: feature
2019-03-21 10:36:18 +00:00
Zuul
807857c85b Merge "Migrate legacy jobs to Ubuntu Bionic" 2019-03-19 04:04:17 +00:00
Zuul
922783a5f8 Merge "Move client function test to watcher-tempest-plugin" 2019-03-16 10:15:57 +00:00
zhurong
c8bfb3b188 Move client function test to watcher-tempest-plugin
Depends-On: https://review.openstack.org/643244
Change-Id: I463203fee608be6684a09326d189d0254696d8e0
2019-03-15 03:49:54 +00:00
Tatiana Kholkina
e830d3793e Access to action's uuid by key
Change-Id: I9fe992be8f54de51f0c8e0a9fcf7880c68360929
Closes-Bug: #1818962
2019-03-14 11:51:48 +03:00
ghanshyam
a4865b64f6 Migrate legacy jobs to Ubuntu Bionic
We have migrated the zuulv3 job to Bionic during Dec/Jan month.
 - http://lists.openstack.org/pipermail/openstack-discuss/2018-December/000837.html
 - https://etherpad.openstack.org/p/devstack-bionic
But that effort does not move all gate job to Bionic as there are
large amount of jobs are still legacy jobs. All the legacy jobs still
use Xenial as nodeset.

As per the decided runtime for Stein, we need to test everything on openstack
CI/CD on Bionic - https://governance.openstack.org/tc/reference/runtimes/stein.html

Below patch move the legacy base jobs to bionic which will move the derived jobs
automatically to bionic. These jobs are modified with branch variant so that they will use
Bionic node from stein onwards and xenial for all other stable branches
until stable/rocky.
- https://review.openstack.org/#/c/639096

This commit remove the overridden nodeset from legacy jobs
so that it will start using the nodeset defined in parent job.

More Details: 
- https://etherpad.openstack.org/p/legacy-job-bionic
- http://lists.openstack.org/pipermail/openstack-discuss/2019-March/003614.html

Depends-On: https://review.openstack.org/#/c/639096
Change-Id: I99646904d3d0fb26f4e45df1be841a67c4c2477b
2019-03-13 04:15:50 +00:00
licanwei
a3e5b26ca4 releasenote for data model scope
Change-Id: Ie83b472152d6bd0d4e7435d224ad32c240587ada
2019-03-13 10:16:52 +08:00
Zuul
c1bb0ae443 Merge "Remove unused type check 'int' in audit.py" 2019-03-12 01:52:25 +00:00
Zuul
23cac6813b Merge "scope for datamodel" 2019-03-11 12:40:24 +00:00
Zuul
8d2c249f4b Merge "Generalize exceptions & structure of strategies" 2019-03-11 12:40:24 +00:00
Zuul
baf90dcc1b Merge "Fix unittest failed" 2019-03-11 09:32:30 +00:00
licanwei
6da31b42cb Fix unittest failed
ironicclient added 'interface' argument
https://review.openstack.org/#/c/640491/

Change-Id: I3cf826846281b44a346694a49059578b9fd4c0f1
2019-03-11 14:05:12 +08:00
chenke
9435418bc0 Remove unused type check 'int' in audit.py
Although this method does not report an error, this type check 'int'
is redundant and may be misleading.

Refercnce code url: https://github.com/openstack/wsme/blob/master/wsme/api.py

Change-Id: I631b5f9901790666e7f20275e8c8b99f06f06f0a
2019-03-11 12:03:40 +08:00
Dantali0n
b24bd7a3bb Generalize exceptions & structure of strategies
Many strategies execute very similar statements especially in
pre_execute and some might raise errors that others might not. This
same pattern of many similar statements can also be observed in
strategies their tests.

This patch addresses these issues, firstly; the BaseStrategy class gets
1 additional method _pre_execute which allows for general logic that
most strategies perform at that stage. This method can be executed
before the similarly named method of the superclass. A notable change
is that _pre_execute now handles common exception handling for
ClusterStateStale & ClusterStateNotDefined exceptions.

A similar pattern is applied to the test classes of the strategies
each of these classes now inherits from the TestBaseStrategy class.
This class provides the common attributes almost every test class for
the strategies requires such as: The mocked compute_model, mocked
audit_scope and an instance of FakerModelCollector.

Finally, some minor changes were required in test_strategy_context
& test_audit_handlers and exceptions around 0 nodes in cluster or
storage are removed.

Change-Id: Ia7154376b2448aac65cf17999cc8c3e1c8309b5b
2019-03-08 08:14:48 +01:00
licanwei
f337c67bfe scope for datamodel
This patch adds a scope to the datamodel, which only gets the VMs
 of the specified nodes, and no longer gets all VMs from nova.

Implements: blueprint scope-for-watcher-datamodel
Change-Id: Ic4659d1f18af181203439a8bf1b38805ff34c309
2019-03-08 14:30:18 +08:00
chenke
eb48cee9ab Fix inappropriate description about the audit_state_machine.png
Audit will only failed if an exception occured.
The situation that no solution found will not cause audit failed.

Change-Id: Ib9c3c3505f31c14500926ec13aa865dc8f7aa310
2019-03-07 17:08:53 +08:00
Zuul
29d29ef07a Merge " improve _collect_aggregates" 2019-03-06 03:29:37 +00:00
licanwei
4cdf6a7930 improve _collect_aggregates
There are id,name and hosts fields in the response of list aggregates.
    So don't need invoke get_aggregate_detail again.
    https://developer.openstack.org/api-ref/compute/?expanded=#list-aggregates

Change-Id: I94b768c2d3e0471ca619ce43387889ec74769ce2
2019-03-04 15:21:05 +08:00
Zuul
f19e0539b6 Merge "make ceilometer client import optional" 2019-03-04 04:32:33 +00:00
Zuul
2ea1f524e4 Merge "Provide two arguments to exception's message" 2019-02-27 03:26:36 +00:00
Tatiana Kholkina
594039f794 Provide two arguments to exception's message
Change-Id: I003c9e88abb08b11c22b008936413ee51f6096b1
Closes-Bug: #1817533
2019-02-26 08:47:30 +00:00
Zuul
c7fe13e9e3 Merge "Fix outlet_temp_control config parameter" 2019-02-26 02:29:09 +00:00
Zuul
b60d9cc4e4 Merge "Fix uniform airflow strategy config parameter" 2019-02-26 02:29:08 +00:00
Sumit Jamgade
ea728d91ab make ceilometer client import optional
on ImportError set HAS_CEILCLIENT to false

Without this none of the watcher componenets can be started for master
as well as rocky because the ceilometercleint was deprecated.

Using the variable the support for ceilometer can be gradually removed
from master

A backport to rocky will allow using watcher without ceilometerclient.

Change-Id: I3beb0fb8f0a8e8e0a22acaf6bdeca492836bbee2
2019-02-22 14:13:56 +01:00
licanwei
4590c47aec Fix uniform airflow strategy config parameter
'datasource' should be 'datasources'

Change-Id: I2bd183e020298a93029f38008619a5bebaed3de4
2019-02-20 14:20:17 +08:00
licanwei
dd3c4d5507 Fix outlet_temp_control config parameter
'datasource' should be 'datasources'

Change-Id: Iad337313f5d03b2fef34902950a4b5e41b3e980f
Depends-On: I2bd183e020298a93029f38008619a5bebaed3de4
2019-02-20 11:29:17 +08:00
licanwei
9c4b750c9a remove config parameter 'datasource'
Change-Id: I9d8435663710f4c5f1698df71bec67aa799722bd
2019-02-19 17:01:50 +08:00
Zuul
e74ab79e81 Merge "Add the define of vm_workload_consolidation job" 2019-02-19 06:34:30 +00:00
Zuul
ae005876cb Merge "change config parameter from 'datasource' to 'datasources'" 2019-02-19 02:45:41 +00:00
chenke
a9c0293508 Add the define of vm_workload_consolidation job
Change-Id: I6ac79e406e5a6365376f2a2707419e9931c46369
2019-02-19 09:58:03 +08:00
licanwei
477b4d01e4 change config parameter from 'datasource' to 'datasources'
Change-Id: Iaf59ea25f8d62bf29562f21d846243f98d9b6997
2019-02-19 09:35:59 +08:00
Dantali0n
73830387c6 Move datasources metric mappings out of base.py
Moved the metric mappings for Ceilormeter, Gnocchi & Monasca out of
base.py. The datasources manager now uses classes extending base.py
their NAME attribute as key in the dictionary of total available
mappings and datasources. base.py still contains a template
definition of all available mappings so that anyone extending the
base class can identify all the possible endpoints they can map to.

Change-Id: I6a826423031b5a6a60c4cd5fe24f74b8400f6b55
Closes-Bug: #1815769
2019-02-13 22:24:01 +01:00
Dantali0n
f8dfdd405d function get_sd return 0 early if len(hosts) is 0
Prevent workload_stabilization strategy from failing in a network with
0 hosts.

Change-Id: I9f1a9524923c14d958eb50a70dad379a6021b884
Closes-Bug: #1815059
2019-02-08 11:03:37 +01:00
licanwei
0e46dec6c6 Update storage_balance job
Change-Id: I4f5b0881988452acdaac37b2c3c0573d88ecf244
2019-01-28 11:14:05 +08:00
Zuul
3fffe3b6fa Merge "Add storage balance job" 2019-01-25 03:27:06 +00:00
Zuul
645c0358b1 Merge "trivial" 2019-01-25 01:31:57 +00:00
Zuul
98a6a967f9 Merge "Update user guide" 2019-01-25 01:31:56 +00:00
licanwei
dff99bdaa8 Add storage balance job
Change-Id: I9ae1c0232450c1960e55b067cb398e90bef02835
2019-01-25 09:30:31 +08:00
licanwei
121ec6e532 Update user guide
Change-Id: I0845b3c1a21cf82c3c8ddd30980a7f1b8de57cb7
2019-01-24 17:14:35 +08:00
licanwei
1fba994912 Fix E731 error
Change-Id: I8b314b66af3bd79da06c45c33f5054c292e41fbf
2019-01-24 17:09:47 +08:00
licanwei
551f7c8a6a trivial
Change-Id: Ibb8299401aef52ed2505f85ad36ec1f8a4227d13
2019-01-24 16:01:19 +08:00
Zuul
7c62593495 Merge "Update hacking version" 2019-01-24 02:05:00 +00:00
Zuul
b5b1ecb788 Merge "[Trivial fix] Do not use self in classmethod" 2019-01-23 04:08:35 +00:00
Zuul
87a4600835 Merge "Add grenade job" 2019-01-15 09:12:51 +00:00
zhufl
1e49203cc7 [Trivial fix] Do not use self in classmethod
Do not use self in classmethod, cls should be used instead.

Change-Id: Ib4e5b27e237122e519bdf84d2af1e8c0ea5f1dda
2019-01-15 11:20:36 +08:00
Alexander Chadin
103e5b5605 Add grenade job
This patch set adds grenade support to Watcher based on
legacy-dsvm-base job.

Change-Id: I9e23f59f7415aa350b2da644d8801621533b69b0
2019-01-14 17:21:52 +03:00
Zuul
e42a89b834 Merge "Add version api ref" 2019-01-12 07:39:37 +00:00
Zuul
30437fd929 Merge "update api-ref for audit start/end time" 2019-01-12 07:36:57 +00:00
zhulingjie
a4d31eac42 Update hacking version
Use latest release 1.1.0 and compatible changes w.r.t pep8

Change-Id: If1860c3fe287852e87704b511567c65d8d4d0c1c
2019-01-09 23:54:55 +08:00
Zuul
7dbd8ab34b Merge "Use template for lower-constraints" 2019-01-04 02:37:02 +00:00
Zuul
cb9cb649dd Merge "Add host maintenance tempest" 2019-01-04 02:37:01 +00:00
licanwei
f7dcefb554 Add version api ref
Change-Id: I93cb484a1f3ae533558ecde0cd79c8b6b2fb18f1
2018-12-25 00:56:22 +00:00
licanwei
6addd6bda0 update api-ref for audit start/end time
Change-Id: I2d81f58fc32885ec967df29f56b0dc040eb52534
2018-12-24 16:57:29 +08:00
Zuul
3a5966fb92 Merge "Remove unused modules" 2018-12-21 13:17:47 +00:00
Andreas Jaeger
d8017c177c Use template for lower-constraints
Small cleanups:

* Use openstack-lower-constraints-jobs template, remove individual
  jobs.
* Sort list of templates

Change-Id: I63bfcd9bc21011b446fd1c54cb64c5568c601687
Needed-By: https://review.openstack.org/623229
2018-12-20 21:30:34 +01:00
Zuul
f94a397817 Merge "Update min tox version to 2.0" 2018-12-20 12:56:01 +00:00
Alexander Chadin
4f2b4fdd8d Remove unused modules
This patch set removes "observable" and "synchronization"
modules cause they aren't used by any Watcher modules so far.

Change-Id: If23cdf0d3d09087919d48f50ab38b0d355c36481
2018-12-19 13:41:16 +03:00
licanwei
a19b799de4 Add host maintenance tempest
Change-Id: I3450ed8fe550195b80347680763549f45cf734f6
2018-12-18 09:30:46 +08:00
Zuul
90c8525ccb Merge "audit create request can't set scope" 2018-12-17 01:54:44 +00:00
Zuul
d41d6bebfa Merge "Fix mailing list archive URL" 2018-12-17 01:54:43 +00:00
Zuul
e3c5151a16 Merge "Add audit scoper for baremetal data model" 2018-12-17 01:48:10 +00:00
Zuul
1dcaf0d7e6 Merge "Deprecate Ceilometer Datasource" 2018-12-12 06:15:35 +00:00
Hidekazu Nakamura
8bed87697b Fix mailing list archive URL
OpenStack mailing list is merged to openstack-discuss now.

Change-Id: I7b869b95f83ede8410d7f636726821078cb91ea5
2018-12-12 14:42:54 +09:00
Zuul
66a6191d9b Merge "Fix stop_watcher function" 2018-12-10 15:19:52 +00:00
Alexander Chadin
b0c504cd1e Fix stop_watcher function
Apache should be reloaded after watcher-api is disabled.

Change-Id: Ifee0e7701849348630568aa36b3f3c4c62d3382e
2018-12-10 16:29:46 +03:00
Zuul
6f1dace5c8 Merge "Fix doc about nova notifications" 2018-12-10 09:45:45 +00:00
Alexander Chadin
92894237f3 Deprecate Ceilometer Datasource
Ceilometer Datasource has been deprecated since its API has been
deprecated in Ocata cycle. Watcher has supported Ceilometer for some
releases after Ocata to let users migrate to Gnocchi/Monasca datasources.
Since U-release, Ceilometer support will be removed.

Change-Id: I944a5a562ab09a36961eb9b75e9a5144ba0b9ca4
2018-12-07 07:56:54 +00:00
Zuul
bd71671572 Merge "Increase the unit test coverage of host_maintenance.py" 2018-12-07 03:03:38 +00:00
licanwei
216e63c1fa Fix doc about nova notifications
Change-Id: I65bd9dcee37baa244975120f136ee41ce366bceb
2018-12-06 10:10:46 +08:00
Alexander Chadin
e251d85fdd Remove hostname-related playbooks
Change-Id: Ia2a617e337de987fb371c8507013c78c2ca80cd3
2018-12-05 16:38:40 +03:00
Zuul
63e6fde8ff Merge "update doc for install ubuntu" 2018-12-05 09:16:47 +00:00
Zuul
e9b71e62f3 Merge "Fix audit_template_uuid description" 2018-12-05 09:07:02 +00:00
licanwei
b0a86b424b audit create request can't set scope
Change-Id: Iab680bc860bbd6b8edcbefcb1498b343de58281b
2018-12-05 15:06:40 +08:00
Alexander Chadin
4a1d03b9ac Change openstack-dev to openstack-discuss channel
Change-Id: Ifa577a3e04cdaaf4b46ef85b043acb7edb9b8bbc
2018-12-04 11:34:50 +03:00
Zuul
a30ee72ec5 Merge "start tls-proxy (if enabled) before checking for api" 2018-11-30 09:06:55 +00:00
chenke
0dc9f39a9a Increase the unit test coverage of
host_maintenance.py

Increase coverage from 66% to 88%.

Change-Id: I7073fd904f5b2a6063a8e4c97fad8ab63885bd1a
2018-11-30 09:02:32 +08:00
Zuul
ffb7125165 Merge "Increase the unit test coverage of vm_workload_consolidation.py" 2018-11-29 11:38:16 +00:00
licanwei
c032807a42 update doc for install ubuntu
Change-Id: I04692e0002a5e81c898793c7215a21ceba02b8d2
2018-11-28 12:11:13 +08:00
Zuul
b2de7d691c Merge "Add missing ws separator between words" 2018-11-27 12:11:56 +00:00
Zuul
12d7a00f90 Merge "Fix spelling error in the comments of file host_maintenance.py" 2018-11-27 04:39:12 +00:00
Zuul
5fef5274d0 Merge "remove older api doc" 2018-11-27 01:14:00 +00:00
chenke
92f2d1c037 Fix spelling error in the comments of
file host_maintenance.py

This is to fix spelling error and unsuitable punctuation
in file host_maintenance.py

Change-Id: I9c535059c3a02277be4c7329693db34fb7674b4e
2018-11-26 20:45:14 +08:00
Yumeng_Bao
af0c90db4d Add audit scoper for baremetal data model
Bare metal cluster data model was introduced in Queens cycle.
Since the model is different from compute data model, we
need add CDM scoper for bare metal cluster data model

Change-Id: Idd041cefb692085d4545252d229ebe8602926b58
Implements: blueprint audit-scoper-for-baremetal-data-model
2018-11-26 12:21:06 +03:00
chenke
ddba357327 Increase the unit test coverage of
vm_workload_consolidation.py

Increase the test of the execute method which contains
the pre_execute(), do_execute(), post_execute() methods.
Increase coverage from 82% to 87%.

Change-Id: Ibde67d7b7d7945657ad0b674e06b1edc9eb24a9f
2018-11-23 14:47:58 +08:00
licanwei
fd8bd4d51a Fix audit_template_uuid description
Change-Id: I8b915de6d3eda150f633c88899bf3d54afcbe099
2018-11-22 10:26:07 +08:00
Sumit Jamgade
b4b625c9f5 start tls-proxy (if enabled) before checking for api
When tls-proxy is enabled, first start the tls-proxy and then then wait
for api to come up.

Without this the api comes up on the internal port as a result the
subsequent curl fails killing the deployment
- create a zuul job to test with tls
- fix apache ports accordingly

Depends-On: Ie665240b53df92b8e5ca509e998e95d859bd5282
Change-Id: I610a7a24daab68c7ab0e30977e3cabd62cdb56a5
2018-11-21 18:47:47 +01:00
licanwei
f1ce2a58c7 remove older api doc
api referance doc uses api-ref and adds microversion history.

Change-Id: I654bd25966f0f5ef982928766ac58aced2bc784c
2018-11-21 14:23:20 +08:00
zhufl
2cf1187aeb Add missing ws separator between words
This is to add missing ws separator between words.

Change-Id: I311cabbbc8cf95dbceb7d194b6e742f2e1d91589
2018-11-21 11:15:58 +08:00
chenke
63afd8259a Update doc for vm_workload_consolidation strategy
Actually, the metric "cpu_util" and "memory.resident" are necessary
in vm_workload_consolidation.py, according to line 75. So modify
this document about this part.

Change-Id: I648f341184a0b42d88dcb4c934af989997fe3fea
2018-11-19 17:19:25 +08:00
chenke
4f99c6be22 Increase the unit test coverage of cinder_helper.py
Increase coverage from 58% to 94%

Change-Id: I5b60d8db7c15b5a1be1470addaa818b30b7c6b56
2018-11-19 10:28:32 +08:00
Zuul
d1f80f9d5a Merge "Increase the unit test coverage of nova_helper.py" 2018-11-17 09:09:52 +00:00
Zuul
b45e8a1464 Merge "Enhance Watcher Applier Engine" 2018-11-16 07:18:41 +00:00
chenke
c7800225f1 Increase the unit test coverage of nova_helper.py
Increase coverage from 61% to 86%

Change-Id: I639168108e8076b2cccc02902793d77f6e94c1a5
2018-11-16 14:43:59 +08:00
Zuul
39113fd128 Merge "Fix version header in the response" 2018-11-16 02:36:06 +00:00
Zuul
8636770253 Merge "Remove unsuitable brackets" 2018-11-14 08:29:03 +00:00
licanwei
9f09abd6ec Fix version header in the response
This patch updates response header
from OpenStack-API-Version: [VERSION_STRING]
to OpenStack-API-Version: [SERVICE_TYPE] [VERSION_STRING]

Change-Id: I10577ff1123ef781bd4aa0b26577574a3f7e9c39
2018-11-14 07:57:37 +00:00
licanwei
69cf0d3ee5 Enhance Watcher Applier Engine
Add a new config option 'action_execution_rule' which is a dict type.
Its key field is strategy name and the value is 'ALWAYS' or 'ANY'.
'ALWAYS' means the callback function returns True as usual.
'ANY' means the return depends on the result of previous action
execution. The callback returns True if previous action gets failed,
and the engine continues to run the next action. If previous action
executes success, the callback returns False then the next action
will be ignored.
For strategies that aren't in 'action_execution_rule', the callback
always returns True.

If exception is throwing out during the action execution, reverting will
be triggered by taskflow. To continue executing the next action,
we return False instead of throwing an exception.

Change-Id: Ib5afa214d8d097d739aad35d18b3fe5c8e4de8fc
Implements: blueprint enhance-watcher-applier-engine
2018-11-14 01:23:07 +00:00
chenke
1e8b63e6f4 Remove unsuitable brackets
With these brackets, the statement "raise Exception("Live migration
execution.....") in watcher/common/nova_helper.py, line 379 will never
be executed. So remove it and let the statement make sense.

Change-Id: I42a2fa0c8ffa9c84a918d432c5093470dbd80f82
2018-11-14 09:22:21 +08:00
Zuul
437a958422 Merge "To avoid ambiguity for flavor_id" 2018-11-13 06:17:42 +00:00
Zuul
99dc956681 Merge "Add cover job" 2018-11-13 04:38:53 +00:00
Zuul
3e39e421df Merge "Imported Translations from Zanata" 2018-11-08 08:33:22 +00:00
Zuul
dab3b3c3c0 Merge "Remove redundant docstring" 2018-11-08 08:33:21 +00:00
OpenStack Proposal Bot
4c3bac142a Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I20bb708e682551f355cdb38d25f19c7f36ab1ea5
2018-11-08 06:11:23 +00:00
chenke
b6c24ed49b To avoid ambiguity for flavor_id
Change-Id: I34f5281be868a48e64f2e582f28c2b260b0862a1
2018-11-08 11:40:42 +08:00
Zuul
cf31b7fb34 Merge "Fix accessing to optional cinder pool attributes" 2018-11-08 01:14:04 +00:00
Zuul
7118545e97 Merge "Add detailed unit test documentation for watcher" 2018-11-07 11:58:35 +00:00
Tatiana Kholkina
e8c08e2abb Fix accessing to optional cinder pool attributes
Leave storage pool arguments empty if they are not provided
by cinderclient.

Change-Id: I90435146b33465c8eef95a6104e53285f785b014
Closes-Bug: #1800468
2018-11-07 08:31:55 +00:00
Nguyen Hai Truong
e4d4a262cd Add cover job
Insert python coverage job for py-test.

Change-Id: I0811600b2c7fd7e5941fa4a30e7212b536b927cc
2018-11-06 22:27:33 -08:00
Zuul
7c1aeef8cc Merge "Adjust the same format as above" 2018-11-07 03:20:50 +00:00
Tatiana Kholkina
456ce5a9e0 Remove redundant docstring
The method is quite simple and it doesn't need a dostring.
Also existing docstring was incorrect. The name of the expected
parameter is 'name', not 'node'. And it cannot be an object
of the type node.StorageNode

Change-Id: I94124d327c490d45eae4d2ded218beadfbc33ad7
2018-11-06 16:38:11 +03:00
licanwei
8a3d9fc4b2 optimize get_instances_by_node
We can set host filed in search_opts.
refer to:
https://developer.openstack.org/api-ref/compute/?expanded=list-servers-detail#list-servers

Change-Id: I36b27167d7223f3bf6bb05995210af41ad01fc6d
2018-11-06 13:25:34 +00:00
chenke
701a248324 Adjust the same format as above
Change-Id: I98f6e052c6c37b9756e9bc7750306c8ce821f387
2018-11-06 20:37:59 +08:00
Alexander Chadin
a9393ef29a Make watcherclient-tempest-functional test non-voting
Change-Id: I1ec4d50e944f8684d72284173ca96557074c6285
2018-11-06 13:38:26 +03:00
chenke
d6dc5675e3 Add detailed unit test documentation for watcher
Change-Id: Ife4771707223351a84941b462d853c5e49ff55a5
2018-11-06 11:34:11 +08:00
Zuul
59cae3268e Merge "update datamodel by nova notifications" 2018-11-02 08:50:05 +00:00
Nguyen Hai Truong
f6c0946573 Update min tox version to 2.0
The commands used by constraints need at least tox 2.0.
Update to reflect reality, which should help with local running of
constraints targets.

Change-Id: I0eb9af735f34ad259c7099729d7d465a1276fc5f
2018-11-01 21:38:30 -07:00
Zuul
ffd67c37e6 Merge "Fix parameter type for cinder pool" 2018-11-02 03:23:57 +00:00
Tatiana Kholkina
34523ec285 Fix parameter type for cinder pool
The correct type of parameter 'pool' in method build_storage_pool is
<class 'cinderclient.v2.pools.Pool'>

Change-Id: I986f707e4e740ebec94a46c6ee413f9a70197dad
2018-11-01 10:47:47 +03:00
licanwei
a8eed9fc4c update datamodel by nova notifications
Change-Id: Ib2676d6e69eb07644beae66bde22d308bbb836f1
Implements: blueprint update-datamodel-by-nova-notifications
2018-11-01 03:07:23 +00:00
Zuul
3c9a4f86b1 Merge "API Microversioning" 2018-10-31 13:05:51 +00:00
Zuul
e2338b00d0 Merge "add start and end time for continuous audit" 2018-10-31 13:05:50 +00:00
Zuul
1159e0a2ce Merge "remove set_host_offline" 2018-10-29 11:49:39 +00:00
Zuul
22cfd16354 Merge "Add efficacy indicators for workload_stabilization strategy" 2018-10-29 11:46:48 +00:00
Alexander Chadin
c4a30153f1 API Microversioning
This patch set adds API microversion support along
with the first API microversion: start/end time for
CONTINUOUS audits.

APIImpact

Implements: blueprint api-microversioning
Depends-On: I6bb838d777b2c7aa799a70485980e5dc87838456
Change-Id: I17309d80b637f02bc5e6d33294472e02add88f86
2018-10-29 08:45:32 +00:00
Zuul
754674cab2 Merge "Fix oslo_versionedobjects warnings" 2018-10-26 06:27:50 +00:00
Zuul
aa6eac446b Merge "Don't need nova notifications" 2018-10-25 13:18:39 +00:00
licanwei
f9fe6659db remove set_host_offline
change_node_power_state action can be used to make a host offline.
set_host_offline never be used and the Nova os-hosts API is deprecated.
So remove it
https://developer.openstack.org/api-ref/compute/?expanded=update-host-status-detail#hosts-os-hosts-deprecated

Change-Id: I5f81fc9e2189db39b143d2935540d637bd2d88cc
2018-10-25 19:02:26 +08:00
licanwei
cbaf38519e Watcher doesn't need paramiko
Change-Id: I46a1df82b2b7e4051f1a844ad17d1afa758a1fcb
2018-10-24 16:07:09 +08:00
licanwei
93890fb290 Don't need nova notifications
Now we have removed nova legacy notifications in Watcher
and just consume nova versioned notifications,
we don't need notification config in nova.conf

Change-Id: I1c9c141d98d858c36ad8bb7be0b95c38ff1d5752
2018-10-24 14:41:41 +08:00
Zuul
938bd336ca Merge "Add framework for watcher-status upgrade check" 2018-10-24 03:39:42 +00:00
Alexander Chadin
62b9282b1e Fix oslo_versionedobjects warnings
This patch set fixes warnings regarding invalid UUIDs and
static_root.

Change-Id: Icb0bbca9c05ee97ea9947a31db5e87b7837e42d0
2018-10-23 17:16:50 +03:00
Zuul
d1f946e121 Merge "Use limit -1 for nova servers list" 2018-10-22 10:47:31 +00:00
akhiljain23
d621f72730 Add framework for watcher-status upgrade check
This commit adds the functionality of watcher-status CLI for performing
upgrade checks as part of the Stein cycle upgrade-checkers goal.
It only includes a sample check which must be replaced by real checks in
future.

Change-Id: Ic3d066af439797d6f705e805334f729b52ce3aac
Story: 2003657
Task: 26164
2018-10-22 13:51:56 +05:30
Zuul
80754b80cb Merge "Update documentation regarding DataSource for strategies" 2018-10-17 15:49:40 +00:00
Zuul
133bd3ca69 Merge "Don't quote {posargs} in tox.ini" 2018-10-17 08:46:06 +00:00
Alexander Chadin
7c9a856918 Update documentation regarding DataSource for strategies
Change-Id: Ifc82fc06858a4e5a2badef074cd6bb5ce4e216cb
2018-10-16 13:33:24 +03:00
Tatiana Kholkina
e5386aa745 Use limit -1 for nova servers list
By default nova has a limit for returned items in a single response [1].
We should pass limit=-1 to get all items.

[1] https://docs.openstack.org/nova/rocky/configuration/config.html

Change-Id: I1fabd909c4c0356ef5fcb7c51718fb4513e6befa
2018-10-16 11:13:49 +03:00
licanwei
b69fc584d8 tenant_id should be project_id in instance element
Change-Id: I4e8d35b5dbf62df2c653defb223aca7ec5032e3e
2018-10-12 16:40:09 +08:00
licanwei
c2550e534e add start and end time for continuous audit
Add new start_time and end_time fields in the audit table

Partially Implements: blueprint add-start-end-time-for-continuous-audit

Change-Id: I6bb838d777b2c7aa799a70485980e5dc87838456
2018-10-12 11:21:17 +03:00
Dao Cong Tien
f41adc7e8b Remove uses of rpc_backend (oslo_config)
As rpc_backend config option has been removed from
oslo_config [1], projects should not use it.
Current uses of it cause watcher crash when installing
via devstack.

[1] https://review.openstack.org/#/c/580910/

Change-Id: Iba7471e87e8935f1ea02b363f269e9debdc7cc71
2018-10-10 05:21:31 +00:00
98k
a073c42a9d Don't quote {posargs} in tox.ini
Quotes around {posargs} cause the entire string to be combined into one
arg that gets passed to stestr. This prevents passing multiple args
(e.g. '--concurrency=16 some-regex')

Change-Id: I0371fc2c0878a177c0a9e9c9313ca5b8470bfd98
2018-10-09 21:34:51 +00:00
Zuul
05055b7064 Merge "Fix audit creation with named goal and strategy" 2018-10-05 09:34:05 +00:00
Tatiana Kholkina
f0b96b8a37 Do not pass www_authenticate_uri to RequestContext
Change-Id: I0ee32031d714608c33643b12b1e217a04157f5b3
Closes-Bug: #1795613
2018-10-03 12:21:55 +03:00
Zuul
59cadfd2ea Merge "remove nova legacy notifications" 2018-09-30 02:39:07 +00:00
licanwei
5265b06a9b remove nova legacy notifications
http://lists.openstack.org/pipermail/openstack-dev/2018-August/133071.html

Closes-Bug: #1793048
Change-Id: Id591c8979fd4a6bda674588060eaf51386d937cb
2018-09-30 09:03:00 +08:00
Alexander Chadin
bb2f6d230c Fix link to Watcher API
Change-Id: I64f234257043d8fe2b7932f3b8ddbd01d63957f1
Closes-Bug: #1769084
2018-09-25 16:52:04 +03:00
Alexander Chadin
7cb81ac6c5 Fix audit creation with named goal and strategy
This patch set fixes process of audit creation and
allows to create audit without Audit Template using only
names of Goal and Strategy. It also provides some additional
unit tests to improve tests covering.

Change-Id: I89a9c7661616f49639151869055d8f5ebe723d5f
Closes-Bug: #1794233
2018-09-25 13:44:54 +03:00
Tatiana Kholkina
925b971377 Provide region name while initialize clients
Add new option 'region_name' to config for each client section.

Change-Id: Ifad8908852f4be69dd294a4c4ab28d2e1df265e8
Closes-Bug: #1787937
2018-09-19 16:54:46 +03:00
Alexander Chadin
81c241bef7 Add efficacy indicators for workload_stabilization strategy
This patch set adds efficacy indicators for workload_balancing
goal (that includes workload_stabilization and workload_balance
strategies so far).

Change-Id: I5b04d084ace7c661001c62f07b8308e5763e144d
2018-09-18 19:46:37 +03:00
Zuul
c641fd33e7 Merge "Fix wrong audit scope" 2018-09-18 09:54:01 +00:00
licanwei
1f3c96d077 ignore .testrepository
Change-Id: I62d5ab34e64b1bfadb602515eeb0308af1496e6b
2018-09-14 11:04:20 +08:00
licanwei
9e00d1bb1f Fix wrong audit scope
Closes-Bug #1792368

Change-Id: I3349cbe9ad66233b1b28ffb3c76e003432a843a1
2018-09-14 10:59:25 +08:00
Zuul
8e40880882 Merge "Remove warning log in common.context" 2018-09-11 22:31:09 +00:00
Zuul
cab3b58205 Merge "add python 3.6 unit test job" 2018-09-11 16:04:24 +00:00
Zuul
4c330c22f4 Merge "switch documentation job to new PTI" 2018-09-11 16:04:21 +00:00
Zuul
5f05c10037 Merge "Follow the new PTI for building docs" 2018-09-11 16:04:20 +00:00
Nguyen Hai
bb31cc59dd add python 3.6 unit test job
This is a mechanically generated patch to add a unit test job running
under Python 3.6 as part of the python3-first goal.

See the python3-first goal document for details:
https://governance.openstack.org/tc/goals/stein/python3-first.html

Change-Id: I3b5663945f3ee3e9fd8d36acd2ad28faff58daa2
Story: #2002586
Task: #24344
2018-09-11 04:11:14 +00:00
Nguyen Hai
37d9aa526c switch documentation job to new PTI
This is a mechanically generated patch to switch the documentation
jobs to use the new PTI versions of the jobs as part of the
python3-first goal.

See the python3-first goal document for details:
https://governance.openstack.org/tc/goals/stein/python3-first.html

Depends-On: https://review.openstack.org/#/c/594176/
Change-Id: I66df141b69103e1389a294b75daadb292673e8a0
Story: #2002586
Task: #24344
2018-09-11 04:11:10 +00:00
Nguyen Hai
0b40479d52 Follow the new PTI for building docs
For compliance with the Project Testing Interface as described in:
https://governance.openstack.org/tc/reference/project-testing-interface.html#documentation
http://lists.openstack.org/pipermail/openstack-dev/2017-December/125710.html
http://lists.openstack.org/pipermail/openstack-dev/2018-March/128594.html

Change-Id: I86d2460231d246005cfdace75c50dc54c137f0ca
2018-09-10 20:28:26 -06:00
OpenStack Proposal Bot
35e9422e07 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I58e45eaeea6ff29d7a32b7b7b8e5f774f5809eff
2018-09-09 06:30:14 +00:00
Zuul
619f326e44 Merge "Remove hosts if can't find hosts in host agrregate" 2018-09-07 10:17:08 +00:00
Zuul
7404d2510a Merge "Fix goal method in policy" 2018-09-06 14:39:30 +00:00
licanwei
3861f1c845 Remove warning log in common.context
oslo_context may add new fields in request context, there are no
need to warning these fields.
Closes-Bug #1790577

Change-Id: Ic96c1f1e1a80099d9dafa95a014fc47f05b88e42
2018-09-05 11:21:16 +08:00
licanwei
d822a0f37e Remove hosts if can't find hosts in host agrregate
Change-Id: Ie2dc20d8068f6d945a487238a0b6e5bc2f72fa3b
Closes-Bug: #1789366
2018-09-04 10:03:47 +08:00
licanwei
e772b289ee Fix goal method in policy
Change-Id: I8f002900e898b945573c5a60b485ae3b98da639c
2018-08-30 15:44:13 +08:00
Zuul
c7e9457258 Merge "import zuul job settings from project-config" 2018-08-22 08:43:43 +00:00
Zuul
f93225b75c Merge "Remove -u root as mysql is executed with root user" 2018-08-20 02:24:37 +00:00
Zuul
1764810323 Merge "Add hostname to API Reference" 2018-08-20 01:48:46 +00:00
Zuul
fc9fac6622 Merge "Improve logs of Workload Stabilization strategy" 2018-08-20 01:48:45 +00:00
Nguyen Hai
b095793176 import zuul job settings from project-config
This is a mechanically generated patch to complete step 1 of moving
the zuul job settings out of project-config and into each project
repository.

Because there will be a separate patch on each branch, the branch
specifiers for branch-specific jobs have been removed.

Because this patch is generated by a script, there may be some
cosmetic changes to the layout of the YAML file(s) as the contents are
normalized.

See the python3-first goal document for details:
https://governance.openstack.org/tc/goals/stein/python3-first.html

Change-Id: I5e75f2ea7dd02065bc18793d974f56fef2daa2c4
Story: #2002586
Task: #24344
2018-08-19 00:57:45 +09:00
zhang.lei
a1b0c09005 Remove -u root as mysql is executed with root user
As openstack installation guides suggest to run mysql with root shell
user, mysql will not ask for password, so in
controller-install-*.rst "-u root -p" is useless.

Change-Id: I511f39d734702ab3d1a209f7d868f52fb184f1fc
Related-Bug: #1785025
2018-08-14 12:08:23 +00:00
Alexander Chadin
172d7b040d Improve logs of Workload Stabilization strategy
This patch set refactors logs of workload stabilization
strategy to make them more readable and sensible.

Change-Id: I408988712bb7560728157f3b4e4f2b37572128c4
2018-08-14 14:13:13 +03:00
OpenStack Proposal Bot
9686d2003c Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I30fe61e98c1f54d9c582fa5a7f82cb83ae0acfd8
2018-08-14 07:11:56 +00:00
Alexander Chadin
cc2962af4a Add hostname to API Reference
This patch set adds hostname attribute to Audit and
ActionPlan resources in API Reference.

Change-Id: I187d44dc401d3d1770452022b8610570d459cc98
2018-08-13 16:44:22 +03:00
OpenStack Release Bot
7247d2f95b Update reno for stable/rocky
Change-Id: I3b0cdde07815261bb8a69947573f5d9e32f02106
2018-08-08 14:10:50 +00:00
413 changed files with 17330 additions and 7022 deletions

4
.gitignore vendored
View File

@@ -26,6 +26,7 @@ pip-log.txt
.stestr/
.venv
.idea
.testrepository/
# Translations
*.mo
@@ -74,3 +75,6 @@ releasenotes/build
# Autogenerated sample config file
etc/watcher/watcher.conf.sample
# Atom
.remote-sync.json

View File

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

View File

@@ -1,69 +1,114 @@
- project:
templates:
- check-requirements
- openstack-cover-jobs
- openstack-lower-constraints-jobs
- openstack-python3-ussuri-jobs
- publish-openstack-docs-pti
- release-notes-jobs-python3
check:
jobs:
- watcher-tempest-functional
- watcher-tempest-dummy_optim
- watcher-grenade
- watcher-tempest-strategies
- watcher-tempest-actuator
- watcher-tempest-basic_optim
- watcher-tempest-workload_balancing
- watcherclient-tempest-functional
- watcher-tempest-zone_migration
- openstack-tox-lower-constraints
- watcher-tls-test
- watcher-tempest-functional-ipv6-only
gate:
queue: watcher
jobs:
- watcher-tempest-functional
- openstack-tox-lower-constraints
- watcher-tempest-functional-ipv6-only
- job:
name: watcher-tempest-dummy_optim
parent: watcher-tempest-multinode
voting: false
vars:
tempest_test_regex: 'watcher_tempest_plugin.tests.scenario.test_execute_dummy_optim'
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_dummy_optim
- job:
name: watcher-tempest-actuator
parent: watcher-tempest-multinode
voting: false
vars:
tempest_test_regex: 'watcher_tempest_plugin.tests.scenario.test_execute_actuator'
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_actuator
- job:
name: watcher-tempest-basic_optim
parent: watcher-tempest-multinode
voting: false
vars:
tempest_test_regex: 'watcher_tempest_plugin.tests.scenario.test_execute_basic_optim'
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_basic_optim
- job:
name: watcher-tempest-vm_workload_consolidation
parent: watcher-tempest-multinode
vars:
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_vm_workload_consolidation
devstack_local_conf:
test-config:
$WATCHER_CONFIG:
watcher_strategies.vm_workload_consolidation:
datasource: ceilometer
- job:
name: watcher-tempest-workload_balancing
parent: watcher-tempest-multinode
voting: false
vars:
tempest_test_regex: 'watcher_tempest_plugin.tests.scenario.test_execute_workload_balancing'
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_workload_balancing
- job:
name: watcher-tempest-zone_migration
parent: watcher-tempest-multinode
voting: false
vars:
tempest_test_regex: 'watcher_tempest_plugin.tests.scenario.test_execute_zone_migration'
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_zone_migration
- job:
name: watcher-tempest-host_maintenance
parent: watcher-tempest-multinode
vars:
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_host_maintenance
- job:
name: watcher-tempest-storage_balance
parent: watcher-tempest-multinode
vars:
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_storage_balance
devstack_local_conf:
test-config:
$TEMPEST_CONFIG:
volume:
backend_names: ['BACKEND_1', 'BACKEND_2']
volume-feature-enabled:
multi_backend: true
- job:
name: watcher-tempest-strategies
parent: watcher-tempest-multinode
vars:
tempest_concurrency: 1
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_strategies
- job:
name: watcher-tls-test
parent: watcher-tempest-multinode
group-vars:
subnode:
devstack_services:
tls-proxy: true
vars:
devstack_services:
tls-proxy: true
- job:
name: watcher-tempest-multinode
parent: watcher-tempest-functional
nodeset: openstack-two-node
pre-run: playbooks/pre.yaml
run: playbooks/orchestrate-tempest.yaml
nodeset: openstack-two-node-bionic
roles:
- zuul: openstack/tempest
group-vars:
subnode:
devstack_local_conf:
post-config:
$NOVA_CONF:
libvirt:
live_migration_uri: 'qemu+ssh://root@%s/system'
$WATCHER_CONF:
watcher_cluster_data_model_collectors.compute:
period: 120
@@ -89,41 +134,41 @@
vars:
devstack_local_conf:
post-config:
$NOVA_CONF:
libvirt:
live_migration_uri: 'qemu+ssh://root@%s/system'
$WATCHER_CONF:
watcher_cluster_data_model_collectors.compute:
period: 120
watcher_cluster_data_model_collectors.baremetal:
period: 120
watcher_cluster_data_model_collectors.storage:
period: 120
watcher_cluster_data_model_collectors.compute:
period: 120
watcher_cluster_data_model_collectors.baremetal:
period: 120
watcher_cluster_data_model_collectors.storage:
period: 120
test-config:
$TEMPEST_CONFIG:
compute:
min_compute_nodes: 2
min_microversion: 2.56
compute-feature-enabled:
live_migration: true
block_migration_for_live_migration: true
placement:
min_microversion: 1.29
devstack_plugins:
ceilometer: https://git.openstack.org/openstack/ceilometer
ceilometer: https://opendev.org/openstack/ceilometer
- job:
name: watcher-tempest-functional
parent: devstack-tempest
timeout: 7200
required-projects:
required-projects: &base_required_projects
- openstack/ceilometer
- openstack-infra/devstack-gate
- openstack/devstack-gate
- openstack/python-openstackclient
- openstack/python-watcherclient
- openstack/watcher
- openstack/watcher-tempest-plugin
- openstack/tempest
vars:
vars: &base_vars
devstack_plugins:
watcher: https://git.openstack.org/openstack/watcher
watcher: https://opendev.org/openstack/watcher
devstack_services:
tls-proxy: false
watcher-api: true
@@ -135,8 +180,9 @@
s-object: false
s-proxy: false
devstack_localrc:
TEMPEST_PLUGINS: '/opt/stack/watcher-tempest-plugin'
tempest_test_regex: 'watcher_tempest_plugin.tests.api'
TEMPEST_PLUGINS: /opt/stack/watcher-tempest-plugin
USE_PYTHON3: true
tempest_test_regex: watcher_tempest_plugin.tests.api
tox_envlist: all
tox_environment:
# Do we really need to set this? It's cargo culted
@@ -144,6 +190,38 @@
zuul_copy_output:
/etc/hosts: logs
- job:
name: watcher-tempest-functional-ipv6-only
parent: devstack-tempest-ipv6
description: |
Watcher devstack tempest tests job for IPv6-only deployment
required-projects: *base_required_projects
vars: *base_vars
- job:
name: watcher-grenade
parent: legacy-dsvm-base
timeout: 10800
run: playbooks/legacy/grenade-devstack-watcher/run.yaml
post-run: playbooks/legacy/grenade-devstack-watcher/post.yaml
irrelevant-files:
- ^(test-|)requirements.txt$
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^watcher/hacking/.*$
- ^watcher/tests/.*$
- ^releasenotes/.*$
- ^setup.cfg$
- ^tools/.*$
- ^tox.ini$
required-projects:
- openstack/grenade
- openstack/devstack-gate
- openstack/watcher
- openstack/python-watcherclient
- openstack/watcher-tempest-plugin
- job:
# This job is used in python-watcherclient repo
name: watcherclient-tempest-functional
@@ -151,6 +229,4 @@
timeout: 4200
vars:
tempest_concurrency: 1
devstack_localrc:
TEMPEST_PLUGINS: '/opt/stack/python-watcherclient'
tempest_test_regex: 'watcherclient.tests.functional'
tempest_test_regex: watcher_tempest_plugin.tests.client_functional

View File

@@ -1,6 +1,6 @@
========================
Team and repository tags
========================
=======
Watcher
=======
.. image:: https://governance.openstack.org/tc/badges/watcher.svg
:target: https://governance.openstack.org/tc/reference/tags/index.html
@@ -13,10 +13,6 @@ Team and repository tags
https://creativecommons.org/licenses/by/3.0/
=======
Watcher
=======
OpenStack Watcher provides a flexible and scalable resource optimization
service for multi-tenant OpenStack-based clouds.
Watcher provides a robust framework to realize a wide range of cloud
@@ -26,7 +22,8 @@ migration, increased energy efficiency and more!
* Free software: Apache license
* Wiki: https://wiki.openstack.org/wiki/Watcher
* Source: https://github.com/openstack/watcher
* Source: https://opendev.org/openstack/watcher
* Bugs: https://bugs.launchpad.net/watcher
* Documentation: https://docs.openstack.org/watcher/latest/
* Release notes: https://docs.openstack.org/releasenotes/watcher/
* Design specifications: https://specs.openstack.org/openstack/watcher-specs/

View File

@@ -6,6 +6,7 @@ Watcher API
.. rest_expand_all::
.. include:: watcher-api-versions.inc
.. include:: watcher-api-v1-audittemplates.inc
.. include:: watcher-api-v1-audits.inc
.. include:: watcher-api-v1-actionplans.inc
@@ -13,4 +14,6 @@ Watcher API
.. include:: watcher-api-v1-goals.inc
.. include:: watcher-api-v1-strategies.inc
.. include:: watcher-api-v1-services.inc
.. include:: watcher-api-v1-scoring_engines.inc
.. include:: watcher-api-v1-scoring_engines.inc
.. include:: watcher-api-v1-datamodel.inc
.. include:: watcher-api-v1-webhooks.inc

View File

@@ -1,3 +1,42 @@
# variables in header
header_version:
description: |
Specific API microversion used to generate this response.
in: header
required: true
type: string
openstack-api-max-version:
description: |
Maximum API microversion supported by this endpoint, eg. "1.1"
in: header
required: true
type: string
openstack-api-min-version:
description: |
Minimum API microversion supported by this endpoint, eg. "1.0"
in: header
required: true
type: string
openstack-api-version:
description: >
A request SHOULD include this header to indicate to the Watcher API service what
version the client supports. The server will transform the response object into
compliance with the requested version, if it is supported, or return a
406 Not Acceptable error.
If this header is not supplied, the server will response with server minimum
supported version.
in: header
required: true
type: string
openstack-request-id:
description: >
An unique ID for tracking the request. The request ID associated with the request
appears in the log lines for that request. By default, the middleware configuration
ensures that the request ID appears in the log files.
in: header
required: false
type: string
# Path
action_ident:
description: |
@@ -90,6 +129,14 @@ r_strategy:
in: query
required: false
type: string
r_type:
description: |
Type of data model user want to list. Default type is compute.
Supported values: compute.
Future support values: storage, baremetal.
in: query
required: false
type: string
sort_dir:
description: |
Sorts the response by the requested sort direction.
@@ -170,6 +217,12 @@ actionplan_global_efficacy:
in: body
required: false
type: array
actionplan_hostname:
description: |
Hostname the actionplan is running on
in: body
required: false
type: string
actionplan_state:
description: |
State of this action plan. To get more information about states and
@@ -181,16 +234,44 @@ actionplan_state:
# Audit
audit_autotrigger:
description: |
Autoexecute action plan once audit is succeeded.
Auto execute action plan once audit is succeeded.
in: body
required: false
type: boolean
audit_endtime_req:
description: |
The local time after which audit can't be executed.
It will be converted to UTC time by Watcher.
in: body
required: false
type: string
min_version: 1.1
audit_endtime_resp:
description: |
The UTC time after which audit can't be executed.
in: body
required: false
type: string
min_version: 1.1
audit_force:
description: |
Launch audit even if action plan is ongoing.
in: body
required: false
type: boolean
min_version: 1.2
audit_goal:
description: |
The UUID or name of the Goal.
in: body
required: false
type: string
audit_hostname:
description: |
Hostname the audit is running on
in: body
required: false
type: string
audit_interval:
description: |
Time interval between audit's execution.
@@ -217,6 +298,21 @@ audit_parameters:
in: body
required: false
type: JSON
audit_starttime_req:
description: |
The local time after which audit can be executed in accordance
with interval. It will be converted to UTC time by Watcher.
in: body
required: false
type: string
min_version: 1.1
audit_starttime_resp:
description: |
The UTC time after which audit can be executed in accordance with interval.
in: body
required: false
type: string
min_version: 1.1
audit_state:
description: |
State of this audit. To get more information about states and
@@ -232,7 +328,7 @@ audit_strategy:
type: string
audit_type:
description: |
Type of this audit. Can be either ONESHOT or CONTINUOUS.
Type of this audit. Can only be either ONESHOT or CONTINUOUS.
in: body
required: true
type: string
@@ -268,6 +364,12 @@ audittemplate_strategy:
in: body
required: false
type: string
audittemplate_uuid:
description: |
The UUID of the Audit template.
in: body
required: true
type: string
created_at:
description: |
@@ -317,6 +419,62 @@ links:
required: true
type: array
# Data Model Node
node_disk:
description: |
The Disk of the node(in GiB).
in: body
required: true
type: integer
node_disk_ratio:
description: |
The Disk Ratio of the node.
in: body
required: true
type: float
node_hostname:
description: |
The Host Name of the node.
in: body
required: true
type: string
node_memory:
description: |
The Memory of the node(in MiB).
in: body
required: true
type: integer
node_memory_ratio:
description: |
The Memory Ratio of the node.
in: body
required: true
type: float
node_state:
description: |
The State of the node. The value is up or down.
in: body
required: true
type: string
node_uuid:
description: |
The Unique UUID of the node.
in: body
required: true
type: string
node_vcpu_ratio:
description: |
The Vcpu ratio of the node.
in: body
required: true
type: float
node_vcpus:
description: |
The Vcpu of the node.
in: body
required: true
type: integer
# Scoring Engine
scoring_engine_description:
description: |
@@ -336,34 +494,72 @@ scoring_engine_name:
in: body
required: true
type: string
# Data Model Server
server_disk:
description: |
The Disk of the server.
in: body
required: true
type: integer
server_memory:
description: |
The Memory of server.
in: body
required: true
type: integer
server_name:
description: |
The Name of the server.
in: body
required: true
type: string
server_state:
description: |
The State of the server.
in: body
required: true
type: string
server_uuid:
description: |
The Unique UUID of the server.
in: body
required: true
type: string
server_vcpus:
description: |
The Vcpu of the server.
in: body
required: true
type: integer
# Service
service_host:
description: |
Name of host where service is placed on.
The Name of host where service is placed on.
in: body
required: true
type: string
service_id:
description: |
ID of service.
The ID of service.
in: body
required: true
type: integer
service_last_seen_up:
description: |
Time when Watcher service sent latest heartbeat.
The Time when Watcher service sent latest heartbeat.
in: body
required: true
type: string
service_name:
description: |
Name of service like ``watcher-applier``.
The Name of service like ``watcher-applier``.
in: body
required: true
type: string
service_status:
description: |
State of service. It can be either in ACTIVE or FAILED state.
The State of service. It can be either in ACTIVE or FAILED state.
in: body
required: true
type: string
@@ -431,3 +627,29 @@ uuid:
in: body
required: true
type: string
# Version
version:
description: |
Versioning of this API response, eg. "1.1".
in: body
required: true
type: string
version_description:
description: |
Descriptive text about the Watcher service.
in: body
required: true
type: string
version_id:
description: |
Major API version, eg, "v1"
in: body
required: true
type: string
versions:
description: |
Array of information about currently supported versions.
in: body
required: true
type: array

View File

@@ -20,7 +20,8 @@
"deleted_at": null,
"uuid": "4cbc4ede-0d25-481b-b86e-998dbbd4f8bf",
"audit_uuid": "7d100b05-0a86-491f-98a7-f93da19b272a",
"created_at": "2018-04-10T11:59:52.640067+00:00"
"created_at": "2018-04-10T11:59:52.640067+00:00",
"hostname": "controller"
}
]
}

View File

@@ -16,5 +16,6 @@
"updated_at": "2018-04-10T11:59:52.640067+00:00",
"strategy_name": "dummy_with_resize",
"uuid": "4cbc4ede-0d25-481b-b86e-998dbbd4f8bf",
"audit_uuid": "7d100b05-0a86-491f-98a7-f93da19b272a"
"audit_uuid": "7d100b05-0a86-491f-98a7-f93da19b272a",
"hostname": "controller"
}

View File

@@ -18,5 +18,6 @@
"uuid": "4cbc4ede-0d25-481b-b86e-998dbbd4f8bf",
"audit_uuid": "7d100b05-0a86-491f-98a7-f93da19b272a",
"created_at": "2018-04-10T11:59:12.592729+00:00",
"deleted_at": null
"deleted_at": null,
"hostname": null
}

View File

@@ -0,0 +1,30 @@
{
"default_version": {
"id": "v1",
"links": [
{
"href": "http://controller:9322/v1/",
"rel": "self"
}
],
"min_version": "1.0",
"status": "CURRENT",
"max_version": "1.1"
},
"description": "Watcher is an OpenStack project which aims to improve physical resources usage through better VM placement.",
"name": "OpenStack Watcher API",
"versions": [
{
"id": "v1",
"links": [
{
"href": "http://controller:9322/v1/",
"rel": "self"
}
],
"min_version": "1.0",
"status": "CURRENT",
"max_version": "1.1"
}
]
}

View File

@@ -0,0 +1,80 @@
{
"scoring_engines": [
{
"href": "http://controller:9322/v1/scoring_engines/",
"rel": "self"
},
{
"href": "http://controller:9322/scoring_engines/",
"rel": "bookmark"
}
],
"media_types": [
{
"base": "application/json",
"type": "application/vnd.openstack.watcher.v1+json"
}
],
"links": [
{
"href": "http://controller:9322/v1/",
"rel": "self"
},
{
"href": "http://docs.openstack.org/developer/watcher/dev/api-spec-v1.html",
"type": "text/html",
"rel": "describedby"
}
],
"actions": [
{
"href": "http://controller:9322/v1/actions/",
"rel": "self"
},
{
"href": "http://controller:9322/actions/",
"rel": "bookmark"
}
],
"audit_templates": [
{
"href": "http://controller:9322/v1/audit_templates/",
"rel": "self"
},
{
"href": "http://controller:9322/audit_templates/",
"rel": "bookmark"
}
],
"action_plans": [
{
"href": "http://controller:9322/v1/action_plans/",
"rel": "self"
},
{
"href": "http://controller:9322/action_plans/",
"rel": "bookmark"
}
],
"services": [
{
"href": "http://controller:9322/v1/services/",
"rel": "self"
},
{
"href": "http://controller:9322/services/",
"rel": "bookmark"
}
],
"audits": [
{
"href": "http://controller:9322/v1/audits/",
"rel": "self"
},
{
"href": "http://controller:9322/audits/",
"rel": "bookmark"
}
],
"id": "v1"
}

View File

@@ -28,6 +28,7 @@
}
},
"auto_trigger": false,
"force": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
@@ -47,5 +48,8 @@
],
"strategy_name": "workload_stabilization",
"next_run_time": "2018-04-06T11:56:00",
"updated_at": "2018-04-06T11:54:01.266447+00:00"
}
"updated_at": "2018-04-06T11:54:01.266447+00:00",
"hostname": "controller",
"start_time": null,
"end_time": null
}

View File

@@ -1,5 +1,6 @@
{
"auto_trigger": false,
"force": false,
"audit_template_uuid": "76fddfee-a9c4-40b0-8da0-c19ad6904f09",
"name": "test_audit",
"parameters": {
@@ -8,5 +9,7 @@
]
},
"audit_type": "CONTINUOUS",
"interval": "*/2 * * * *"
}
"interval": "*/2 * * * *",
"start_time":"2018-04-02 20:30:00",
"end_time": "2018-04-04 20:30:00"
}

View File

@@ -1,5 +1,6 @@
{
"audit_type": "ONESHOT",
"auto_trigger": false,
"force": true,
"audit_template_uuid": "5e70a156-ced7-4012-b1c6-88fcb02ee0c1"
}
}

View File

@@ -28,6 +28,7 @@
}
},
"auto_trigger": false,
"force": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
@@ -47,5 +48,8 @@
],
"strategy_name": "workload_stabilization",
"next_run_time": null,
"updated_at": null
}
"updated_at": null,
"hostname": null,
"start_time": null,
"end_time": null
}

View File

@@ -30,6 +30,7 @@
}
},
"auto_trigger": false,
"force": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
@@ -49,7 +50,10 @@
],
"strategy_name": "workload_stabilization",
"next_run_time": "2018-04-06T09:46:00",
"updated_at": "2018-04-06T09:44:01.604146+00:00"
"updated_at": "2018-04-06T09:44:01.604146+00:00",
"hostname": "controller",
"start_time": null,
"end_time": null
}
]
}
}

View File

@@ -28,6 +28,7 @@
}
},
"auto_trigger": false,
"force": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
@@ -47,5 +48,8 @@
],
"strategy_name": "workload_stabilization",
"next_run_time": "2018-04-06T11:56:00",
"updated_at": "2018-04-06T11:54:01.266447+00:00"
}
"updated_at": "2018-04-06T11:54:01.266447+00:00",
"hostname": "controller",
"start_time": null,
"end_time": null
}

View File

@@ -28,6 +28,7 @@
}
},
"auto_trigger": false,
"force": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
@@ -47,5 +48,8 @@
],
"strategy_name": "workload_stabilization",
"next_run_time": "2018-04-06T11:56:00",
"updated_at": "2018-04-06T11:54:01.266447+00:00"
}
"updated_at": "2018-04-06T11:54:01.266447+00:00",
"hostname": "controller",
"start_time": null,
"end_time": null
}

View File

@@ -0,0 +1,38 @@
{
"context": [
{
"server_uuid": "1bf91464-9b41-428d-a11e-af691e5563bb",
"server_name": "chenke-test1",
"server_vcpus": "1",
"server_memory": "512",
"server_disk": "1",
"server_state": "active",
"node_uuid": "253e5dd0-9384-41ab-af13-4f2c2ce26112",
"node_hostname": "localhost.localdomain",
"node_vcpus": "4",
"node_vcpu_ratio": "16.0",
"node_memory": "16383",
"node_memory_ratio": "1.5",
"node_disk": "37"
"node_disk_ratio": "1.0",
"node_state": "up",
},
{
"server_uuid": "e2cb5f6f-fa1d-4ba2-be1e-0bf02fa86ba4",
"server_name": "chenke-test2",
"server_vcpus": "1",
"server_memory": "512",
"server_disk": "1",
"server_state": "active",
"node_uuid": "253e5dd0-9384-41ab-af13-4f2c2ce26112",
"node_hostname": "localhost.localdomain",
"node_vcpus": "4",
"node_vcpu_ratio": "16.0",
"node_memory": "16383",
"node_memory_ratio": "1.5",
"node_disk": "37"
"node_disk_ratio": "1.0",
"node_state": "up",
}
]
}

View File

@@ -50,6 +50,7 @@ version 1:
- efficacy_indicators: actionplan_efficacy_indicators
- global_efficacy: actionplan_global_efficacy
- links: links
- hostname: actionplan_hostname
**Example JSON representation of an Action Plan:**
@@ -137,6 +138,7 @@ Response
- efficacy_indicators: actionplan_efficacy_indicators
- global_efficacy: actionplan_global_efficacy
- links: links
- hostname: actionplan_hostname
**Example JSON representation of an Action Plan:**
@@ -174,6 +176,7 @@ Response
- efficacy_indicators: actionplan_efficacy_indicators
- global_efficacy: actionplan_global_efficacy
- links: links
- hostname: actionplan_hostname
**Example JSON representation of an Audit:**
@@ -229,6 +232,7 @@ version 1:
- efficacy_indicators: actionplan_efficacy_indicators
- global_efficacy: actionplan_global_efficacy
- links: links
- hostname: actionplan_hostname
**Example JSON representation of an Action Plan:**

View File

@@ -28,10 +28,6 @@ itself. In the first case, there also should be supplied
``audit_template_uuid``. If ``Audit`` is created without ``Audit Template``,
``goal`` should be provided.
.. warning::
**Only ``audit_template_uuid`` can be used to create audit so far.**
It should be fixed during the ``Rocky`` cycle.
Normal response codes: 201
Error codes: 400,404
@@ -41,15 +37,17 @@ Request
.. rest_parameters:: parameters.yaml
- audit_template_uuid: audittemplate_name
- audit_template_uuid: audittemplate_uuid
- audit_type: audit_type
- name: audit_name
- goal: audit_goal
- strategy: audit_strategy
- parameters: audit_parameters
- interval: audit_interval
- scope: audittemplate_scope
- auto_trigger: audit_autotrigger
- start_time: audit_starttime_req
- end_time: audit_endtime_req
- force: audit_force
**Example ONESHOT Audit creation request:**
@@ -83,6 +81,10 @@ version 1:
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
- force: audit_force
**Example JSON representation of an Audit:**
@@ -178,6 +180,10 @@ Response
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
- force: audit_force
**Example JSON representation of an Audit:**
@@ -221,6 +227,10 @@ Response
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
- force: audit_force
**Example JSON representation of an Audit:**
@@ -272,6 +282,10 @@ version 1:
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
- force: audit_force
**Example JSON representation of an Audit:**
@@ -323,6 +337,10 @@ Response
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
- force: audit_force
**Example JSON representation of an Audit:**
@@ -346,4 +364,4 @@ Request
.. rest_parameters:: parameters.yaml
- audit_ident: audit_ident
- audit_ident: audit_ident

View File

@@ -0,0 +1,57 @@
.. -*- rst -*-
==========
Data Model
==========
.. versionadded:: 1.3
``Data Model`` is very important for Watcher to generate resource
optimization solutions. Users can easily view the data model by the
API.
List Data Model
===============
.. rest_method:: GET /v1/data_model
Returns the information about Data Model.
Normal response codes: 200
Error codes: 400,401,406
Request
-------
.. rest_parameters:: parameters.yaml
- audit: r_audit
- type: r_type
Response
--------
.. rest_parameters:: parameters.yaml
- server_uuid: server_uuid
- server_name: server_name
- server_vcpus: server_vcpus
- server_memory: server_memory
- server_disk: server_disk
- server_state: server_state
- node_uuid: node_uuid
- node_hostname: node_hostname
- node_vcpus: node_vcpus
- node_vcpu_ratio: node_vcpu_ratio
- node_memory: node_memory
- node_memory_ratio: node_memory_ratio
- node_disk: node_disk
- node_disk_ratio: node_disk_ratio
- node_state: node_state
**Example JSON representation of a Data Model:**
.. literalinclude:: samples/datamodel-list-response.json
:language: javascript

View File

@@ -0,0 +1,26 @@
.. -*- rst -*-
========
Webhooks
========
.. versionadded:: 1.4
Triggers an event based Audit.
Trigger EVENT Audit
===================
.. rest_method:: POST /v1/webhooks/{audit_ident}
Normal response codes: 202
Error codes: 400,404
Request
-------
.. rest_parameters:: parameters.yaml
- audit_ident: audit_ident

View File

@@ -0,0 +1,81 @@
.. -*- rst -*-
============
API versions
============
In order to bring new features to users over time, the Watcher API
supports versioning. There are two kinds of versions in Watcher.
- ''major versions'', which have dedicated URLs.
- ''microversions'', which can be requested using the
``OpenStack-API-Version`` header.
.. note:: The maximum microversion depends on release.
Please reference:
`API Microversion History
<https://docs.openstack.org/watcher/latest/contributor/api_microversion_history.html>`__
for API microversion history details.
The Version API resource works differently from other API resources as they *do not*
require authentication.
If Watcher receives a request with unsupported version, it responds with a 406 Not Acceptable,
along with the -Min- and -Max- headers that it can support.
List API versions
=================
.. rest_method:: GET /
This fetches all the information about all known major API versions in the
deployment. Links to more specific information will be provided for each major
API version, as well as information about supported min and max microversions.
Normal response codes: 200
Request
-------
Response Example
----------------
.. rest_parameters:: parameters.yaml
- description: version_description
- versions: versions
- version: version
- id: version_id
- links: links
- min_version: openstack-api-min-version
- max_version: openstack-api-max-version
.. literalinclude:: samples/api-root-response.json
:language: javascript
Show v1 API
===========
.. rest_method:: GET /v1/
Show all the resources within the Watcher v1 API.
Normal response codes: 200
Request
-------
Response Example
----------------
.. rest_parameters:: parameters.yaml
- id: version_id
- links: links
- OpenStack-API-Version: header_version
- OpenStack-API-Minimum-Version: openstack-api-min-version
- OpenStack-API-Maximum-Version: openstack-api-max-version
.. literalinclude:: samples/api-v1-root-response.json
:language: javascript

View File

@@ -47,14 +47,23 @@ WATCHER_POLICY_YAML=$WATCHER_CONF_DIR/policy.yaml.sample
WATCHER_DEVSTACK_DIR=$WATCHER_DIR/devstack
WATCHER_DEVSTACK_FILES_DIR=$WATCHER_DEVSTACK_DIR/files
NOVA_CONF_DIR=/etc/nova
NOVA_CONF=$NOVA_CONF_DIR/nova.conf
if is_ssl_enabled_service "watcher" || is_service_enabled tls-proxy; then
WATCHER_SERVICE_PROTOCOL="https"
fi
WATCHER_USE_MOD_WSGI=$(trueorfalse True WATCHER_USE_MOD_WSGI)
# Support entry points installation of console scripts
if [[ -d $WATCHER_DIR/bin ]]; then
WATCHER_BIN_DIR=$WATCHER_DIR/bin
else
WATCHER_BIN_DIR=$(get_python_exec_prefix)
fi
# There are 2 modes, which is "uwsgi" which runs with an apache
# proxy uwsgi in front of it, or "mod_wsgi", which runs in
# apache. mod_wsgi is deprecated, don't use it.
WATCHER_USE_WSGI_MODE=${WATCHER_USE_WSGI_MODE:-$WSGI_MODE}
WATCHER_UWSGI=$WATCHER_BIN_DIR/watcher-api-wsgi
WATCHER_UWSGI_CONF=$WATCHER_CONF_DIR/watcher-uwsgi.ini
if is_suse; then
WATCHER_WSGI_DIR=${WATCHER_WSGI_DIR:-/srv/www/htdocs/watcher}
@@ -62,16 +71,15 @@ else
WATCHER_WSGI_DIR=${WATCHER_WSGI_DIR:-/var/www/watcher}
fi
# Public facing bits
WATCHER_SERVICE_HOST=${WATCHER_SERVICE_HOST:-$HOST_IP}
WATCHER_SERVICE_HOST=${WATCHER_SERVICE_HOST:-$SERVICE_HOST}
WATCHER_SERVICE_PORT=${WATCHER_SERVICE_PORT:-9322}
WATCHER_SERVICE_PORT_INT=${WATCHER_SERVICE_PORT_INT:-19322}
WATCHER_SERVICE_PROTOCOL=${WATCHER_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
# Support entry points installation of console scripts
if [[ -d $WATCHER_DIR/bin ]]; then
WATCHER_BIN_DIR=$WATCHER_DIR/bin
if [[ "$WATCHER_USE_WSGI_MODE" == "uwsgi" ]]; then
WATCHER_API_URL="$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST/infra-optim"
else
WATCHER_BIN_DIR=$(get_python_exec_prefix)
WATCHER_API_URL="$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST:$WATCHER_SERVICE_PORT"
fi
# Entry Points
@@ -96,7 +104,9 @@ function _cleanup_watcher_apache_wsgi {
# runs that a clean run would need to clean up
function cleanup_watcher {
sudo rm -rf $WATCHER_STATE_PATH $WATCHER_AUTH_CACHE_DIR
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
if [[ "$WATCHER_USE_WSGI_MODE" == "uwsgi" ]]; then
remove_uwsgi_config "$WATCHER_UWSGI_CONF" "$WATCHER_UWSGI"
else
_cleanup_watcher_apache_wsgi
fi
}
@@ -142,29 +152,32 @@ function create_watcher_accounts {
"infra-optim" "Watcher Infrastructure Optimization Service")
get_or_create_endpoint $watcher_service \
"$REGION_NAME" \
"$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST:$WATCHER_SERVICE_PORT" \
"$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST:$WATCHER_SERVICE_PORT" \
"$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST:$WATCHER_SERVICE_PORT"
"$WATCHER_API_URL"\
"$WATCHER_API_URL"\
"$WATCHER_API_URL"
}
# _config_watcher_apache_wsgi() - Set WSGI config files of watcher
function _config_watcher_apache_wsgi {
local watcher_apache_conf
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
if [[ "$WATCHER_USE_WSGI_MODE" == "mod_wsgi" ]]; then
local service_port=$WATCHER_SERVICE_PORT
if is_service_enabled tls-proxy; then
service_port=$WATCHER_SERVICE_PORT_INT
service_protocol="http"
fi
sudo mkdir -p $WATCHER_WSGI_DIR
sudo cp $WATCHER_DIR/watcher/api/app.wsgi $WATCHER_WSGI_DIR/app.wsgi
watcher_apache_conf=$(apache_site_config_for watcher-api)
sudo cp $WATCHER_DEVSTACK_FILES_DIR/apache-watcher-api.template $watcher_apache_conf
sudo sed -e "
s|%WATCHER_SERVICE_PORT%|$WATCHER_SERVICE_PORT|g;
s|%WATCHER_SERVICE_PORT%|$service_port|g;
s|%WATCHER_WSGI_DIR%|$WATCHER_WSGI_DIR|g;
s|%USER%|$STACK_USER|g;
s|%APIWORKERS%|$API_WORKERS|g;
s|%APACHE_NAME%|$APACHE_NAME|g;
" -i $watcher_apache_conf
enable_apache_site watcher-api
tail_log watcher-access /var/log/$APACHE_NAME/watcher-api-access.log
tail_log watcher-api /var/log/$APACHE_NAME/watcher-api.log
fi
}
@@ -180,22 +193,23 @@ function create_watcher_conf {
iniset_rpc_backend watcher $WATCHER_CONF
iniset $WATCHER_CONF database connection $(database_connection_url watcher)
iniset $WATCHER_CONF api host "$WATCHER_SERVICE_HOST"
iniset $WATCHER_CONF api host "$(ipv6_unquote $WATCHER_SERVICE_HOST)"
if is_service_enabled tls-proxy; then
iniset $WATCHER_CONF api host "$(ipv6_unquote $WATCHER_SERVICE_HOST)"
iniset $WATCHER_CONF api port "$WATCHER_SERVICE_PORT_INT"
# iniset $WATCHER_CONF api enable_ssl_api "True"
else
iniset $WATCHER_CONF api port "$WATCHER_SERVICE_PORT"
if [[ "$WATCHER_USE_WSGI_MODE" == "mod_wsgi" ]]; then
iniset $WATCHER_CONF api host "$(ipv6_unquote $WATCHER_SERVICE_HOST)"
iniset $WATCHER_CONF api port "$WATCHER_SERVICE_PORT"
fi
fi
iniset $WATCHER_CONF oslo_policy policy_file $WATCHER_POLICY_YAML
iniset $WATCHER_CONF oslo_messaging_notifications driver "messagingv2"
iniset $NOVA_CONF oslo_messaging_notifications topics "notifications,watcher_notifications"
iniset $NOVA_CONF notifications notify_on_state_change "vm_and_task_state"
configure_auth_token_middleware $WATCHER_CONF watcher $WATCHER_AUTH_CACHE_DIR
configure_auth_token_middleware $WATCHER_CONF watcher $WATCHER_AUTH_CACHE_DIR "watcher_clients_auth"
@@ -215,15 +229,12 @@ function create_watcher_conf {
fi
# Format logging
if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ]; then
setup_colorized_logging $WATCHER_CONF DEFAULT
else
# Show user_name and project_name instead of user_id and project_id
iniset $WATCHER_CONF DEFAULT logging_context_format_string "%(asctime)s.%(msecs)03d %(levelname)s %(name)s [%(request_id)s %(project_domain)s %(user_name)s %(project_name)s] %(instance)s%(message)s"
fi
setup_logging $WATCHER_CONF
#config apache files
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
if [[ "$WATCHER_USE_WSGI_MODE" == "uwsgi" ]]; then
write_uwsgi_config "$WATCHER_UWSGI_CONF" "$WATCHER_UWSGI" "/infra-optim"
else
_config_watcher_apache_wsgi
fi
# Register SSL certificates if provided
@@ -235,10 +246,6 @@ function create_watcher_conf {
iniset $WATCHER_CONF DEFAULT enabled_ssl_apis "$WATCHER_ENABLED_APIS"
fi
if is_service_enabled ceilometer; then
iniset $WATCHER_CONF watcher_messaging notifier_driver "messaging"
fi
}
# create_watcher_cache_dir() - Part of the init_watcher() process
@@ -274,7 +281,7 @@ function install_watcherclient {
function install_watcher {
git_clone $WATCHER_REPO $WATCHER_DIR $WATCHER_BRANCH
setup_develop $WATCHER_DIR
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
if [[ "$WATCHER_USE_WSGI_MODE" == "mod_wsgi" ]]; then
install_apache_wsgi
fi
}
@@ -285,24 +292,29 @@ function start_watcher_api {
local service_port=$WATCHER_SERVICE_PORT
local service_protocol=$WATCHER_SERVICE_PROTOCOL
local watcher_url
if is_service_enabled tls-proxy; then
service_port=$WATCHER_SERVICE_PORT_INT
service_protocol="http"
fi
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
restart_apache_server
if [[ "$WATCHER_USE_WSGI_MODE" == "uwsgi" ]]; then
run_process "watcher-api" "$WATCHER_BIN_DIR/uwsgi --procname-prefix watcher-api --ini $WATCHER_UWSGI_CONF"
watcher_url=$service_protocol://$SERVICE_HOST/infra-optim
else
run_process watcher-api "$WATCHER_BIN_DIR/watcher-api --config-file $WATCHER_CONF"
watcher_url=$service_protocol://$SERVICE_HOST:$service_port
enable_apache_site watcher-api
restart_apache_server
# Start proxies if enabled
if is_service_enabled tls-proxy; then
start_tls_proxy watcher '*' $WATCHER_SERVICE_PORT $WATCHER_SERVICE_HOST $WATCHER_SERVICE_PORT_INT
fi
fi
echo "Waiting for watcher-api to start..."
if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$WATCHER_SERVICE_HOST:$service_port; then
if ! wait_for_service $SERVICE_TIMEOUT $watcher_url; then
die $LINENO "watcher-api did not start"
fi
# Start proxies if enabled
if is_service_enabled tls-proxy; then
start_tls_proxy watcher '*' $WATCHER_SERVICE_PORT $WATCHER_SERVICE_HOST $WATCHER_SERVICE_PORT_INT
fi
}
# start_watcher() - Start running processes, including screen
@@ -315,10 +327,11 @@ function start_watcher {
# stop_watcher() - Stop running processes (non-screen)
function stop_watcher {
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
disable_apache_site watcher-api
else
if [[ "$WATCHER_USE_WSGI_MODE" == "uwsgi" ]]; then
stop_process watcher-api
else
disable_apache_site watcher-api
restart_apache_server
fi
for serv in watcher-decision-engine watcher-applier; do
stop_process $serv

View File

@@ -10,6 +10,7 @@ SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=azertytoken
HOST_IP=192.168.42.2 # Change this to this compute node's IP address
#HOST_IPV6=2001:db8::7
FLAT_INTERFACE=eth0
FIXED_RANGE=10.254.1.0/24 # Change this to whatever your network is
@@ -30,12 +31,12 @@ ENABLED_SERVICES=n-cpu,n-api-meta,c-vol,q-agt,placement-client
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
VNCSERVER_LISTEN=0.0.0.0
VNCSERVER_PROXYCLIENT_ADDRESS=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$HOST_IP # or HOST_IPV6
NOVA_INSTANCES_PATH=/opt/stack/data/instances
# Enable the Ceilometer plugin for the compute agent
enable_plugin ceilometer git://git.openstack.org/openstack/ceilometer
enable_plugin ceilometer https://opendev.org/openstack/ceilometer
disable_service ceilometer-acentral,ceilometer-collector,ceilometer-api
LOGFILE=$DEST/logs/stack.sh.log
@@ -44,6 +45,9 @@ LOGDAYS=2
[[post-config|$NOVA_CONF]]
[DEFAULT]
compute_monitors=cpu.virt_driver
notify_on_state_change = vm_and_task_state
[notifications]
notify_on_state_change = vm_and_task_state
# Enable both versioned and unversioned notifications. Watcher only
# uses versioned notifications but ceilometer uses unversioned. We
# can change this to just versioned when ceilometer handles versioned
# notifications from nova: https://bugs.launchpad.net/ceilometer/+bug/1665449
notification_format=both

View File

@@ -10,6 +10,7 @@ SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=azertytoken
HOST_IP=192.168.42.1 # Change this to your controller node IP address
#HOST_IPV6=2001:db8::7
FLAT_INTERFACE=eth0
FIXED_RANGE=10.254.1.0/24 # Change this to whatever your network is
@@ -25,13 +26,13 @@ MULTI_HOST=1
disable_service n-cpu
# Enable the Watcher Dashboard plugin
enable_plugin watcher-dashboard git://git.openstack.org/openstack/watcher-dashboard
enable_plugin watcher-dashboard https://opendev.org/openstack/watcher-dashboard
# Enable the Watcher plugin
enable_plugin watcher git://git.openstack.org/openstack/watcher
enable_plugin watcher https://opendev.org/openstack/watcher
# Enable the Ceilometer plugin
enable_plugin ceilometer git://git.openstack.org/openstack/ceilometer
enable_plugin ceilometer https://opendev.org/openstack/ceilometer
# This is the controller node, so disable the ceilometer compute agent
disable_service ceilometer-acompute
@@ -48,6 +49,9 @@ LOGDAYS=2
[[post-config|$NOVA_CONF]]
[DEFAULT]
compute_monitors=cpu.virt_driver
notify_on_state_change = vm_and_task_state
[notifications]
notify_on_state_change = vm_and_task_state
# Enable both versioned and unversioned notifications. Watcher only
# uses versioned notifications but ceilometer uses unversioned. We
# can change this to just versioned when ceilometer handles versioned
# notifications from nova: https://bugs.launchpad.net/ceilometer/+bug/1665449
notification_format=both

View File

@@ -0,0 +1,9 @@
# Plug-in overrides
# https://docs.openstack.org/devstack/latest/plugins.html#plugin-interface
# Enable both versioned and unversioned notifications. Watcher only
# uses versioned notifications but ceilometer uses unversioned. We
# can change this to just versioned when ceilometer handles
# versioned notifications from nova:
# https://bugs.launchpad.net/ceilometer/+bug/1665449
NOVA_NOTIFICATION_FORMAT=both

View File

@@ -0,0 +1,15 @@
#!/usr/bin/env bash
# ``upgrade-watcher``
function configure_watcher_upgrade {
XTRACE=$(set +o | grep xtrace)
set -o xtrace
# Copy release-specific files
sudo cp $TARGET_RELEASE_DIR/watcher/etc/watcher/watcher.conf $WATCHER_CONF_DIR/watcher.conf
sudo cp $TARGET_RELEASE_DIR/watcher/etc/watcher/policy.yaml.sample $WATCHER_CONF_DIR/policy.yaml.sample
# reset to previous state
$XTRACE
}

126
devstack/upgrade/resources.sh Executable file
View File

@@ -0,0 +1,126 @@
#!/bin/bash
set -o errexit
source $GRENADE_DIR/grenaderc
source $GRENADE_DIR/functions
source $TOP_DIR/openrc admin demo
set -o xtrace
function _wait_for_status {
while :
do
state=$("${@:2}" -f value -c State)
[[ $state == "SUCCEEDED" ]] && break
if [ $state == "ERROR" ]; then
die $LINENO "ERROR creating audit"
fi
sleep 10
done
}
function create_audit_template {
at_id=$(openstack optimize audittemplate create d1 dummy -s dummy -f value -c UUID)
resource_save watcher at_id $at_id
}
function create_audit {
audit_id=$(openstack optimize audit create -s dummy -g dummy -f value -c UUID)
resource_save watcher audit_id $audit_id
}
function create_audit_with_autotrigger {
audit_at_id=$(openstack optimize audit create -s dummy -g dummy -f value -c UUID --auto-trigger)
resource_save watcher audit_at_id $audit_at_id
}
function verify_audit_template {
local at_id=$(resource_get watcher at_id)
openstack optimize audittemplate show $at_id
}
function verify_audit_with_autotrigger {
local audit_at_id=$(resource_get watcher audit_at_id)
_wait_for_status "SUCCEEDED" openstack optimize audit show $audit_at_id
local actionplan_at_id=$(openstack optimize actionplan list --audit $audit_at_id -c UUID -f value)
resource_save watcher actionplan_at $actionplan_at_id
actionplan_at_state=$(openstack optimize actionplan show $actionplan_at_id -c State -f value)
if [ $actionplan_at_state != "SUCCEEDED" ]; then
die $LINENO "ERROR executing actionplan"
fi
}
function verify_audit {
local audit_id=$(resource_get watcher audit_id)
_wait_for_status "SUCCEEDED" openstack optimize audit show $audit_id
local actionplan_id=$(openstack optimize actionplan list --audit $audit_id -c UUID -f value)
resource_save watcher actionplan $actionplan_id
actionplan_state=$(openstack optimize actionplan show $actionplan_id -c State -f value)
if [ $actionplan_state != "RECOMMENDED" ]; then
die $LINENO "ERROR creating actionplan"
fi
}
function verify_noapi {
# currently no good way
:
}
function delete_audit {
local audit_id=$(resource_get watcher audit_id)
local actionplan_id=$(resource_get watcher actionplan)
watcher actionplan delete $actionplan_id
openstack optimize audit delete $audit_id
}
function delete_audit_with_autotrigger {
local audit_at_id=$(resource_get watcher audit_at_id)
local actionplan_id=$(resource_get watcher actionplan_at)
watcher actionplan delete $actionplan_id
openstack optimize audit delete $audit_at_id
}
function delete_audit_template {
local at_id=$(resource_get watcher at_id)
openstack optimize audittemplate delete $at_id
}
function create {
create_audit_template
create_audit
create_audit_with_autotrigger
}
function verify {
verify_audit_template
verify_audit
verify_audit_with_autotrigger
}
function destroy {
delete_audit_template
delete_audit
delete_audit_with_autotrigger
}
# Dispatcher
case $1 in
"create")
create
;;
"verify_noapi")
verify_noapi
;;
"verify")
verify
;;
"destroy")
destroy
;;
"force_destroy")
set +o errexit
destroy
;;
esac

18
devstack/upgrade/settings Normal file
View File

@@ -0,0 +1,18 @@
register_project_for_upgrade watcher
register_db_to_save watcher
devstack_localrc base enable_plugin watcher https://opendev.org/openstack/watcher $BASE_DEVSTACK_BRANCH
devstack_localrc target enable_plugin watcher https://opendev.org/openstack/watcher
devstack_localrc base enable_service watcher-api watcher-decision-engine watcher-applier
devstack_localrc target enable_service watcher-api watcher-decision-engine watcher-applier
BASE_RUN_SMOKE=False
TARGET_RUN_SMOKE=False
# Enable both versioned and unversioned notifications. Watcher only
# uses versioned notifications but ceilometer uses unversioned. We
# can change this to just versioned when ceilometer handles
# versioned notifications from nova:
# https://bugs.launchpad.net/ceilometer/+bug/1665449
devstack_localrc base NOVA_NOTIFICATION_FORMAT=both

24
devstack/upgrade/shutdown.sh Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/bash
set -o errexit
source $GRENADE_DIR/grenaderc
source $GRENADE_DIR/functions
# We need base DevStack functions for this
source $BASE_DEVSTACK_DIR/functions
source $BASE_DEVSTACK_DIR/stackrc # needed for status directory
source $BASE_DEVSTACK_DIR/lib/tls
source $BASE_DEVSTACK_DIR/lib/apache
WATCHER_DEVSTACK_DIR=$(dirname $(dirname $0))
source $WATCHER_DEVSTACK_DIR/settings
source $WATCHER_DEVSTACK_DIR/plugin.sh
source $WATCHER_DEVSTACK_DIR/lib/watcher
set -o xtrace
stop_watcher
# sanity check that service is actually down
ensure_services_stopped watcher-api watcher-decision-engine watcher-applier

83
devstack/upgrade/upgrade.sh Executable file
View File

@@ -0,0 +1,83 @@
#!/usr/bin/env bash
# ``upgrade-watcher``
echo "*********************************************************************"
echo "Begin $0"
echo "*********************************************************************"
# Clean up any resources that may be in use
cleanup() {
set +o errexit
echo "********************************************************************"
echo "ERROR: Abort $0"
echo "********************************************************************"
# Kill ourselves to signal any calling process
trap 2; kill -2 $$
}
trap cleanup SIGHUP SIGINT SIGTERM
# Keep track of the grenade directory
RUN_DIR=$(cd $(dirname "$0") && pwd)
# Source params
source $GRENADE_DIR/grenaderc
# Import common functions
source $GRENADE_DIR/functions
# This script exits on an error so that errors don't compound and you see
# only the first error that occurred.
set -o errexit
# Upgrade watcher
# ============
# Get functions from current DevStack
source $TARGET_DEVSTACK_DIR/stackrc
source $TARGET_DEVSTACK_DIR/lib/apache
source $TARGET_DEVSTACK_DIR/lib/tls
source $TARGET_DEVSTACK_DIR/lib/keystone
source $TOP_DIR/openrc admin admin
source $(dirname $(dirname $BASH_SOURCE))/settings
source $(dirname $(dirname $BASH_SOURCE))/plugin.sh
# Print the commands being run so that we can see the command that triggers
# an error. It is also useful for following allowing as the install occurs.
set -o xtrace
# Save current config files for posterity
[[ -d $SAVE_DIR/etc.watcher ]] || cp -pr $WATCHER_CONF_DIR $SAVE_DIR/etc.watcher
# Install the target watcher
install_watcher
# calls upgrade-watcher for specific release
upgrade_project watcher $RUN_DIR $BASE_DEVSTACK_BRANCH $TARGET_DEVSTACK_BRANCH
if [[ ! -f "$WATCHER_UWSGI_CONF" ]] && [[ "$WATCHER_USE_WSGI_MODE" == "uwsgi" ]]
then write_uwsgi_config "$WATCHER_UWSGI_CONF" "$WATCHER_UWSGI" "/infra-optim"
endpoints=$(openstack endpoint list --service watcher -c ID -f value)
for id in $endpoints; do
openstack endpoint delete $id
done
create_watcher_accounts
fi
# Migrate the database
watcher-db-manage upgrade || die $LINO "DB migration error"
start_watcher
# Don't succeed unless the services come up
ensure_services_started watcher-api watcher-decision-engine watcher-applier
set +o xtrace
echo "*********************************************************************"
echo "SUCCESS: End $0"
echo "*********************************************************************"

10
doc/requirements.txt Normal file
View File

@@ -0,0 +1,10 @@
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
openstackdocstheme>=1.20.0 # Apache-2.0
sphinx>=1.8.0,!=2.1.0,!=3.0.0 # BSD
sphinxcontrib-pecanwsme>=0.8.0 # Apache-2.0
sphinxcontrib-svg2pdfconverter>=0.1.0 # BSD
reno>=2.7.0 # Apache-2.0
sphinxcontrib-apidoc>=0.2.0 # BSD
os-api-ref>=1.4.0 # Apache-2.0

View File

@@ -44,6 +44,6 @@ Installing API behind mod_wsgi
Fedora/RHEL7/CentOS7:
sudo systemctl reload httpd
Debian/Ubuntu:
sudo a2ensite watcher
sudo service apache2 reload
Debian/Ubuntu:
sudo a2ensite watcher
sudo service apache2 reload

View File

@@ -8,5 +8,7 @@ Administrator Guide
apache-mod-wsgi
gmr
policy
ways-to-install
../strategies/index
../datasources/index
../contributor/notifications
../contributor/concurrency

View File

@@ -1,8 +0,0 @@
==================================================
OpenStack Infrastructure Optimization Service APIs
==================================================
.. toctree::
:maxdepth: 1
v1

View File

@@ -1,100 +0,0 @@
..
Except where otherwise noted, this document is licensed under Creative
Commons Attribution 3.0 License. You can view the license at:
https://creativecommons.org/licenses/by/3.0/
====================
RESTful Web API (v1)
====================
Goals
=====
.. rest-controller:: watcher.api.controllers.v1.goal:GoalsController
:webprefix: /v1/goal
.. autotype:: watcher.api.controllers.v1.goal.GoalCollection
:members:
.. autotype:: watcher.api.controllers.v1.goal.Goal
:members:
Strategies
==========
.. rest-controller:: watcher.api.controllers.v1.strategy:StrategiesController
:webprefix: /v1/strategies
.. autotype:: watcher.api.controllers.v1.strategy.StrategyCollection
:members:
.. autotype:: watcher.api.controllers.v1.strategy.Strategy
:members:
Audit Templates
===============
.. rest-controller:: watcher.api.controllers.v1.audit_template:AuditTemplatesController
:webprefix: /v1/audit_templates
.. autotype:: watcher.api.controllers.v1.audit_template.AuditTemplateCollection
:members:
.. autotype:: watcher.api.controllers.v1.audit_template.AuditTemplate
:members:
Audits
======
.. rest-controller:: watcher.api.controllers.v1.audit:AuditsController
:webprefix: /v1/audits
.. autotype:: watcher.api.controllers.v1.audit.AuditCollection
:members:
.. autotype:: watcher.api.controllers.v1.audit.Audit
:members:
Links
=====
.. autotype:: watcher.api.controllers.link.Link
:members:
Action Plans
============
.. rest-controller:: watcher.api.controllers.v1.action_plan:ActionPlansController
:webprefix: /v1/action_plans
.. autotype:: watcher.api.controllers.v1.action_plan.ActionPlanCollection
:members:
.. autotype:: watcher.api.controllers.v1.action_plan.ActionPlan
:members:
Actions
=======
.. rest-controller:: watcher.api.controllers.v1.action:ActionsController
:webprefix: /v1/actions
.. autotype:: watcher.api.controllers.v1.action.ActionCollection
:members:
.. autotype:: watcher.api.controllers.v1.action.Action
:members:
Scoring Engine
==============
.. rest-controller:: watcher.api.controllers.v1.scoring_engine:ScoringEngineController
:webprefix: /v1/scoring_engine
.. autotype:: watcher.api.controllers.v1.scoring_engine.ScoringEngineCollection
:members:
.. autotype:: watcher.api.controllers.v1.scoring_engine.ScoringEngine
:members:

View File

@@ -76,6 +76,7 @@ Watcher Applier
This component is in charge of executing the
:ref:`Action Plan <action_plan_definition>` built by the
:ref:`Watcher Decision Engine <watcher_decision_engine_definition>`.
Taskflow is the default workflow engine for Watcher.
It connects to the :ref:`message bus <amqp_bus_definition>` and launches the
:ref:`Action Plan <action_plan_definition>` whenever a triggering message is
@@ -110,6 +111,23 @@ If the :ref:`Action <action_definition>` fails, the
previous state of the :ref:`Managed resource <managed_resource_definition>`
(i.e. before the command was sent to the underlying OpenStack service).
In Stein, added a new config option 'action_execution_rule' which is a
dict type. Its key field is strategy name and the value is 'ALWAYS' or 'ANY'.
'ALWAYS' means the callback function returns True as usual.
'ANY' means the return depends on the result of previous action execution.
The callback returns True if previous action gets failed, and the engine
continues to run the next action. If previous action executes success,
the callback returns False then the next action will be ignored.
For strategies that aren't in 'action_execution_rule', the callback always
returns True.
Please add the next section in the watcher.conf file
if your strategy needs this feature.
::
[watcher_workflow_engines.taskflow]
action_execution_rule = {'your strategy name': 'ANY'}
.. _archi_watcher_cli_definition:
Watcher CLI
@@ -263,11 +281,13 @@ previously created :ref:`Audit template <audit_template_definition>`:
:width: 100%
The :ref:`Administrator <administrator_definition>` also can specify type of
Audit and interval (in case of CONTINUOUS type). There is two types of Audit:
ONESHOT and CONTINUOUS. Oneshot Audit is launched once and if it succeeded
executed new action plan list will be provided. Continuous Audit creates
action plans with specified interval (in seconds); if action plan
has been created, all previous action plans get CANCELLED state.
Audit and interval (in case of CONTINUOUS type). There is three types of Audit:
ONESHOT, CONTINUOUS and EVENT. ONESHOT Audit is launched once and if it
succeeded executed new action plan list will be provided; CONTINUOUS Audit
creates action plans with specified interval (in seconds or cron format, cron
inteval can be used like: `*/5 * * * *`), if action plan
has been created, all previous action plans get CANCELLED state;
EVENT audit is launched when receiving webhooks API.
A message is sent on the :ref:`AMQP bus <amqp_bus_definition>` which triggers
the Audit in the
@@ -461,4 +481,4 @@ change to a new value:
.. _Watcher API: webapi/v1.html
.. _Watcher API: https://docs.openstack.org/api-ref/resource-optimization/

View File

@@ -32,17 +32,16 @@ sys.path.insert(0, os.path.abspath('./'))
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = [
'oslo_config.sphinxext',
'sphinx.ext.autodoc',
'sphinx.ext.viewcode',
'sphinxcontrib.httpdomain',
'sphinxcontrib.pecanwsme.rest',
'stevedore.sphinxext',
'wsmeext.sphinxext',
'ext.term',
'ext.versioned_notifications',
'oslo_config.sphinxconfiggen',
'openstackdocstheme',
'sphinx.ext.napoleon',
'sphinxcontrib.rsvgconverter',
]
wsme_protocols = ['restjson']
@@ -51,10 +50,6 @@ config_generator_config_file = [(
'_static/watcher')]
sample_config_basename = 'watcher'
# autodoc generation is a bit aggressive and a nuisance when doing heavy
# text edit cycles.
# execute "export SPHINX_DEBUG=1" in your terminal to disable
# The suffix of source filenames.
source_suffix = '.rst'
@@ -142,10 +137,21 @@ bug_tag = ''
# [howto/manual]).
latex_documents = [
('index',
'%s.tex' % project,
'doc-watcher.tex',
u'%s Documentation' % project,
u'OpenStack Foundation', 'manual'),
]
# If false, no module index is generated.
latex_domain_indices = False
latex_elements = {
'makeindex': '',
'printindex': '',
'preamble': r'\setcounter{tocdepth}{3}',
}
# Disable usage of xindy https://bugzilla.redhat.com/show_bug.cgi?id=1643664
latex_use_xindy = False
# Example configuration for intersphinx: refer to the Python standard library.
# intersphinx_mapping = {'http://docs.python.org/': None}

View File

@@ -159,7 +159,7 @@ MySQL database that is used by other OpenStack services.
``watcher`` user. Replace WATCHER_DBPASSWORD
with the actual password::
$ mysql -u root -p
# mysql
mysql> CREATE DATABASE watcher CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON watcher.* TO 'watcher'@'localhost' \
@@ -178,7 +178,7 @@ You can easily generate and update a sample configuration file
named :ref:`watcher.conf.sample <watcher_sample_configuration_files>` by using
these following commands::
$ git clone git://git.openstack.org/openstack/watcher
$ git clone https://opendev.org/openstack/watcher.git
$ cd watcher/
$ tox -e genconfig
$ vi etc/watcher/watcher.conf.sample
@@ -239,10 +239,6 @@ so that the watcher service is configured for your needs.
[DEFAULT]
# The messaging driver to use, defaults to rabbit. Other drivers
# include qpid and zmq. (string value)
#rpc_backend = rabbit
# The default exchange under which topics are scoped. May be
# overridden by an exchange name specified in the transport_url
# option. (string value)
@@ -407,26 +403,22 @@ Watcher can consume notifications generated by the Nova services, in order to
build or update, in real time, its cluster data model related to computing
resources.
Nova publishes, by default, notifications on ``notifications`` AMQP queue
(configurable) and ``versioned_notifications`` AMQP queue (not
configurable). ``notifications`` queue is mainly used by ceilometer, so we can
not use it. And some events, related to nova-compute service state, are only
sent into the ``versioned_notifications`` queue.
Nova emits unversioned(legacy) and versioned notifications on different
topics. Because legacy notifications will be deprecated, Watcher consumes
Nova versioned notifications.
By default, Watcher listens to AMQP queues named ``watcher_notifications``
and ``versioned_notifications``. So you have to update the Nova
configuration file on controller and compute nodes, in order
to Watcher receives Nova notifications in ``watcher_notifications`` as well.
* In the file ``/etc/nova/nova.conf``, update the section
``[oslo_messaging_notifications]``, by redefining the list of topics
into which Nova services will publish events ::
* In the file ``/etc/nova/nova.conf``, the value of driver in the section
``[oslo_messaging_notifications]`` can't be noop, and the value of
notification_format in the section ``[notifications]``
should be both or versioned ::
[oslo_messaging_notifications]
driver = messagingv2
topics = notifications,watcher_notifications
* Restart the Nova services.
...
[notifications]
notification_format = both
Configure Cinder Notifications

View File

@@ -0,0 +1 @@
.. include:: ../../../watcher/api/controllers/rest_api_version_history.rst

View File

@@ -0,0 +1,248 @@
===========
Concurrency
===========
Introduction
************
Modern processors typically contain multiple cores all capable of executing
instructions in parallel. Ensuring applications can fully utilize modern
underlying hardware requires developing with these concepts in mind. The
OpenStack foundation maintains a number of libraries to facilitate this
utilization, combined with constructs like CPython's GIL_ the proper use of
these concepts becomes more straightforward compared to other programming
languages.
The primary libraries maintained by OpenStack to facilitate concurrency are
futurist_ and taskflow_. Here futurist is a more straightforward and
lightweight library while taskflow is more advanced supporting features like
rollback mechanisms. Within Watcher both libraries are used to facilitate
concurrency.
.. _GIL: https://wiki.python.org/moin/GlobalInterpreterLock
.. _futurist: https://docs.openstack.org/futurist/latest/
.. _taskflow: https://docs.openstack.org/taskflow/latest/
Threadpool
**********
A threadpool is a collection of one or more threads typically called *workers*
to which tasks can be submitted. These submitted tasks will be scheduled by a
threadpool and subsequently executed. In the case of Python tasks typically are
bounded or unbounded methods while other programming languages like Java
require implementing an interface.
The order and amount of concurrency with which these tasks are executed is up
to the threadpool to decide. Some libraries like taskflow allow for either
strong or loose ordering of tasks while others like futurist might only support
loose ordering. Taskflow supports building tree-based hierarchies of dependent
tasks for example.
Upon submission of a task to a threadpool a so called future_ is returned.
These objects allow to determine information about the task such as if it is
currently being executed or if it has finished execution. When the task has
finished execution the future can also be used to retrieve what was returned by
the method.
Some libraries like futurist provide synchronization primitives for collections
of futures such as wait_for_any_. The following sections will cover different
types of concurrency used in various services of Watcher.
.. _future: https://docs.python.org/3/library/concurrent.futures.html
.. _wait_for_any: https://docs.openstack.org/futurist/latest/reference/index.html#waiters
Decision engine concurrency
***************************
The concurrency in the decision engine is governed by two independent
threadpools. Both of these threadpools are GreenThreadPoolExecutor_ from the
futurist_ library. One of these is used automatically and most contributors
will not interact with it while developing new features. The other threadpool
can frequently be used while developing new features or updating existing ones.
It is known as the DecisionEngineThreadpool and allows to achieve performance
improvements in network or I/O bound operations.
.. _GreenThreadPoolExecutor: https://docs.openstack.org/futurist/latest/reference/index.html#executors
AuditEndpoint
#############
The first threadpool is used to allow multiple audits to be run in parallel.
In practice, however, only one audit can be run in parallel. This is due to
the data model used by audits being a singleton. To prevent audits destroying
each others data model one must wait for the other to complete before being
allowed to access this data model. A performance improvement could be achieved
by being more intelligent in the use, caching and construction of these
data models.
DecisionEngineThreadPool
########################
The second threadpool is used for generic tasks, typically networking and I/O
could benefit the most of this threadpool. Upon execution of an audit this
threadpool can be utilized to retrieve information from the Nova compute
service for instance. This second threadpool is a singleton and is shared
amongst concurrently running audits as a result the amount of workers is static
and independent from the amount of workers in the first threadpool. The use of
the :class:`~.DecisionEngineThreadpool` while building the Nova compute data
model is demonstrated to show how it can effectively be used.
In the following example a reference to the
:class:`~.DecisionEngineThreadpool` is stored in ``self.executor``. Here two
tasks are submitted one with function ``self._collect_aggregates`` and the
other function ``self._collect_zones``. With both ``self.executor.submit``
calls subsequent arguments are passed to the function. All subsequent arguments
are passed to the function being submitted as task following the common
``(fn, *args, **kwargs)`` signature. One of the original signatures would be
``def _collect_aggregates(host_aggregates, compute_nodes)`` for example.
.. code-block:: python
zone_aggregate_futures = {
self.executor.submit(
self._collect_aggregates, host_aggregates, compute_nodes),
self.executor.submit(
self._collect_zones, availability_zones, compute_nodes)
}
waiters.wait_for_all(zone_aggregate_futures)
The last statement of the example above waits on all futures to complete.
Similarly, ``waiters.wait_for_any`` will wait for any future of the specified
collection to complete. To simplify the usage of ``wait_for_any`` the
:class:`~.DecisiongEngineThreadpool` defines a ``do_while_futures`` method.
This method will iterate in a do_while loop over a collection of futures until
all of them have completed. The advantage of ``do_while_futures`` is that it
allows to immediately call a method as soon as a future finishes. The arguments
for this callback method can be supplied when calling ``do_while_futures``,
however, the first argument to the callback is always the future itself! If
the collection of futures can safely be modified ``do_while_futures_modify``
can be used and should have slightly better performance. The following example
will show how ``do_while_futures`` is used in the decision engine.
.. code-block:: python
# For every compute node from compute_nodes submit a task to gather the node it's information.
# List comprehension is used to store all the futures of the submitted tasks in node_futures.
node_futures = [self.executor.submit(
self.nova_helper.get_compute_node_by_name,
node, servers=True, detailed=True)
for node in compute_nodes]
LOG.debug("submitted {0} jobs".format(len(compute_nodes)))
future_instances = []
# do_while iterate over node_futures and upon completion of a future call
# self._compute_node_future with the future and future_instances as arguments.
self.executor.do_while_futures_modify(
node_futures, self._compute_node_future, future_instances)
# Wait for all instance jobs to finish
waiters.wait_for_all(future_instances)
Finally, let's demonstrate how powerful this ``do_while_futures`` can be by
showing what the ``compute_node_future`` callback does. First, it retrieves the
result from the future and adds the compute node to the data model. Afterwards,
it checks if the compute node has any associated instances and if so it submits
an additional task to the :class:`~.DecisionEngineThreadpool`. The future is
appended to the ``future_instances`` so ``waiters.wait_for_all`` can be called
on this list. This is important as otherwise the building of the data model
might return before all tasks for instances have finished.
.. code-block:: python
# Get the result from the future.
node_info = future.result()[0]
# Filter out baremetal nodes.
if node_info.hypervisor_type == 'ironic':
LOG.debug("filtering out baremetal node: %s", node_info)
return
# Add the compute node to the data model.
self.add_compute_node(node_info)
# Get the instances from the compute node.
instances = getattr(node_info, "servers", None)
# Do not submit job if there are no instances on compute node.
if instances is None:
LOG.info("No instances on compute_node: {0}".format(node_info))
return
# Submit a job to retrieve detailed information about the instances.
future_instances.append(
self.executor.submit(
self.add_instance_node, node_info, instances)
)
Without ``do_while_futures`` an additional ``waiters.wait_for_all`` would be
required in between the compute node tasks and the instance tasks. This would
cause the progress of the decision engine to stall as less and less tasks
remain active before the instance tasks could be submitted. This demonstrates
how ``do_while_futures`` can be used to achieve more constant utilization of
the underlying hardware.
Applier concurrency
*******************
The applier does not use the futurist_ GreenThreadPoolExecutor_ directly but
instead uses taskflow_. However, taskflow still utilizes a greenthreadpool.
This threadpool is initialized in the workflow engine called
:class:`~.DefaultWorkFlowEngine`. Currently Watcher supports one workflow
engine but the base class allows contributors to develop other workflow engines
as well. In taskflow tasks are created using different types of flows such as a
linear, unordered or a graph flow. The linear and graph flow allow for strong
ordering between individual tasks and it is for this reason that the workflow
engine utilizes a graph flow. The creation of tasks, subsequently linking them
into a graph like structure and submitting them is shown below.
.. code-block:: python
self.execution_rule = self.get_execution_rule(actions)
flow = gf.Flow("watcher_flow")
actions_uuid = {}
for a in actions:
task = TaskFlowActionContainer(a, self)
flow.add(task)
actions_uuid[a.uuid] = task
for a in actions:
for parent_id in a.parents:
flow.link(actions_uuid[parent_id], actions_uuid[a.uuid],
decider=self.decider)
e = engines.load(
flow, executor='greenthreaded', engine='parallel',
max_workers=self.config.max_workers)
e.run()
return flow
In the applier tasks are contained in a :class:`~.TaskFlowActionContainer`
which allows them to trigger events in the workflow engine. This way the
workflow engine can halt or take other actions while the action plan is being
executed based on the success or failure of individual actions. However, the
base workflow engine simply uses these notifies to store the result of
individual actions in the database. Additionally, since taskflow uses a graph
flow if any of the tasks would fail all childs of this tasks not be executed
while ``do_revert`` will be triggered for all parents.
.. code-block:: python
class TaskFlowActionContainer(...):
...
def do_execute(self, *args, **kwargs):
...
result = self.action.execute()
if result is True:
return self.engine.notify(self._db_action,
objects.action.State.SUCCEEDED)
else:
self.engine.notify(self._db_action,
objects.action.State.FAILED)
class BaseWorkFlowEngine(...):
...
def notify(self, action, state):
db_action = objects.Action.get_by_uuid(self.context, action.uuid,
eager=True)
db_action.state = state
db_action.save()
return db_action

View File

@@ -1,72 +1,111 @@
..
Except where otherwise noted, this document is licensed under Creative
Commons Attribution 3.0 License. You can view the license at:
============================
So You Want to Contribute...
============================
https://creativecommons.org/licenses/by/3.0/
For general information on contributing to OpenStack, please check out the
`contributor guide <https://docs.openstack.org/contributors/>`_ to get started.
It covers all the basics that are common to all OpenStack projects:
the accounts you need, the basics of interacting with our Gerrit review system,
how we communicate as a community, etc.
.. _contributing:
Below will cover the more project specific information you need to get started
with Watcher.
=======================
Contributing to Watcher
=======================
If you're interested in contributing to the Watcher project,
the following will help get you started.
Contributor License Agreement
-----------------------------
.. index::
single: license; agreement
In order to contribute to the Watcher project, you need to have
signed OpenStack's contributor's agreement.
.. seealso::
* https://docs.openstack.org/infra/manual/developers.html
* https://wiki.openstack.org/CLA
LaunchPad Project
-----------------
Most of the tools used for OpenStack depend on a launchpad.net ID for
authentication. After signing up for a launchpad account, join the
"openstack" team to have access to the mailing list and receive
notifications of important events.
.. seealso::
* https://launchpad.net
* https://launchpad.net/watcher
* https://launchpad.net/openstack
Project Hosting Details
-----------------------
Bug tracker
https://launchpad.net/watcher
Mailing list (prefix subjects with ``[watcher]`` for faster responses)
http://lists.openstack.org/pipermail/openstack-dev/
Wiki
https://wiki.openstack.org/Watcher
Code Hosting
https://git.openstack.org/cgit/openstack/watcher
Code Review
https://review.openstack.org/#/q/status:open+project:openstack/watcher,n,z
Communication
~~~~~~~~~~~~~~
.. This would be a good place to put the channel you chat in as a project; when/
where your meeting is, the tags you prepend to your ML threads, etc.
IRC Channel
``#openstack-watcher`` (changelog_)
Mailing list(prefix subjects with ``[watcher]``)
http://lists.openstack.org/pipermail/openstack-discuss/
Weekly Meetings
On Wednesdays at 14:00 UTC on even weeks in the ``#openstack-meeting-4``
IRC channel, 08:00 UTC on odd weeks in the ``#openstack-meeting-alt``
IRC channel (`meetings logs`_)
Bi-weekly, on Wednesdays at 08:00 UTC on odd weeks in the
``#openstack-meeting-alt`` IRC channel (`meetings logs`_)
Meeting Agenda
https://wiki.openstack.org/wiki/Watcher_Meeting_Agenda
.. _changelog: http://eavesdrop.openstack.org/irclogs/%23openstack-watcher/
.. _meetings logs: http://eavesdrop.openstack.org/meetings/watcher/
Contacting the Core Team
~~~~~~~~~~~~~~~~~~~~~~~~~
.. This section should list the core team, their irc nicks, emails, timezones etc.
If all this info is maintained elsewhere (i.e. a wiki), you can link to that
instead of enumerating everyone here.
+--------------------+---------------+------------------------------------+
| Name | IRC | Email |
+====================+===============+====================================+
| `Li Canwei`_ | licanwei | li.canwei2@zte.com.cn |
+--------------------+---------------+------------------------------------+
| `chen ke`_ | chenke | chen.ke14@zte.com.cn |
+--------------------+---------------+------------------------------------+
| `Corne Lukken`_ | dantalion | info@dantalion.nl |
+--------------------+---------------+------------------------------------+
| `su zhengwei`_ | suzhengwei | sugar-2008@163.com |
+--------------------+---------------+------------------------------------+
| `Yumeng Bao`_ | Yumeng | yumeng_bao@yahoo.com |
+--------------------+---------------+------------------------------------+
.. _Corne Lukken: https://launchpad.net/~dantalion
.. _Li Canwei: https://launchpad.net/~li-canwei2
.. _su zhengwei: https://launchpad.net/~sue.sam
.. _Yumeng Bao: https://launchpad.net/~yumeng-bao
.. _chen ke: https://launchpad.net/~chenker
New Feature Planning
~~~~~~~~~~~~~~~~~~~~
.. This section is for talking about the process to get a new feature in. Some
projects use blueprints, some want specs, some want both! Some projects
stick to a strict schedule when selecting what new features will be reviewed
for a release.
New feature will be discussed via IRC or ML (with [Watcher] prefix).
Watcher team uses blueprints in `Launchpad`_ to manage the new features.
.. _Launchpad: https://launchpad.net/watcher
Task Tracking
~~~~~~~~~~~~~~
.. This section is about where you track tasks- launchpad? storyboard?
is there more than one launchpad project? what's the name of the project
group in storyboard?
We track our tasks in Launchpad.
If you're looking for some smaller, easier work item to pick up and get started
on, search for the 'low-hanging-fruit' tag.
.. NOTE: If your tag is not 'low-hanging-fruit' please change the text above.
Reporting a Bug
~~~~~~~~~~~~~~~
.. Pretty self explanatory section, link directly to where people should report bugs for
your project.
You found an issue and want to make sure we are aware of it? You can do so
`HERE`_.
.. _HERE: https://bugs.launchpad.net/watcher
Getting Your Patch Merged
~~~~~~~~~~~~~~~~~~~~~~~~~
.. This section should have info about what it takes to get something merged.
Do you require one or two +2's before +W? Do some of your repos require
unit test changes with all patches? etc.
Due to the small number of core reviewers of the Watcher project,
we only need one +2 before +W (merge). All patches excepting for documentation
or typos fixes must have unit test.
Project Team Lead Duties
------------------------
.. this section is where you can put PTL specific duties not already listed in
the common PTL guide (linked below) or if you already have them written
up elsewhere, you can link to that doc here.
All common PTL duties are enumerated here in the `PTL guide <https://docs.openstack.org/project-team-guide/ptl.html>`_.

View File

@@ -19,7 +19,7 @@ model. To enable the Watcher plugin with DevStack, add the following to the
`[[local|localrc]]` section of your controller's `local.conf` to enable the
Watcher plugin::
enable_plugin watcher git://git.openstack.org/openstack/watcher
enable_plugin watcher https://opendev.org/openstack/watcher
For more detailed instructions, see `Detailed DevStack Instructions`_. Check
out the `DevStack documentation`_ for more information regarding DevStack.
@@ -27,6 +27,36 @@ out the `DevStack documentation`_ for more information regarding DevStack.
.. _PluginModelDocs: https://docs.openstack.org/devstack/latest/plugins.html
.. _DevStack documentation: https://docs.openstack.org/devstack/latest
Quick Devstack Instructions with Datasources
============================================
Watcher requires a datasource to collect metrics from compute nodes and
instances in order to execute most strategies. To enable this a
`[[local|localrc]]` to setup DevStack for some of the supported datasources
is provided. These examples specify the minimal configuration parameters to
get both Watcher and the datasource working but can be expanded is desired.
Gnocchi
-------
With the Gnocchi datasource most of the metrics for compute nodes and
instances will work with the provided configuration but metrics that
require Ironic such as `host_airflow and` `host_power` will still be
unavailable as well as `instance_l3_cpu_cache`::
[[local|localrc]]
enable_plugin watcher https://opendev.org/openstack/watcher
enable_plugin ceilometer https://opendev.org/openstack/ceilometer.git
CEILOMETER_BACKEND=gnocchi
enable_plugin aodh https://opendev.org/openstack/aodh
enable_plugin panko https://opendev.org/openstack/panko
[[post-config|$NOVA_CONF]]
[DEFAULT]
compute_monitors=cpu.virt_driver
Detailed DevStack Instructions
==============================
@@ -44,7 +74,7 @@ Detailed DevStack Instructions
sudo apt-get update
sudo apt-get install git
git clone https://git.openstack.org/openstack-dev/devstack
git clone https://opendev.org/openstack/devstack.git
sudo ./devstack/tools/create-stack-user.sh
Now you have a stack user that is used to run the DevStack processes. You
@@ -56,7 +86,7 @@ Detailed DevStack Instructions
sudo su stack
cd ~
git clone https://git.openstack.org/openstack-dev/devstack
git clone https://opendev.org/openstack/devstack.git
#. For each compute node, copy the provided `local.conf.compute`_ example file
to the compute node's system at ~/devstack/local.conf. Make sure the

View File

@@ -16,7 +16,7 @@ for development purposes.
To install Watcher from packaging, refer instead to Watcher `User
Documentation`_.
.. _`Git Repository`: https://git.openstack.org/cgit/openstack/watcher
.. _`Git Repository`: https://opendev.org/openstack/watcher
.. _`User Documentation`: https://docs.openstack.org/watcher/latest/
Prerequisites
@@ -47,7 +47,7 @@ Make a clone of the code from our `Git repository`:
.. code-block:: bash
$ git clone https://git.openstack.org/openstack/watcher.git
$ git clone https://opendev.org/openstack/watcher.git
When that is complete, you can:
@@ -99,7 +99,7 @@ useful to keep a clean environment for working on Watcher.
.. code-block:: bash
$ mkvirtualenv watcher
$ git clone https://git.openstack.org/openstack/watcher
$ git clone https://opendev.org/openstack/watcher.git
# Use 'python setup.py' to link Watcher into Python's site-packages
$ cd watcher && python setup.py install

View File

@@ -1,8 +1,12 @@
.. toctree::
:maxdepth: 1
==================
Contribution Guide
==================
.. toctree::
:maxdepth: 2
contributing
environment
devstack
notifications
testing
rally_link

View File

@@ -1,3 +1,7 @@
============
Plugin Guide
============
.. toctree::
:maxdepth: 1

View File

@@ -245,15 +245,16 @@ Querying metrics
A large set of metrics, generated by OpenStack modules, can be used in your
strategy implementation. To collect these metrics, Watcher provides a
`Helper`_ for two data sources which are `Ceilometer`_ and `Monasca`_. If you
wish to query metrics from a different data source, you can implement your own
and directly use it from within your new strategy. Indeed, strategies in
Watcher have the cluster data models decoupled from the data sources which
means that you may keep the former while changing the latter.
The recommended way for you to support a new data source is to implement a new
helper that would encapsulate within separate methods the queries you need to
perform. To then use it, you would just have to instantiate it within your
strategy.
`DataSourceManager`_ for two data sources which are `Ceilometer`_
(with `Gnocchi`_ as API) and `Monasca`_. If you wish to query metrics from a
different data source, you can implement your own and use it via
DataSourceManager from within your new strategy. Indeed, strategies in Watcher
have the cluster data models decoupled from the data sources which means that
you may keep the former while changing the latter. The recommended way for you
to support a new data source is to implement a new helper that would
encapsulate within separate methods the queries you need to perform. To then
use it, you would just have to add it to appropriate watcher_strategies.*
section in config file.
If you want to use Ceilometer but with your own metrics database backend,
please refer to the `Ceilometer developer guide`_. The list of the available
@@ -263,52 +264,45 @@ requires new metrics not covered by Ceilometer, you can add them through a
`Ceilometer plugin`_.
.. _`Helper`: https://github.com/openstack/watcher/blob/master/watcher/datasource/ceilometer.py
.. _`DataSourceManager`: https://github.com/openstack/watcher/blob/master/watcher/datasource/manager.py
.. _`Ceilometer developer guide`: https://docs.openstack.org/ceilometer/latest/contributor/architecture.html#storing-accessing-the-data
.. _`Ceilometer`: https://docs.openstack.org/ceilometer/latest
.. _`Monasca`: https://github.com/openstack/monasca-api/blob/master/docs/monasca-api-spec.md
.. _`here`: https://docs.openstack.org/ceilometer/latest/contributor/install/dbreco.html#choosing-a-database-backend
.. _`Ceilometer plugin`: https://docs.openstack.org/ceilometer/latest/contributor/plugins.html
.. _`Ceilosca`: https://github.com/openstack/monasca-ceilometer/blob/master/ceilosca/ceilometer/storage/impl_monasca.py
.. _`Gnocchi`: https://gnocchi.xyz/
Read usage metrics using the Watcher Datasource Helper
------------------------------------------------------
The following code snippet shows how to invoke a Datasource Helper class:
The following code snippet shows how datasource_backend is defined:
.. code-block:: py
from watcher.datasource import ceilometer as ceil
from watcher.datasource import monasca as mon
from watcher.datasource import manager as ds_manager
@property
def ceilometer(self):
if self._ceilometer is None:
self._ceilometer = ceil.CeilometerHelper(osc=self.osc)
return self._ceilometer
def datasource_backend(self):
if not self._datasource_backend:
@property
def monasca(self):
if self._monasca is None:
self._monasca = mon.MonascaHelper(osc=self.osc)
return self._monasca
# Load the global preferred datasources order but override it
# if the strategy has a specific datasources config
datasources = CONF.watcher_datasources
if self.config.datasources:
datasources = self.config
self._datasource_backend = ds_manager.DataSourceManager(
config=datasources,
osc=self.osc
).get_backend(self.DATASOURCE_METRICS)
return self._datasource_backend
Using that you can now query the values for that specific metric:
.. code-block:: py
if self.config.datasource == "ceilometer":
resource_id = "%s_%s" % (node.uuid, node.hostname)
return self.ceilometer.statistic_aggregation(
resource_id=resource_id,
meter_name='compute.node.cpu.percent',
period="7200",
aggregate='avg',
)
elif self.config.datasource == "monasca":
statistics = self.monasca.statistic_aggregation(
meter_name='compute.node.cpu.percent',
dimensions=dict(hostname=node.uuid),
period=7200,
aggregate='avg'
)
avg_meter = self.datasource_backend.statistic_aggregation(
instance.uuid, 'cpu_util', self.periods['instance'],
self.granularity,
aggregation=self.aggregation_method['instance'])

View File

@@ -4,48 +4,41 @@
https://creativecommons.org/licenses/by/3.0/
=======
Testing
=======
=================
Developer Testing
=================
.. _unit_tests:
Unit tests
==========
All unit tests should be run using `tox`_. To run the same unit tests that are
executing onto `Gerrit`_ which includes ``py35``, ``py27`` and ``pep8``, you
can issue the following command::
All unit tests should be run using `tox`_. Before running the unit tests, you
should download the latest `watcher`_ from the github. To run the same unit
tests that are executing onto `Gerrit`_ which includes ``py36``, ``py37`` and
``pep8``, you can issue the following command::
$ workon watcher
(watcher) $ pip install tox
(watcher) $ cd watcher
(watcher) $ tox
$ git clone https://opendev.org/openstack/watcher
$ cd watcher
$ pip install tox
$ tox
If you want to only run one of the aforementioned, you can then issue one of
If you only want to run one of the aforementioned, you can then issue one of
the following::
$ workon watcher
(watcher) $ tox -e py35
(watcher) $ tox -e py27
(watcher) $ tox -e pep8
$ tox -e py36
$ tox -e py37
$ tox -e pep8
.. _tox: https://tox.readthedocs.org/
.. _Gerrit: https://review.openstack.org/
.. _watcher: https://opendev.org/openstack/watcher
.. _Gerrit: https://review.opendev.org/
You may pass options to the test programs using positional arguments. To run a
specific unit test, you can pass extra options to `os-testr`_ after putting
the ``--`` separator. So using the ``-r`` option followed by a regex string,
you can run the desired test::
If you only want to run specific unit test code and don't like to waste time
waiting for all unit tests to execute, you can add parameters ``--`` followed
by a regex string::
$ workon watcher
(watcher) $ tox -e py27 -- -r watcher.tests.api
.. _os-testr: https://docs.openstack.org/os-testr/latest
When you're done, deactivate the virtualenv::
$ deactivate
$ tox -e py37 -- watcher.tests.api
.. _tempest_tests:
@@ -55,4 +48,4 @@ Tempest tests
Tempest tests for Watcher has been migrated to the external repo
`watcher-tempest-plugin`_.
.. _watcher-tempest-plugin: https://github.com/openstack/watcher-tempest-plugin
.. _watcher-tempest-plugin: https://opendev.org/openstack/watcher-tempest-plugin

View File

@@ -0,0 +1,426 @@
==================
Grafana datasource
==================
Synopsis
--------
Grafana can interface with many different types of storage backends that
Grafana calls datasources_. Since the term datasources causes significant
confusion by overlapping definitions used in Watcher these **datasources are
called projects instead**. Some examples of supported projects are InfluxDB
or Elasticsearch while others might be more familiar such as Monasca or
Gnocchi. The Grafana datasource provides the functionality to retrieve metrics
from Grafana for different projects. This functionality is achieved by using
the proxy interface exposed in Grafana to communicate with Grafana projects
directly.
Background
**********
Since queries to retrieve metrics from Grafana are proxied to the project the
format of these queries will change significantly depending on the type of
project. The structure of the projects themselves will also change
significantly as they are structured by users and administrators. For instance,
some developers might decide to store metrics about compute_nodes in MySQL and
use the UUID as primary key while others use InfluxDB and use the hostname as
primary key. Furthermore, datasources in Watcher should return metrics in
specific units strictly defined in the baseclass_ depending on how the units
are stored in the projects they might require conversion before being returned.
The flexible configuration parameters of the Grafana datasource allow to
specify exactly how the deployment is configured and this will enable to
correct retrieval of metrics and with the correct units.
.. _datasources: https://grafana.com/plugins?type=datasource
.. _baseclass: https://github.com/openstack/watcher/blob/584eeefdc8/watcher/datasources/base.py
Requirements
------------
The use of the Grafana datasource requires a reachable Grafana endpoint and an
authentication token for access to the desired projects. The projects behind
Grafana will need to contain the metrics for compute_nodes_ or instances_ and
these need to be identifiable by an attribute of the Watcher datamodel_ for
instance hostname or UUID.
.. _compute_nodes: https://opendev.org/openstack/watcher/src/branch/master/watcher/decision_engine/model/element/node.py
.. _instances: https://opendev.org/openstack/watcher/src/branch/master/watcher/decision_engine/model/element/instance.py
.. _datamodel: https://opendev.org/openstack/watcher/src/branch/master/watcher/decision_engine/model/element
Limitations
***********
* Only the InfluxDB project is currently supported [#f1]_.
* All metrics must be retrieved from the same Grafana endpoint (same URL).
* All metrics must be retrieved with the same authentication token.
.. [#f1] A base class for projects is available_ and easily extensible.
.. _available: https://review.opendev.org/#/c/649341/24/watcher/datasources/grafana_translator/base.py
Configuration
-------------
Several steps are required in order to use the Grafana datasource, Most steps
are related configuring Watcher to match the deployed Grafana setup such as
queries proxied to the project or the type of project for any given metric.
Most of the configuration can either be supplied via the traditional
configuration file or in a `special yaml`_ file.
.. _special yaml: https://specs.openstack.org/openstack/watcher-specs/specs/train/approved/file-based-metricmap.html
token
*****
First step is to generate an access token with access to the required projects.
This can be done from the api_ or from the web interface_. Tokens generated
from the web interface will have the same access to projects as the user that
created them while using the cli allows to generate a key for a specific
role.The token will only be displayed once so store it well. This token will go
into the configuration file later and this parameter can not be placed in the
yaml.
.. _api: https://grafana.com/docs/http_api/auth/#create-api-key
.. _interface: https://grafana.com/docs/http_api/auth/#create-api-token
base_url
********
Next step is supplying the base url of the Grafana endpoint. The base url
parameter will need to specify the type of http protocol and the use of
plain text http is strongly discouraged due to the transmission of the access
token. Additionally the path to the proxy interface needs to be supplied as
well in case Grafana is placed in a sub directory of the web server. An example
would be: `https://mygrafana.org/api/datasource/proxy/` were
`/api/datasource/proxy` is the default path without any subdirectories.
Likewise, this parameter can not be placed in the yaml.
To prevent many errors from occurring and potentially filing the logs files it
is advised to specify the desired datasource in the configuration as it would
prevent the datasource manager from having to iterate and try possible
datasources with the launch of each audit. To do this specify `datasources` in
the `[watcher_datasources]` group.
The current configuration that is required to be placed in the traditional
configuration file would look like the following:
.. code-block:: shell
[grafana_client]
token = 0JLbF0oB4R3Q2Fl337Gh4Df5VN12D3adBE3f==
base_url = https://mygranfa.org/api/datasource/proxy
[watcher_datasources]
datasources = grafana
metric parameters
*****************
The last five remaining configuration parameters can all be placed both in the
traditional configuration file or in the yaml, however, it is not advised to
mix and match but in the case it does occur the yaml would override the
settings from the traditional configuration file. All five of these parameters
are dictionaries mapping specific metrics to a configuration parameter. For
instance the `project_id_map` will specify the specific project id in Grafana
to be used. The parameters are named as follow:
* project_id_map
* database_map
* translator_map
* attribute_map
* query_map
These five parameters are named differently if configured using the yaml
configuration file. The parameters are named as follows and are in
identical order as to the list of the traditional configuration file:
* project
* db
* translator
* attribute
* query
When specified in the yaml the parameters are no longer dictionaries instead
each parameter needs to be defined per metric as sub-parameters. Examples of
these parameters configured for both the yaml and traditional configuration
are described at the end of this document.
project_id
**********
The project id's can only be determined by someone with the admin role in
Grafana as that role is required to open the list of projects. The list of
projects can be found on `/datasources` in the web interface but
unfortunately it does not immediately display the project id. To display
the id one can best hover the mouse over the projects and the url will show the
project id's for example `/datasources/edit/7563`. Alternatively the entire
list of projects can be retrieved using the `REST api`_. To easily make
requests to the REST api a tool such as Postman can be used.
.. _REST api: https://grafana.com/docs/http_api/data_source/#get-all-datasources
database
********
The database is the parameter for the schema / database that is actually
defined in the project. For instance, if the project would be based on MySQL
this is were the name of schema used within the MySQL server would be
specified. For many different projects it is possible to list all the databases
currently available. Tools like Postman can be used to list all the available
databases per project. For InfluxDB based projects this would be with the
following path and query, however be sure to construct these request in Postman
as the header needs to contain the authorization token:
.. code-block:: shell
https://URL.DOMAIN/api/datasources/proxy/PROJECT_ID/query?q=SHOW%20DATABASES
translator
**********
Each translator is for a specific type of project will have a uniquely
identifiable name and the baseclass allows to easily support new types of
projects such as elasticsearch or prometheus. Currently only InfluxDB based
projects are supported as a result the only valid value for this parameter is `
influxdb`.
attribute
*********
The attribute parameter specifies which attribute to use from Watcher's
data model in order to construct the query. The available attributes differ
per type of object in the data model but the following table shows the
attributes for ComputeNodes, Instances and IronicNodes.
+-----------------+-----------------+--------------------+
| ComputeNode | Instance | IronicNode |
+=================+=================+====================+
| uuid | uuid | uuid |
+-----------------+-----------------+--------------------+
| id | name | human_id |
+-----------------+-----------------+--------------------+
| hostname | project_id | power_state |
+-----------------+-----------------+--------------------+
| status | watcher_exclude | maintenance |
+-----------------+-----------------+--------------------+
| disabled_reason | locked | maintenance_reason |
+-----------------+-----------------+--------------------+
| state | metadata | extra |
+-----------------+-----------------+--------------------+
| memory | state | |
+-----------------+-----------------+--------------------+
| disk | memory | |
+-----------------+-----------------+--------------------+
| disk_capacity | disk | |
+-----------------+-----------------+--------------------+
| vcpus | disk_capacity | |
+-----------------+-----------------+--------------------+
| | vcpus | |
+-----------------+-----------------+--------------------+
Many if not all of these attributes map to attributes of the objects that are
fetched from clients such as Nova. To see how these attributes are put into the
data model the following source files can be analyzed for Nova_ and Ironic_.
.. _Nova: https://opendev.org/openstack/watcher/src/branch/master/watcher/decision_engine/model/collector/nova.py#L304
.. _Ironic: https://opendev.org/openstack/watcher/src/branch/master/watcher/decision_engine/model/collector/ironic.py#L85
query
*****
The query is the single most important parameter it will be passed to the
project and should return the desired metric for the specific host and return
the value in the correct unit. The units for all available metrics are
documented in the `datasource baseclass`_. This might mean the query specified
in this parameter is responsible for converting the unit. The following query
demonstrates how such a conversion could be achieved and demonstrates the
conversion from bytes to megabytes.
.. code-block:: shell
SELECT value/1000000 FROM memory...
Queries will be formatted using the .format string method within Python. This
format will currently have give attributes exposed to it labeled `{0}` to
`{4}`. Every occurrence of these characters within the string will be replaced
with the specific attribute.
- {0} is the aggregate typically `mean`, `min`, `max` but `count` is also
supported.
- {1} is the attribute as specified in the attribute parameter.
- {2} is the period of time to aggregate data over in seconds.
- {3} is the granularity or the interval between data points in seconds.
- {4} is translator specific and in the case of InfluxDB it will be used for
retention_periods.
**InfluxDB**
Constructing the queries or rather anticipating how the results should look to
be correctly interpreted by Watcher can be a challenge. The following json
example demonstrates how what the result should look like and the query used to
get this result.
.. code-block:: json
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "vmstats",
"tags": {
"host": "autoserver01"
},
"columns": [
"time",
"mean"
],
"values": [
[
1560848284284,
7680000
]
]
}
]
}
]
}
.. code-block:: shell
SELECT {0}("{0}_value") FROM "vmstats" WHERE host =~ /^{1}$/ AND
"type_instance" =~ /^mem$/ AND time >= now() - {2}s GROUP BY host
.. _datasource baseclass: https://opendev.org/openstack/watcher/src/branch/master/watcher/datasources/base.py
Example configuration
---------------------
The example configurations will show both how to achieve the entire
configuration in the config file or use a combination of the regular file and
yaml. Using yaml to define all the parameters for each metric is recommended
since it has better human readability and supports mutli-line option
definitions.
Configuration file
******************
**It is important to note that the line breaks shown in between assignments of
parameters can not be used in the actual configuration and these are simply here
for readability reasons.**
.. code-block:: shell
[grafana_client]
# Authentication token to gain access (string value)
# Note: This option can be changed without restarting.
token = eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk==
# first part of the url (including https:// or http://) up until project id
# part. Example: https://secure.org/api/datasource/proxy/ (string value)
# Note: This option can be changed without restarting.
base_url = https://monitoring-grafana.com/api/datasources/proxy/
# Project id as in url (integer value)
# Note: This option can be changed without restarting.
project_id_map = host_cpu_usage:1337,host_ram_usage:6969,
instance_cpu_usage:1337,instance_ram_usage:9696
# Mapping of grafana databases to datasource metrics. (dict value)
# Note: This option can be changed without restarting.
database_map = host_cpu_usage:monit_production,
host_ram_usage:monit_production,instance_cpu_usage:prod_cloud,
instance_ram_usage:prod_cloud
translator_map = host_cpu_usage:influxdb,host_ram_usage:influxdb,
instance_cpu_usage:influxdb,instance_ram_usage:influxdb
attribute_map = host_cpu_usage:hostname,host_ram_usage:hostname,
instance_cpu_usage:name,instance_ram_usage:name
query_map = host_cpu_usage:SELECT 100-{0}("{0}_value") FROM {4}.cpu WHERE
("host" =~ /^{1}$/ AND "type_instance" =~/^idle$/ AND time > now()-{2}s),
host_ram_usage:SELECT {0}("{0}_value")/1000000 FROM {4}.memory WHERE
("host" =~ /^{1}$/) AND "type_instance" =~ /^used$/ AND time >= now()-{2}s
GROUP BY "type_instance",instance_cpu_usage:SELECT {0}("{0}_value") FROM
"vmstats" WHERE host =~ /^{1}$/ AND "type_instance" =~ /^cpu$/ AND time >=
now() - {2}s GROUP BY host,instance_ram_usage:SELECT {0}("{0}_value") FROM
"vmstats" WHERE host =~ /^{1}$/ AND "type_instance" =~ /^mem$/ AND time >=
now() - {2}s GROUP BY host
[grafana_translators]
retention_periods = one_week:10080,one_month:302400,five_years:525600
[watcher_datasources]
datasources = grafana
yaml
****
When using the yaml configuration file some parameters still need to be defined
using the regular configuration such as the path for the yaml file these
parameters are detailed below:
.. code-block:: shell
[grafana_client]
token = eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk==
base_url = https://monitoring-grafana.com/api/datasources/proxy/
[watcher_datasources]
datasources = grafana
[watcher_decision_engine]
metric_map_path = /etc/watcher/metric_map.yaml
Using the yaml allows to more effectively define the parameters per metric with
greater human readability due to the availability of multi line options. These
multi line options are demonstrated in the query parameters.
.. code-block:: yaml
grafana:
host_cpu_usage:
project: 1337
db: monit_production
translator: influxdb
attribute: hostname
query: >
SELECT 100-{0}("{0}_value") FROM {4}.cpu
WHERE ("host" =~ /^{1}$/ AND "type_instance" =~/^idle$/ AND
time > now()-{2}s)
host_ram_usage:
project: 6969
db: monit_production
translator: influxdb
attribute: hostname
query: >
SELECT {0}("{0}_value")/1000000 FROM {4}.memory WHERE
("host" =~ /^{1}$/) AND "type_instance" =~ /^used$/ AND time >=
now()-{2}s GROUP BY "type_instance"
instance_cpu_usage:
project: 1337
db: prod_cloud
translator: influxdb
attribute: name
query: >
SELECT {0}("{0}_value") FROM
"vmstats" WHERE host =~ /^{1}$/ AND "type_instance" =~ /^cpu$/ AND
time >= now() - {2}s GROUP BY host
instance_ram_usage:
project: 9696
db: prod_cloud
translator: influxdb
attribute: name
query: >
SELECT {0}("{0}_value") FROM
"vmstats" WHERE host =~ /^{1}$/ AND "type_instance" =~ /^mem$/ AND
time >= now() - {2}s GROUP BY host
External Links
--------------
- `List of Grafana datasources <https://grafana.com/plugins?type=datasource>`_

View File

@@ -0,0 +1,8 @@
Datasources
===========
.. toctree::
:glob:
:maxdepth: 1
./*

View File

@@ -8,7 +8,7 @@
Glossary
========
.. glossary::
.. _glossary:
:sorted:
This page explains the different terms used in the Watcher system.

View File

@@ -2,7 +2,7 @@
[*] --> PENDING: Audit requested by Administrator
PENDING --> ONGOING: Audit request is received\nby the Watcher Decision Engine
ONGOING --> FAILED: Audit fails\n(no solution found, technical error, ...)
ONGOING --> FAILED: Audit fails\n(Exception occurred)
ONGOING --> SUCCEEDED: The Watcher Decision Engine\ncould find at least one Solution
ONGOING --> SUSPENDED: Administrator wants to\nsuspend the Audit
SUSPENDED --> ONGOING: Administrator wants to\nresume the Audit

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -28,101 +28,25 @@ The documentation provided here is continually kept up-to-date based
on the latest code, and may not represent the state of the project at any
specific prior release.
.. _watcher: https://git.openstack.org/cgit/openstack/watcher/
.. _python-watcherclient: https://git.openstack.org/cgit/openstack/python-watcherclient/
.. _watcher-dashboard: https://git.openstack.org/cgit/openstack/watcher-dashboard/
Developer Guide
===============
Introduction
------------
.. _watcher: https://opendev.org/openstack/watcher/
.. _python-watcherclient: https://opendev.org/openstack/python-watcherclient/
.. _watcher-dashboard: https://opendev.org/openstack/watcher-dashboard/
.. toctree::
:maxdepth: 1
:maxdepth: 2
glossary
architecture
contributor/contributing
Getting Started
---------------
.. toctree::
:maxdepth: 1
contributor/index
Installation
============
.. toctree::
:maxdepth: 2
install/index
Admin Guide
===========
.. toctree::
:maxdepth: 2
admin/index
User Guide
==========
.. toctree::
:maxdepth: 2
user/index
API References
--------------
.. toctree::
:maxdepth: 1
api/index
Plugins
-------
.. toctree::
:maxdepth: 1
contributor/plugin/index
Watcher Configuration Options
=============================
.. toctree::
:maxdepth: 2
configuration/index
Watcher Manual Pages
====================
contributor/plugin/index
man/index
.. toctree::
:glob:
:maxdepth: 1
:maxdepth: 1
man/index
.. # NOTE(mriedem): This is the section where we hide things that we don't
# actually want in the table of contents but sphinx build would fail if
# they aren't in the toctree somewhere. For example, we hide api/autoindex
# since that's already covered with modindex below.
.. toctree::
:hidden:
api/autoindex
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
API Reference <https://docs.openstack.org/api-ref/resource-optimization/>
Watcher API Microversion History </contributor/api_microversion_history>
glossary

View File

@@ -11,7 +11,7 @@ you must create a database, service credentials, and API endpoints.
.. code-block:: console
$ mysql -u root -p
# mysql
* Create the ``watcher`` database:

View File

@@ -1,6 +1,6 @@
===================================
Infrastructure Optimization service
===================================
=============
Install Guide
=============
.. toctree::
:maxdepth: 2

View File

@@ -4,7 +4,7 @@ Install and configure for Ubuntu
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This section describes how to install and configure the Infrastructure
Optimization service for Ubuntu 14.04 (LTS).
Optimization service for Ubuntu 16.04 (LTS).
.. include:: common_prerequisites.rst
@@ -25,10 +25,15 @@ Install and configure components
Finalize installation
---------------------
Restart the Infrastructure Optimization services:
Start the Infrastructure Optimization services and configure them to start when
the system boots:
.. code-block:: console
# service watcher-api restart
# service watcher-decision-engine restart
# service watcher-applier restart
# systemctl enable watcher-api.service \
watcher-decision-engine.service \
watcher-applier.service
# systemctl start watcher-api.service \
watcher-decision-engine.service \
watcher-applier.service

View File

@@ -1,3 +1,7 @@
====================
Watcher Manual Pages
====================
.. toctree::
:glob:
:maxdepth: 1
@@ -5,4 +9,5 @@
watcher-api
watcher-applier
watcher-db-manage
watcher-decision-engine
watcher-decision-engine
watcher-status

View File

@@ -0,0 +1,87 @@
==============
watcher-status
==============
-----------------------------------------
CLI interface for Watcher status commands
-----------------------------------------
Synopsis
========
::
watcher-status <category> <command> [<args>]
Description
===========
:program:`watcher-status` is a tool that provides routines for checking the
status of a Watcher deployment.
Options
=======
The standard pattern for executing a :program:`watcher-status` command is::
watcher-status <category> <command> [<args>]
Run without arguments to see a list of available command categories::
watcher-status
Categories are:
* ``upgrade``
Detailed descriptions are below:
You can also run with a category argument such as ``upgrade`` to see a list of
all commands in that category::
watcher-status upgrade
These sections describe the available categories and arguments for
:program:`Watcher-status`.
Upgrade
~~~~~~~
.. _watcher-status-checks:
``watcher-status upgrade check``
Performs a release-specific readiness check before restarting services with
new code. For example, missing or changed configuration options,
incompatible object states, or other conditions that could lead to
failures while upgrading.
**Return Codes**
.. list-table::
:widths: 20 80
:header-rows: 1
* - Return code
- Description
* - 0
- All upgrade readiness checks passed successfully and there is nothing
to do.
* - 1
- At least one check encountered an issue and requires further
investigation. This is considered a warning but the upgrade may be OK.
* - 2
- There was an upgrade status check failure that needs to be
investigated. This should be considered something that stops an
upgrade.
* - 255
- An unexpected error occurred.
**History of Checks**
**2.0.0 (Stein)**
* Sample check to be filled in with checks as they are added in Stein.
**3.0.0 (Train)**
* A check was added to enforce the minimum required version of nova API used.

View File

@@ -19,12 +19,16 @@ Metrics
The *basic* strategy requires the following metrics:
============================ ============ ======= =======
============================ ============ ======= ===========================
metric service name plugins comment
============================ ============ ======= =======
``compute.node.cpu.percent`` ceilometer_ none
``cpu_util`` ceilometer_ none
============================ ============ ======= =======
============================ ============ ======= ===========================
``compute.node.cpu.percent`` ceilometer_ none need to set the
``compute_monitors`` option
to ``cpu.virt_driver`` in
the nova.conf.
``cpu_util`` ceilometer_ none cpu_util has been removed
since Stein.
============================ ============ ======= ===========================
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute

View File

@@ -0,0 +1,95 @@
====================================
Node Resource Consolidation Strategy
====================================
Synopsis
--------
**display name**: ``Node Resource Consolidation Strategy``
**goal**: ``Server Consolidation``
.. watcher-term:: watcher.decision_engine.strategy.strategies.node_resource_consolidation.NodeResourceConsolidation
Requirements
------------
None.
Metrics
*******
None
Cluster data model
******************
Default Watcher's Compute cluster data model:
.. watcher-term:: watcher.decision_engine.model.collector.nova.NovaClusterDataModelCollector
Actions
*******
Default Watcher's actions:
.. list-table::
:widths: 30 30
:header-rows: 1
* - action
- description
* - ``migration``
- .. watcher-term:: watcher.applier.actions.migration.Migrate
* - ``change_nova_service_state``
- .. watcher-term:: watcher.applier.actions.change_nova_service_state.ChangeNovaServiceState
Planner
*******
Default Watcher's planner:
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
Configuration
-------------
Strategy parameters are:
==================== ====== =======================================
parameter type default Value description
==================== ====== =======================================
``host_choice`` String The way to select the server migration
destination node, The value auto means
that Nova schedular selects the
destination node, and specify means
the strategy specifies the destination.
==================== ====== =======================================
Efficacy Indicator
------------------
None
Algorithm
---------
For more information on the Node Resource Consolidation Strategy please refer
to: https://specs.openstack.org/openstack/watcher-specs/specs/train/approved/node-resource-consolidation.html
How to use it ?
---------------
.. code-block:: shell
$ openstack optimize audittemplate create \
at1 server_consolidation \
--strategy node_resource_consolidation
$ openstack optimize audit create \
-a at1 -p host_choice=auto
External Links
--------------
None.

View File

@@ -19,22 +19,15 @@ Metrics
The *vm_workload_consolidation* strategy requires the following metrics:
============================ ============ ======= =======
============================ ============ ======= =========================
metric service name plugins comment
============================ ============ ======= =======
============================ ============ ======= =========================
``cpu_util`` ceilometer_ none cpu_util has been removed
since Stein.
``memory.resident`` ceilometer_ none
``memory`` ceilometer_ none
``disk.root.size`` ceilometer_ none
============================ ============ ======= =======
The following metrics are not required but increase the accuracy of
the strategy if available:
============================ ============ ======= =======
metric service name plugins comment
============================ ============ ======= =======
``memory.resident`` ceilometer_ none
``cpu_util`` ceilometer_ none
============================ ============ ======= =======
============================ ============ ======= =========================
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute

View File

@@ -19,17 +19,21 @@ Metrics
The *workload_stabilization* strategy requires the following metrics:
============================ ============ ======= =======
============================ ============ ======= =============================
metric service name plugins comment
============================ ============ ======= =======
``compute.node.cpu.percent`` ceilometer_ none
============================ ============ ======= =============================
``compute.node.cpu.percent`` ceilometer_ none need to set the
``compute_monitors`` option
to ``cpu.virt_driver`` in the
nova.conf.
``hardware.memory.used`` ceilometer_ SNMP_
``cpu_util`` ceilometer_ none
``cpu_util`` ceilometer_ none cpu_util has been removed
since Stein.
``memory.resident`` ceilometer_ none
============================ ============ ======= =======
============================ ============ ======= =============================
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute
.. _SNMP: http://docs.openstack.org/admin-guide/telemetry-measurements.html
.. _SNMP: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#snmp-based-meters
Cluster data model
******************

View File

@@ -21,12 +21,13 @@ Metrics
The *workload_balance* strategy requires the following metrics:
======================= ============ ======= =======
======================= ============ ======= =========================
metric service name plugins comment
======================= ============ ======= =======
``cpu_util`` ceilometer_ none
======================= ============ ======= =========================
``cpu_util`` ceilometer_ none cpu_util has been removed
since Stein.
``memory.resident`` ceilometer_ none
======================= ============ ======= =======
======================= ============ ======= =========================
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute

View File

@@ -0,0 +1,195 @@
..
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
======================
Audit using Aodh alarm
======================
Audit with EVENT type can be triggered by special alarm. This guide walks
you through the steps to build an event-driven optimization solution by
integrating Watcher with Ceilometer/Aodh.
Step 1: Create an audit with EVENT type
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The first step is to create an audit with EVENT type,
you can create an audit template firstly:
.. code-block:: bash
$ openstack optimize audittemplate create your_template_name <your_goal> \
--strategy <your_strategy>
or create an audit directly with special goal and strategy:
.. code-block:: bash
$ openstack optimize audit create --goal <your_goal> \
--strategy <your_strategy> --audit_type EVENT
This is an example for creating an audit with dummy strategy:
.. code-block:: bash
$ openstack optimize audit create --goal dummy \
--strategy dummy --audit_type EVENT
+---------------+--------------------------------------+
| Field | Value |
+---------------+--------------------------------------+
| UUID | a3326a6a-c18e-4e8e-adba-d0c61ad404c5 |
| Name | dummy-2020-01-14T03:21:19.168467 |
| Created At | 2020-01-14T03:21:19.200279+00:00 |
| Updated At | None |
| Deleted At | None |
| State | PENDING |
| Audit Type | EVENT |
| Parameters | {u'para2': u'hello', u'para1': 3.2} |
| Interval | None |
| Goal | dummy |
| Strategy | dummy |
| Audit Scope | [] |
| Auto Trigger | False |
| Next Run Time | None |
| Hostname | None |
| Start Time | None |
| End Time | None |
| Force | False |
+---------------+--------------------------------------+
We need to build Aodh action url using Watcher webhook API.
For convenience we export the url into an environment variable:
.. code-block:: bash
$ export AUDIT_UUID=a3326a6a-c18e-4e8e-adba-d0c61ad404c5
$ export ALARM_URL="trust+http://localhost/infra-optim/v1/webhooks/$AUDIT_UUID"
Step 2: Create Aodh Alarm
~~~~~~~~~~~~~~~~~~~~~~~~~
Once we have the audit created, we can continue to create Aodh alarm and
set the alarm action to Watcher webhook API. The alarm type can be event(
i.e. ``compute.instance.create.end``) or gnocchi_resources_threshold(i.e.
``cpu_util``), more info refer to alarm-creation_
For example:
.. code-block:: bash
$ openstack alarm create \
--type event --name instance_create \
--event-type "compute.instance.create.end" \
--enable True --repeat-actions False \
--alarm-action $ALARM_URL
+---------------------------+------------------------------------------------------------------------------------------+
| Field | Value |
+---------------------------+------------------------------------------------------------------------------------------+
| alarm_actions | [u'trust+http://localhost/infra-optim/v1/webhooks/a3326a6a-c18e-4e8e-adba-d0c61ad404c5'] |
| alarm_id | b9e381fc-8e3e-4943-82ee-647e7a2ef644 |
| description | Alarm when compute.instance.create.end event occurred. |
| enabled | True |
| event_type | compute.instance.create.end |
| insufficient_data_actions | [] |
| name | instance_create |
| ok_actions | [] |
| project_id | 728d66e18c914af1a41e2a585cf766af |
| query | |
| repeat_actions | False |
| severity | low |
| state | insufficient data |
| state_reason | Not evaluated yet |
| state_timestamp | 2020-01-14T03:56:26.894416 |
| time_constraints | [] |
| timestamp | 2020-01-14T03:56:26.894416 |
| type | event |
| user_id | 88c40156af7445cc80580a1e7e3ba308 |
+---------------------------+------------------------------------------------------------------------------------------+
.. _alarm-creation: https://docs.openstack.org/aodh/latest/admin/telemetry-alarms.html#alarm-creation
Step 3: Trigger the alarm
~~~~~~~~~~~~~~~~~~~~~~~~~
In this example, you can create a new instance to trigger the alarm.
The alarm state will translate from ``insufficient data`` to ``alarm``.
.. code-block:: bash
$ openstack alarm show b9e381fc-8e3e-4943-82ee-647e7a2ef644
+---------------------------+-------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+---------------------------+-------------------------------------------------------------------------------------------------------------------+
| alarm_actions | [u'trust+http://localhost/infra-optim/v1/webhooks/a3326a6a-c18e-4e8e-adba-d0c61ad404c5'] |
| alarm_id | b9e381fc-8e3e-4943-82ee-647e7a2ef644 |
| description | Alarm when compute.instance.create.end event occurred. |
| enabled | True |
| event_type | compute.instance.create.end |
| insufficient_data_actions | [] |
| name | instance_create |
| ok_actions | [] |
| project_id | 728d66e18c914af1a41e2a585cf766af |
| query | |
| repeat_actions | False |
| severity | low |
| state | alarm |
| state_reason | Event <id=67dd0afa-2082-45a4-8825-9573b2cc60e5,event_type=compute.instance.create.end> hits the query <query=[]>. |
| state_timestamp | 2020-01-14T03:56:26.894416 |
| time_constraints | [] |
| timestamp | 2020-01-14T06:17:40.350649 |
| type | event |
| user_id | 88c40156af7445cc80580a1e7e3ba308 |
+---------------------------+-------------------------------------------------------------------------------------------------------------------+
Step 4: Verify the audit
~~~~~~~~~~~~~~~~~~~~~~~~
This can be verified to check if the audit state was ``SUCCEEDED``:
.. code-block:: bash
$ openstack optimize audit show a3326a6a-c18e-4e8e-adba-d0c61ad404c5
+---------------+--------------------------------------+
| Field | Value |
+---------------+--------------------------------------+
| UUID | a3326a6a-c18e-4e8e-adba-d0c61ad404c5 |
| Name | dummy-2020-01-14T03:21:19.168467 |
| Created At | 2020-01-14T03:21:19+00:00 |
| Updated At | 2020-01-14T06:26:40+00:00 |
| Deleted At | None |
| State | SUCCEEDED |
| Audit Type | EVENT |
| Parameters | {u'para2': u'hello', u'para1': 3.2} |
| Interval | None |
| Goal | dummy |
| Strategy | dummy |
| Audit Scope | [] |
| Auto Trigger | False |
| Next Run Time | None |
| Hostname | ubuntudbs |
| Start Time | None |
| End Time | None |
| Force | False |
+---------------+--------------------------------------+
and you can use the following command to check if the action plan
was created:
.. code-block:: bash
$ openstack optimize actionplan list --audit a3326a6a-c18e-4e8e-adba-d0c61ad404c5
+--------------------------------------+--------------------------------------+-------------+------------+-----------------+
| UUID | Audit | State | Updated At | Global efficacy |
+--------------------------------------+--------------------------------------+-------------+------------+-----------------+
| 673b3fcb-8c16-4a41-9ee3-2956d9f6ca9e | a3326a6a-c18e-4e8e-adba-d0c61ad404c5 | RECOMMENDED | None | |
+--------------------------------------+--------------------------------------+-------------+------------+-----------------+

View File

@@ -1,4 +1,10 @@
==========
User Guide
==========
.. toctree::
:maxdepth: 2
ways-to-install
user-guide
event_type_audit

View File

@@ -4,8 +4,6 @@
https://creativecommons.org/licenses/by/3.0/
.. _user-guide:
==================
Watcher User Guide
==================
@@ -55,13 +53,13 @@ plugin installation guide`_.
$ watcher ...
.. _`installation guide`: https://docs.openstack.org/python-watcherclient/latest
.. _`installation guide`: https://docs.openstack.org/watcher/latest/install/
.. _`Watcher Horizon plugin installation guide`: https://docs.openstack.org/watcher-dashboard/latest/install/installation.html
.. _`OpenStack CLI`: https://docs.openstack.org/python-openstackclient/latest/cli/man/openstack.html
.. _`Watcher CLI`: https://docs.openstack.org/python-watcherclient/latest/cli/index.html
Seeing what the Watcher CLI can do ?
------------------------------------
Watcher CLI Command
-------------------
We can see all of the commands available with Watcher CLI by running the
watcher binary without options.
@@ -69,8 +67,8 @@ watcher binary without options.
$ openstack help optimize
How do I run an audit of my cluster ?
-------------------------------------
Running an audit of the cluster
-------------------------------
First, you need to find the :ref:`goal <goal_definition>` you want to achieve:
@@ -182,7 +180,7 @@ periodically calling:
.. code:: bash
$ openstack optimize action list
$ openstack optimize action list --action-plan <the_action_plan_uuid>
You can also obtain more detailed information about a specific action:

View File

@@ -51,7 +51,7 @@ Clone the Watcher repository:
.. code-block:: bash
$ git clone https://git.openstack.org/openstack/watcher.git
$ git clone https://opendev.org/openstack/watcher.git
$ cd watcher
Install the Watcher modules:
@@ -92,7 +92,7 @@ these commands:
By default, this will show logging on the console from which it was started.
Once started, you can use the `Watcher Client`_ to play with Watcher service.
.. _`Watcher Client`: https://git.openstack.org/cgit/openstack/python-watcherclient
.. _`Watcher Client`: https://opendev.org/openstack/python-watcherclient
Installing from packages: PyPI
--------------------------------

View File

@@ -16,7 +16,7 @@ Listen 9322
<VirtualHost *:9322>
WSGIDaemonProcess watcher-api user=stack group=stack processes=2 threads=2 display-name=%{GROUP}
WSGIScriptAlias / /opt/stack/watcher/watcher/api/app.wsgi
WSGIScriptAlias / /usr/local/bin/watcher-api-wsgi
WSGIProcessGroup watcher-api
ErrorLog /var/log/httpd/watcher_error.log

View File

@@ -6,7 +6,6 @@ APScheduler==3.5.1
asn1crypto==0.24.0
automaton==1.14.0
Babel==2.5.3
bandit==1.4.0
beautifulsoup4==4.6.0
cachetools==2.0.1
certifi==2018.1.18
@@ -31,15 +30,13 @@ eventlet==0.20.0
extras==1.0.0
fasteners==0.14.1
fixtures==3.0.0
flake8==2.5.5
freezegun==0.3.10
future==0.16.0
futurist==1.6.0
futurist==1.8.0
gitdb2==2.0.3
GitPython==2.1.8
gnocchiclient==7.0.1
greenlet==0.4.13
hacking==0.12.0
idna==2.6
imagesize==1.0.0
iso8601==0.1.12
@@ -57,6 +54,7 @@ lxml==4.1.1
Mako==1.0.7
MarkupSafe==1.0
mccabe==0.2.1
microversion_parse==0.2.1
mock==2.0.0
monotonic==1.4
mox3==0.25.0
@@ -64,7 +62,7 @@ msgpack==0.5.6
munch==2.2.0
netaddr==0.7.19
netifaces==0.10.6
networkx==1.11
networkx==2.2
openstackdocstheme==1.20.0
openstacksdk==0.12.0
os-api-ref===1.4.0
@@ -72,19 +70,21 @@ os-client-config==1.29.0
os-service-types==1.2.0
os-testr==1.0.0
osc-lib==1.10.0
os-resource-classes==0.4.0
oslo.cache==1.29.0
oslo.concurrency==3.26.0
oslo.config==5.2.0
oslo.context==2.20.0
oslo.context==2.21.0
oslo.db==4.35.0
oslo.i18n==3.20.0
oslo.log==3.37.0
oslo.messaging==5.36.0
oslo.messaging==8.1.2
oslo.middleware==3.35.0
oslo.policy==1.34.0
oslo.reports==1.27.0
oslo.serialization==2.25.0
oslo.service==1.30.0
oslo.upgradecheck==0.1.0
oslo.utils==3.36.0
oslo.versionedobjects==1.32.0
oslotest==3.3.0
@@ -92,15 +92,13 @@ packaging==17.1
Paste==2.0.3
PasteDeploy==1.5.2
pbr==3.1.1
pecan==1.2.1
pep8==1.5.7
pecan==1.3.2
pika==0.10.0
pika-pool==0.1.3
prettytable==0.7.2
psutil==5.4.3
pycadf==2.7.0
pycparser==2.18
pyflakes==0.8.1
Pygments==2.2.0
pyinotify==0.9.6
pyOpenSSL==17.5.0
@@ -111,12 +109,12 @@ python-cinderclient==3.5.0
python-dateutil==2.7.0
python-editor==1.0.3
python-glanceclient==2.9.1
python-ironicclient==2.3.0
python-ironicclient==2.5.0
python-keystoneclient==3.15.0
python-mimeparse==1.6.0
python-monascaclient==1.12.0
python-neutronclient==6.7.0
python-novaclient==10.1.0
python-novaclient==14.1.0
python-openstackclient==3.14.0
python-subunit==1.2.0
pytz==2018.3
@@ -143,7 +141,7 @@ sqlparse==0.2.4
statsd==3.2.2
stestr==2.0.0
stevedore==1.28.0
taskflow==3.1.0
taskflow==3.7.1
Tempita==0.5.2
tenacity==4.9.0
testresources==2.0.1
@@ -157,7 +155,7 @@ urllib3==1.22
vine==1.1.4
waitress==1.1.0
warlock==1.3.0
WebOb==1.7.4
WebOb==1.8.5
WebTest==2.0.29
wrapt==1.10.11
WSME==0.9.2

View File

@@ -0,0 +1,15 @@
- 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

View File

@@ -0,0 +1,60 @@
- 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 }}'

View File

@@ -1,14 +0,0 @@
- hosts: all
# This is the default strategy, however since orchestrate-devstack requires
# "linear", it is safer to enforce it in case this is running in an
# environment configured with a different default strategy.
strategy: linear
roles:
- orchestrate-devstack
- hosts: tempest
roles:
- setup-tempest-run-dir
- setup-tempest-data-dir
- acl-devstack-files
- run-tempest

View File

@@ -1,3 +0,0 @@
- hosts: all
roles:
- add-hostnames-to-hosts

View File

@@ -0,0 +1,3 @@
---
features:
- Baremetal Model gets Audit scoper with an ability to exclude Ironic nodes.

View File

@@ -0,0 +1,7 @@
---
features:
- |
Add force field to Audit. User can set --force to enable the new option when
launching audit. If force is True, audit will be executed despite of ongoing
actionplan. The new audit may create a wrong actionplan if they use the same
data model.

View File

@@ -0,0 +1,5 @@
---
features:
- |
Add start_time and end_time fields in audits table. User can set the start
time and/or end time when creating CONTINUOUS audit.

View File

@@ -0,0 +1,13 @@
---
prelude: >
Added new tool ``watcher-status upgrade check``.
features:
- |
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.
upgrade:
- |
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.

View File

@@ -0,0 +1,9 @@
---
features:
- |
API calls while building the Compute data model will be retried upon
failure. The amount of failures allowed before giving up and the time before
reattempting are configurable. The `api_call_retries` and
`api_query_timeout` parameters in the `[collector]` group can be used to
adjust these paremeters. 10 retries with a 1 second time in between
reattempts is the default.

View File

@@ -0,0 +1,8 @@
---
features:
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.

View File

@@ -0,0 +1,60 @@
---
features:
- |
Watcher consumes Nova notifications to update its internal
Compute CDM(Cluster Data Model).
All the notifications as below
pre-existing:
* service.update
* instance.update
* instance.delete.end
new:
* instance.lock
* instance.unlock
* instance.pause.end
* instance.power_off.end
* instance.power_on.end
* instance.resize_confirm.end
* instance.restore.end
* instance.resume.end
* instance.shelve.end
* instance.shutdown.end
* instance.suspend.end
* instance.unpause.end
* instance.unrescue.end
* instance.unshelve.end
* instance.rebuild.end
* instance.rescue.end
* instance.create.end
* instance.live_migration_force_complete.end
* instance.live_migration_post_dest.end
* instance.soft_delete.end
* service.create
* service.delete

View File

@@ -0,0 +1,17 @@
---
features:
- |
All datasources can now be configured to retry retrieving a metric upon
encountering an error. Between each attempt will be a set amount of time
which can be adjusted from the configuration. These configuration
options can be found in the `[watcher_datasources]` group and are named
`query_max_retries` and `query_timeout`.
upgrade:
- |
If Gnocchi was configured to have a custom amount of retries and or a
custom timeout then the configuration needs to moved into the
`[watcher_datasources]` group instead of the `[gnocchi_client]` group.
deprecations:
- |
The configuration options for query retries in `[gnocchi_client]` are
deprecated and the option in `[watcher_datasources]` should now be used.

View File

@@ -0,0 +1,7 @@
---
deprecations:
- |
Ceilometer Datasource has been deprecated since its API has been
deprecated in Ocata cycle. Watcher has supported Ceilometer for some
releases after Ocata to let users migrate to Gnocchi/Monasca datasources.
Since Train release, Ceilometer support will be removed.

View File

@@ -0,0 +1,6 @@
---
upgrade:
- |
Python 2.7 support has been dropped. Last release of Watcher
to support py2.7 is OpenStack Train. The minimum version of Python now
supported by Watcher is Python 3.6.

View File

@@ -0,0 +1,16 @@
---
features:
- |
Added a new config option 'action_execution_rule' which is a dict type.
Its key field is strategy name and the value is 'ALWAYS' or 'ANY'.
'ALWAYS' means the callback function returns True as usual.
'ANY' means the return depends on the result of previous action execution.
The callback returns True if previous action gets failed, and the engine
continues to run the next action. If previous action executes success,
the callback returns False then the next action will be ignored.
For strategies that aren't in 'action_execution_rule', the callback always
returns True.
Please add the next section in the watcher.conf file
if your strategy needs this feature.
[watcher_workflow_engines.taskflow]
action_execution_rule = {'your strategy name': 'ANY'}

View File

@@ -0,0 +1,8 @@
---
features:
- |
Add a new webhook API and a new audit type EVENT, the microversion is 1.4.
Now Watcher user can create audit with EVENT type and the audit will be
triggered by webhook API.
The user guide is available online:
https://docs.openstack.org/watcher/latest/user/event_type_audit.html

View File

@@ -0,0 +1,11 @@
---
features:
- |
Allow using file to override metric map. Override the metric map of
each datasource as soon as it is created by the manager. This override
comes from a file whose path is provided by a setting in config file.
The setting is `watcher_decision_engine/metric_map_path`. The file
contains a map per datasource whose keys are the metric names as
recognized by watcher and the value is the real name of the metric
in the datasource. This setting defaults to `/etc/watcher/metric_map.yaml`,
and presence of this file is optional.

View File

@@ -0,0 +1,17 @@
---
features:
- |
Improved interface for datasource baseclass that better defines expected
values and types for parameters and return types of all abstract methods.
This allows all strategies to work with every datasource provided the
metrics are configured for that given datasource.
deprecations:
- |
The new strategy baseclass has significant changes in method parameters
and any out-of-tree strategies will have to be adopted.
- |
Several strategies have changed the `node` parameter to `compute_node` to
be better aligned with terminology. These strategies include
`basic_consolidation` and `workload_stabilzation`. The `node` parameter
will remain supported during Train release and will be removed in the
subsequent release.

View File

@@ -0,0 +1,20 @@
---
prelude: >
Many operations in the decision engine will block on I/O. Such I/O
operations can stall the execution of a sequential application
significantly. To reduce the potential bottleneck of many operations
the general purpose decision engine threadpool is introduced.
features:
- |
A new threadpool for the decision engine that contributors can use to
improve the performance of many operations, primarily I/O bound onces.
The amount of workers used by the decision engine threadpool can be
configured to scale according to the available infrastructure using
the `watcher_decision_engine.max_general_workers` config option.
Documentation for contributors to effectively use this threadpool is
available online:
https://docs.openstack.org/watcher/latest/contributor/concurrency.html
- |
The building of the compute (Nova) data model will be done using the
decision engine threadpool, thereby, significantly reducing the total
time required to build it.

View File

@@ -0,0 +1,11 @@
---
features:
- |
Watcher now supports configuring which datasource to use and in which
order. This configuration is done by specifying datasources in the
watcher_datasources section:
- ``[watcher_datasources] datasources = gnocchi,monasca,ceilometer``
Specific strategies can override this order and use datasources which
are not listed in the global preference.

View File

@@ -0,0 +1,10 @@
---
features:
- |
Grafana has been added as datasource that can be used for collecting
metrics. The configuration options allow to specify what metrics and how
they are stored in grafana so that no matter how Grafana is configured it
can still be used. The configuration can be done via the typical
configuration file but it is recommended to configure most options in the
yaml file for metrics. For a complete walkthrough on configuring Grafana
see: https://docs.openstack.org/watcher/latest/datasources/grafana.html

View File

@@ -0,0 +1,23 @@
---
features:
- |
Watcher can get resource information such as total, allocation ratio and
reserved information from Placement API.
Now we add some new fields to the Watcher Data Model:
* vcpu_reserved: The amount of cpu a node has reserved for its own use.
* vcpu_ratio: CPU allocation ratio.
* memory_mb_reserved: The amount of memory a node has reserved for
its own use.
* memory_ratio: Memory allocation ratio.
* disk_gb_reserved: The amount of disk a node has reserved for its own use.
* disk_ratio: Disk allocation ratio.
We also add some new propeties:
* vcpu_capacity: The amount of vcpu, take allocation ratio into account,
but do not include reserved.
* memory_mb_capacity: The amount of memory, take allocation ratio into
account, but do not include reserved.
* disk_gb_capacity: The amount of disk, take allocation ratio into
account, but do not include reserved.

View File

@@ -0,0 +1,8 @@
---
upgrade:
- |
The minimum required version of the ``[nova_client]/api_version`` value
is now enforced to be ``2.56`` which is available since the Queens version
of the nova compute service.
A ``watcher-status upgrade check`` has been added for this.

View File

@@ -0,0 +1,7 @@
---
features:
- |
Added strategy "node resource consolidation". This
strategy is used to centralize VMs to as few nodes
as possible by VM migration. User can set an input
parameter to decide how to select the destination node.

View File

@@ -0,0 +1,5 @@
---
deprecations:
- |
Watcher removes the support to Nova legacy notifications because of Nova
will deprecate them.

View File

@@ -0,0 +1,6 @@
---
features:
- |
For a large cloud infrastructure, retrieving data from Nova may take
a long time. To avoid getting too much data from Nova, building the
compute data model according to the scope of audit.

View File

@@ -0,0 +1,12 @@
---
features:
- |
Add show data model api for Watcher. New in version 1.3.
User can use 'openstack optimize datamodel list'
command to view the current data model information in memory.
User can also add '--audit <Audit_UUID>' to view specific data model
in memory filted by the scope in audit.
User can also add '--detail' to view detailed information about current data model.
User can also add '--type <type>' to specify the type of data model.
Default type is 'compute'. In the future, type 'storage' and 'baremetal'
will be supported.

View File

@@ -0,0 +1,5 @@
---
features:
- |
Add keystone_client Group for user to configure 'interface' and 'region_name'
by watcher.conf. The default value of 'interface' is 'admin'.

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