Compare commits

...

285 Commits

Author SHA1 Message Date
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
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
Zuul
b471b4ca36 Merge "Fix TypeError in LOG.debug" 2018-08-08 12:11:09 +00:00
Zuul
2be5bd1c3f Merge "fix unit test:test_execute_audit_with_interval_no_job" 2018-08-08 10:06:56 +00:00
licanwei
d79edb93d6 Fix TypeError in LOG.debug
Change-Id: I4a4050081d0a22cc66fdb311ef676d0ba802bb72
Closes-Bug: #1785962
2018-08-07 23:44:23 -07:00
Zuul
0c41f20df2 Merge "improve strategy doc" 2018-08-07 10:34:44 +00:00
Yumeng_Bao
249e3c9515 fix unit test:test_execute_audit_with_interval_no_job
The previous unit test does not indeed test the situation where there is no job.

Change-Id: I3a0835932134fa6d888e0611a9232e1098d3fe53
2018-08-07 15:44:29 +08:00
licanwei
a229fec4a6 improve strategy doc
Change-Id: Id84e086f316ab50999b43c4b4c60a59ca454e79c
2018-08-06 18:21:39 -07:00
licanwei
5c2b3f0025 remove get_flavor_instance
From nova api 2.47(see [1]),the flavor.id has been removed.
we could remove this unused get_flavor_instance.

[1] https://developer.openstack.org/api-ref/compute/#show-server-details

Change-Id: I19a30950c298ee5cde8e71548428330c101bcad6
2018-08-06 01:10:53 +00:00
Zuul
cf9b158713 Merge "remove voluptuous" 2018-08-03 08:32:14 +00:00
Zuul
2cb7871df0 Merge "Update watcher-db-manage help doc" 2018-08-03 08:26:42 +00:00
Zuul
7c83042aa1 Merge "Add noisy neighbor strategy doc" 2018-08-03 08:15:52 +00:00
Zuul
7103e60786 Merge "only check decision engine service" 2018-08-03 08:15:51 +00:00
Zuul
343128fcb9 Merge "Fix unittest MismatchError" 2018-08-02 08:38:38 +00:00
Zuul
a739f81bfb Merge "remove extra'_' and space" 2018-08-02 08:19:58 +00:00
Zuul
d690b2b598 Merge "Fix AttributeError exception" 2018-08-01 07:28:43 +00:00
Zuul
4d1b9c1f04 Merge "Add apscheduler_jobs table to models" 2018-08-01 07:19:29 +00:00
licanwei
927d094907 Fix unittest MismatchError
Change-Id: I4030fb2c4ec89c6c653c2882be1052ed5cbd2cd7
Closes-Bug: #1784758
2018-07-31 22:47:39 -07:00
licanwei
57a4aae92b only check decision engine service
We just need to check decision engine service status
when Rescheduling continuous audits.
This is an update for 1
1:https://review.openstack.org/#/c/586033

Change-Id: I05a17f39b6ff80c6b9382248c72cac571191e395
2018-08-01 01:10:25 +00:00
chenke
abd129002c remove extra'_' and space
Change-Id: I85cdb0dd4e8f192181146b99f0416bf777a8279a
2018-07-31 20:07:40 +08:00
licanwei
b92a26345f remove voluptuous
We have replaced voluptuous with jsonschema in [1].
Now voluptuous can be removed.
[1]: https://review.openstack.org/#/c/561182/

Change-Id: I99c65ed79ef166839838559a808ee7607389e07a
2018-07-30 19:03:26 -07:00
licanwei
843cd493c2 Update watcher-db-manage help doc
Change-Id: I472204687da138f23f51a56e24cc95a9ae3359fb
2018-07-30 04:05:34 -07:00
Alexander Chadin
bad257f402 Fix strategies with additional time to initialize CDM
Change-Id: I995cfe99443744eb9f5746be5fce6302b6a7b834
2018-07-27 13:14:38 +00:00
licanwei
c4821ceedf Add apscheduler_jobs table to models
watcher-db-manage create_schema doesn't create apscheduler_jobs.

Change-Id: I57327317aab0186b0ff641111b90e6f958f1e5fe
Closes-Bug: #1783504
2018-07-26 20:00:34 -07:00
licanwei
abbb1317d3 Fix AttributeError exception
StartError is in exception, not Exception

Change-Id: Iff6ea38a2d0173173719f1cd840d9f3789fcf023
Closes-Bug: #1783924
2018-07-26 19:50:28 -07:00
Zuul
595cd1d435 Merge "Use jsonschema to validate efficacy indicators" 2018-07-26 12:06:57 +00:00
Zuul
df8419949b Merge "Rescheduling continuous audits from FAILED nodes" 2018-07-26 11:49:29 +00:00
Zuul
05a8f0ba3e Merge "Add HA support" 2018-07-26 11:49:28 +00:00
Alexander Chadin
20ffb5945f Rescheduling continuous audits from FAILED nodes
This patch set adds background job that reschedules CONTINUOUS
audits from FAILED to ACTIVE decision engine nodes using round-robin
algorithm. It also contains fix for main[1] HA PS about filtering audits.

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

Partially-Implements: blueprint support-watcher-ha-active-active-mode
Change-Id: Ib248a6cd3adbd3927c47db6bb819300361492411
2018-07-26 09:57:35 +00:00
Alexander Chadin
e426a015ee Add HA support
This patch set adds hostname field to Audit and Action Plan
objects to track services which execute these objects.

Change-Id: I786e419952925c380c969b12cc60f9a1004af96b
Partially-Implements: blueprint support-watcher-ha-active-active-mode
2018-07-26 12:54:11 +03:00
Zuul
f21f3dbb8b Merge "Add actionplan list detail api ref" 2018-07-26 08:57:21 +00:00
licanwei
4a5175cbad Add noisy neighbor strategy doc
Change-Id: I84add2103fd12c7b0c7e36d57fdfc4fe43e933b1
2018-07-26 00:45:40 -07:00
Zuul
996fc85081 Merge "Sync CDM among Decision Engines by using notification pool" 2018-07-26 07:44:52 +00:00
Zuul
758b1fab59 Merge "Add noisy neighbor description" 2018-07-26 01:53:39 +00:00
Zuul
fad85443b6 Merge "Fix service task interval" 2018-07-26 01:48:42 +00:00
Zuul
66723e97be Merge "Check job before removing it" 2018-07-26 01:48:42 +00:00
Zuul
ac6a471d2f Merge "remove LOG definitions that have not been used" 2018-07-26 01:38:56 +00:00
Zuul
550c306063 Merge "Update host_maintenance doc" 2018-07-25 14:35:30 +00:00
licanwei
b54647e6c0 Fix service task interval
Change-Id: Id6912c8d9c34b0aa3c0b5455586149747b07d491
2018-07-25 00:13:05 -07:00
licanwei
6a31f2c343 Add noisy neighbor description
Change-Id: Ibe0feb389e75c6ef52294413011e4fe250b42d0b
2018-07-25 02:45:51 +00:00
chenke
ea5252dd29 remove LOG definitions that have not been used
Change-Id: I6d1b942390a592e00755c5974995d0810085ace2
2018-07-25 10:31:03 +08:00
Zuul
1272ca579e Merge "trivial: fix strategy name" 2018-07-24 11:03:19 +00:00
licanwei
e76b27c0fe trivial: fix strategy name
Change-Id: Ic3df4233a544670ad4f736a0046725ea2797e337
2018-07-23 20:32:04 -07:00
licanwei
8377603f3c update Ubuntu version from 14.04 to 16.04
Change-Id: Ia05e7bd45f0bf5d300d238396b52b313949e3bef
2018-07-23 18:35:42 -07:00
licanwei
9630e2c4e2 Update host_maintenance doc
add change_nova_service_state action help

Change-Id: I68c41a4342fc1a215d697ef4bb0d333794e6a077
2018-07-23 01:43:46 -07:00
licanwei
4022714f5d Check job before removing it
Change-Id: Ibbd4da25fac6016a0d76c8f810ac567f6fd075f1
Closes-Bug: #1782731
2018-07-20 19:20:26 -07:00
licanwei
6fcdb5e74b update monascaclient version
TimingSession is removed and replaced by keystone session (see [1]).
monasca client fixed it in [2].
Watcher need to update monascaclient version
[1] https://review.openstack.org/#/c/579139/
[2] https://review.openstack.org/#/c/582882

Closes-Bug: #1782276
Change-Id: I567b7727cbfe645c4d16e06a8cbb8eb8e33eb872
Co-Authored-By: zhurong <aaronzhu1121@gmail.com>
2018-07-20 14:34:10 +03:00
Zuul
31a1a2e7d7 Merge "Remove help message about ZeroMQ driver" 2018-07-20 08:48:31 +00:00
Zuul
3c817fe0a0 Merge "Switch to stestr" 2018-07-20 08:48:30 +00:00
Zuul
f95b755c09 Merge "Switch to oslo_messaging.ConfFixture.transport_url" 2018-07-20 08:23:28 +00:00
Alexander Chadin
d62c4967bd Sync CDM among Decision Engines by using notification pool
This commit allows to consume notifications via notifications pools[1].
Listeners in notification pools recieves a copy of notification. It
will let Watcher to sync Data Models of Decision Engines.

[1]: https://docs.openstack.org/oslo.messaging/ocata/notification_listener.html

Change-Id: Ie37528263181924f84510500fc1277b0237c1df8
Partially-Implements: blueprint support-watcher-ha-active-active-mode
2018-07-20 10:54:19 +03:00
licanwei
486d08bc5e Add actionplan list detail api ref
Change-Id: If8bdea3b29049870b222b69ede10669183a3d952
2018-07-19 23:48:06 -07:00
Zuul
5bedb43d69 Merge "fix the rule name" 2018-07-20 03:20:17 +00:00
zhang.lei
b3e84fa2dc Remove help message about ZeroMQ driver
ZeroMQ driver is deprecated, as per the Dublin 2018 PTG decision:
http://lists.openstack.org/pipermail/openstack-dev/2018-March/128055.html

Change-Id: Ia3d5fd1d2ccd57bf3b9f97172c09994bf5d44022
2018-07-12 01:48:00 +00:00
Vu Cong Tuan
dc3531fa10 Switch to stestr
According to Openstack summit session [1],
stestr is maintained project to which all Openstack projects should migrate.
Let's switch to stestr as other projects have already moved to it.

[1] https://etherpad.openstack.org/p/YVR-python-pti

Change-Id: I8f70f7d8a3d18301559c0eb47e6a64c8b5100d39
2018-07-10 15:38:50 +07:00
Zuul
fb7be7984c Merge "Triggers the api-ref-jobs to publish wather api reference" 2018-07-05 08:13:48 +00:00
Andreas Jaeger
c9e8886631 Remove non-voting jobs from gate queue
Non-voting jobs should not be in gate queue at all, remove them.
They are wasting needlessly are resources.

To make clearer which jobs are non-voting, move voting:false
from base job to individual jobs.

Make watcherclient-tempest-functional as voting job and explicitly set
it non-voting in project stanza so that it can be easier to make it
voting in other repos.

Change-Id: Id94e49347006bca850f72a0400794da8c2a67144
2018-07-04 11:50:02 +02:00
Clark Boylan
7373588673 Remove undefined job
The legacy-rally-dsvm-watcher-rally job does not exist but it is listed
in the .zuul.yaml config. This is a zuul configuration error. Remove
this job which does not exist to fix zuul.

Change-Id: I1bbfd373ad12b98696ab2ddb78e56e6503cc4c4d
2018-07-04 09:28:27 +00:00
chenxing
c783a29047 Triggers the api-ref-jobs to publish wather api reference
Change-Id: I842a4e4bbe0bb713c8206df32952b4297b21d15f
2018-07-03 16:56:43 +08:00
Hidekazu Nakamura
393d68f658 Fix unit test error
This patch fixes watcher.tests.common.test_clients.TestClients.
test_clients_ironic unit test error due to python-ironicclient 2.4.0.

Change-Id: I0aaa2047cc8fcf09dee8bc7168e35f7a58c10125
2018-07-03 13:23:51 +09:00
Yumeng_Bao
0540cd22d6 Use jsonschema to validate efficacy indicators
This patch replaces voluptuous with JSON-schema to validate
efficacy indicator since in watcher we want to remove voluptuous
and use JSONSchema as our only JSON validation tool to keep consistency.

Change-Id: Iaa77566f1cdfdac03ce8e7d5a75406274c7d5298
Implements: blueprint replace-voplutuous-with-jsonschema
2018-07-02 05:43:22 +00:00
lvxianguo
281a5e6998 fix the rule name
Change-Id: Ica3ab522a816d7d31e8a72d26953e961ec4d9919
2018-06-22 16:26:16 +08:00
Zuul
0c4231e422 Merge "Amend the spelling error of a word" 2018-06-20 08:37:04 +00:00
Zuul
0d5df127f5 Merge "fix tox python3 overrides" 2018-06-20 00:39:25 +00:00
Zuul
6ed8fc0c15 Merge "Add API Reference for Watcher" 2018-06-19 00:37:59 +00:00
Zuul
855baacb5c Merge "replace windows line endings with unix line endings" 2018-06-18 10:59:22 +00:00
Zuul
02b72f4a38 Merge "Correcting url in action_plan policy" 2018-06-18 10:12:27 +00:00
rajat29
5f93e96b7a Correcting url in action_plan policy
url in action_plan policy file is:
'path': '/v1/action_plans/{action_plan_uuid}/action'
whereas it shouls be :
'path': '/v1/action_plans/{action_plan_uuid}/start'

Related-Bug: #1756274

Change-Id: Ic15fed9af739b59efb2777b70514697747b2af7f
2018-06-18 04:46:56 +00:00
Zuul
3591d9fa0a Merge "Replace port 35357 with 5000 for test_clients.py" 2018-06-15 05:10:32 +00:00
Doug Hellmann
88ff5e1b1f fix tox python3 overrides
We want to default to running all tox environments under python 3, so
set the basepython value in each environment.

We do not want to specify a minor version number, because we do not
want to have to update the file every time we upgrade python.

We do not want to set the override once in testenv, because that
breaks the more specific versions used in default environments like
py35 and py36.

Change-Id: Ia481330b9a889b113b585fca0d4ddb86df9f74d3
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
2018-06-13 14:34:39 -04:00
Doug Hellmann
ae0918488d replace windows line endings with unix line endings
The python 3 version of the linter does not allow Windows-style line
endings (\r\n) so replace them with UNIX-style endings (\n).

Change-Id: Ifb97491323d3df92bb1520e373552aeb5e1919a4
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
2018-06-13 14:34:39 -04:00
Alexander Chadin
44fc7d5799 Restore requirements versions
Change-Id: I7704778324d7597d5df2de6b77f6b914d948d6fa
2018-06-13 15:08:11 +03:00
Steve Kowalik
b683d2c6bd Switch to oslo_messaging.ConfFixture.transport_url
oslo_messaging's rpc_backend setting, which is set by
ConfFixture.transport_driver has been deprecated since Newton. To allow
oslo_messaging to remove it, switch to setting transport_url instead.

Change-Id: Ie37b20d1be6c177f2f1c26cc473b632d7d934c05
Partial-Bug: #1712399
2018-06-12 12:56:54 +10:00
Alexander Chadin
533c0a4114 Add API Reference for Watcher
This patch set adds API Reference along with some
fixes to documentation. It partially fixes bug #1757423.

Change-Id: I107b4fd5daf40aad63fc13864debbbbc82a9826c
2018-06-07 12:57:11 +03:00
chengebj5238
a8079ba0f1 Amend the spelling error of a word
Change-Id: I2b67774cf923d14a5735fd174061c87adaaaf63f
2018-06-07 09:50:21 +08:00
Zuul
a330576eae Merge "Update storage CDM collector" 2018-06-06 12:16:43 +00:00
Zuul
70d05214c7 Merge "add doc for host_maintenance" 2018-06-06 08:23:13 +00:00
suzhengwei
ca9644f4d8 add doc for host_maintenance
Change-Id: If9a112d33d7586d828024dbace1863ecc04408d9
2018-06-05 17:34:01 +08:00
inspurericzhang
44061cf333 Update pypi url to new url
Pypi url update to "https://pypi.org/"

Change-Id: I0bc9d7fc6111cb32db212d6ef3dab144fdd31c17
2018-05-25 17:11:56 +08:00
Zuul
18bf1f4e8d Merge "add strategy host_maintenance" 2018-05-23 09:18:24 +00:00
Zuul
f2df0da0b2 Merge "Trivial: update url to new url" 2018-05-23 07:46:28 +00:00
Hidekazu Nakamura
3c83077724 Update storage CDM collector
Storage CDM can not be build for some environment such as
the one using VMwareVcVmdkDriver, since some attributes of
Storage CDM'S pool element can be 'unknown'.

This patch updates storage CDM collector to raise watcher
specific exception if some attributes of storage CDM'S pool
element is 'unknown'

Change-Id: If75a909025c8d764e4de6e20f058b84e23123c1a
Closes-Bug: #1751206
2018-05-23 10:51:26 +09:00
caoyuan
d8872a743b Replace port 35357 with 5000 for test_clients.py
Now that the v2.0 API has been removed, we don't have a reason to
include deployment instructions for two separate applications on
different ports.

Related-bug: #1754104

Change-Id: I98fae626d39cb62ad51c86435c1a2c60be5c1fb9
2018-05-15 12:43:48 +00:00
Hidekazu Nakamura
7556d19638 Add Cinder Cluster Data Model Collector test case
This patch adds Cinder Data Model Collector test case.

Change-Id: Ifaf7cd4a962da287f740a12e4c382a1ca92750d6
2018-05-15 20:30:31 +09:00
suzhengwei
58276ec79e add strategy host_maintenance
maintain one compute node without having the user's application
been interruptted.
It will firstly migrate all instances from the maintenance node
to one backup node. If not, it will migrate all instances,
relying on nova-schduler.

Change-Id: I29ecb65745d5e6ecab41508e9a91b29b39a3f0a8
Implements:blueprint cluster-maintaining
2018-05-14 11:33:59 +00:00
XiaojueGuan
36ad9e12da Trivial: update url to new url
Change-Id: Ia238564c5c41aaf015d9d2f5839703a035c76fce
2018-05-13 21:39:50 +08:00
Hidekazu Nakamura
cdb1975530 Fix to reuse RabbitMQ connection
Currently RabbitMQ connection gradually increases by CONTINUOUS audit
with auto-trigger option.
This patch fixes watcher to reuse RabbitMQ connection.

Change-Id: I818fc1ce982f67bac08c815821f1ad67f8f3c893
2018-05-10 14:21:23 +09:00
Zuul
6efffd6d89 Merge "Updated tests on bug, when get list returns deleted items" 2018-05-09 08:40:18 +00:00
Zuul
95ec79626b Merge "Grouped _add_*_filters methods together" 2018-05-09 08:20:37 +00:00
Zuul
00aa77651b Merge "Replace of private _create methods in tests" 2018-05-09 08:20:36 +00:00
Zuul
7d62175b23 Merge "Added _get_model_list base method for all get_*_list methods" 2018-05-09 08:20:36 +00:00
Zuul
5107cfa30f Merge "Refactor watcher API for Action Plan Start" 2018-05-09 06:16:38 +00:00
deepak_mourya
ff57eb73f9 Refactor watcher API for Action Plan Start
Currently the REST API to start action plan in watcher
is which is same as for update action plan.

PATCH /v1/action_plans

https://docs.openstack.org/watcher/latest/api/v1.html

we need to make it easy to understand like :

POST /v1/action_plans/{action_plan_uuid}/start

the action should be start in above case.
Change-Id: I5353e4aa58d1675d8afb94bea35d9b953514129a
Closes-Bug: #1756274
2018-05-08 07:28:45 +00:00
Zuul
4c035a7cbd Merge "Update auth_url in install docs" 2018-05-08 05:57:39 +00:00
Zuul
b5d9eb6acb Merge "Exclude Project By Audit Scope" 2018-05-08 05:01:57 +00:00
Hidekazu Nakamura
904b72cf5e Update auth_url in install docs
Beginning with the Queens release, the keystone install guide
recommends running all interfaces on the same port. This patch
updates the install guide to reflect that change.

Change-Id: Ice155d0b80d2f2ed6c1a9a9738be2184b6e9e76c
Closes-bug: #1754104
2018-05-07 11:42:10 +09:00
Egor Panfilov
d23e7f0f8c Updated tests on bug, when get list returns deleted items
In I4d2f44fa149aee564c62a69822c6ad79de5bba8a we introduced new
_get_model_list method that introduces unify way for retrieving models
from db. This commit adds tests that do checks on bug 1761956, when
selecting with filter() method could return deleted entites.

Change-Id: I12df4af70bcc25654a0fb276ea7145d772d891e2
Related-Bug: 1761956
2018-05-05 14:30:00 +03:00
Zuul
55cbb15fbc Merge "Moved do_execute method to AuditHandler class" 2018-05-04 06:08:17 +00:00
wu.chunyang
3a5b42302c Fix the openstack endpoint create failed
Change-Id: Ic05950c47bf5ad26e91051ac5e1d766db0f5ccae
2018-04-27 22:44:13 +08:00
Zuul
4fdb22cba2 Merge "Update the default value for nova api_verison" 2018-04-27 06:10:54 +00:00
Zuul
431f17d999 Merge "add unittest for execute_audit in audit/continuous.py" 2018-04-25 08:24:25 +00:00
caoyuan
b586612d25 Update the default value for nova api_verison
refer to https://github.com/openstack/watcher/blob/master/watcher/conf/nova_client.py#L26

Change-Id: If7c12d49c68e1bfc30327d465b9d5bafe82882e0
2018-04-24 23:15:37 +08:00
Egor Panfilov
ad1593bb36 Moved do_execute method to AuditHandler class
Both Continuous and Oneshot audits made same action in
do_execute, so it's a good idea to move it to the base
class

TrivialFix

Change-Id: Ic0353f010509ce45f94126e4db0e629417128ded
2018-04-23 20:38:06 +03:00
Zuul
bbd0ae5b16 Merge "Fix typo in StorageCapacityBalance" 2018-04-23 07:59:51 +00:00
Zuul
5a30f814bf Merge "add strategy doc:storage capacity balance" 2018-04-23 05:46:08 +00:00
Egor Panfilov
7f6a300ea0 Fix typo in StorageCapacityBalance
TrivialFix

Change-Id: If1fb33276fc08945aa45e6baecaeebca3ba070fe
2018-04-22 18:00:53 +03:00
Egor Panfilov
93a8ba804f Grouped _add_*_filters methods together
TrivialFix

Change-Id: I148dc19140aede8cc905b0bdc2753b82d8484363
2018-04-22 00:52:27 +03:00
Egor Panfilov
415bab4bc9 Replace of private _create methods in tests
Methods that already implemented in utils module are removed from test
classes

TrivialFix

Change-Id: I38d806e23c162805b7d362b68bf3fe18da123ee3
2018-04-21 22:32:25 +03:00
aditi
fc388d8292 Exclude Project By Audit Scope
This patch adds project_id in compute CDM, It also adds logic for
excluding project_id in audit scope.

Change-Id: Ife228e3d1855b65abee637516470e463ba8a2815
Implements: blueprint audit-scope-exclude-project
2018-04-20 08:47:07 +00:00
Zuul
5b70c28047 Merge "amend delete action policy" 2018-04-20 03:08:52 +00:00
licanwei
b290ad7368 add strategy doc:storage capacity balance
Change-Id: Ifa37156e641b840ae560e1f7c8a0dd4bca7662ba
2018-04-19 19:55:37 -07:00
Alexander Chadin
8c8e58e7d9 Update requirements
Change-Id: Iee6ca0a49f8b1d67dd0d88f9a2cf9863b2c6c7bf
2018-04-19 11:10:39 +03:00
licanwei
171654c0ea add unittest for execute_audit in audit/continuous.py
Change-Id: I20b9cb9b4b175a1befdbe23f7c187bec6a195dac
2018-04-17 04:19:12 -07:00
suzhengwei
0157fa7dad amend delete action policy
Change-Id: I545b969a3f0a3451b880840108484ca7ef3fabf9
2018-04-17 16:18:14 +08:00
Egor Panfilov
aa74817686 Added _get_model_list base method for all get_*_list methods
When we call audittemplate list without filters, it returns all Audit
Templates that are not deleted, as expected. If we add any filter to
query and context.show_deleted is None (we request only current AT),
query.filter_by adds filter to joined table (for example, goals, results
 in a query like JOIN goals ... WHERE ... goals.deleted_at IS NULL) not
to model's table (AuditTemplate in our case).

We change call for filter_by to filter, explicitly point to model that
we want to filter.

Also, we moved query generating code to new method _get_model_list(). As
a result we applied same fix to all of the other models.

Change-Id: I4d2f44fa149aee564c62a69822c6ad79de5bba8a
Closes-bug: 1761956
2018-04-10 14:10:44 +03:00
336 changed files with 12253 additions and 3613 deletions

6
.gitignore vendored
View File

@@ -23,11 +23,10 @@ pip-log.txt
# Unit test / coverage reports
.coverage*
.tox
nosetests.xml
.stestr/
.testrepository
.venv
.idea
.testrepository/
# Translations
*.mo
@@ -76,3 +75,6 @@ releasenotes/build
# Autogenerated sample config file
etc/watcher/watcher.conf.sample
# Atom
.remote-sync.json

View File

@@ -1,4 +1,4 @@
[DEFAULT]
test_path=${OS_TEST_PATH:-./watcher/tests}
test_path=./watcher/tests
top_dir=./

View File

@@ -1,7 +0,0 @@
[DEFAULT]
test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-160} \
${PYTHON:-python} -m subunit.run discover -t ./ ${OS_TEST_PATH:-./watcher/tests} $LISTOPT $IDOPTION
test_id_option=--load-list $IDFILE
test_list_option=--list

View File

@@ -1,68 +1,131 @@
- project:
templates:
- check-requirements
- openstack-cover-jobs
- openstack-lower-constraints-jobs
- openstack-python-jobs
- openstack-python35-jobs
- openstack-python36-jobs
- publish-openstack-docs-pti
- release-notes-jobs-python3
check:
jobs:
- watcher-tempest-functional
- watcher-grenade
- watcher-tempest-dummy_optim
- watcher-tempest-actuator
- watcher-tempest-basic_optim
- watcher-tempest-vm_workload_consolidation
- watcher-tempest-workload_balancing
- watcherclient-tempest-functional
- legacy-rally-dsvm-watcher-rally
- openstack-tox-lower-constraints
- watcher-tempest-zone_migration
- watcher-tempest-host_maintenance
- watcher-tempest-storage_balance
- watcher-tls-test
gate:
queue: watcher
jobs:
- watcher-tempest-functional
- watcher-tempest-dummy_optim
- watcher-tempest-actuator
- watcher-tempest-basic_optim
- watcher-tempest-workload_balancing
- watcherclient-tempest-functional
- legacy-rally-dsvm-watcher-rally
- openstack-tox-lower-constraints
- 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
voting: false
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
- job:
name: watcher-tempest-host_maintenance
parent: watcher-tempest-multinode
voting: false
vars:
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_host_maintenance
- job:
name: watcher-tempest-storage_balance
parent: watcher-tempest-multinode
voting: false
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-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
voting: false
nodeset: openstack-two-node
pre-run: playbooks/pre.yaml
run: playbooks/orchestrate-tempest.yaml
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
watcher_cluster_data_model_collectors.baremetal:
period: 120
watcher_cluster_data_model_collectors.storage:
period: 120
devstack_services:
watcher-api: false
watcher-decision-engine: false
watcher-decision-engine: true
watcher-applier: false
# We need to add TLS support for watcher plugin
tls-proxy: false
@@ -78,9 +141,13 @@
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
test-config:
$TEMPEST_CONFIG:
compute:
@@ -117,8 +184,8 @@
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
tempest_test_regex: watcher_tempest_plugin.tests.api
tox_envlist: all
tox_environment:
# Do we really need to set this? It's cargo culted
@@ -126,6 +193,30 @@
zuul_copy_output:
/etc/hosts: logs
- 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-dev/grenade
- openstack-infra/devstack-gate
- openstack/watcher
- openstack/python-watcherclient
- openstack/watcher-tempest-plugin
- job:
# This job is used in python-watcherclient repo
name: watcherclient-tempest-functional
@@ -134,6 +225,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

90
api-ref/source/conf.py Normal file
View File

@@ -0,0 +1,90 @@
# 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.
#
# nova documentation build configuration file, created by
# sphinx-quickstart on Sat May 1 15:17:47 2010.
#
# This file is execfile()d with the current directory set to
# its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
from watcher import version as watcher_version
extensions = [
'openstackdocstheme',
'os_api_ref',
]
# -- General configuration ----------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
# The suffix of source filenames.
source_suffix = '.rst'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Infrastructure Optimization API Reference'
copyright = u'2010-present, OpenStack Foundation'
# openstackdocstheme options
repository_name = 'openstack/watcher'
bug_project = 'watcher'
bug_tag = ''
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The full version, including alpha/beta/rc tags.
release = watcher_version.version_info.release_string()
# The short X.Y version.
version = watcher_version.version_string
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# -- Options for HTML output --------------------------------------------------
# The theme to use for HTML and HTML Help pages. Major themes that come with
# Sphinx are currently 'default' and 'sphinxdoc'.
html_theme = 'openstackdocs'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
html_theme_options = {
"sidebar_mode": "toc",
}
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
html_last_updated_fmt = '%Y-%m-%d %H:%M'
# -- Options for LaTeX output -------------------------------------------------
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass
# [howto/manual]).
latex_documents = [
('index', 'Watcher.tex', u'Infrastructure Optimization API Reference',
u'OpenStack Foundation', 'manual'),
]

17
api-ref/source/index.rst Normal file
View File

@@ -0,0 +1,17 @@
:tocdepth: 2
===========
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
.. include:: watcher-api-v1-actions.inc
.. 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

View File

@@ -0,0 +1,546 @@
# 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: |
The UUID of the Action.
in: path
required: true
type: string
actionplan_ident:
description: |
The UUID of the Action Plan.
in: path
required: true
type: string
audit_ident:
description: |
The UUID or name of the Audit.
in: path
required: true
type: string
audittemplate_ident:
description: |
The UUID or name of the Audit Template.
in: path
required: true
type: string
goal_ident:
description: |
The UUID or name of the Goal.
in: path
required: true
type: string
scoring_engine_ident:
description: |
The UUID or name of the Scoring Engine.
in: path
required: true
type: string
service_ident:
description: |
The ID or name of the Service.
in: path
required: true
type: string
strategy_ident:
description: |
The UUID or name of the Strategy.
in: path
required: true
type: string
# Query body
limit:
description: |
Requests a page size of items. Returns a number of items up to a ``limit``
value. Use the limit parameter to make an initial limited request and use
the ID of the last-seen item from the response as the ``marker`` parameter
value in a subsequent limited request.
in: query
required: false
type: integer
marker:
description: |
The ID of the last-seen item. Use the ``limit`` parameter to make an
initial limited request and use the ID of the last-seen item from the
response as the ``marker`` parameter value in a subsequent limited request.
in: query
required: false
type: string
r_action_plan:
description: |
UUID of the action plan used for filtering.
in: query
required: false
type: string
r_audit:
description: |
Optional UUID of an audit, to get only actions for that audit.
in: query
required: false
type: string
r_goal:
description: |
The UUID or name of the Goal.
in: query
required: false
type: string
r_strategy:
description: |
The UUID or name of the Strategy.
in: query
required: false
type: string
sort_dir:
description: |
Sorts the response by the requested sort direction.
A valid value is ``asc`` (ascending) or ``desc`` (descending).
Default is ``asc``.
in: query
required: false
type: string
sort_key:
description: |
Sorts the response by the this attribute value. Default is ``id``.
in: query
required: false
type: string
# variables in the API response body
# Action
action_action_plan_uuid:
description: |
The action plan this action belongs to.
in: body
required: true
type: string
action_description:
description: |
Action description.
in: body
required: true
type: string
action_input_parameters:
description: |
Input parameters which are used by appropriate action type. For example,
``migration`` action takes into account such parameters as
``migration_type``, ``destination_node``, ``resource_id`` and
``source_node``. To see a list of supported action types and their input
parameters visit `Action plugins page <https://docs.openstack.org/watcher/latest/contributor/plugin/plugins.html#actions>`_.
in: body
required: true
type: JSON
action_parents:
description: |
UUIDs of parent actions.
in: body
required: true
type: array
action_state:
description: |
State of Action.
in: body
required: true
type: string
action_type:
description: |
Action type based on specific API action. Actions in Watcher are
pluggable, to see a list of supported action types visit
`Action plugins page <https://docs.openstack.org/watcher/latest/contributor/plugin/plugins.html#actions>`_.
in: body
required: true
type: string
# Action Plan
actionplan_audit_uuid:
description: |
The UUID of the audit this acton plan belongs to.
in: body
required: false
type: string
actionplan_efficacy_indicators:
description: |
The list of efficacy indicators associated to this action plan.
in: body
required: false
type: array
actionplan_global_efficacy:
description: |
The global efficacy of this action plan.
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
action plan's lifecycle, visit `Action Plan State Machine page <https://docs.openstack.org/watcher/latest/architecture.html#action-plan-state-machine>`_.
in: body
required: false
type: string
# Audit
audit_autotrigger:
description: |
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_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.
Can be set either in seconds or cron syntax.
Should be defined only for CONTINUOUS audits.
in: body
required: false
type: string
audit_name:
description: |
Name of this audit.
in: body
required: false
type: string
audit_next_run_time:
description: |
The next time audit launch. Defined only for CONTINUOUS audits.
in: body
required: false
type: string
audit_parameters:
description: |
The strategy parameters for this audit.
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
audit's lifecycle, visit `Audit State Machine page <https://docs.openstack.org/watcher/latest/architecture.html#audit-state-machine>`_.
in: body
required: true
type: string
audit_strategy:
description: |
The UUID or name of the Strategy.
in: body
required: false
type: string
audit_type:
description: |
Type of this audit. Can only be either ONESHOT or CONTINUOUS.
in: body
required: true
type: string
# Audit Template
audittemplate_description:
description: |
Short description of the Audit Template.
in: body
required: false
type: string
audittemplate_goal:
description: |
The UUID or name of the Goal.
in: body
required: true
type: string
audittemplate_name:
description: |
The name of the Audit template.
in: body
required: true
type: string
audittemplate_scope:
description: |
Audit Scope.
in: body
required: false
type: JSON
audittemplate_strategy:
description: |
The UUID or name of the 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: |
The date and time when the resource was created. The date and time
stamp format is `ISO 8601 <https://en.wikipedia.org/wiki/ISO_8601>`_
in: body
required: true
type: string
deleted_at:
description: |
The date and time when the resource was deleted. The date and time
stamp format is `ISO 8601 <https://en.wikipedia.org/wiki/ISO_8601>`_
in: body
required: true
type: string
# Goal
goal_display_name:
description: |
Localized name of the goal.
in: body
required: true
type: string
goal_efficacy_specification:
description: |
Efficacy specifications as result of stategy's execution.
in: body
required: true
type: array
goal_name:
description: |
Name of the goal.
in: body
required: true
type: string
goal_uuid:
description: |
Unique UUID for this goal.
in: body
required: true
type: string
links:
description: |
A list of relative links. Includes the self and bookmark links.
in: body
required: true
type: array
# Scoring Engine
scoring_engine_description:
description: |
A human readable description of the Scoring Engine.
in: body
required: true
type: string
scoring_engine_metainfo:
description: |
A metadata associated with the scoring engine
in: body
required: true
type: string
scoring_engine_name:
description: |
The name of the scoring engine.
in: body
required: true
type: string
# Service
service_host:
description: |
Name of host where service is placed on.
in: body
required: true
type: string
service_id:
description: |
ID of service.
in: body
required: true
type: integer
service_last_seen_up:
description: |
Time when Watcher service sent latest heartbeat.
in: body
required: true
type: string
service_name:
description: |
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.
in: body
required: true
type: string
# Strategy
strategy_check_comment:
description: |
Requirement comment.
in: body
required: true
type: string
strategy_check_mandatory:
description: |
Whether this requirement mandatory or not.
in: body
required: true
type: boolean
strategy_check_state:
description: |
State of requirement for Strategy.
in: body
required: true
type: string or JSON
strategy_check_type:
description: |
Type of requirement for Strategy.
in: body
required: true
type: string
strategy_display_name:
description: |
Localized name of the strategy.
in: body
required: true
type: string
strategy_name:
description: |
Name of the strategy.
in: body
required: true
type: string
strategy_parameters_spec:
description: |
Parameters specifications for this strategy.
in: body
required: true
type: JSON
strategy_uuid:
description: |
Unique UUID for this strategy.
in: body
required: true
type: string
updated_at:
description: |
The date and time when the resource was updated. The date and time
stamp format is `ISO 8601 <https://en.wikipedia.org/wiki/ISO_8601>`_
in: body
required: true
type: string
uuid:
description: |
The UUID for the resource.
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

@@ -0,0 +1,7 @@
[
{
"op": "replace",
"value": "CANCELLING",
"path": "/state"
}
]

View File

@@ -0,0 +1,7 @@
[
{
"op": "replace",
"value": "CANCELLED",
"path": "/state"
}
]

View File

@@ -0,0 +1,27 @@
{
"action_plans": [
{
"state": "ONGOING",
"efficacy_indicators": [],
"strategy_uuid": "7dae0eea-9df7-42b8-bb3e-313958ff2242",
"global_efficacy": [],
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/action_plans/4cbc4ede-0d25-481b-b86e-998dbbd4f8bf"
},
{
"rel": "bookmark",
"href": "http://controller:9322/action_plans/4cbc4ede-0d25-481b-b86e-998dbbd4f8bf"
}
],
"updated_at": "2018-04-10T11:59:52.640067+00:00",
"strategy_name": "dummy_with_resize",
"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",
"hostname": "controller"
}
]
}

View File

@@ -0,0 +1,24 @@
{
"action_plans": [
{
"state": "ONGOING",
"efficacy_indicators": [],
"strategy_uuid": "7dae0eea-9df7-42b8-bb3e-313958ff2242",
"global_efficacy": [],
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/action_plans/4cbc4ede-0d25-481b-b86e-998dbbd4f8bf"
},
{
"rel": "bookmark",
"href": "http://controller:9322/action_plans/4cbc4ede-0d25-481b-b86e-998dbbd4f8bf"
}
],
"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"
}
]
}

View File

@@ -0,0 +1,21 @@
{
"state": "ONGOING",
"efficacy_indicators": [],
"strategy_uuid": "7dae0eea-9df7-42b8-bb3e-313958ff2242",
"global_efficacy": [],
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/action_plans/4cbc4ede-0d25-481b-b86e-998dbbd4f8bf"
},
{
"rel": "bookmark",
"href": "http://controller:9322/action_plans/4cbc4ede-0d25-481b-b86e-998dbbd4f8bf"
}
],
"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",
"hostname": "controller"
}

View File

@@ -0,0 +1,23 @@
{
"state": "PENDING",
"efficacy_indicators": [],
"strategy_uuid": "7dae0eea-9df7-42b8-bb3e-313958ff2242",
"global_efficacy": [],
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/action_plans/4cbc4ede-0d25-481b-b86e-998dbbd4f8bf"
},
{
"rel": "bookmark",
"href": "http://controller:9322/action_plans/4cbc4ede-0d25-481b-b86e-998dbbd4f8bf"
}
],
"updated_at": "2018-04-10T11:59:41.602430+00:00",
"strategy_name": "dummy_with_resize",
"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,
"hostname": null
}

View File

@@ -0,0 +1,30 @@
{
"actions": [
{
"state": "PENDING",
"description": "Wait for a given interval in seconds.",
"parents": [
"8119d16e-b419-4729-b015-fc04c4e45783"
],
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/actions/7182a988-e6c4-4152-a0d6-067119475c83"
},
{
"rel": "bookmark",
"href": "http://controller:9322/actions/7182a988-e6c4-4152-a0d6-067119475c83"
}
],
"action_plan_uuid": "c6bba9ed-a7eb-4370-9993-d873e5e22cba",
"uuid": "7182a988-e6c4-4152-a0d6-067119475c83",
"deleted_at": null,
"updated_at": null,
"input_parameters": {
"duration": 3.2
},
"action_type": "sleep",
"created_at": "2018-03-26T11:56:08.235226+00:00"
}
]
}

View File

@@ -0,0 +1,23 @@
{
"actions": [
{
"state": "PENDING",
"parents": [
"8119d16e-b419-4729-b015-fc04c4e45783"
],
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/actions/7182a988-e6c4-4152-a0d6-067119475c83"
},
{
"rel": "bookmark",
"href": "http://controller:9322/actions/7182a988-e6c4-4152-a0d6-067119475c83"
}
],
"action_plan_uuid": "c6bba9ed-a7eb-4370-9993-d873e5e22cba",
"uuid": "7182a988-e6c4-4152-a0d6-067119475c83",
"action_type": "sleep"
}
]
}

View File

@@ -0,0 +1,26 @@
{
"state": "SUCCEEDED",
"description": "Logging a NOP message",
"parents": [
"b4529294-1de6-4302-b57a-9b5d5dc363c6"
],
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/actions/54acc7a0-91b0-46ea-a5f7-4ae2b9df0b0a"
},
{
"rel": "bookmark",
"href": "http://controller:9322/actions/54acc7a0-91b0-46ea-a5f7-4ae2b9df0b0a"
}
],
"action_plan_uuid": "4cbc4ede-0d25-481b-b86e-998dbbd4f8bf",
"uuid": "54acc7a0-91b0-46ea-a5f7-4ae2b9df0b0a",
"deleted_at": null,
"updated_at": "2018-04-10T11:59:44.026973+00:00",
"input_parameters": {
"message": "Welcome"
},
"action_type": "nop",
"created_at": "2018-04-10T11:59:12.725147+00:00"
}

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

@@ -0,0 +1,7 @@
[
{
"op": "replace",
"value": "CANCELLED",
"path": "/state"
}
]

View File

@@ -0,0 +1,54 @@
{
"interval": "*/2 * * * *",
"strategy_uuid": "6b3b3902-8508-4cb0-bb85-67f32866b086",
"goal_uuid": "e1a5a45b-f251-47cf-9c5f-fa1e66e1286a",
"name": "audit1",
"parameters": {
"host_choice": "retry",
"instance_metrics": {
"cpu_util": "compute.node.cpu.percent",
"memory.resident": "hardware.memory.used"
},
"granularity": 300,
"weights": {
"cpu_util_weight": 1.0,
"memory.resident_weight": 1.0
},
"retry_count": 1,
"metrics": [
"cpu_util"
],
"periods": {
"instance": 720,
"node": 600
},
"thresholds": {
"cpu_util": 0.2,
"memory.resident": 0.2
}
},
"auto_trigger": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
"created_at": "2018-04-06T07:27:27.820460+00:00",
"deleted_at": null,
"state": "CANCELLED",
"audit_type": "CONTINUOUS",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audits/65a5da84-5819-4aea-8278-a28d2b489028"
},
{
"rel": "bookmark",
"href": "http://controller:9322/audits/65a5da84-5819-4aea-8278-a28d2b489028"
}
],
"strategy_name": "workload_stabilization",
"next_run_time": "2018-04-06T11:56:00",
"updated_at": "2018-04-06T11:54:01.266447+00:00",
"hostname": "controller",
"start_time": null,
"end_time": null
}

View File

@@ -0,0 +1,14 @@
{
"auto_trigger": false,
"audit_template_uuid": "76fddfee-a9c4-40b0-8da0-c19ad6904f09",
"name": "test_audit",
"parameters": {
"metrics": [
"cpu_util"
]
},
"audit_type": "CONTINUOUS",
"interval": "*/2 * * * *",
"start_time":"2018-04-02 20:30:00",
"end_time": "2018-04-04 20:30:00"
}

View File

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

View File

@@ -0,0 +1,54 @@
{
"interval": "*/2 * * * *",
"strategy_uuid": "6b3b3902-8508-4cb0-bb85-67f32866b086",
"goal_uuid": "e1a5a45b-f251-47cf-9c5f-fa1e66e1286a",
"name": "test_audit",
"parameters": {
"host_choice": "retry",
"granularity": 300,
"thresholds": {
"cpu_util": 0.2,
"memory.resident": 0.2
},
"periods": {
"node": 600,
"instance": 720
},
"retry_count": 1,
"metrics": [
"cpu_util"
],
"weights": {
"cpu_util_weight": 1.0,
"memory.resident_weight": 1.0
},
"instance_metrics": {
"cpu_util": "compute.node.cpu.percent",
"memory.resident": "hardware.memory.used"
}
},
"auto_trigger": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
"created_at": "2018-04-06T07:27:27.820460+00:00",
"deleted_at": null,
"state": "PENDING",
"audit_type": "CONTINUOUS",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audits/65a5da84-5819-4aea-8278-a28d2b489028"
},
{
"rel": "bookmark",
"href": "http://controller:9322/audits/65a5da84-5819-4aea-8278-a28d2b489028"
}
],
"strategy_name": "workload_stabilization",
"next_run_time": null,
"updated_at": null,
"hostname": null,
"start_time": null,
"end_time": null
}

View File

@@ -0,0 +1,58 @@
{
"audits": [
{
"interval": "*/2 * * * *",
"strategy_uuid": "6b3b3902-8508-4cb0-bb85-67f32866b086",
"goal_uuid": "e1a5a45b-f251-47cf-9c5f-fa1e66e1286a",
"name": "test_audit",
"parameters": {
"host_choice": "retry",
"instance_metrics": {
"cpu_util": "compute.node.cpu.percent",
"memory.resident": "hardware.memory.used"
},
"granularity": 300,
"weights": {
"cpu_util_weight": 1.0,
"memory.resident_weight": 1.0
},
"retry_count": 1,
"metrics": [
"cpu_util"
],
"periods": {
"instance": 720,
"node": 600
},
"thresholds": {
"cpu_util": 0.2,
"memory.resident": 0.2
}
},
"auto_trigger": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
"created_at": "2018-04-06T07:27:27.820460+00:00",
"deleted_at": null,
"state": "ONGOING",
"audit_type": "CONTINUOUS",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audits/65a5da84-5819-4aea-8278-a28d2b489028"
},
{
"rel": "bookmark",
"href": "http://controller:9322/audits/65a5da84-5819-4aea-8278-a28d2b489028"
}
],
"strategy_name": "workload_stabilization",
"next_run_time": "2018-04-06T09:46:00",
"updated_at": "2018-04-06T09:44:01.604146+00:00",
"hostname": "controller",
"start_time": null,
"end_time": null
}
]
}

View File

@@ -0,0 +1,28 @@
{
"audits": [
{
"interval": null,
"strategy_uuid": "e311727b-b9b3-43ef-a5f7-8bd7ea80df25",
"goal_uuid": "4690f8ba-18ff-45c1-99e9-159556d23810",
"name": "dummy-2018-03-26T11:56:07.950400",
"auto_trigger": false,
"uuid": "ccc69a5f-114e-46f4-b15e-a77eaa337b01",
"goal_name": "dummy",
"scope": [],
"state": "SUCCEEDED",
"audit_type": "ONESHOT",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audits/ccc69a5f-114e-46f4-b15e-a77eaa337b01"
},
{
"rel": "bookmark",
"href": "http://controller:9322/audits/ccc69a5f-114e-46f4-b15e-a77eaa337b01"
}
],
"strategy_name": "dummy",
"next_run_time": null
}
]
}

View File

@@ -0,0 +1,54 @@
{
"interval": "*/2 * * * *",
"strategy_uuid": "6b3b3902-8508-4cb0-bb85-67f32866b086",
"goal_uuid": "e1a5a45b-f251-47cf-9c5f-fa1e66e1286a",
"name": "test_audit",
"parameters": {
"host_choice": "retry",
"instance_metrics": {
"cpu_util": "compute.node.cpu.percent",
"memory.resident": "hardware.memory.used"
},
"granularity": 300,
"weights": {
"cpu_util_weight": 1.0,
"memory.resident_weight": 1.0
},
"retry_count": 1,
"metrics": [
"cpu_util"
],
"periods": {
"instance": 720,
"node": 600
},
"thresholds": {
"cpu_util": 0.2,
"memory.resident": 0.2
}
},
"auto_trigger": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
"created_at": "2018-04-06T07:27:27.820460+00:00",
"deleted_at": null,
"state": "ONGOING",
"audit_type": "CONTINUOUS",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audits/65a5da84-5819-4aea-8278-a28d2b489028"
},
{
"rel": "bookmark",
"href": "http://controller:9322/audits/65a5da84-5819-4aea-8278-a28d2b489028"
}
],
"strategy_name": "workload_stabilization",
"next_run_time": "2018-04-06T11:56:00",
"updated_at": "2018-04-06T11:54:01.266447+00:00",
"hostname": "controller",
"start_time": null,
"end_time": null
}

View File

@@ -0,0 +1,12 @@
[
{
"value": "CANCELLED",
"path": "/state",
"op": "replace"
},
{
"value": "audit1",
"path": "/name",
"op": "replace"
}
]

View File

@@ -0,0 +1,54 @@
{
"interval": "*/2 * * * *",
"strategy_uuid": "6b3b3902-8508-4cb0-bb85-67f32866b086",
"goal_uuid": "e1a5a45b-f251-47cf-9c5f-fa1e66e1286a",
"name": "audit1",
"parameters": {
"host_choice": "retry",
"instance_metrics": {
"cpu_util": "compute.node.cpu.percent",
"memory.resident": "hardware.memory.used"
},
"granularity": 300,
"weights": {
"cpu_util_weight": 1.0,
"memory.resident_weight": 1.0
},
"retry_count": 1,
"metrics": [
"cpu_util"
],
"periods": {
"instance": 720,
"node": 600
},
"thresholds": {
"cpu_util": 0.2,
"memory.resident": 0.2
}
},
"auto_trigger": false,
"uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
"goal_name": "workload_balancing",
"scope": [],
"created_at": "2018-04-06T07:27:27.820460+00:00",
"deleted_at": null,
"state": "CANCELLED",
"audit_type": "CONTINUOUS",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audits/65a5da84-5819-4aea-8278-a28d2b489028"
},
{
"rel": "bookmark",
"href": "http://controller:9322/audits/65a5da84-5819-4aea-8278-a28d2b489028"
}
],
"strategy_name": "workload_stabilization",
"next_run_time": "2018-04-06T11:56:00",
"updated_at": "2018-04-06T11:54:01.266447+00:00",
"hostname": "controller",
"start_time": null,
"end_time": null
}

View File

@@ -0,0 +1,7 @@
{
"name": "at2",
"goal": "dummy",
"strategy": "dummy",
"description": "the second audit template",
"scope": []
}

View File

@@ -0,0 +1,4 @@
{
"name": "at2",
"goal": "dummy"
}

View File

@@ -0,0 +1,23 @@
{
"description": null,
"strategy_uuid": null,
"goal_uuid": "4690f8ba-18ff-45c1-99e9-159556d23810",
"name": "at3",
"uuid": "b4041d8c-85d7-4224-851d-649fe48b7196",
"goal_name": "dummy",
"scope": [],
"created_at": "2018-04-04T08:38:33.110432+00:00",
"deleted_at": null,
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audit_templates/b4041d8c-85d7-4224-851d-649fe48b7196"
},
{
"rel": "bookmark",
"href": "http://controller:9322/audit_templates/b4041d8c-85d7-4224-851d-649fe48b7196"
}
],
"strategy_name": null,
"updated_at": null
}

View File

@@ -0,0 +1,23 @@
{
"audit_templates":[
{
"strategy_uuid": null,
"goal_uuid": "4690f8ba-18ff-45c1-99e9-159556d23810",
"name": "at3",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audit_templates/b4041d8c-85d7-4224-851d-649fe48b7196"
},
{
"rel": "bookmark", "href":
"http://controller:9322/audit_templates/b4041d8c-85d7-4224-851d-649fe48b7196"
}
],
"strategy_name": null,
"uuid": "b4041d8c-85d7-4224-851d-649fe48b7196",
"goal_name": "dummy", "scope": [],
"description": null
}
]
}

View File

@@ -0,0 +1,22 @@
{
"audit_templates":[
{
"strategy_uuid": null,
"goal_uuid": "4690f8ba-18ff-45c1-99e9-159556d23810",
"name": "at3",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audit_templates/b4041d8c-85d7-4224-851d-649fe48b7196"
},
{
"rel": "bookmark", "href":
"http://controller:9322/audit_templates/b4041d8c-85d7-4224-851d-649fe48b7196"
}
],
"strategy_name": null,
"uuid": "b4041d8c-85d7-4224-851d-649fe48b7196",
"goal_name": "dummy", "scope": []
}
]
}

View File

@@ -0,0 +1,23 @@
{
"description": "test 1",
"strategy_uuid": null,
"goal_uuid": "4690f8ba-18ff-45c1-99e9-159556d23810",
"name": "at1",
"uuid": "0d100c27-14af-4962-86fb-f6079287c9c6",
"goal_name": "dummy",
"scope": [],
"created_at": "2018-04-04T07:48:36.175472+00:00",
"deleted_at": null,
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audit_templates/0d100c27-14af-4962-86fb-f6079287c9c6"
},
{
"rel": "bookmark",
"href": "http://controller:9322/audit_templates/0d100c27-14af-4962-86fb-f6079287c9c6"
}
],
"strategy_name": null,
"updated_at": "2018-04-05T07:57:55.803650+00:00"
}

View File

@@ -0,0 +1,7 @@
[
{
"op": "replace",
"value": "PENDING",
"path": "/state"
}
]

View File

@@ -0,0 +1,23 @@
{
"description": "test 1",
"strategy_uuid": null,
"goal_uuid": "4690f8ba-18ff-45c1-99e9-159556d23810",
"name": "at11",
"uuid": "0d100c27-14af-4962-86fb-f6079287c9c6",
"goal_name": "dummy",
"scope": [],
"created_at": "2018-04-04T07:48:36.175472+00:00",
"deleted_at": null,
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/audit_templates/0d100c27-14af-4962-86fb-f6079287c9c6"
},
{
"rel": "bookmark",
"href": "http://controller:9322/audit_templates/0d100c27-14af-4962-86fb-f6079287c9c6"
}
],
"strategy_name": null,
"updated_at": "2018-04-05T07:57:42.139127+00:00"
}

View File

@@ -0,0 +1,55 @@
{
"goals": [
{
"efficacy_specification": [],
"uuid": "e1a5a45b-f251-47cf-9c5f-fa1e66e1286a",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/goals/e1a5a45b-f251-47cf-9c5f-fa1e66e1286a"
},
{
"rel": "bookmark",
"href": "http://controller:9322/goals/e1a5a45b-f251-47cf-9c5f-fa1e66e1286a"
}
],
"name": "workload_balancing",
"display_name": "Workload Balancing"
},
{
"efficacy_specification": [
{
"description": "The total number of enabled compute nodes.",
"schema": "Range(min=0, max=None, min_included=True, max_included=True, msg=None)",
"name": "compute_nodes_count",
"unit": null
},
{
"description": "The number of compute nodes to be released.",
"schema": "Range(min=0, max=None, min_included=True, max_included=True, msg=None)",
"name": "released_compute_nodes_count",
"unit": null
},
{
"description": "The number of VM migrations to be performed.",
"schema": "Range(min=0, max=None, min_included=True, max_included=True, msg=None)",
"name": "instance_migrations_count",
"unit": null
}
],
"uuid": "cb9afa5e-aec7-4a8c-9261-c15c33f2262b",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/goals/cb9afa5e-aec7-4a8c-9261-c15c33f2262b"
},
{
"rel": "bookmark",
"href": "http://controller:9322/goals/cb9afa5e-aec7-4a8c-9261-c15c33f2262b"
}
],
"name": "server_consolidation",
"display_name": "Server Consolidation"
}
]
}

View File

@@ -0,0 +1,19 @@
{
"efficacy_specification": [],
"name": "saving_energy",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/goals/6f52889a-9dd4-4dbb-8e70-39b56c4836cc"
},
{
"rel": "bookmark",
"href": "http://controller:9322/goals/6f52889a-9dd4-4dbb-8e70-39b56c4836cc"
}
],
"uuid": "6f52889a-9dd4-4dbb-8e70-39b56c4836cc",
"updated_at": null,
"display_name": "Saving Energy",
"created_at": "2018-03-26T11:55:24.365584+00:00",
"deleted_at": null
}

View File

@@ -0,0 +1,20 @@
{
"scoring_engines": [
{
"description": "Dummy Scorer calculating the average value",
"uuid": "5a44f007-55b1-423c-809f-6a274a9bd93b",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/scoring_engines/5a44f007-55b1-423c-809f-6a274a9bd93b"
},
{
"rel": "bookmark",
"href": "http://controller:9322/scoring_engines/5a44f007-55b1-423c-809f-6a274a9bd93b"
}
],
"name": "dummy_avg_scorer",
"metainfo": ""
}
]
}

View File

@@ -0,0 +1,19 @@
{
"scoring_engines": [
{
"description": "Dummy Scorer calculating the average value",
"uuid": "5a44f007-55b1-423c-809f-6a274a9bd93b",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/scoring_engines/5a44f007-55b1-423c-809f-6a274a9bd93b"
},
{
"rel": "bookmark",
"href": "http://controller:9322/scoring_engines/5a44f007-55b1-423c-809f-6a274a9bd93b"
}
],
"name": "dummy_avg_scorer"
}
]
}

View File

@@ -0,0 +1,16 @@
{
"description": "Dummy Scorer calculating the maximum value",
"uuid": "1ac42282-4e77-473e-898b-62ea007f1deb",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/scoring_engines/1ac42282-4e77-473e-898b-62ea007f1deb"
},
{
"rel": "bookmark",
"href": "http://controller:9322/scoring_engines/1ac42282-4e77-473e-898b-62ea007f1deb"
}
],
"name": "dummy_max_scorer",
"metainfo": ""
}

View File

@@ -0,0 +1,24 @@
{
"services": [
{
"status": "ACTIVE",
"name": "watcher-applier",
"host": "controller",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/services/1"
},
{
"rel": "bookmark",
"href": "http://controller:9322/services/1"
}
],
"id": 1,
"deleted_at": null,
"updated_at": "2018-04-26T08:52:37.652895+00:00",
"last_seen_up": "2018-04-26T08:52:37.648572",
"created_at": "2018-03-26T11:55:24.075093+00:00"
}
]
}

View File

@@ -0,0 +1,36 @@
{
"services": [
{
"id": 1,
"status": "ACTIVE",
"name": "watcher-applier",
"host": "controller",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/services/1"
},
{
"rel": "bookmark",
"href": "http://controller:9322/services/1"
}
]
},
{
"id": 2,
"status": "ACTIVE",
"name": "watcher-decision-engine",
"host": "controller",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/services/2"
},
{
"rel": "bookmark",
"href": "http://controller:9322/services/2"
}
]
}
]
}

View File

@@ -0,0 +1,20 @@
{
"status": "ACTIVE",
"name": "watcher-applier",
"host": "controller",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/services/1"
},
{
"rel": "bookmark",
"href": "http://controller:9322/services/1"
}
],
"id": 1,
"deleted_at": null,
"updated_at": "2018-04-26T09:45:37.653061+00:00",
"last_seen_up": "2018-04-26T09:45:37.649314",
"created_at": "2018-03-26T11:55:24.075093+00:00"
}

View File

@@ -0,0 +1,35 @@
{
"strategies": [
{
"goal_uuid": "cb9afa5e-aec7-4a8c-9261-c15c33f2262b",
"name": "vm_workload_consolidation",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/strategies/6382b2d7-259e-487d-88db-78c852ffea54"
},
{
"rel": "bookmark",
"href": "http://controller:9322/strategies/6382b2d7-259e-487d-88db-78c852ffea54"
}
],
"parameters_spec": {
"properties": {
"granularity": {
"default": 300,
"type": "number",
"description": "The time between two measures in an aggregated timeseries of a metric."
},
"period": {
"default": 3600,
"type": "number",
"description": "The time interval in seconds for getting statistic aggregation"
}
}
},
"uuid": "6382b2d7-259e-487d-88db-78c852ffea54",
"goal_name": "server_consolidation",
"display_name": "VM Workload Consolidation Strategy"
}
]
}

View File

@@ -0,0 +1,21 @@
{
"strategies": [
{
"goal_uuid": "4690f8ba-18ff-45c1-99e9-159556d23810",
"name": "dummy",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/strategies/e311727b-b9b3-43ef-a5f7-8bd7ea80df25"
},
{
"rel": "bookmark",
"href": "http://controller:9322/strategies/e311727b-b9b3-43ef-a5f7-8bd7ea80df25"
}
],
"uuid": "e311727b-b9b3-43ef-a5f7-8bd7ea80df25",
"goal_name": "dummy",
"display_name": "Dummy strategy"
}
]
}

View File

@@ -0,0 +1,33 @@
{
"goal_uuid": "4690f8ba-18ff-45c1-99e9-159556d23810",
"name": "dummy",
"links": [
{
"rel": "self",
"href": "http://controller:9322/v1/strategies/e311727b-b9b3-43ef-a5f7-8bd7ea80df25"
},
{
"rel": "bookmark",
"href": "http://controller:9322/strategies/e311727b-b9b3-43ef-a5f7-8bd7ea80df25"
}
],
"parameters_spec": {
"properties": {
"para2": {
"default": "hello",
"type": "string",
"description": "string parameter example"
},
"para1": {
"maximum": 10.2,
"type": "number",
"minimum": 1.0,
"description": "number parameter example",
"default": 3.2
}
}
},
"uuid": "e311727b-b9b3-43ef-a5f7-8bd7ea80df25",
"goal_name": "dummy",
"display_name": "Dummy strategy"
}

View File

@@ -0,0 +1,49 @@
[
{
"state": "gnocchi: available",
"comment": "",
"mandatory": true,
"type": "Datasource"
},
{
"state": [
{
"compute.node.cpu.percent": "available"
},
{
"cpu_util": "available"
},
{
"memory.resident": "available"
},
{
"hardware.memory.used": "available"
}
],
"comment": "",
"mandatory": false,
"type": "Metrics"
},
{
"state": [
{
"compute_model": "available"
},
{
"storage_model": "not available"
},
{
"baremetal_model": "not available"
}
],
"comment": "",
"mandatory": true,
"type": "CDM"
},
{
"state": "workload_stabilization",
"mandatory": "",
"comment": "",
"type": "Name"
}
]

View File

@@ -0,0 +1,258 @@
.. -*- rst -*-
============
Action Plans
============
An ``Action Plan`` specifies a flow of ``Actions`` that should be executed
in order to satisfy a given ``Goal``. It also contains an estimated
``global efficacy`` alongside a set of ``efficacy indicators``.
An ``Action Plan`` is generated by Watcher when an ``Audit`` is successful
which implies that the ``Strategy`` which was used has found a ``Solution``
to achieve the ``Goal`` of this ``Audit``.
In the default implementation of Watcher, an action plan is composed of
a graph of linked ``Actions``. Each action may have parent actions, which
should be executed prior to child action.
Start Action Plan
=================
.. rest_method:: POST /v1/action_plans/{actionplan_ident}/start
Starts a created Action Plan resource.
Normal response codes: 200
Error codes: 400,404
Request
-------
.. rest_parameters:: parameters.yaml
- actionplan_ident: actionplan_ident
Response
--------
The list and example below are representative of the response as of API
version 1:
.. rest_parameters:: parameters.yaml
- uuid: uuid
- state: actionplan_state
- audit_uuid: actionplan_audit_uuid
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- efficacy_indicators: actionplan_efficacy_indicators
- global_efficacy: actionplan_global_efficacy
- links: links
- hostname: actionplan_hostname
**Example JSON representation of an Action Plan:**
.. literalinclude:: samples/actionplan-start-response.json
:language: javascript
List Action Plan
================
.. rest_method:: GET /v1/action_plans
Returns a list of Action Plan resources.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- audit_uuid: r_audit
- strategy: r_strategy
- limit: limit
- marker: marker
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- state: actionplan_state
- audit_uuid: actionplan_audit_uuid
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- efficacy_indicators: actionplan_efficacy_indicators
- global_efficacy: actionplan_global_efficacy
- links: links
**Example JSON representation of an Action Plan:**
.. literalinclude:: samples/actionplan-list-response.json
:language: javascript
List Action Plan detailed
=========================
.. rest_method:: GET /v1/action_plans/detail
Returns a list of Action Plan resources with complete details.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- audit_uuid: r_audit
- strategy: r_strategy
- limit: limit
- marker: marker
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- deleted_at: deleted_at
- updated_at: updated_at
- created_at: created_at
- uuid: uuid
- state: actionplan_state
- audit_uuid: actionplan_audit_uuid
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- efficacy_indicators: actionplan_efficacy_indicators
- global_efficacy: actionplan_global_efficacy
- links: links
- hostname: actionplan_hostname
**Example JSON representation of an Action Plan:**
.. literalinclude:: samples/actionplan-list-detailed-response.json
:language: javascript
Show Action Plan
================
.. rest_method:: GET /v1/action_plans/{actionplan_ident}
Shows details for an Action Plan.
Normal response codes: 200
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- actionplan_ident: actionplan_ident
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- state: actionplan_state
- audit_uuid: actionplan_audit_uuid
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- efficacy_indicators: actionplan_efficacy_indicators
- global_efficacy: actionplan_global_efficacy
- links: links
- hostname: actionplan_hostname
**Example JSON representation of an Audit:**
.. literalinclude:: samples/actionplan-show-response.json
:language: javascript
Cancel Action Plan
==================
.. rest_method:: PATCH /v1/action_plans/{actionplan_ident}
Cancels a created Action Plan resource.
.. note:
If Action Plan is in ONGOING state, then ``state`` attribute should be
replaced with ``CANCELLING`` value. Otherwise, ``CANCELLED`` is to be
used.
Normal response codes: 200
Error codes: 400,404
Request
-------
.. rest_parameters:: parameters.yaml
- actionplan_ident: actionplan_ident
**Example Action Plan ONGOING cancelling request:**
.. literalinclude:: samples/actionplan-cancel-request-cancelling.json
:language: javascript
**Example Action Plan PENDING cancelling request:**
.. literalinclude:: samples/actionplan-cancel-request-pending.json
:language: javascript
Response
--------
The list and example below are representative of the response as of API
version 1:
.. rest_parameters:: parameters.yaml
- uuid: uuid
- state: actionplan_state
- audit_uuid: actionplan_audit_uuid
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- efficacy_indicators: actionplan_efficacy_indicators
- global_efficacy: actionplan_global_efficacy
- links: links
- hostname: actionplan_hostname
**Example JSON representation of an Action Plan:**
.. literalinclude:: samples/actionplan-start-response.json
:language: javascript
Delete Action Plan
==================
.. rest_method:: DELETE /v1/action_plans/{actionplan_ident}
Deletes an Action Plan. Action Plan can be deleted only from SUCCEEDED, RECOMMENDED, FAILED, SUPERSEDED, CANCELLED states.
Normal response codes: 204
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- actionplan_ident: actionplan_ident

View File

@@ -0,0 +1,155 @@
.. -*- rst -*-
=======
Actions
=======
An ``Action`` is what enables Watcher to transform the current state of a
``Cluster`` after an ``Audit``.
An ``Action`` is an atomic task which changes the current state of a target
Managed resource of the OpenStack ``Cluster`` such as:
- Live migration of an instance from one compute node to another compute
node with Nova
- Changing the power level of a compute node (ACPI level, ...)
- Changing the current state of a compute node (enable or disable) with Nova
In most cases, an ``Action`` triggers some concrete commands on an existing
OpenStack module (Nova, Neutron, Cinder, Ironic, etc.).
An ``Action`` has a life-cycle and its current state may be one of the
following:
- **PENDING** : the ``Action`` has not been executed yet by the
``Watcher Applier``.
- **ONGOING** : the ``Action`` is currently being processed by the
``Watcher Applier``.
- **SUCCEEDED** : the ``Action`` has been executed successfully
- **FAILED** : an error occurred while trying to execute the ``Action``.
- **DELETED** : the ``Action`` is still stored in the ``Watcher database``
but is not returned any more through the Watcher APIs.
- **CANCELLED** : the ``Action`` was in **PENDING** or **ONGOING** state and
was cancelled by the ``Administrator``
``Actions`` are created by ``Watcher Planner`` as result of Audit's execution.
``Action`` can't be created, modified or deleted by user.
List Action
===========
.. rest_method:: GET /v1/actions
Returns a list of Action resources.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- action_plan_uuid: r_action_plan
- audit_uuid: r_audit
- limit: limit
- marker: marker
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- action_type: action_type
- state: action_state
- action_plan_uuid: action_action_plan_uuid
- parents: action_parents
- links: links
**Example JSON representation of an Action:**
.. literalinclude:: samples/actions-list-response.json
:language: javascript
List Action Detailed
====================
.. rest_method:: GET /v1/actions/detail
Returns a list of Action resources with complete details.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- action_plan_uuid: r_action_plan
- audit_uuid: r_audit
- limit: limit
- marker: marker
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- action_type: action_type
- state: action_state
- action_plan_uuid: action_action_plan_uuid
- parents: action_parents
- description: action_description
- input_parameters: action_input_parameters
- links: links
**Example JSON representation of an Action:**
.. literalinclude:: samples/actions-list-detailed-response.json
:language: javascript
Show Action
===========
.. rest_method:: GET /v1/actions/{action_ident}
Shows details for an Action.
Normal response codes: 200
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- action_ident: action_ident
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- action_type: action_type
- state: action_state
- action_plan_uuid: action_action_plan_uuid
- parents: action_parents
- description: action_description
- input_parameters: action_input_parameters
- links: links
**Example JSON representation of an Action:**
.. literalinclude:: samples/actions-show-response.json
:language: javascript

View File

@@ -0,0 +1,361 @@
.. -*- rst -*-
======
Audits
======
There are creating, listing, updating and deleting methods of Watcher Audit
resources which are implemented via the ``/v1/audits`` resource.
In the Watcher system, an ``Audit`` is a request for optimizing a ``Cluster``.
The optimization is done in order to satisfy one ``Goal`` on a given
``Cluster``.
For each ``Audit``, the Watcher system generates an ``Action Plan``.
Create Audit
============
.. rest_method:: POST /v1/audits
Creates a new Audit resource.
Mandatory attribute to be supplied: ``audit_type``.
``Audit`` can be created either based on existed ``Audit Template`` or by
itself. In the first case, there also should be supplied
``audit_template_uuid``. If ``Audit`` is created without ``Audit Template``,
``goal`` should be provided.
Normal response codes: 201
Error codes: 400,404
Request
-------
.. rest_parameters:: parameters.yaml
- audit_template_uuid: audittemplate_uuid
- audit_type: audit_type
- name: audit_name
- goal: audit_goal
- strategy: audit_strategy
- parameters: audit_parameters
- interval: audit_interval
- auto_trigger: audit_autotrigger
- start_time: audit_starttime_req
- end_time: audit_endtime_req
**Example ONESHOT Audit creation request:**
.. literalinclude:: samples/audit-create-request-oneshot.json
:language: javascript
**Example CONTINUOUS Audit creation request with a specified strategy:**
.. literalinclude:: samples/audit-create-request-continuous.json
:language: javascript
Response
--------
The list and example below are representative of the response as of API
version 1:
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audit_name
- audit_type: audit_type
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- interval: audit_interval
- next_run_time: audit_next_run_time
- parameters: audit_parameters
- auto_trigger: audit_autotrigger
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
**Example JSON representation of an Audit:**
.. literalinclude:: samples/audit-create-response.json
:language: javascript
List Audit
==========
.. rest_method:: GET /v1/audits
Returns a list of Audit resources.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- goal: r_goal
- strategy: r_strategy
- limit: limit
- marker: marker
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audit_name
- audit_type: audit_type
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- interval: audit_interval
- next_run_time: audit_next_run_time
- auto_trigger: audit_autotrigger
- state: audit_state
- scope: audittemplate_scope
- links: links
**Example JSON representation of an Audit:**
.. literalinclude:: samples/audit-list-response.json
:language: javascript
List Audit Detailed
===================
.. rest_method:: GET /v1/audits/detail
Returns a list of Audit resources with complete details.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- goal: r_goal
- strategy: r_strategy
- limit: limit
- marker: marker
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audit_name
- audit_type: audit_type
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- interval: audit_interval
- next_run_time: audit_next_run_time
- parameters: audit_parameters
- auto_trigger: audit_autotrigger
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
**Example JSON representation of an Audit:**
.. literalinclude:: samples/audit-list-detailed-response.json
:language: javascript
Show Audit
==========
.. rest_method:: GET /v1/audits/{audit_ident}
Shows details for an Audit.
Normal response codes: 200
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- audit_ident: audit_ident
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audit_name
- audit_type: audit_type
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- interval: audit_interval
- next_run_time: audit_next_run_time
- parameters: audit_parameters
- auto_trigger: audit_autotrigger
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
**Example JSON representation of an Audit:**
.. literalinclude:: samples/audit-show-response.json
:language: javascript
Cancel Audit
============
.. rest_method:: PATCH /v1/audits/{audit_ident}
Cancels an ONGOING Audit resource.
Normal response codes: 200
Error codes: 400,404
Request
-------
.. rest_parameters:: parameters.yaml
- audit_ident: audit_ident
**Example Audit cancelling request:**
.. literalinclude:: samples/audit-cancel-request.json
:language: javascript
Response
--------
The list and example below are representative of the response as of API
version 1:
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audit_name
- audit_type: audit_type
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- interval: audit_interval
- next_run_time: audit_next_run_time
- parameters: audit_parameters
- auto_trigger: audit_autotrigger
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
**Example JSON representation of an Audit:**
.. literalinclude:: samples/audit-cancel-response.json
:language: javascript
Update Audit
============
.. rest_method:: PATCH /v1/audits/{audit_ident}
Updates an Audit with the given information.
.. note:
``audit_type`` shouldn't be changed by PATCH method.
Normal response codes: 200
Error codes: 400,404
Request
-------
.. rest_parameters:: parameters.yaml
- audit_ident: audit_ident
**Example PATCH document updating Audit:**
.. literalinclude:: samples/audit-update-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audit_name
- audit_type: audit_type
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- interval: audit_interval
- next_run_time: audit_next_run_time
- parameters: audit_parameters
- auto_trigger: audit_autotrigger
- state: audit_state
- scope: audittemplate_scope
- links: links
- hostname: audit_hostname
- start_time: audit_starttime_resp
- end_time: audit_endtime_resp
**Example JSON representation of an Audit:**
.. literalinclude:: samples/audit-update-response.json
:language: javascript
Delete Audit
============
.. rest_method:: DELETE /v1/audits/{audit_ident}
Deletes an Audit. Audit can be deleted only from FAILED, SUCCEEDED, CANCELLED,
SUSPENDED states.
Normal response codes: 204
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- audit_ident: audit_ident

View File

@@ -0,0 +1,257 @@
.. -*- rst -*-
===============
Audit Templates
===============
There are creating, listing, updating and deleting methods of Watcher Audit
Template resources which are implemented via the ``/v1/audit_templates``
resource.
An Audit may be launched several times with the same settings
(Goal, thresholds, ...). Therefore it makes sense to save those settings in
some sort of Audit preset object, which is known as an Audit Template.
An Audit Template contains at least the Goal of the Audit.
Create Audit Template
=====================
.. rest_method:: POST /v1/audit_templates
Creates a new Audit Template resource.
It requires ``name`` and ``goal`` attributes to be supplied in the request
body.
Normal response codes: 201
Error codes: 400,404,409
Request
-------
.. rest_parameters:: parameters.yaml
- name: audittemplate_name
- goal: audittemplate_goal
- strategy: audittemplate_strategy
- description: audittemplate_description
- scope: audittemplate_scope
**Example Audit Template creation request without a specified strategy:**
.. literalinclude:: samples/audittemplate-create-request-minimal.json
:language: javascript
**Example Audit Template creation request with a specified strategy:**
.. literalinclude:: samples/audittemplate-create-request-full.json
:language: javascript
Response
--------
The list and example below are representative of the response as of API
version 1:
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audittemplate_name
- description: audittemplate_description
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- scope: audittemplate_scope
- links: links
**Example JSON representation of an Audit Template:**
.. literalinclude:: samples/audittemplate-create-response.json
:language: javascript
List Audit Template
===================
.. rest_method:: GET /v1/audit_templates
Returns a list of Audit Template resources.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- goal: r_goal
- strategy: r_strategy
- limit: limit
- marker: marker
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audittemplate_name
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- scope: audittemplate_scope
- links: links
**Example JSON representation of an Audit Template:**
.. literalinclude:: samples/audittemplate-list-response.json
:language: javascript
List Audit Template Detailed
============================
.. rest_method:: GET /v1/audit_templates/detail
Returns a list of Audit Template resources with complete details.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- goal: r_goal
- strategy: r_strategy
- limit: limit
- marker: marker
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audittemplate_name
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- scope: audittemplate_scope
- links: links
- description: audittemplate_description
**Example JSON representation of an Audit Template:**
.. literalinclude:: samples/audittemplate-list-detailed-response.json
:language: javascript
Show Audit Template
===================
.. rest_method:: GET /v1/audit_templates/{audittemplate_ident}
Shows details for an Audit Template.
Normal response codes: 200
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- audittemplate_ident: audittemplate_ident
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audittemplate_name
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- scope: audittemplate_scope
- links: links
- description: audittemplate_description
**Example JSON representation of an Audit Template:**
.. literalinclude:: samples/audittemplate-show-response.json
:language: javascript
Update Audit Template
=====================
.. rest_method:: PATCH /v1/audit_templates/{audittemplate_ident}
Updates an Audit Template with the given information.
Normal response codes: 200
Error codes: 400,404
Request
-------
.. rest_parameters:: parameters.yaml
- audittemplate_ident: audittemplate_ident
**Example PATCH document updating Audit Template:**
.. literalinclude:: samples/audittemplate-update-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: audittemplate_name
- strategy_uuid: strategy_uuid
- strategy_name: strategy_name
- goal_uuid: goal_uuid
- goal_name: goal_name
- scope: audittemplate_scope
- links: links
- description: audittemplate_description
**Example JSON representation of an Audit Template:**
.. literalinclude:: samples/audittemplate-update-response.json
:language: javascript
Delete Audit Template
=====================
.. rest_method:: DELETE /v1/audit_templates/{audittemplate_ident}
Deletes an Audit Template.
Normal response codes: 204
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- audittemplate_ident: audittemplate_ident

View File

@@ -0,0 +1,126 @@
.. -*- rst -*-
=====
Goals
=====
A ``Goal`` is a human readable, observable and measurable end result having
one objective to be achieved.
Here are some examples of ``Goals``:
- minimize the energy consumption
- minimize the number of compute nodes (consolidation)
- balance the workload among compute nodes
- minimize the license cost (some softwares have a licensing model which is
based on the number of sockets or cores where the software is deployed)
- find the most appropriate moment for a planned maintenance on a
given group of host (which may be an entire availability zone):
power supply replacement, cooling system replacement, hardware
modification, ...
List Goal
=========
.. rest_method:: GET /v1/goals
Returns a list of Goal resources.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- limit: limit
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- efficacy_specification: goal_efficacy_specification
- name: goal_name
- display_name: goal_display_name
- links: links
**Example JSON representation of a Goal:**
.. literalinclude:: samples/goal-list-response.json
:language: javascript
List Goal Detailed
==================
.. rest_method:: GET /v1/goals/detail
Returns a list of Goal resources with complete details.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- limit: limit
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- efficacy_specification: goal_efficacy_specification
- name: goal_name
- display_name: goal_display_name
- links: links
**Example JSON representation of a Goal:**
.. literalinclude:: samples/goal-list-response.json
:language: javascript
Show Goal
=========
.. rest_method:: GET /v1/goals/{goal_ident}
Shows details for an Goal.
Normal response codes: 200
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- goal_ident: goal_ident
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- efficacy_specification: goal_efficacy_specification
- name: goal_name
- display_name: goal_display_name
- links: links
**Example JSON representation of a Goal:**
.. literalinclude:: samples/goal-show-response.json
:language: javascript

View File

@@ -0,0 +1,120 @@
.. -*- rst -*-
===============
Scoring Engines
===============
A ``Scoring Engine`` is an executable that has a well-defined input, a
well-defined output, and performs a purely mathematical task. That is,
the calculation does not depend on the environment in which it is running - it
would produce the same result anywhere.
Because there might be multiple algorithms used to build a particular data
model (and therefore a scoring engine), the usage of scoring engine might
vary. A metainfo field is supposed to contain any information which might
be needed by the user of a given scoring engine.
List Scoring Engine
===================
.. rest_method:: GET /v1/scoring_engines
Returns a list of Scoring Engine resources.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- limit: limit
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: scoring_engine_name
- description: scoring_engine_description
- links: links
**Example JSON representation of a Scoring Engine:**
.. literalinclude:: samples/scoring_engine-list-response.json
:language: javascript
List Scoring Engine Detailed
============================
.. rest_method:: GET /v1/scoring_engines/detail
Returns a list of Scoring Engine resources with complete details.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- limit: limit
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: scoring_engine_name
- description: scoring_engine_description
- metainfo: scoring_engine_metainfo
- links: links
**Example JSON representation of a Scoring Engine:**
.. literalinclude:: samples/scoring_engine-list-detailed-response.json
:language: javascript
Show Scoring Engine
===================
.. rest_method:: GET /v1/scoring_engines/{scoring_engine_ident}
Shows details for a Scoring Engine resource.
Normal response codes: 200
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- scoring_engine_ident: scoring_engine_ident
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: scoring_engine_name
- description: scoring_engine_description
- metainfo: scoring_engine_metainfo
- links: links
**Example JSON representation of a Scoring Engine:**
.. literalinclude:: samples/scoring_engine-show-response.json
:language: javascript

View File

@@ -0,0 +1,116 @@
.. -*- rst -*-
========
Services
========
This resource represents Watcher services, their states and hosts they are
placed on.
List Service
============
.. rest_method:: GET /v1/services
Returns a list of Service resources.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- limit: limit
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- id: service_id
- name: service_name
- host: service_host
- status: service_status
- links: links
**Example JSON representation of a Service:**
.. literalinclude:: samples/service-list-response.json
:language: javascript
List Service Detailed
=====================
.. rest_method:: GET /v1/services/detail
Returns a list of Service resources with complete details.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- limit: limit
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- id: service_id
- name: service_name
- host: service_host
- status: service_status
- last_seen_up: service_last_seen_up
- links: links
**Example JSON representation of a Service:**
.. literalinclude:: samples/service-list-detailed-response.json
:language: javascript
Show Service
============
.. rest_method:: GET /v1/services/{service_ident}
Shows details for a Service resource.
Normal response codes: 200
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- service_ident: service_ident
Response
--------
.. rest_parameters:: parameters.yaml
- id: service_id
- name: service_name
- host: service_host
- status: service_status
- last_seen_up: service_last_seen_up
- links: links
**Example JSON representation of a Service:**
.. literalinclude:: samples/service-show-response.json
:language: javascript

View File

@@ -0,0 +1,164 @@
.. -*- rst -*-
==========
Strategies
==========
A ``Strategy`` is an algorithm implementation which is able to find a
``Solution`` for a given ``Goal``. To get more information about strategies
that are shipped along with Watcher, visit `strategies page`_.
There may be several potential strategies which are able to achieve the same
``Goal``. This is why it is possible to configure which specific ``Strategy``
should be used for each goal.
Some strategies may provide better optimization results but may take more time
to find an optimal ``Solution``.
.. _`strategies page`: https://docs.openstack.org/watcher/latest/strategies/index.html
List Strategy
=============
.. rest_method:: GET /v1/strategies
Returns a list of Strategy resources.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- goal: r_goal
- limit: limit
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: strategy_name
- display_name: strategy_display_name
- goal_name: goal_name
- goal_uuid: goal_uuid
- links: links
**Example JSON representation of a Strategy:**
.. literalinclude:: samples/strategy-list-response.json
:language: javascript
List Strategy Detailed
======================
.. rest_method:: GET /v1/strategies/detail
Returns a list of Strategy resources with complete details.
Normal response codes: 200
Error codes: 400,401
Request
-------
.. rest_parameters:: parameters.yaml
- goal: r_goal
- limit: limit
- sort_dir: sort_dir
- sort_key: sort_key
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: strategy_name
- display_name: strategy_display_name
- parameters_spec: strategy_parameters_spec
- goal_name: goal_name
- goal_uuid: goal_uuid
- links: links
**Example JSON representation of a Strategy:**
.. literalinclude:: samples/strategy-list-detailed-response.json
:language: javascript
Show Strategy
=============
.. rest_method:: GET /v1/strategies/{strategy_ident}
Shows details for a Strategy resource.
Normal response codes: 200
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- strategy_ident: strategy_ident
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: strategy_name
- display_name: strategy_display_name
- parameters_spec: strategy_parameters_spec
- goal_name: goal_name
- goal_uuid: goal_uuid
- links: links
**Example JSON representation of a Strategy:**
.. literalinclude:: samples/strategy-show-response.json
:language: javascript
Show Strategy State
===================
.. rest_method:: GET /v1/strategies/{strategy_ident}/state
Retrieve an information about strategy requirements.
Normal response codes: 200
Error codes: 404
Request
-------
.. rest_parameters:: parameters.yaml
- strategy_ident: strategy_ident
Response
--------
.. rest_parameters:: parameters.yaml
- state: strategy_check_state
- comment: strategy_check_comment
- mandatory: strategy_check_mandatory
- type: strategy_check_type
**Example JSON representation of a Strategy:**
.. literalinclude:: samples/strategy-state-response.json
:language: javascript

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,9 +47,6 @@ 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
@@ -151,12 +148,17 @@ function create_watcher_accounts {
function _config_watcher_apache_wsgi {
local watcher_apache_conf
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; 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;
@@ -193,9 +195,6 @@ function create_watcher_conf {
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"
@@ -290,19 +289,22 @@ function start_watcher_api {
service_protocol="http"
fi
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
enable_apache_site watcher-api
restart_apache_server
else
run_process watcher-api "$WATCHER_BIN_DIR/watcher-api --config-file $WATCHER_CONF"
fi
echo "Waiting for watcher-api to start..."
if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$WATCHER_SERVICE_HOST:$service_port; 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
echo "Waiting for watcher-api to start..."
if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$WATCHER_SERVICE_HOST:$service_port; then
die $LINENO "watcher-api did not start"
fi
}
# start_watcher() - Start running processes, including screen
@@ -317,6 +319,7 @@ function start_watcher {
function stop_watcher {
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
disable_apache_site watcher-api
restart_apache_server
else
stop_process watcher-api
fi

View File

@@ -44,6 +44,3 @@ 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

View File

@@ -48,6 +48,3 @@ 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

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

11
devstack/upgrade/settings Normal file
View File

@@ -0,0 +1,11 @@
register_project_for_upgrade watcher
register_db_to_save watcher
devstack_localrc base enable_plugin watcher https://git.openstack.org/openstack/watcher stable/rocky
devstack_localrc target enable_plugin watcher https://git.openstack.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

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

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

@@ -0,0 +1,70 @@
#!/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 $(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
# 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 "*********************************************************************"

9
doc/requirements.txt Normal file
View File

@@ -0,0 +1,9 @@
# 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.6.5,!=1.6.6,!=1.6.7 # BSD
sphinxcontrib-pecanwsme>=0.8.0 # Apache-2.0
reno>=2.7.0 # Apache-2.0
sphinxcontrib-apidoc>=0.2.0 # BSD
os-api-ref>=1.4.0 # Apache-2.0

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

@@ -131,6 +131,16 @@ The actions that may have a rule enforced on them are:
* ``GET /v1/actions/<ACTION_UUID>``
* ``service:get_all``, ``service:detail`` - List available Watcher services
* ``GET /v1/services``
* ``GET /v1/services/detail``
* ``service:get`` - Retrieve a specific Watcher service entity
* ``GET /v1/services/<SERVICE_ID>``
To limit an action to a particular role or roles, you list the roles like so ::

View File

@@ -19,7 +19,7 @@ The source install instructions specifically avoid using platform specific
packages, instead using the source for the code and the Python Package Index
(PyPi_).
.. _PyPi: https://pypi.python.org/pypi
.. _PyPi: https://pypi.org/
It's expected that your system already has python2.7_, latest version of pip_,
and git_ available.
@@ -30,7 +30,7 @@ and git_ available.
Your system shall also have some additional system libraries:
On Ubuntu (tested on 14.04LTS):
On Ubuntu (tested on 16.04LTS):
.. code-block:: bash

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
@@ -461,4 +479,4 @@ change to a new value:
.. _Watcher API: webapi/v1.html
.. _Watcher API: https://developer.openstack.org/api-ref/resource-optimization/

View File

@@ -32,7 +32,7 @@ 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',
'sphinxcontrib.apidoc',
'sphinx.ext.viewcode',
'sphinxcontrib.httpdomain',
'sphinxcontrib.pecanwsme.rest',
@@ -55,6 +55,18 @@ sample_config_basename = 'watcher'
# text edit cycles.
# execute "export SPHINX_DEBUG=1" in your terminal to disable
# sphinxcontrib.apidoc options
apidoc_module_dir = '../../watcher'
apidoc_output_dir = 'api'
apidoc_excluded_paths = [
'tests/*',
'db',
'decision_engine',
'doc',
'objects',
]
apidoc_separate_modules = True
# The suffix of source filenames.
source_suffix = '.rst'

View File

@@ -19,11 +19,17 @@ optimize your IaaS platform. The Watcher service may, depending upon
configuration, interact with several other OpenStack services. This includes:
- the OpenStack Identity service (`keystone`_) for request authentication and
to locate other OpenStack services
- the OpenStack Telemetry service (`ceilometer`_) for consuming the resources
metrics
to locate other OpenStack services.
- the OpenStack Telemetry service (`ceilometer`_) for collecting the resources
metrics.
- the time series database (`gnocchi`_) for consuming the resources
metrics.
- the OpenStack Compute service (`nova`_) works with the Watcher service and
acts as a user-facing API for instance migration.
- the OpenStack Bare Metal service (`ironic`_) works with the Watcher service
and allows to manage power state of nodes.
- the OpenStack Block Storage service (`cinder`_) works with the Watcher
service and as an API for volume node migration.
The Watcher service includes the following components:
@@ -53,6 +59,9 @@ additional functionality:
.. _`keystone`: https://github.com/openstack/keystone
.. _`ceilometer`: https://github.com/openstack/ceilometer
.. _`nova`: https://github.com/openstack/nova
.. _`gnocchi`: https://github.com/gnocchixyz/gnocchi
.. _`ironic`: https://github.com/openstack/ironic
.. _`cinder`: https://github.com/openstack/cinder
.. _`python-watcherclient`: https://github.com/openstack/python-watcherclient
.. _`watcher-dashboard`: https://github.com/openstack/watcher-dashboard
.. _`watcher metering`: https://github.com/b-com/watcher-metering
@@ -129,10 +138,14 @@ Configure the Identity service for the Watcher service
.. code-block:: bash
$ openstack endpoint create --region YOUR_REGION watcher \
--publicurl http://WATCHER_API_PUBLIC_IP:9322 \
--internalurl http://WATCHER_API_INTERNAL_IP:9322 \
--adminurl http://WATCHER_API_ADMIN_IP:9322
$ openstack endpoint create --region YOUR_REGION
watcher public http://WATCHER_API_PUBLIC_IP:9322
$ openstack endpoint create --region YOUR_REGION
watcher internal http://WATCHER_API_INTERNAL_IP:9322
$ openstack endpoint create --region YOUR_REGION
watcher admin http://WATCHER_API_ADMIN_IP:9322
.. _watcher-db_configuration:
@@ -146,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' \
@@ -226,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)
@@ -260,7 +269,7 @@ so that the watcher service is configured for your needs.
# Authentication URL (unknown value)
#auth_url = <None>
auth_url = http://IDENTITY_IP:35357
auth_url = http://IDENTITY_IP:5000
# Username (unknown value)
# Deprecated group/name - [DEFAULT]/username
@@ -306,7 +315,7 @@ so that the watcher service is configured for your needs.
# Authentication URL (unknown value)
#auth_url = <None>
auth_url = http://IDENTITY_IP:35357
auth_url = http://IDENTITY_IP:5000
# Username (unknown value)
# Deprecated group/name - [DEFAULT]/username
@@ -336,7 +345,7 @@ so that the watcher service is configured for your needs.
[nova_client]
# Version of Nova API to use in novaclient. (string value)
#api_version = 2.53
#api_version = 2.56
api_version = 2.1
#. Create the Watcher Service database tables::
@@ -394,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

@@ -49,7 +49,7 @@ Bug tracker
https://launchpad.net/watcher
Mailing list (prefix subjects with ``[watcher]`` for faster responses)
http://lists.openstack.org/pipermail/openstack-dev/
http://lists.openstack.org/pipermail/openstack-discuss/
Wiki
https://wiki.openstack.org/Watcher

View File

@@ -37,7 +37,7 @@ different version of the above, please document your configuration here!
.. _Python: https://www.python.org/
.. _git: https://git-scm.com/
.. _setuptools: https://pypi.python.org/pypi/setuptools
.. _setuptools: https://pypi.org/project/setuptools
.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.io/en/latest/install.html
Getting the latest code
@@ -69,8 +69,8 @@ itself.
These dependencies can be installed from PyPi_ using the Python tool pip_.
.. _PyPi: https://pypi.python.org/
.. _pip: https://pypi.python.org/pypi/pip
.. _PyPi: https://pypi.org/
.. _pip: https://pypi.org/project/pip
However, your system *may* need additional dependencies that `pip` (and by
extension, PyPi) cannot satisfy. These dependencies should be installed
@@ -126,7 +126,7 @@ You can re-activate this virtualenv for your current shell using:
For more information on virtual environments, see virtualenv_ and
virtualenvwrapper_.
.. _virtualenv: https://pypi.python.org/pypi/virtualenv/
.. _virtualenv: https://pypi.org/project/virtualenv/
@@ -193,6 +193,8 @@ still need to configure the following sections:
:ref:`Identity service <identity-service_configuration>` i.e. Keystone
- The ``[watcher_messaging]`` section to configure the OpenStack AMQP-based
message bus
- The ``watcher_clients_auth`` section to configure Keystone client to access
related OpenStack projects
So if you need some more details on how to configure one or more of these
sections, please do have a look at :doc:`../configuration/configuring` before

View File

@@ -79,7 +79,7 @@ requirements.txt file::
.. _cookiecutter: https://github.com/audreyr/cookiecutter
.. _OpenStack cookiecutter: https://github.com/openstack-dev/cookiecutter
.. _python-watcher: https://pypi.python.org/pypi/python-watcher
.. _python-watcher: https://pypi.org/project/python-watcher
Implementing a plugin for Watcher
=================================

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,38 @@ 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
@property
def monasca(self):
if self._monasca is None:
self._monasca = mon.MonascaHelper(osc=self.osc)
return self._monasca
def datasource_backend(self):
if not self._datasource_backend:
self._datasource_backend = ds_manager.DataSourceManager(
config=self.config,
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

@@ -13,39 +13,32 @@ Testing
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 ``py35``, ``py27`` and
``pep8``, you can issue the following command::
$ workon watcher
(watcher) $ pip install tox
(watcher) $ cd watcher
(watcher) $ tox
$ git clone https://git.openstack.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 py35
$ tox -e py27
$ tox -e pep8
.. _tox: https://tox.readthedocs.org/
.. _watcher: https://git.openstack.org/cgit/openstack/watcher
.. _Gerrit: https://review.openstack.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 py27 -- 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://git.openstack.org/cgit/openstack/watcher-tempest-plugin

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

@@ -54,22 +54,6 @@ Getting Started
contributor/index
API References
--------------
.. toctree::
:maxdepth: 1
api/index
Plugins
-------
.. toctree::
:maxdepth: 1
contributor/plugin/index
Installation
============
.. toctree::
@@ -77,14 +61,6 @@ Installation
install/index
Watcher Configuration Options
=============================
.. toctree::
:maxdepth: 2
configuration/index
Admin Guide
===========
@@ -101,6 +77,31 @@ User Guide
user/index
API References
==============
.. toctree::
:maxdepth: 1
API Reference <https://developer.openstack.org/api-ref/resource-optimization/>
Watcher API Microversion History </contributor/api_microversion_history>
Plugins
-------
.. toctree::
:maxdepth: 1
contributor/plugin/index
Watcher Configuration Options
=============================
.. toctree::
:maxdepth: 2
configuration/index
Watcher Manual Pages
====================
@@ -117,7 +118,7 @@ Watcher Manual Pages
.. toctree::
:hidden:
api/autoindex
api/modules
Indices and tables

View File

@@ -27,7 +27,7 @@
[keystone_authtoken]
...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:35357
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
@@ -47,7 +47,7 @@
[watcher_clients_auth]
...
auth_type = password
auth_url = http://controller:35357
auth_url = http://controller:5000
username = watcher
password = WATCHER_PASS
project_domain_name = default

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

@@ -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

@@ -5,4 +5,5 @@
watcher-api
watcher-applier
watcher-db-manage
watcher-decision-engine
watcher-decision-engine
watcher-status

View File

@@ -241,10 +241,9 @@ purge
The maximum number of database objects we expect to be deleted. If exceeded,
this will prevent any deletion.
.. option:: -t, --audit-template
.. option:: -t, --goal
Either the UUID or name of the soft deleted audit template to purge. This
will also include any related objects with it.
Either the UUID or name of the goal to purge.
.. option:: -e, --exclude-orphans

View File

@@ -0,0 +1,83 @@
==============
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**
**1.12.0 (Stein)**
* Sample check to be filled in with checks as they are added in Stein.

View File

@@ -0,0 +1,94 @@
===========================
Host Maintenance Strategy
===========================
Synopsis
--------
**display name**: ``Host Maintenance Strategy``
**goal**: ``cluster_maintaining``
.. watcher-term:: watcher.decision_engine.strategy.strategies.host_maintenance.HostMaintenance
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
==================== ====== ====================================
``maintenance_node`` String The name of the compute node which
need maintenance. Required.
``backup_node`` String The name of the compute node which
will backup the maintenance node.
Optional.
==================== ====== ====================================
Efficacy Indicator
------------------
None
Algorithm
---------
For more information on the Host Maintenance Strategy please refer
to: https://specs.openstack.org/openstack/watcher-specs/specs/queens/approved/cluster-maintenance-strategy.html
How to use it ?
---------------
.. code-block:: shell
$ openstack optimize audit create \
-g cluster_maintaining -s host_maintenance \
-p maintenance_node=compute01 \
-p backup_node=compute02 \
--auto-trigger
External Links
--------------
None.

View File

@@ -0,0 +1,97 @@
==============
Noisy neighbor
==============
Synopsis
--------
**display name**: ``Noisy Neighbor``
**goal**: ``noisy_neighbor``
.. watcher-term:: watcher.decision_engine.strategy.strategies.noisy_neighbor.NoisyNeighbor
Requirements
------------
Metrics
*******
The *noisy_neighbor* strategy requires the following metrics:
============================ ============ ======= =======================
metric service name plugins comment
============================ ============ ======= =======================
``cpu_l3_cache`` ceilometer_ none Intel CMT_ is required
============================ ============ ======= =======================
.. _CMT: http://www.intel.com/content/www/us/en/architecture-and-technology/resource-director-technology.html
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute
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
Planner
*******
Default Watcher's planner:
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
Configuration
-------------
Strategy parameter is:
==================== ====== ============= ============================
parameter type default Value description
==================== ====== ============= ============================
``cache_threshold`` Number 35.0 Performance drop in L3_cache
threshold for migration
==================== ====== ============= ============================
Efficacy Indicator
------------------
None
Algorithm
---------
For more information on the noisy neighbor strategy please refer to:
http://specs.openstack.org/openstack/watcher-specs/specs/pike/implemented/noisy_neighbor_strategy.html
How to use it ?
---------------
.. code-block:: shell
$ openstack optimize audittemplate create \
at1 noisy_neighbor --strategy noisy_neighbor
$ openstack optimize audit create -a at1 \
-p cache_threshold=45.0
External Links
--------------
None

View File

@@ -0,0 +1,87 @@
========================
Storage capacity balance
========================
Synopsis
--------
**display name**: ``Storage Capacity Balance Strategy``
**goal**: ``workload_balancing``
.. watcher-term:: watcher.decision_engine.strategy.strategies.storage_capacity_balance.StorageCapacityBalance
Requirements
------------
Metrics
*******
None
Cluster data model
******************
Storage cluster data model is required:
.. watcher-term:: watcher.decision_engine.model.collector.cinder.CinderClusterDataModelCollector
Actions
*******
Default Watcher's actions:
.. list-table::
:widths: 25 35
:header-rows: 1
* - action
- description
* - ``volume_migrate``
- .. watcher-term:: watcher.applier.actions.volume_migration.VolumeMigrate
Planner
*******
Default Watcher's planner:
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
Configuration
-------------
Strategy parameter is:
==================== ====== ============= =====================================
parameter type default Value description
==================== ====== ============= =====================================
``volume_threshold`` Number 80.0 Volume threshold for capacity balance
==================== ====== ============= =====================================
Efficacy Indicator
------------------
None
Algorithm
---------
For more information on the storage capacity balance strategy please refer to:
http://specs.openstack.org/openstack/watcher-specs/specs/queens/implemented/storage-capacity-balance.html
How to use it ?
---------------
.. code-block:: shell
$ openstack optimize audittemplate create \
at1 workload_balancing --strategy storage_capacity_balance
$ openstack optimize audit create -a at1 \
-p volume_threshold=85.0
External Links
--------------
None

View File

@@ -22,20 +22,12 @@ The *vm_workload_consolidation* strategy requires the following metrics:
============================ ============ ======= =======
metric service name plugins comment
============================ ============ ======= =======
``cpu_util`` ceilometer_ none
``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
Cluster data model

View File

@@ -182,7 +182,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

@@ -25,6 +25,7 @@ doc8==0.8.0
docutils==0.14
dogpile.cache==0.6.5
dulwich==0.19.0
enum34==1.1.6
enum-compat==0.0.2
eventlet==0.20.0
extras==1.0.0
@@ -56,6 +57,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
@@ -66,6 +68,7 @@ netifaces==0.10.6
networkx==1.11
openstackdocstheme==1.20.0
openstacksdk==0.12.0
os-api-ref===1.4.0
os-client-config==1.29.0
os-service-types==1.2.0
os-testr==1.0.0
@@ -83,6 +86,7 @@ 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
@@ -112,7 +116,7 @@ python-glanceclient==2.9.1
python-ironicclient==2.3.0
python-keystoneclient==3.15.0
python-mimeparse==1.6.0
python-monascaclient==1.10.0
python-monascaclient==1.12.0
python-neutronclient==6.7.0
python-novaclient==10.1.0
python-openstackclient==3.14.0
@@ -144,7 +148,6 @@ stevedore==1.28.0
taskflow==3.1.0
Tempita==0.5.2
tenacity==4.9.0
testrepository==0.0.20
testresources==2.0.1
testscenarios==0.5.0
testtools==2.3.0
@@ -154,7 +157,6 @@ ujson==1.35
unittest2==1.1.0
urllib3==1.22
vine==1.1.4
voluptuous==0.11.1
waitress==1.1.0
warlock==1.3.0
WebOb==1.7.4

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-infra/devstack-gate
dest: devstack-gate
EOF
/usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \
git://git.openstack.org \
openstack-infra/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-dev/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://git.openstack.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 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.

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