Compare commits
423 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5817f6833c | ||
|
|
67754102c8 | ||
|
|
6545f9c2ad | ||
|
|
583c23b9d9 | ||
|
|
ea9ab8d6e5 | ||
|
|
8fd57276be | ||
|
|
1d197e5e8f | ||
|
|
b33337b7bd | ||
|
|
d0b9b6ce38 | ||
|
|
3cd847e2ab | ||
|
|
ba907f4905 | ||
|
|
8e787d0a87 | ||
|
|
b45c7b678e | ||
|
|
ec64e04cc5 | ||
|
|
f206c2d425 | ||
|
|
1500bee1c6 | ||
|
|
9f813fb90d | ||
|
|
8167eec625 | ||
|
|
6731851383 | ||
|
|
0ddfa278ef | ||
|
|
aae7699bc5 | ||
|
|
8521608e19 | ||
|
|
2266e2baa3 | ||
|
|
e08a0e9af2 | ||
|
|
844577e9cc | ||
|
|
0b44492da7 | ||
|
|
b146e29c39 | ||
|
|
0cabd5bd3a | ||
|
|
728acc091b | ||
|
|
7340decf73 | ||
|
|
84e8eb4cb0 | ||
|
|
5283871af5 | ||
|
|
916fd73186 | ||
|
|
63c1aabdd2 | ||
|
|
03569db6c3 | ||
|
|
19cf05fd75 | ||
|
|
251ca83ddc | ||
|
|
5b349b4e89 | ||
|
|
b0d03ae6b8 | ||
|
|
78de029a57 | ||
|
|
489356da3a | ||
|
|
db4339c371 | ||
|
|
c7ec186576 | ||
|
|
12bdfca0d9 | ||
|
|
5f179609d0 | ||
|
|
a842bc1c91 | ||
|
|
5eb1d91335 | ||
|
|
264b0fe9a1 | ||
|
|
a487a4efc8 | ||
|
|
034f0bf68a | ||
|
|
87b95bb639 | ||
|
|
e081ac91b4 | ||
|
|
3574dba9da | ||
|
|
8fc9c6c1d8 | ||
|
|
51f17f1d7d | ||
|
|
313f156394 | ||
|
|
129de26419 | ||
|
|
d38bc4e716 | ||
|
|
6ffa5feaaf | ||
|
|
bdd3a6ab89 | ||
|
|
8c5f363844 | ||
|
|
e61140edfb | ||
|
|
abc019829f | ||
|
|
0dd5826dd3 | ||
|
|
227a9e9b63 | ||
|
|
5b6768140f | ||
|
|
1ac7fbec34 | ||
|
|
ebb8885ece | ||
|
|
3fb4cadd76 | ||
|
|
c1d3f8094b | ||
|
|
59649f6a81 | ||
|
|
045404095d | ||
|
|
606a340b5b | ||
|
|
35fdbbe16e | ||
|
|
2db279e019 | ||
|
|
986ba9872f | ||
|
|
44a5a1573c | ||
|
|
fe34b420a5 | ||
|
|
43da4a6d21 | ||
|
|
7ba1bf2237 | ||
|
|
206bb413e2 | ||
|
|
1188d4263d | ||
|
|
1451d9c134 | ||
|
|
6d739ae1d0 | ||
|
|
f2751b4818 | ||
|
|
e2bf82607e | ||
|
|
d76b5d2f7e | ||
|
|
69730d80b2 | ||
|
|
17aa1122da | ||
|
|
d0f5a9fdf5 | ||
|
|
32dacdca8b | ||
|
|
fbfb7159e3 | ||
|
|
d7a44739a6 | ||
|
|
65c63a9351 | ||
|
|
58d86de064 | ||
|
|
8d84da307b | ||
|
|
01e865edbf | ||
|
|
b4b3856f14 | ||
|
|
67d065e02a | ||
|
|
891a351a04 | ||
|
|
f47fd9ac5e | ||
|
|
7b766680b0 | ||
|
|
75a025d2d2 | ||
|
|
590bd43a1d | ||
|
|
d2e42a835b | ||
|
|
a34e55e47a | ||
|
|
a62acbf2ab | ||
|
|
35074edaf7 | ||
|
|
dd4aac4092 | ||
|
|
bd8151e581 | ||
|
|
8585e49359 | ||
|
|
5d3af47b7d | ||
|
|
1001525664 | ||
|
|
a33f40ec21 | ||
|
|
d2a8454043 | ||
|
|
27c56a19e4 | ||
|
|
9bb1e653d8 | ||
|
|
bb536ee40d | ||
|
|
a0bf1b7d70 | ||
|
|
40f6eea637 | ||
|
|
6c5a3910a7 | ||
|
|
a4fac69d85 | ||
|
|
21994297cf | ||
|
|
8a818c9071 | ||
|
|
041fcb4ca0 | ||
|
|
a8d765bb28 | ||
|
|
2b152bf17c | ||
|
|
08e585d405 | ||
|
|
38e4255ec0 | ||
|
|
a167044cde | ||
|
|
1366f79b63 | ||
|
|
f55b9b127e | ||
|
|
1b7b467151 | ||
|
|
f40fcdc573 | ||
|
|
2d98d5e743 | ||
|
|
877230569a | ||
|
|
f842c5f601 | ||
|
|
0a899a2dc2 | ||
|
|
426232e288 | ||
|
|
778d4c6fe4 | ||
|
|
f852467d6a | ||
|
|
dcf64ed1f4 | ||
|
|
03f75202c8 | ||
|
|
0173a713c1 | ||
|
|
216f3bab29 | ||
|
|
077b806bf6 | ||
|
|
d892153b58 | ||
|
|
2efe211f36 | ||
|
|
f55ea7824e | ||
|
|
e5eb4f51be | ||
|
|
f637a368d7 | ||
|
|
2e8fb5a821 | ||
|
|
dbff4326e3 | ||
|
|
13a99b4c09 | ||
|
|
a8994bc227 | ||
|
|
c6845c0136 | ||
|
|
02c8e7d89c | ||
|
|
0db41f1862 | ||
|
|
b02cf3bea5 | ||
|
|
4eeaa0ab6b | ||
|
|
84d6d4aadd | ||
|
|
4511b36496 | ||
|
|
9a5c017a9a | ||
|
|
4690e402ce | ||
|
|
442e569686 | ||
|
|
5d948e8aa1 | ||
|
|
f83a92fc70 | ||
|
|
a06c462050 | ||
|
|
74e9349c1f | ||
|
|
7c048c761e | ||
|
|
4006b4af7a | ||
|
|
527423a5fa | ||
|
|
1d05444f67 | ||
|
|
6de94cca2d | ||
|
|
9b5d17b412 | ||
|
|
719b96f2a8 | ||
|
|
e9f83417eb | ||
|
|
a139cca260 | ||
|
|
c04d3cc5e0 | ||
|
|
e549e43e9e | ||
|
|
c1a2c79514 | ||
|
|
f79cad99cb | ||
|
|
8663c3a5c5 | ||
|
|
19d9b83665 | ||
|
|
af22899ebe | ||
|
|
fc33e181fc | ||
|
|
a3ee163480 | ||
|
|
334558f17c | ||
|
|
4642a92e78 | ||
|
|
69c53da298 | ||
|
|
49924e1915 | ||
|
|
d53abb7af5 | ||
|
|
4d3727eafb | ||
|
|
4a3c15185c | ||
|
|
2c6ab9a926 | ||
|
|
0750b93827 | ||
|
|
a2cb02a861 | ||
|
|
377889859d | ||
|
|
54f0758fc3 | ||
|
|
a644600a18 | ||
|
|
ca3d367ac7 | ||
|
|
cde60d2ead | ||
|
|
f106076d70 | ||
|
|
e75dbfd776 | ||
|
|
18aa50c58e | ||
|
|
2c2120526c | ||
|
|
9e505d3d36 | ||
|
|
54ce5f796f | ||
|
|
f605888e32 | ||
|
|
0b213a8734 | ||
|
|
38a3cbc84a | ||
|
|
eb038e4af0 | ||
|
|
b5eccceaed | ||
|
|
f7b655b712 | ||
|
|
1386ce690f | ||
|
|
38e4b48d70 | ||
|
|
56ca542bef | ||
|
|
dafe2ad04b | ||
|
|
6044b04d33 | ||
|
|
6d81ac15b8 | ||
|
|
db077e872e | ||
|
|
fd55d28d42 | ||
|
|
51bf7fedb6 | ||
|
|
bf0fd48659 | ||
|
|
ba98c88303 | ||
|
|
77b406748c | ||
|
|
d21198da8f | ||
|
|
12a7b7171b | ||
|
|
d45ab13619 | ||
|
|
e2d2fc6227 | ||
|
|
3c564ee3d8 | ||
|
|
f9ce21a9a9 | ||
|
|
03a2c0142a | ||
|
|
5afcf7a7f4 | ||
|
|
63faf4695e | ||
|
|
97800d1553 | ||
|
|
8f85169c15 | ||
|
|
68e4bc4d87 | ||
|
|
9e7f7f54f3 | ||
|
|
fceab5299b | ||
|
|
dddbb63633 | ||
|
|
b788dfab71 | ||
|
|
7824b41e12 | ||
|
|
86ded4d952 | ||
|
|
5d6e731c42 | ||
|
|
cba6713bdc | ||
|
|
24ab0469ec | ||
|
|
4d71bb112c | ||
|
|
fd374d1d30 | ||
|
|
25789c9c5a | ||
|
|
a9b3534e97 | ||
|
|
f80c0c732a | ||
|
|
0d83354c57 | ||
|
|
67d44eb118 | ||
|
|
8c1757f86d | ||
|
|
e55c73be0e | ||
|
|
04c9e0362e | ||
|
|
8ceb710b59 | ||
|
|
58711aaaec | ||
|
|
3ad5261d2a | ||
|
|
26c7726c00 | ||
|
|
5b2cdb53a8 | ||
|
|
4b5dce51dc | ||
|
|
b6a96e04aa | ||
|
|
62cb8a8d29 | ||
|
|
50e5e86c75 | ||
|
|
e3dd5c2a7e | ||
|
|
630c2cbb79 | ||
|
|
d49c6c16a6 | ||
|
|
e51e7e4317 | ||
|
|
244d28afa6 | ||
|
|
7ac1d0d048 | ||
|
|
65f9646eae | ||
|
|
52d701a56e | ||
|
|
ea1fd5967a | ||
|
|
547bf0529f | ||
|
|
659cbf3207 | ||
|
|
eb5a362287 | ||
|
|
198d827645 | ||
|
|
ecb0e218a9 | ||
|
|
4228647d15 | ||
|
|
4f1d758a40 | ||
|
|
b4433db20a | ||
|
|
e03f56e7c7 | ||
|
|
d925166a25 | ||
|
|
4a5d8cf709 | ||
|
|
e3c6db11c6 | ||
|
|
59c5adc8ad | ||
|
|
840d422b01 | ||
|
|
e9d8a2882f | ||
|
|
6e09cdb5ac | ||
|
|
edd3d219d5 | ||
|
|
d433d6b3c8 | ||
|
|
c5d4f9cb40 | ||
|
|
41f579d464 | ||
|
|
1a2fa9addf | ||
|
|
9e5ca76116 | ||
|
|
fa63b2a2b3 | ||
|
|
22cad5651e | ||
|
|
a912977336 | ||
|
|
2d7a375338 | ||
|
|
45b82e1898 | ||
|
|
926dbc8392 | ||
|
|
0e440d37ee | ||
|
|
66934f29d3 | ||
|
|
7039a9d247 | ||
|
|
bbbae0b105 | ||
|
|
1d08d2eea1 | ||
|
|
23442a4da6 | ||
|
|
ed88b436af | ||
|
|
a48a16596f | ||
|
|
8f4a856bd2 | ||
|
|
85a46ce4d4 | ||
|
|
35066dfe60 | ||
|
|
fc9eb6e995 | ||
|
|
aaf6fd7959 | ||
|
|
5e077f37ea | ||
|
|
2ec8bc10cd | ||
|
|
89cea83c85 | ||
|
|
2dd00a2037 | ||
|
|
59e13fd1f3 | ||
|
|
4235ef7c24 | ||
|
|
a015af1bd2 | ||
|
|
dad90b63fd | ||
|
|
c6e5f98008 | ||
|
|
1341c0ee02 | ||
|
|
6e99fcffc3 | ||
|
|
a57f54ab8f | ||
|
|
d1490e3fa7 | ||
|
|
1324baf9f5 | ||
|
|
0adc7d91e6 | ||
|
|
0d7ded0bb3 | ||
|
|
80dfbd6334 | ||
|
|
7d40b3d4c3 | ||
|
|
cedf70559e | ||
|
|
cc561c528f | ||
|
|
87b494d52a | ||
|
|
d0bca1f2ab | ||
|
|
068178f12a | ||
|
|
99e6c4aebb | ||
|
|
b446f8afd2 | ||
|
|
7783ebfb71 | ||
|
|
22cfc495f4 | ||
|
|
360b0119d6 | ||
|
|
48fc90d7b6 | ||
|
|
c5ff387ae9 | ||
|
|
1bc6b0e605 | ||
|
|
345083e090 | ||
|
|
695ddf8ae7 | ||
|
|
8fd5057cd0 | ||
|
|
3db81564f4 | ||
|
|
10066ed8fd | ||
|
|
e4c5f4f050 | ||
|
|
53c896dd24 | ||
|
|
40a46c6663 | ||
|
|
ed21e452e0 | ||
|
|
80e77a5b81 | ||
|
|
74112dd7cf | ||
|
|
9e4bf718da | ||
|
|
5c79074e9c | ||
|
|
ac6848dad3 | ||
|
|
648715eb5c | ||
|
|
1a17c4b7ac | ||
|
|
c4dfbd5855 | ||
|
|
1981f3964e | ||
|
|
3b5ef5d625 | ||
|
|
7fd486bd65 | ||
|
|
3cf4b315d3 | ||
|
|
d792e3cfae | ||
|
|
25d84ba662 | ||
|
|
7908af3150 | ||
|
|
04fdea2aa0 | ||
|
|
cee9cfb62c | ||
|
|
e1912fe03e | ||
|
|
d859f3ac1f | ||
|
|
7a72371df8 | ||
|
|
82bb097e9f | ||
|
|
a9ef9f3a94 | ||
|
|
8e7ba3c44a | ||
|
|
9a2ca8c4b7 | ||
|
|
c08666b2fa | ||
|
|
6638f921a3 | ||
|
|
f66eb463ca | ||
|
|
6a323ed54f | ||
|
|
1f2a854d6a | ||
|
|
d252d47cc0 | ||
|
|
d0e46d81fc | ||
|
|
4e240b945b | ||
|
|
e09188d862 | ||
|
|
a4b1df2fce | ||
|
|
22933e4d79 | ||
|
|
40a5c98382 | ||
|
|
5b21b9a17e | ||
|
|
02d1850be7 | ||
|
|
5f1f10e3d3 | ||
|
|
e4732e1375 | ||
|
|
715f6fa1cd | ||
|
|
6daa09f489 | ||
|
|
7feced419c | ||
|
|
3319748367 | ||
|
|
a84f52dfe3 | ||
|
|
3f8e4451f5 | ||
|
|
d082c9ac41 | ||
|
|
9080180309 | ||
|
|
55893043df | ||
|
|
19074f615a | ||
|
|
295c8d914c | ||
|
|
99735fa39a | ||
|
|
b80229f3d0 | ||
|
|
5e9ba463ee | ||
|
|
120c116655 | ||
|
|
c9cfd3bfbd | ||
|
|
31f2b4172e | ||
|
|
5151b666fd | ||
|
|
578138e432 | ||
|
|
7e2fd7ed9a | ||
|
|
74cb93fca8 | ||
|
|
876f3adb22 | ||
|
|
06682fe7c3 | ||
|
|
eaaa2b1b69 | ||
|
|
88187a8ba9 | ||
|
|
0b6979b71c | ||
|
|
8eb99ef76e |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -4,8 +4,7 @@
|
||||
*.so
|
||||
|
||||
# Packages
|
||||
*.egg
|
||||
*.egg-info
|
||||
*.egg*
|
||||
dist
|
||||
build
|
||||
eggs
|
||||
@@ -43,9 +42,11 @@ output/*/index.html
|
||||
|
||||
# Sphinx
|
||||
doc/build
|
||||
doc/source/api
|
||||
doc/source/api/*
|
||||
doc/source/samples
|
||||
doc/source/watcher.conf.sample
|
||||
doc/source/_static/*.sample
|
||||
!doc/source/api/index.rst
|
||||
!doc/source/api/v1.rst
|
||||
|
||||
# pbr generates these
|
||||
AUTHORS
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
If you would like to contribute to the development of OpenStack,
|
||||
you must follow the steps in this page:
|
||||
|
||||
http://docs.openstack.org/infra/manual/developers.html
|
||||
https://docs.openstack.org/infra/manual/developers.html
|
||||
|
||||
Once those steps have been completed, changes to OpenStack
|
||||
should be submitted for review via the Gerrit tool, following
|
||||
the workflow documented at:
|
||||
|
||||
http://docs.openstack.org/infra/manual/developers.html#development-workflow
|
||||
https://docs.openstack.org/infra/manual/developers.html#development-workflow
|
||||
|
||||
Pull requests submitted through GitHub will be ignored.
|
||||
|
||||
|
||||
@@ -8,4 +8,4 @@
|
||||
watcher Style Commandments
|
||||
==========================
|
||||
|
||||
Read the OpenStack Style Commandments http://docs.openstack.org/developer/hacking/
|
||||
Read the OpenStack Style Commandments https://docs.openstack.org/developer/hacking/
|
||||
|
||||
15
README.rst
15
README.rst
@@ -1,3 +1,12 @@
|
||||
========================
|
||||
Team and repository tags
|
||||
========================
|
||||
|
||||
.. image:: https://governance.openstack.org/badges/watcher.svg
|
||||
:target: https://governance.openstack.org/reference/tags/index.html
|
||||
|
||||
.. Change things from this point on
|
||||
|
||||
..
|
||||
Except where otherwise noted, this document is licensed under Creative
|
||||
Commons Attribution 3.0 License. You can view the license at:
|
||||
@@ -16,7 +25,7 @@ operating costs, increased system performance via intelligent virtual machine
|
||||
migration, increased energy efficiency-and more!
|
||||
|
||||
* Free software: Apache license
|
||||
* Wiki: http://wiki.openstack.org/wiki/Watcher
|
||||
* Wiki: https://wiki.openstack.org/wiki/Watcher
|
||||
* Source: https://github.com/openstack/watcher
|
||||
* Bugs: http://bugs.launchpad.net/watcher
|
||||
* Documentation: http://docs.openstack.org/developer/watcher/
|
||||
* Bugs: https://bugs.launchpad.net/watcher
|
||||
* Documentation: https://docs.openstack.org/watcher/latest/
|
||||
|
||||
42
devstack/files/apache-watcher-api.template
Normal file
42
devstack/files/apache-watcher-api.template
Normal file
@@ -0,0 +1,42 @@
|
||||
# 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.
|
||||
|
||||
# This is an example Apache2 configuration file for using the
|
||||
# Watcher API through mod_wsgi. This version assumes you are
|
||||
# running devstack to configure the software.
|
||||
|
||||
Listen %WATCHER_SERVICE_PORT%
|
||||
|
||||
<VirtualHost *:%WATCHER_SERVICE_PORT%>
|
||||
WSGIDaemonProcess watcher-api user=%USER% processes=%APIWORKERS% threads=1 display-name=%{GROUP}
|
||||
WSGIScriptAlias / %WATCHER_WSGI_DIR%/app.wsgi
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
WSGIProcessGroup watcher-api
|
||||
WSGIPassAuthorization On
|
||||
|
||||
ErrorLogFormat "%M"
|
||||
ErrorLog /var/log/%APACHE_NAME%/watcher-api.log
|
||||
CustomLog /var/log/%APACHE_NAME%/watcher-api-access.log combined
|
||||
|
||||
|
||||
<Directory %WATCHER_WSGI_DIR%>
|
||||
WSGIProcessGroup watcher-api
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
<IfVersion >= 2.4>
|
||||
Require all granted
|
||||
</IfVersion>
|
||||
<IfVersion < 2.4>
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
</IfVersion>
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
@@ -44,6 +44,9 @@ WATCHER_CONF_DIR=/etc/watcher
|
||||
WATCHER_CONF=$WATCHER_CONF_DIR/watcher.conf
|
||||
WATCHER_POLICY_JSON=$WATCHER_CONF_DIR/policy.json
|
||||
|
||||
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
|
||||
|
||||
@@ -51,6 +54,13 @@ if is_ssl_enabled_service "watcher" || is_service_enabled tls-proxy; then
|
||||
WATCHER_SERVICE_PROTOCOL="https"
|
||||
fi
|
||||
|
||||
WATCHER_USE_MOD_WSGI=$(trueorfalse True WATCHER_USE_MOD_WSGI)
|
||||
|
||||
if is_suse; then
|
||||
WATCHER_WSGI_DIR=${WATCHER_WSGI_DIR:-/srv/www/htdocs/watcher}
|
||||
else
|
||||
WATCHER_WSGI_DIR=${WATCHER_WSGI_DIR:-/var/www/watcher}
|
||||
fi
|
||||
# Public facing bits
|
||||
WATCHER_SERVICE_HOST=${WATCHER_SERVICE_HOST:-$HOST_IP}
|
||||
WATCHER_SERVICE_PORT=${WATCHER_SERVICE_PORT:-9322}
|
||||
@@ -74,10 +84,21 @@ function is_watcher_enabled {
|
||||
return 1
|
||||
}
|
||||
|
||||
#_cleanup_watcher_apache_wsgi - Remove wsgi files,
|
||||
#disable and remove apache vhost file
|
||||
function _cleanup_watcher_apache_wsgi {
|
||||
sudo rm -rf $WATCHER_WSGI_DIR
|
||||
sudo rm -f $(apache_site_config_for watcher-api)
|
||||
restart_apache_server
|
||||
}
|
||||
|
||||
# cleanup_watcher() - Remove residual data files, anything left over from previous
|
||||
# runs that a clean run would need to clean up
|
||||
function cleanup_watcher {
|
||||
sudo rm -rf $WATCHER_STATE_PATH $WATCHER_AUTH_CACHE_DIR
|
||||
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
|
||||
_cleanup_watcher_apache_wsgi
|
||||
fi
|
||||
}
|
||||
|
||||
# configure_watcher() - Set config files, create data dirs, etc
|
||||
@@ -108,6 +129,28 @@ function create_watcher_accounts {
|
||||
"$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST:$WATCHER_SERVICE_PORT"
|
||||
}
|
||||
|
||||
# _config_watcher_apache_wsgi() - Set WSGI config files of watcher
|
||||
function _config_watcher_apache_wsgi {
|
||||
local watcher_apache_conf
|
||||
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
|
||||
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_WSGI_DIR%|$WATCHER_WSGI_DIR|g;
|
||||
s|%USER%|$STACK_USER|g;
|
||||
s|%APIWORKERS%|$API_WORKERS|g;
|
||||
s|%APACHE_NAME%|$APACHE_NAME|g;
|
||||
" -i $watcher_apache_conf
|
||||
enable_apache_site watcher-api
|
||||
tail_log watcher-access /var/log/$APACHE_NAME/watcher-api-access.log
|
||||
tail_log watcher-api /var/log/$APACHE_NAME/watcher-api.log
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
# create_watcher_conf() - Create a new watcher.conf file
|
||||
function create_watcher_conf {
|
||||
# (Re)create ``watcher.conf``
|
||||
@@ -126,9 +169,10 @@ function create_watcher_conf {
|
||||
iniset $WATCHER_CONF oslo_messaging_rabbit rabbit_password $RABBIT_PASSWORD
|
||||
iniset $WATCHER_CONF oslo_messaging_rabbit rabbit_host $RABBIT_HOST
|
||||
|
||||
iniset $WATCHER_CONF oslo_messaging_notifications driver "messaging"
|
||||
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"
|
||||
@@ -153,9 +197,13 @@ function create_watcher_conf {
|
||||
setup_colorized_logging $WATCHER_CONF DEFAULT
|
||||
else
|
||||
# Show user_name and project_name instead of user_id and project_id
|
||||
iniset $WATCHER_CONF DEFAULT logging_context_format_string "%(asctime)s.%(msecs)03d %(levelname)s %(name)s [%(request_id)s %(user_name)s %(project_name)s] %(instance)s%(message)s"
|
||||
iniset $WATCHER_CONF DEFAULT logging_context_format_string "%(asctime)s.%(msecs)03d %(levelname)s %(name)s [%(request_id)s %(project_domain)s %(user_name)s %(project_name)s] %(instance)s%(message)s"
|
||||
fi
|
||||
|
||||
#config apache files
|
||||
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
|
||||
_config_watcher_apache_wsgi
|
||||
fi
|
||||
# Register SSL certificates if provided
|
||||
if is_ssl_enabled_service watcher; then
|
||||
ensure_certificates WATCHER
|
||||
@@ -187,7 +235,7 @@ function init_watcher {
|
||||
recreate_database watcher
|
||||
|
||||
# Create watcher schema
|
||||
$WATCHER_BIN_DIR/watcher-db-manage --config-file $WATCHER_CONF create_schema
|
||||
$WATCHER_BIN_DIR/watcher-db-manage --config-file $WATCHER_CONF upgrade
|
||||
fi
|
||||
create_watcher_cache_dir
|
||||
}
|
||||
@@ -204,19 +252,26 @@ function install_watcherclient {
|
||||
function install_watcher {
|
||||
git_clone $WATCHER_REPO $WATCHER_DIR $WATCHER_BRANCH
|
||||
setup_develop $WATCHER_DIR
|
||||
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
|
||||
install_apache_wsgi
|
||||
fi
|
||||
}
|
||||
|
||||
# start_watcher_api() - Start the API process ahead of other things
|
||||
function start_watcher_api {
|
||||
# Get right service port for testing
|
||||
|
||||
local service_port=$WATCHER_SERVICE_PORT
|
||||
local service_protocol=$WATCHER_SERVICE_PROTOCOL
|
||||
if is_service_enabled tls-proxy; then
|
||||
service_port=$WATCHER_SERVICE_PORT_INT
|
||||
service_protocol="http"
|
||||
fi
|
||||
|
||||
run_process watcher-api "$WATCHER_BIN_DIR/watcher-api --config-file $WATCHER_CONF"
|
||||
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
|
||||
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"
|
||||
@@ -239,7 +294,12 @@ function start_watcher {
|
||||
|
||||
# stop_watcher() - Stop running processes (non-screen)
|
||||
function stop_watcher {
|
||||
for serv in watcher-api watcher-decision-engine watcher-applier; do
|
||||
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
|
||||
disable_apache_site watcher-api
|
||||
else
|
||||
stop_process watcher-api
|
||||
fi
|
||||
for serv in watcher-decision-engine watcher-applier; do
|
||||
stop_process $serv
|
||||
done
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ GLANCE_HOSTPORT=${SERVICE_HOST}:9292
|
||||
DATABASE_TYPE=mysql
|
||||
|
||||
# Enable services (including neutron)
|
||||
ENABLED_SERVICES=n-cpu,n-api-meta,c-vol,q-agt
|
||||
ENABLED_SERVICES=n-cpu,n-api-meta,c-vol,q-agt,placement-client
|
||||
|
||||
NOVA_VNC_ENABLED=True
|
||||
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
|
||||
@@ -44,3 +44,6 @@ 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
|
||||
|
||||
@@ -17,6 +17,10 @@ NETWORK_GATEWAY=10.254.1.1 # Change this for your network
|
||||
|
||||
MULTI_HOST=1
|
||||
|
||||
|
||||
#Set this to FALSE if do not want to run watcher-api behind mod-wsgi
|
||||
#WATCHER_USE_MOD_WSGI=TRUE
|
||||
|
||||
# This is the controller node, so disable nova-compute
|
||||
disable_service n-cpu
|
||||
|
||||
@@ -28,7 +32,7 @@ ENABLED_SERVICES+=,q-svc,q-dhcp,q-meta,q-agt,q-l3,neutron
|
||||
enable_service n-cauth
|
||||
|
||||
# Enable the Watcher Dashboard plugin
|
||||
# enable_plugin watcher-dashboard git://git.openstack.org/openstack/watcher-dashboard
|
||||
enable_plugin watcher-dashboard git://git.openstack.org/openstack/watcher-dashboard
|
||||
|
||||
# Enable the Watcher plugin
|
||||
enable_plugin watcher git://git.openstack.org/openstack/watcher
|
||||
@@ -38,6 +42,11 @@ enable_plugin ceilometer git://git.openstack.org/openstack/ceilometer
|
||||
|
||||
# This is the controller node, so disable the ceilometer compute agent
|
||||
disable_service ceilometer-acompute
|
||||
# Enable the ceilometer api explicitly(bug:1667678)
|
||||
enable_service ceilometer-api
|
||||
|
||||
# Enable the Gnocchi plugin
|
||||
enable_plugin gnocchi https://git.openstack.org/openstack/gnocchi
|
||||
|
||||
LOGFILE=$DEST/logs/stack.sh.log
|
||||
LOGDAYS=2
|
||||
@@ -45,3 +54,6 @@ 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
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
||||
40
doc/notification_samples/action-create.json
Normal file
40
doc/notification_samples/action-create.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"priority": "INFO",
|
||||
"payload": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "ActionCreatePayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"input_parameters": {
|
||||
"param2": 2,
|
||||
"param1": 1
|
||||
},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "PENDING",
|
||||
"action_plan": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "TerseActionPlanPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"global_efficacy": {},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "ONGOING",
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"parents": [],
|
||||
"action_type": "nop",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"timestamp": "2017-01-01 00:00:00.000000",
|
||||
"event_type": "action.create",
|
||||
"message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
|
||||
}
|
||||
40
doc/notification_samples/action-delete.json
Normal file
40
doc/notification_samples/action-delete.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"priority": "INFO",
|
||||
"payload": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "ActionDeletePayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"input_parameters": {
|
||||
"param2": 2,
|
||||
"param1": 1
|
||||
},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "DELETED",
|
||||
"action_plan": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "TerseActionPlanPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"global_efficacy": {},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "ONGOING",
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"parents": [],
|
||||
"action_type": "nop",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"timestamp": "2017-01-01 00:00:00.000000",
|
||||
"event_type": "action.delete",
|
||||
"message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
|
||||
}
|
||||
41
doc/notification_samples/action-execution-end.json
Normal file
41
doc/notification_samples/action-execution-end.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"priority": "INFO",
|
||||
"payload": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "ActionExecutionPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"input_parameters": {
|
||||
"param2": 2,
|
||||
"param1": 1
|
||||
},
|
||||
"fault": null,
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "SUCCEEDED",
|
||||
"action_plan": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "TerseActionPlanPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"global_efficacy": {},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "ONGOING",
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"parents": [],
|
||||
"action_type": "nop",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"event_type": "action.execution.end",
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"timestamp": "2017-01-01 00:00:00.000000",
|
||||
"message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
|
||||
}
|
||||
51
doc/notification_samples/action-execution-error.json
Normal file
51
doc/notification_samples/action-execution-error.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"priority": "ERROR",
|
||||
"payload": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "ActionExecutionPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"input_parameters": {
|
||||
"param2": 2,
|
||||
"param1": 1
|
||||
},
|
||||
"fault": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "ExceptionPayload",
|
||||
"watcher_object.data": {
|
||||
"module_name": "watcher.tests.notifications.test_action_notification",
|
||||
"exception": "WatcherException",
|
||||
"exception_message": "TEST",
|
||||
"function_name": "test_send_action_execution_with_error"
|
||||
}
|
||||
},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "FAILED",
|
||||
"action_plan": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "TerseActionPlanPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"global_efficacy": {},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "ONGOING",
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"parents": [],
|
||||
"action_type": "nop",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"event_type": "action.execution.error",
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"timestamp": "2017-01-01 00:00:00.000000",
|
||||
"message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
|
||||
}
|
||||
41
doc/notification_samples/action-execution-start.json
Normal file
41
doc/notification_samples/action-execution-start.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"priority": "INFO",
|
||||
"payload": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "ActionExecutionPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"input_parameters": {
|
||||
"param2": 2,
|
||||
"param1": 1
|
||||
},
|
||||
"fault": null,
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "ONGOING",
|
||||
"action_plan": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "TerseActionPlanPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"global_efficacy": {},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "ONGOING",
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"parents": [],
|
||||
"action_type": "nop",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"event_type": "action.execution.start",
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"timestamp": "2017-01-01 00:00:00.000000",
|
||||
"message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
|
||||
}
|
||||
49
doc/notification_samples/action-update.json
Normal file
49
doc/notification_samples/action-update.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"priority": "INFO",
|
||||
"payload": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "ActionUpdatePayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"input_parameters": {
|
||||
"param2": 2,
|
||||
"param1": 1
|
||||
},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state_update": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "ActionStateUpdatePayload",
|
||||
"watcher_object.data": {
|
||||
"old_state": "PENDING",
|
||||
"state": "ONGOING"
|
||||
}
|
||||
},
|
||||
"state": "ONGOING",
|
||||
"action_plan": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "TerseActionPlanPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"global_efficacy": {},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"state": "ONGOING",
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"parents": [],
|
||||
"action_type": "nop",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"event_type": "action.update",
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"timestamp": "2017-01-01 00:00:00.000000",
|
||||
"message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
|
||||
}
|
||||
54
doc/notification_samples/action_plan-create.json
Normal file
54
doc/notification_samples/action_plan-create.json
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"payload": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"strategy": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"display_name": "test strategy",
|
||||
"name": "TEST",
|
||||
"updated_at": null,
|
||||
"parameters_spec": {},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"deleted_at": null
|
||||
},
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "StrategyPayload"
|
||||
},
|
||||
"created_at": null,
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"audit": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"audit_type": "ONESHOT",
|
||||
"scope": [],
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"parameters": {},
|
||||
"interval": null,
|
||||
"deleted_at": null,
|
||||
"state": "PENDING",
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null
|
||||
},
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "TerseAuditPayload"
|
||||
},
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"global_efficacy": {},
|
||||
"deleted_at": null,
|
||||
"state": "RECOMMENDED",
|
||||
"updated_at": null
|
||||
},
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "ActionPlanCreatePayload"
|
||||
},
|
||||
"priority": "INFO",
|
||||
"message_id": "5148bff1-ea06-4ad6-8e4e-8c85ca5eb629",
|
||||
"event_type": "action_plan.create",
|
||||
"timestamp": "2016-10-18 09:52:05.219414"
|
||||
}
|
||||
54
doc/notification_samples/action_plan-delete.json
Normal file
54
doc/notification_samples/action_plan-delete.json
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"timestamp": "2016-10-18 09:52:05.219414",
|
||||
"payload": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"audit": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"interval": null,
|
||||
"audit_type": "ONESHOT",
|
||||
"scope": [],
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"state": "PENDING",
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"parameters": {}
|
||||
},
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "TerseAuditPayload",
|
||||
"watcher_object.namespace": "watcher"
|
||||
},
|
||||
"global_efficacy": {},
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"strategy": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"name": "TEST",
|
||||
"display_name": "test strategy",
|
||||
"deleted_at": null,
|
||||
"updated_at": null,
|
||||
"parameters_spec": {}
|
||||
},
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "StrategyPayload",
|
||||
"watcher_object.namespace": "watcher"
|
||||
},
|
||||
"state": "DELETED"
|
||||
},
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.name": "ActionPlanDeletePayload",
|
||||
"watcher_object.namespace": "watcher"
|
||||
},
|
||||
"event_type": "action_plan.delete",
|
||||
"message_id": "3d137686-a1fd-4683-ab40-c4210aac2140",
|
||||
"priority": "INFO"
|
||||
}
|
||||
55
doc/notification_samples/action_plan-execution-end.json
Normal file
55
doc/notification_samples/action_plan-execution-end.json
Normal file
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"event_type": "action_plan.execution.end",
|
||||
"payload": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "ActionPlanActionPayload",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"deleted_at": null,
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"audit": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "TerseAuditPayload",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"deleted_at": null,
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"scope": [],
|
||||
"audit_type": "ONESHOT",
|
||||
"state": "SUCCEEDED",
|
||||
"parameters": {},
|
||||
"interval": null,
|
||||
"updated_at": null
|
||||
}
|
||||
},
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"fault": null,
|
||||
"state": "ONGOING",
|
||||
"global_efficacy": {},
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"strategy": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "StrategyPayload",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"deleted_at": null,
|
||||
"name": "TEST",
|
||||
"uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"parameters_spec": {},
|
||||
"display_name": "test strategy",
|
||||
"updated_at": null
|
||||
}
|
||||
},
|
||||
"updated_at": null
|
||||
}
|
||||
},
|
||||
"priority": "INFO",
|
||||
"message_id": "3984dc2b-8aef-462b-a220-8ae04237a56e",
|
||||
"timestamp": "2016-10-18 09:52:05.219414",
|
||||
"publisher_id": "infra-optim:node0"
|
||||
}
|
||||
65
doc/notification_samples/action_plan-execution-error.json
Normal file
65
doc/notification_samples/action_plan-execution-error.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"event_type": "action_plan.execution.error",
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"priority": "ERROR",
|
||||
"message_id": "9a45c5ae-0e21-4300-8fa0-5555d52a66d9",
|
||||
"payload": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "ActionPlanActionPayload",
|
||||
"watcher_object.data": {
|
||||
"fault": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "ExceptionPayload",
|
||||
"watcher_object.data": {
|
||||
"exception_message": "TEST",
|
||||
"module_name": "watcher.tests.notifications.test_action_plan_notification",
|
||||
"function_name": "test_send_action_plan_action_with_error",
|
||||
"exception": "WatcherException"
|
||||
}
|
||||
},
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"strategy": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "StrategyPayload",
|
||||
"watcher_object.data": {
|
||||
"uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"name": "TEST",
|
||||
"updated_at": null,
|
||||
"display_name": "test strategy",
|
||||
"parameters_spec": {},
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"audit": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "TerseAuditPayload",
|
||||
"watcher_object.data": {
|
||||
"parameters": {},
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"scope": [],
|
||||
"updated_at": null,
|
||||
"audit_type": "ONESHOT",
|
||||
"interval": null,
|
||||
"deleted_at": null,
|
||||
"state": "PENDING"
|
||||
}
|
||||
},
|
||||
"global_efficacy": {},
|
||||
"state": "ONGOING"
|
||||
}
|
||||
},
|
||||
"timestamp": "2016-10-18 09:52:05.219414"
|
||||
}
|
||||
55
doc/notification_samples/action_plan-execution-start.json
Normal file
55
doc/notification_samples/action_plan-execution-start.json
Normal file
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"event_type": "action_plan.execution.start",
|
||||
"payload": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "ActionPlanActionPayload",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"deleted_at": null,
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"audit": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "TerseAuditPayload",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"deleted_at": null,
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"scope": [],
|
||||
"audit_type": "ONESHOT",
|
||||
"state": "PENDING",
|
||||
"parameters": {},
|
||||
"interval": null,
|
||||
"updated_at": null
|
||||
}
|
||||
},
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"fault": null,
|
||||
"state": "ONGOING",
|
||||
"global_efficacy": {},
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"strategy": {
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "StrategyPayload",
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"deleted_at": null,
|
||||
"name": "TEST",
|
||||
"uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"parameters_spec": {},
|
||||
"display_name": "test strategy",
|
||||
"updated_at": null
|
||||
}
|
||||
},
|
||||
"updated_at": null
|
||||
}
|
||||
},
|
||||
"priority": "INFO",
|
||||
"message_id": "3984dc2b-8aef-462b-a220-8ae04237a56e",
|
||||
"timestamp": "2016-10-18 09:52:05.219414",
|
||||
"publisher_id": "infra-optim:node0"
|
||||
}
|
||||
63
doc/notification_samples/action_plan-update.json
Normal file
63
doc/notification_samples/action_plan-update.json
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"payload": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"audit": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"audit_type": "ONESHOT",
|
||||
"scope": [],
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"interval": null,
|
||||
"updated_at": null,
|
||||
"state": "PENDING",
|
||||
"deleted_at": null,
|
||||
"parameters": {}
|
||||
},
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "TerseAuditPayload"
|
||||
},
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||
"updated_at": null,
|
||||
"state_update": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"old_state": "PENDING",
|
||||
"state": "ONGOING"
|
||||
},
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "ActionPlanStateUpdatePayload"
|
||||
},
|
||||
"state": "ONGOING",
|
||||
"deleted_at": null,
|
||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"strategy": {
|
||||
"watcher_object.version": "1.0",
|
||||
"watcher_object.data": {
|
||||
"name": "TEST",
|
||||
"uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||
"display_name": "test strategy",
|
||||
"created_at": "2016-10-18T09:52:05Z",
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"parameters_spec": {}
|
||||
},
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "StrategyPayload"
|
||||
},
|
||||
"global_efficacy": {}
|
||||
},
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.name": "ActionPlanUpdatePayload"
|
||||
},
|
||||
"publisher_id": "infra-optim:node0",
|
||||
"priority": "INFO",
|
||||
"timestamp": "2016-10-18 09:52:05.219414",
|
||||
"event_type": "action_plan.update",
|
||||
"message_id": "0a8a7329-fd5a-4ec6-97d7-2b776ce51a4c"
|
||||
}
|
||||
@@ -10,6 +10,7 @@
|
||||
"state": "PENDING",
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"goal": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
@@ -26,6 +27,7 @@
|
||||
},
|
||||
"interval": null,
|
||||
"scope": [],
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"strategy": {
|
||||
"watcher_object.data": {
|
||||
"parameters_spec": {
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"state": "DELETED",
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"goal": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
@@ -26,6 +27,7 @@
|
||||
},
|
||||
"interval": null,
|
||||
"scope": [],
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"strategy": {
|
||||
"watcher_object.data": {
|
||||
"parameters_spec": {
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"fault": null,
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"goal": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
@@ -27,6 +28,7 @@
|
||||
},
|
||||
"interval": null,
|
||||
"scope": [],
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"strategy": {
|
||||
"watcher_object.data": {
|
||||
"parameters_spec": {
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0"
|
||||
},
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"goal": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
@@ -37,6 +38,7 @@
|
||||
},
|
||||
"interval": null,
|
||||
"scope": [],
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"strategy": {
|
||||
"watcher_object.data": {
|
||||
"parameters_spec": {
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"fault": null,
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"goal": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
@@ -27,6 +28,7 @@
|
||||
},
|
||||
"interval": null,
|
||||
"scope": [],
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"strategy": {
|
||||
"watcher_object.data": {
|
||||
"parameters_spec": {
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"fault": null,
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"goal": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
@@ -27,6 +28,7 @@
|
||||
},
|
||||
"interval": null,
|
||||
"scope": [],
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"strategy": {
|
||||
"watcher_object.data": {
|
||||
"parameters_spec": {
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.version": "1.0"
|
||||
},
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"goal": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
@@ -37,6 +38,7 @@
|
||||
},
|
||||
"interval": null,
|
||||
"scope": [],
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"strategy": {
|
||||
"watcher_object.data": {
|
||||
"parameters_spec": {
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"updated_at": null,
|
||||
"deleted_at": null,
|
||||
"fault": null,
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"goal": {
|
||||
"watcher_object.data": {
|
||||
"uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
@@ -27,6 +28,7 @@
|
||||
},
|
||||
"interval": null,
|
||||
"scope": [],
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"strategy": {
|
||||
"watcher_object.data": {
|
||||
"parameters_spec": {
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"payload": {
|
||||
"watcher_object.name": "AuditUpdatePayload",
|
||||
"watcher_object.data": {
|
||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||
"strategy": {
|
||||
"watcher_object.name": "StrategyPayload",
|
||||
"watcher_object.data": {
|
||||
@@ -36,6 +37,7 @@
|
||||
"scope": [],
|
||||
"created_at": "2016-11-04T16:51:21Z",
|
||||
"uuid": "f1e0d912-afd9-4bf2-91ef-c99cd08cc1ef",
|
||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||
"goal": {
|
||||
"watcher_object.name": "GoalPayload",
|
||||
"watcher_object.data": {
|
||||
|
||||
26
doc/notification_samples/service-update.json
Normal file
26
doc/notification_samples/service-update.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"payload": {
|
||||
"watcher_object.name": "ServiceUpdatePayload",
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.data": {
|
||||
"status_update": {
|
||||
"watcher_object.name": "ServiceStatusUpdatePayload",
|
||||
"watcher_object.namespace": "watcher",
|
||||
"watcher_object.data": {
|
||||
"old_state": "ACTIVE",
|
||||
"state": "FAILED"
|
||||
},
|
||||
"watcher_object.version": "1.0"
|
||||
},
|
||||
"last_seen_up": "2016-09-22T08:32:06Z",
|
||||
"name": "watcher-service",
|
||||
"sevice_host": "controller"
|
||||
},
|
||||
"watcher_object.version": "1.0"
|
||||
},
|
||||
"event_type": "service.update",
|
||||
"priority": "INFO",
|
||||
"message_id": "3984dc2b-8aef-462b-a220-8ae04237a56e",
|
||||
"timestamp": "2016-10-18 09:52:05.219414",
|
||||
"publisher_id": "infra-optim:node0"
|
||||
}
|
||||
49
doc/source/admin/apache-mod-wsgi.rst
Normal file
49
doc/source/admin/apache-mod-wsgi.rst
Normal file
@@ -0,0 +1,49 @@
|
||||
..
|
||||
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/
|
||||
|
||||
|
||||
Installing API behind mod_wsgi
|
||||
==============================
|
||||
|
||||
#. Install the Apache Service::
|
||||
|
||||
Fedora 21/RHEL7/CentOS7:
|
||||
sudo yum install httpd
|
||||
|
||||
Fedora 22 (or higher):
|
||||
sudo dnf install httpd
|
||||
|
||||
Debian/Ubuntu:
|
||||
apt-get install apache2
|
||||
|
||||
#. Copy ``etc/apache2/watcher.conf`` under the apache sites::
|
||||
|
||||
Fedora/RHEL7/CentOS7:
|
||||
sudo cp etc/apache2/watcher /etc/httpd/conf.d/watcher.conf
|
||||
|
||||
Debian/Ubuntu:
|
||||
sudo cp etc/apache2/watcher /etc/apache2/sites-available/watcher.conf
|
||||
|
||||
#. Edit ``<apache-configuration-dir>/watcher.conf`` according to installation
|
||||
and environment.
|
||||
|
||||
* Modify the ``WSGIDaemonProcess`` directive to set the ``user`` and
|
||||
``group`` values to appropriate user on your server.
|
||||
* Modify the ``WSGIScriptAlias`` directive to point to the
|
||||
watcher/api/app.wsgi script.
|
||||
* Modify the ``Directory`` directive to set the path to the Watcher API
|
||||
code.
|
||||
* Modify the ``ErrorLog and CustomLog`` to redirect the logs to the right
|
||||
directory.
|
||||
|
||||
#. Enable the apache watcher site and reload::
|
||||
|
||||
Fedora/RHEL7/CentOS7:
|
||||
sudo systemctl reload httpd
|
||||
|
||||
Debian/Ubuntu:
|
||||
sudo a2ensite watcher
|
||||
sudo service apache2 reload
|
||||
12
doc/source/admin/index.rst
Normal file
12
doc/source/admin/index.rst
Normal file
@@ -0,0 +1,12 @@
|
||||
===================
|
||||
Administrator Guide
|
||||
===================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
apache-mod-wsgi
|
||||
gmr
|
||||
policy
|
||||
ways-to-install
|
||||
../strategies/index
|
||||
@@ -4,12 +4,13 @@
|
||||
|
||||
https://creativecommons.org/licenses/by/3.0/
|
||||
|
||||
==================
|
||||
Installing Watcher
|
||||
==================
|
||||
=======================
|
||||
Ways to install Watcher
|
||||
=======================
|
||||
|
||||
This document describes how to install Watcher in order to use it. If you are
|
||||
intending to develop on or with Watcher, please read :doc:`../dev/environment`.
|
||||
This document describes some ways to install Watcher in order to use it.
|
||||
If you are intending to develop on or with Watcher,
|
||||
please read :doc:`../contributor/environment`.
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
@@ -18,14 +19,14 @@ The source install instructions specifically avoid using platform specific
|
||||
packages, instead using the source for the code and the Python Package Index
|
||||
(PyPi_).
|
||||
|
||||
.. _PyPi: http://pypi.python.org/pypi
|
||||
.. _PyPi: https://pypi.python.org/pypi
|
||||
|
||||
It's expected that your system already has python2.7_, latest version of pip_,
|
||||
and git_ available.
|
||||
|
||||
.. _python2.7: http://www.python.org
|
||||
.. _pip: http://www.pip-installer.org/en/latest/installing.html
|
||||
.. _git: http://git-scm.com/
|
||||
.. _python2.7: https://www.python.org
|
||||
.. _pip: https://pip.pypa.io/en/latest/installing/
|
||||
.. _git: https://git-scm.com/
|
||||
|
||||
Your system shall also have some additional system libraries:
|
||||
|
||||
@@ -77,9 +78,10 @@ Install the Watcher modules dependencies:
|
||||
|
||||
# pip install -r requirements.txt
|
||||
|
||||
From here, refer to :doc:`configuration` to declare Watcher as a new service
|
||||
into Keystone and to configure its different modules. Once configured, you
|
||||
should be able to run the Watcher services by issuing these commands:
|
||||
From here, refer to :doc:`../configuration/configuring` to declare Watcher
|
||||
as a new service into Keystone and to configure its different modules.
|
||||
Once configured, you should be able to run the Watcher services by issuing
|
||||
these commands:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@@ -107,7 +109,7 @@ installed on your system.
|
||||
|
||||
Once installed, you still need to declare Watcher as a new service into
|
||||
Keystone and to configure its different modules, which you can find described
|
||||
in :doc:`configuration`.
|
||||
in :doc:`../configuration/configuring`.
|
||||
|
||||
|
||||
Installing from packages: Debian (experimental)
|
||||
4
doc/source/api/index.rst
Normal file
4
doc/source/api/index.rst
Normal file
@@ -0,0 +1,4 @@
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
v1
|
||||
@@ -20,6 +20,17 @@ Goals
|
||||
.. 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
|
||||
===============
|
||||
@@ -21,7 +21,7 @@ Overview
|
||||
Below you will find a diagram, showing the main components of Watcher:
|
||||
|
||||
.. image:: ./images/architecture.svg
|
||||
:width: 100%
|
||||
:width: 110%
|
||||
|
||||
|
||||
.. _components_definition:
|
||||
@@ -37,13 +37,12 @@ AMQP Bus
|
||||
The AMQP message bus handles internal asynchronous communications between the
|
||||
different Watcher components.
|
||||
|
||||
.. _cluster_history_db_definition:
|
||||
.. _cluster_datasource_definition:
|
||||
|
||||
Cluster History Database
|
||||
------------------------
|
||||
Datasource
|
||||
----------
|
||||
|
||||
This component stores the data related to the
|
||||
:ref:`Cluster History <cluster_history_definition>`.
|
||||
This component stores the metrics related to the cluster.
|
||||
|
||||
It can potentially rely on any appropriate storage system (InfluxDB, OpenTSDB,
|
||||
MongoDB,...) but will probably be more performant when using
|
||||
@@ -51,14 +50,6 @@ MongoDB,...) but will probably be more performant when using
|
||||
which are optimized for handling time series data, which are arrays of numbers
|
||||
indexed by time (a datetime or a datetime range).
|
||||
|
||||
.. _cluster_model_db_definition:
|
||||
|
||||
Cluster Model Database
|
||||
------------------------
|
||||
|
||||
This component stores the data related to the
|
||||
:ref:`Cluster Data Model <cluster_data_model_definition>`.
|
||||
|
||||
.. _archi_watcher_api_definition:
|
||||
|
||||
Watcher API
|
||||
@@ -193,8 +184,8 @@ data:
|
||||
:ref:`Managed resources <managed_resource_definition>` (e.g., the data stored
|
||||
in the Nova database). These models gives a strategy the ability to reason on
|
||||
the current state of a given :ref:`cluster <cluster_definition>`.
|
||||
- The data stored in the :ref:`Cluster History Database
|
||||
<cluster_history_db_definition>` which provides information about the past of
|
||||
- The data stored in the :ref:`Cluster Datasource
|
||||
<cluster_datasource_definition>` which provides information about the past of
|
||||
the :ref:`Cluster <cluster_definition>`.
|
||||
|
||||
Here below is a sequence diagram showing how the Decision Engine builds and
|
||||
@@ -316,7 +307,7 @@ This method finds an appropriate scheduling of
|
||||
:ref:`Actions <action_definition>` taking into account some scheduling rules
|
||||
(such as priorities between actions).
|
||||
It generates a new :ref:`Action Plan <action_plan_definition>` with status
|
||||
**RECOMMENDED** and saves it into the:ref:`Watcher Database
|
||||
**RECOMMENDED** and saves it into the :ref:`Watcher Database
|
||||
<watcher_database_definition>`. The saved action plan is now a scheduled flow
|
||||
of actions to which a global efficacy is associated alongside a number of
|
||||
:ref:`Efficacy Indicators <efficacy_indicator_definition>` as specified by the
|
||||
@@ -416,6 +407,9 @@ be one of the following:
|
||||
- **CANCELLED** : the :ref:`Audit <audit_definition>` was in **PENDING** or
|
||||
**ONGOING** state and was cancelled by the
|
||||
:ref:`Administrator <administrator_definition>`
|
||||
- **SUSPENDED** : the :ref:`Audit <audit_definition>` was in **ONGOING**
|
||||
state and was suspended by the
|
||||
:ref:`Administrator <administrator_definition>`
|
||||
|
||||
The following diagram shows the different possible states of an
|
||||
:ref:`Audit <audit_definition>` and what event makes the state change to a new
|
||||
@@ -452,6 +446,10 @@ state may be one of the following:
|
||||
- **CANCELLED** : the :ref:`Action Plan <action_plan_definition>` was in
|
||||
**RECOMMENDED**, **PENDING** or **ONGOING** state and was cancelled by the
|
||||
:ref:`Administrator <administrator_definition>`
|
||||
- **SUPERSEDED** : the :ref:`Action Plan <action_plan_definition>` was in
|
||||
RECOMMENDED state and was automatically superseded by Watcher, due to an
|
||||
expiration delay or an update of the
|
||||
:ref:`Cluster data model <cluster_data_model_definition>`
|
||||
|
||||
|
||||
The following diagram shows the different possible states of an
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# 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
|
||||
@@ -32,8 +31,7 @@ sys.path.insert(0, os.path.abspath('./'))
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = [
|
||||
'oslo_config.sphinxconfiggen',
|
||||
'oslosphinx',
|
||||
'oslo_config.sphinxext',
|
||||
'sphinx.ext.autodoc',
|
||||
'sphinx.ext.viewcode',
|
||||
'sphinxcontrib.httpdomain',
|
||||
@@ -42,10 +40,14 @@ extensions = [
|
||||
'wsmeext.sphinxext',
|
||||
'ext.term',
|
||||
'ext.versioned_notifications',
|
||||
'oslo_config.sphinxconfiggen',
|
||||
'openstackdocstheme',
|
||||
]
|
||||
|
||||
wsme_protocols = ['restjson']
|
||||
config_generator_config_file = '../../etc/watcher/watcher-config-generator.conf'
|
||||
config_generator_config_file = [(
|
||||
'../../etc/watcher/oslo-config-generator/watcher.conf',
|
||||
'_static/watcher')]
|
||||
sample_config_basename = 'watcher'
|
||||
|
||||
# autodoc generation is a bit aggressive and a nuisance when doing heavy
|
||||
@@ -93,6 +95,8 @@ add_function_parentheses = True
|
||||
# unit titles (such as .. function::).
|
||||
add_module_names = True
|
||||
|
||||
suppress_warnings = ['app.add_directive']
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
@@ -118,12 +122,20 @@ man_pages = [
|
||||
# Sphinx are currently 'default' and 'sphinxdoc'.
|
||||
# html_theme_path = ["."]
|
||||
# html_theme = '_theme'
|
||||
html_theme = 'openstackdocs'
|
||||
# html_static_path = ['static']
|
||||
html_theme_options = {'incubating': True}
|
||||
# html_theme_options = {}
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = '%sdoc' % project
|
||||
|
||||
html_last_updated_fmt = '%Y-%m-%d %H:%M'
|
||||
|
||||
#openstackdocstheme options
|
||||
repository_name = 'openstack/watcher'
|
||||
bug_project = 'watcher'
|
||||
bug_tag = ''
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title, author, documentclass
|
||||
# [howto/manual]).
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
../../etc/watcher/watcher-config-generator.conf
|
||||
@@ -15,7 +15,7 @@ Service overview
|
||||
================
|
||||
|
||||
The Watcher system is a collection of services that provides support to
|
||||
optimize your IAAS plateform. The Watcher service may, depending upon
|
||||
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
|
||||
@@ -37,7 +37,7 @@ The Watcher service includes the following components:
|
||||
- `watcher-dashboard`_: An Horizon plugin for interacting with the Watcher
|
||||
service.
|
||||
|
||||
Additionally, the Bare Metal service has certain external dependencies, which
|
||||
Additionally, the Watcher service has certain external dependencies, which
|
||||
are very similar to other OpenStack services:
|
||||
|
||||
- A database to store audit and action plan information and state. You can set
|
||||
@@ -86,7 +86,6 @@ Configure the Identity service for the Watcher service
|
||||
--tenant=KEYSTONE_SERVICE_PROJECT_NAME
|
||||
$ keystone user-role-add --user=watcher \
|
||||
--tenant=KEYSTONE_SERVICE_PROJECT_NAME --role=admin
|
||||
$ keystone user-role-add --user=watcher --tenant=admin --role=admin
|
||||
|
||||
or (by using python-openstackclient 1.8.0+)
|
||||
|
||||
@@ -97,7 +96,6 @@ Configure the Identity service for the Watcher service
|
||||
--project=KEYSTONE_SERVICE_PROJECT_NAME
|
||||
$ openstack role add --project KEYSTONE_SERVICE_PROJECT_NAME \
|
||||
--user watcher admin
|
||||
$ openstack role add --user watcher --project admin admin
|
||||
|
||||
|
||||
#. You must register the Watcher Service with the Identity Service so that
|
||||
@@ -169,7 +167,7 @@ these following commands::
|
||||
|
||||
$ git clone git://git.openstack.org/openstack/watcher
|
||||
$ cd watcher/
|
||||
$ tox -econfig
|
||||
$ tox -e genconfig
|
||||
$ vi etc/watcher/watcher.conf.sample
|
||||
|
||||
|
||||
@@ -368,7 +366,7 @@ Configure Nova compute
|
||||
Please check your hypervisor configuration to correctly handle
|
||||
`instance migration`_.
|
||||
|
||||
.. _`instance migration`: http://docs.openstack.org/admin-guide-cloud/compute-configuring-migrations.html
|
||||
.. _`instance migration`: http://docs.openstack.org/admin-guide/compute-live-migration-usage.html
|
||||
|
||||
Configure Measurements
|
||||
======================
|
||||
@@ -426,7 +424,7 @@ to Watcher receives Nova notifications in ``watcher_notifications`` as well.
|
||||
into which Nova services will publish events ::
|
||||
|
||||
[oslo_messaging_notifications]
|
||||
driver = messaging
|
||||
driver = messagingv2
|
||||
topics = notifications,watcher_notifications
|
||||
|
||||
* Restart the Nova services.
|
||||
5
doc/source/configuration/index.rst
Normal file
5
doc/source/configuration/index.rst
Normal file
@@ -0,0 +1,5 @@
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
configuring
|
||||
watcher
|
||||
11
doc/source/configuration/watcher.rst
Normal file
11
doc/source/configuration/watcher.rst
Normal file
@@ -0,0 +1,11 @@
|
||||
.. _watcher_sample_configuration_files:
|
||||
|
||||
------------
|
||||
watcher.conf
|
||||
------------
|
||||
|
||||
The ``watcher.conf`` file contains most of the options to configure the
|
||||
Watcher services.
|
||||
|
||||
.. show-options::
|
||||
:config-file: etc/watcher/oslo-config-generator/watcher.conf
|
||||
@@ -64,8 +64,9 @@ IRC Channel
|
||||
``#openstack-watcher`` (changelog_)
|
||||
|
||||
Weekly Meetings
|
||||
on Wednesdays at 14:00 UTC on even weeks, 9:00 UTC on odd weeks, in the
|
||||
``#openstack-meeting-4`` IRC channel (`meetings logs`_)
|
||||
On Wednesdays at 14:00 UTC on even weeks in the ``#openstack-meeting-4``
|
||||
IRC channel, 13:00 UTC on odd weeks in the ``#openstack-meeting-alt``
|
||||
IRC channel (`meetings logs`_)
|
||||
|
||||
.. _changelog: http://eavesdrop.openstack.org/irclogs/%23openstack-watcher/
|
||||
.. _meetings logs: http://eavesdrop.openstack.org/meetings/watcher/
|
||||
@@ -92,6 +92,12 @@ Detailed DevStack Instructions
|
||||
Note: if you want to use a specific branch, specify WATCHER_BRANCH in the
|
||||
local.conf file. By default it will use the master branch.
|
||||
|
||||
Note: watcher-api will default run under apache/httpd, set the variable
|
||||
WATCHER_USE_MOD_WSGI=FALSE if you do not wish to run under apache/httpd.
|
||||
For development environment it is suggested to set WATHCER_USE_MOD_WSGI
|
||||
to FALSE. For Production environment it is suggested to keep it at the
|
||||
default TRUE value.
|
||||
|
||||
#. Start stacking from the controller node::
|
||||
|
||||
./devstack/stack.sh
|
||||
@@ -193,6 +199,37 @@ must exist in every other compute node's stack user's authorized_keys file and
|
||||
every compute node's public ECDSA key needs to be in every other compute
|
||||
node's root user's known_hosts file.
|
||||
|
||||
Disable serial console
|
||||
----------------------
|
||||
|
||||
Serial console needs to be disabled for live migration to work.
|
||||
|
||||
On both the controller and compute node, in /etc/nova/nova.conf
|
||||
|
||||
[serial_console]
|
||||
enabled = False
|
||||
|
||||
Alternatively, in devstack's local.conf:
|
||||
|
||||
[[post-config|$NOVA_CONF]]
|
||||
[serial_console]
|
||||
#enabled=false
|
||||
|
||||
|
||||
VNC server configuration
|
||||
------------------------
|
||||
|
||||
The VNC server listening parameter needs to be set to any address so
|
||||
that the server can accept connections from all of the compute nodes.
|
||||
|
||||
On both the controller and compute node, in /etc/nova/nova.conf
|
||||
|
||||
vncserver_listen = 0.0.0.0
|
||||
|
||||
Alternatively, in devstack's local.conf:
|
||||
|
||||
VNCSERVER_LISTEN=0.0.0.0
|
||||
|
||||
|
||||
Environment final checkup
|
||||
-------------------------
|
||||
@@ -16,8 +16,8 @@ for development purposes.
|
||||
To install Watcher from packaging, refer instead to Watcher `User
|
||||
Documentation`_.
|
||||
|
||||
.. _`Git Repository`: http://git.openstack.org/cgit/openstack/watcher
|
||||
.. _`User Documentation`: http://docs.openstack.org/developer/watcher/
|
||||
.. _`Git Repository`: https://git.openstack.org/cgit/openstack/watcher
|
||||
.. _`User Documentation`: https://docs.openstack.org/watcher/latest/
|
||||
|
||||
Prerequisites
|
||||
=============
|
||||
@@ -35,10 +35,10 @@ following tools available on your system:
|
||||
**Reminder**: If you're successfully using a different platform, or a
|
||||
different version of the above, please document your configuration here!
|
||||
|
||||
.. _Python: http://www.python.org/
|
||||
.. _git: http://git-scm.com/
|
||||
.. _setuptools: http://pypi.python.org/pypi/setuptools
|
||||
.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.org/en/latest/install.html
|
||||
.. _Python: https://www.python.org/
|
||||
.. _git: https://git-scm.com/
|
||||
.. _setuptools: https://pypi.python.org/pypi/setuptools
|
||||
.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.io/en/latest/install.html
|
||||
|
||||
Getting the latest code
|
||||
=======================
|
||||
@@ -85,6 +85,9 @@ your platform.
|
||||
|
||||
$ sudo yum install openssl-devel libffi-devel mysql-devel
|
||||
|
||||
* CentOS 7::
|
||||
|
||||
$ sudo yum install gcc python-devel libxml2-devel libxslt-devel mariadb-devel
|
||||
|
||||
PyPi Packages and VirtualEnv
|
||||
----------------------------
|
||||
@@ -172,11 +175,12 @@ The HTML files are available into ``doc/build`` directory.
|
||||
Configure the Watcher services
|
||||
==============================
|
||||
|
||||
Watcher services require a configuration file. There is a sample configuration
|
||||
file that can be used to get started:
|
||||
Watcher services require a configuration file. Use tox to generate
|
||||
a sample configuration file that can be used to get started:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ tox -e genconfig
|
||||
$ cp etc/watcher.conf.sample etc/watcher.conf
|
||||
|
||||
Most of the default configuration should be enough to get you going, but you
|
||||
@@ -190,7 +194,7 @@ still need to configure the following sections:
|
||||
message bus
|
||||
|
||||
So if you need some more details on how to configure one or more of these
|
||||
sections, please do have a look at :doc:`../deploy/configuration` before
|
||||
sections, please do have a look at :doc:`../configuration/configuring` before
|
||||
continuing.
|
||||
|
||||
|
||||
@@ -236,7 +240,7 @@ To run the Watcher Applier service, use:
|
||||
(watcher) $ watcher-applier
|
||||
|
||||
Default configuration of these services are available into ``/etc/watcher``
|
||||
directory. See :doc:`../deploy/configuration` for details on how Watcher is
|
||||
directory. See :doc:`../configuration/configuring` for details on how Watcher is
|
||||
configured. By default, Watcher is configured with SQL backends.
|
||||
|
||||
|
||||
8
doc/source/contributor/index.rst
Normal file
8
doc/source/contributor/index.rst
Normal file
@@ -0,0 +1,8 @@
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
environment
|
||||
devstack
|
||||
notifications
|
||||
testing
|
||||
rally_link
|
||||
@@ -30,12 +30,12 @@ implement:
|
||||
implement. This is the first function to be called by the
|
||||
:ref:`applier <watcher_applier_definition>` before any further processing
|
||||
and its role is to validate the input parameters that were provided to it.
|
||||
- The :py:meth:`~.BaseAction.precondition` is called before the execution of
|
||||
- The :py:meth:`~.BaseAction.pre_condition` is called before the execution of
|
||||
an action. This method is a hook that can be used to perform some
|
||||
initializations or to make some more advanced validation on its input
|
||||
parameters. If you wish to block the execution based on this factor, you
|
||||
simply have to ``raise`` an exception.
|
||||
- The :py:meth:`~.BaseAction.postcondition` is called after the execution of
|
||||
- The :py:meth:`~.BaseAction.post_condition` is called after the execution of
|
||||
an action. As this function is called regardless of whether an action
|
||||
succeeded or not, this can prove itself useful to perform cleanup
|
||||
operations.
|
||||
@@ -71,11 +71,11 @@ Here is an example showing how you can write a plugin called ``DummyAction``:
|
||||
# Does nothing
|
||||
pass
|
||||
|
||||
def precondition(self):
|
||||
def pre_condition(self):
|
||||
# No pre-checks are done here
|
||||
pass
|
||||
|
||||
def postcondition(self):
|
||||
def post_condition(self):
|
||||
# Nothing done here
|
||||
pass
|
||||
|
||||
@@ -268,5 +268,5 @@ At this point, you can use your new cluster data model plugin in your
|
||||
# [...]
|
||||
dummy_collector = self.collector_manager.get_cluster_model_collector(
|
||||
"dummy") # "dummy" is the name of the entry point we declared earlier
|
||||
dummy_model = collector.get_latest_cluster_data_model()
|
||||
dummy_model = dummy_collector.get_latest_cluster_data_model()
|
||||
# Do some stuff with this model
|
||||
@@ -60,8 +60,8 @@ Here is an example showing how you can define a new ``NewGoal`` goal plugin:
|
||||
# import path: thirdparty.new
|
||||
|
||||
from watcher._i18n import _
|
||||
from watcher.decision_engine.goal import base
|
||||
from watcher.decision_engine.goal.efficacy import specs
|
||||
from watcher.decision_engine.strategy.strategies import base
|
||||
|
||||
class NewGoal(base.Goal):
|
||||
|
||||
@@ -79,11 +79,11 @@ Here is an example showing how you can define a new ``NewGoal`` goal plugin:
|
||||
|
||||
@classmethod
|
||||
def get_efficacy_specification(cls):
|
||||
return specs.UnclassifiedStrategySpecification()
|
||||
return specs.Unclassified()
|
||||
|
||||
|
||||
As you may have noticed, the :py:meth:`~.Goal.get_efficacy_specification`
|
||||
method returns an :py:meth:`~.UnclassifiedStrategySpecification` instance which
|
||||
method returns an :py:meth:`~.Unclassified` instance which
|
||||
is provided by Watcher. This efficacy specification is useful during the
|
||||
development process of your goal as it corresponds to an empty specification.
|
||||
If you want to learn more about what efficacy specifications are used for or to
|
||||
@@ -123,8 +123,9 @@ Here below is how you would proceed to register ``NewGoal`` using pbr_:
|
||||
new_goal = thirdparty.new:NewGoal
|
||||
|
||||
|
||||
To get a better understanding on how to implement a more advanced goal,
|
||||
have a look at the :py:class:`~.ServerConsolidation` class.
|
||||
To get a better understanding on how to implement a more advanced goal, have
|
||||
a look at the
|
||||
:py:class:`watcher.decision_engine.goal.goals.ServerConsolidation` class.
|
||||
|
||||
.. _pbr: http://docs.openstack.org/developer/pbr/
|
||||
|
||||
11
doc/source/contributor/plugin/index.rst
Normal file
11
doc/source/contributor/plugin/index.rst
Normal file
@@ -0,0 +1,11 @@
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
base-setup
|
||||
action-plugin
|
||||
cdmc-plugin
|
||||
goal-plugin
|
||||
planner-plugin
|
||||
scoring-engine-plugin
|
||||
strategy-plugin
|
||||
plugins
|
||||
@@ -39,7 +39,7 @@ Here is an example showing how you can write a planner plugin called
|
||||
|
||||
# Filepath = third-party/third_party/dummy.py
|
||||
# Import path = third_party.dummy
|
||||
import uuid
|
||||
from oslo_utils import uuidutils
|
||||
from watcher.decision_engine.planner import base
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ Here is an example showing how you can write a planner plugin called
|
||||
|
||||
def _create_action_plan(self, context, audit_id):
|
||||
action_plan_dict = {
|
||||
'uuid': uuid.uuid4(),
|
||||
'uuid': uuidutils.generate_uuid(),
|
||||
'audit_id': audit_id,
|
||||
'first_action_id': None,
|
||||
'state': objects.action_plan.State.RECOMMENDED
|
||||
@@ -37,7 +37,8 @@ Create a new scoring engine plugin
|
||||
|
||||
In order to create a new scoring engine you have to:
|
||||
|
||||
- Extend the :py:class:`~.ScoringEngine` class
|
||||
- Extend the :py:class:`watcher.decision_engine.scoring.base.ScoringEngine`
|
||||
class
|
||||
- Implement its :py:meth:`~.ScoringEngine.get_name` method to return the
|
||||
**unique** ID of the new scoring engine you want to create. This unique ID
|
||||
should be the same as the name of :ref:`the entry point we will declare later
|
||||
@@ -124,7 +125,8 @@ scoring engine deployed as a web service on external servers:
|
||||
Abstract Plugin Class
|
||||
=====================
|
||||
|
||||
Here below is the abstract :py:class:`~.ScoringEngine` class:
|
||||
Here below is the abstract
|
||||
:py:class:`watcher.decision_engine.scoring.base.ScoringEngine` class:
|
||||
|
||||
.. autoclass:: watcher.decision_engine.scoring.base.ScoringEngine
|
||||
:members:
|
||||
@@ -245,75 +245,70 @@ 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`_ to the Ceilometer API, which makes this API reusable and easier
|
||||
to used.
|
||||
`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.
|
||||
|
||||
If you want to use your own metrics database backend, please refer to the
|
||||
`Ceilometer developer guide`_. Indeed, Ceilometer's pluggable model allows
|
||||
for various types of backends. A list of the available backends is located
|
||||
here_. The Ceilosca project is a good example of how to create your own
|
||||
pluggable backend.
|
||||
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
|
||||
Ceilometer backends is located here_. The `Ceilosca`_ project is a good example
|
||||
of how to create your own pluggable backend. Moreover, if your strategy
|
||||
requires new metrics not covered by Ceilometer, you can add them through a
|
||||
`Ceilometer plugin`_.
|
||||
|
||||
Finally, if your strategy requires new metrics not covered by Ceilometer, you
|
||||
can add them through a Ceilometer `plugin`_.
|
||||
|
||||
.. _`Helper`: https://github.com/openstack/watcher/blob/master/watcher/decision_engine/cluster/history/ceilometer.py
|
||||
.. _`Ceilometer developer guide`: http://docs.openstack.org/developer/ceilometer/architecture.html#storing-the-data
|
||||
.. _`Ceilometer`: http://docs.openstack.org/developer/ceilometer/
|
||||
.. _`Monasca`: https://github.com/openstack/monasca-api/blob/master/docs/monasca-api-spec.md
|
||||
.. _`here`: http://docs.openstack.org/developer/ceilometer/install/dbreco.html#choosing-a-database-backend
|
||||
.. _`plugin`: http://docs.openstack.org/developer/ceilometer/plugins.html
|
||||
.. _`Ceilometer plugin`: http://docs.openstack.org/developer/ceilometer/plugins.html
|
||||
.. _`Ceilosca`: https://github.com/openstack/monasca-ceilometer/blob/master/ceilosca/ceilometer/storage/impl_monasca.py
|
||||
|
||||
Read usage metrics using the Watcher Datasource Helper
|
||||
------------------------------------------------------
|
||||
|
||||
Read usage metrics using the Python binding
|
||||
-------------------------------------------
|
||||
|
||||
You can find the information about the Ceilometer Python binding on the
|
||||
OpenStack `ceilometer client python API documentation
|
||||
<http://docs.openstack.org/developer/python-ceilometerclient/api.html>`_
|
||||
|
||||
To facilitate the process, Watcher provides the ``osc`` attribute to every
|
||||
strategy which includes clients to major OpenStack services, including
|
||||
Ceilometer. So to access it within your strategy, you can do the following:
|
||||
The following code snippet shows how to invoke a Datasource Helper class:
|
||||
|
||||
.. code-block:: py
|
||||
|
||||
# Within your strategy "execute()"
|
||||
cclient = self.osc.ceilometer
|
||||
# TODO: Do something here
|
||||
from watcher.datasource import ceilometer as ceil
|
||||
from watcher.datasource import monasca as mon
|
||||
|
||||
@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
|
||||
|
||||
Using that you can now query the values for that specific metric:
|
||||
|
||||
.. code-block:: py
|
||||
|
||||
query = None # e.g. [{'field': 'foo', 'op': 'le', 'value': 34},]
|
||||
value_cpu = cclient.samples.list(
|
||||
meter_name='cpu_util',
|
||||
limit=10, q=query)
|
||||
|
||||
|
||||
Read usage metrics using the Watcher Cluster History Helper
|
||||
-----------------------------------------------------------
|
||||
|
||||
Here below is the abstract ``BaseClusterHistory`` class of the Helper.
|
||||
|
||||
.. autoclass:: watcher.decision_engine.cluster.history.base.BaseClusterHistory
|
||||
:members:
|
||||
:noindex:
|
||||
|
||||
The following code snippet shows how to create a Cluster History class:
|
||||
|
||||
.. code-block:: py
|
||||
|
||||
from watcher.decision_engine.cluster.history import ceilometer as ceil
|
||||
|
||||
query_history = ceil.CeilometerClusterHistory()
|
||||
|
||||
Using that you can now query the values for that specific metric:
|
||||
|
||||
.. code-block:: py
|
||||
|
||||
query_history.statistic_aggregation(resource_id=compute_node.uuid,
|
||||
meter_name='compute.node.cpu.percent',
|
||||
period="7200",
|
||||
aggregate='avg'
|
||||
)
|
||||
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'
|
||||
)
|
||||
@@ -14,7 +14,7 @@ Unit tests
|
||||
==========
|
||||
|
||||
All unit tests should be run using `tox`_. To run the same unit tests that are
|
||||
executing onto `Gerrit`_ which includes ``py34``, ``py27`` and ``pep8``, you
|
||||
executing onto `Gerrit`_ which includes ``py35``, ``py27`` and ``pep8``, you
|
||||
can issue the following command::
|
||||
|
||||
$ workon watcher
|
||||
@@ -26,7 +26,7 @@ If you want to only run one of the aforementioned, you can then issue one of
|
||||
the following::
|
||||
|
||||
$ workon watcher
|
||||
(watcher) $ tox -e py34
|
||||
(watcher) $ tox -e py35
|
||||
(watcher) $ tox -e py27
|
||||
(watcher) $ tox -e pep8
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
.. _watcher_sample_configuration_files:
|
||||
|
||||
==================================
|
||||
Watcher sample configuration files
|
||||
==================================
|
||||
|
||||
watcher.conf
|
||||
~~~~~~~~~~~~
|
||||
|
||||
The ``watcher.conf`` file contains most of the options to configure the
|
||||
Watcher services.
|
||||
|
||||
.. literalinclude:: ../watcher.conf.sample
|
||||
:language: ini
|
||||
@@ -65,6 +65,14 @@ Audit
|
||||
|
||||
.. _audit_template_definition:
|
||||
|
||||
Audit Scope
|
||||
===========
|
||||
|
||||
An Audit Scope is a set of audited resources. Audit Scope should be defined
|
||||
in each Audit Template (which contains the Audit settings).
|
||||
|
||||
.. _audit_scope_definition:
|
||||
|
||||
Audit Template
|
||||
==============
|
||||
|
||||
@@ -101,12 +109,6 @@ Cluster Data Model (CDM)
|
||||
|
||||
.. watcher-term:: watcher.decision_engine.model.collector.base
|
||||
|
||||
.. _cluster_history_definition:
|
||||
|
||||
Cluster History
|
||||
===============
|
||||
|
||||
.. watcher-term:: watcher.decision_engine.cluster.history.base
|
||||
|
||||
.. _controller_node_definition:
|
||||
|
||||
@@ -132,7 +134,7 @@ Compute node
|
||||
============
|
||||
|
||||
Please, read `the official OpenStack definition of a Compute Node
|
||||
<http://docs.openstack.org/openstack-ops/content/compute_nodes.html>`_.
|
||||
<http://docs.openstack.org/ops-guide/arch-compute-nodes.html>`_.
|
||||
|
||||
.. _customer_definition:
|
||||
|
||||
|
||||
@@ -9,8 +9,10 @@ FAILED --> DELETED : Administrator removes\nAction Plan
|
||||
SUCCEEDED --> DELETED : Administrator removes\nAction Plan
|
||||
ONGOING --> CANCELLED : Administrator cancels\nAction Plan
|
||||
RECOMMENDED --> CANCELLED : Administrator cancels\nAction Plan
|
||||
RECOMMENDED --> SUPERSEDED : The Watcher Decision Engine supersedes\nAction Plan
|
||||
PENDING --> CANCELLED : Administrator cancels\nAction Plan
|
||||
CANCELLED --> DELETED
|
||||
SUPERSEDED --> DELETED
|
||||
DELETED --> [*]
|
||||
|
||||
@enduml
|
||||
|
||||
@@ -4,11 +4,14 @@
|
||||
PENDING --> ONGOING: Audit request is received\nby the Watcher Decision Engine
|
||||
ONGOING --> FAILED: Audit fails\n(no solution found, technical error, ...)
|
||||
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
|
||||
FAILED --> DELETED : Administrator wants to\narchive/delete the Audit
|
||||
SUCCEEDED --> DELETED : Administrator wants to\narchive/delete the Audit
|
||||
PENDING --> CANCELLED : Administrator cancels\nthe Audit
|
||||
ONGOING --> CANCELLED : Administrator cancels\nthe Audit
|
||||
CANCELLED --> DELETED : Administrator wants to\narchive/delete the Audit
|
||||
SUSPENDED --> DELETED: Administrator wants to\narchive/delete the Audit
|
||||
DELETED --> [*]
|
||||
|
||||
@enduml
|
||||
|
||||
@@ -60,6 +60,7 @@ table(audits) {
|
||||
interval : Integer, nullable
|
||||
parameters : JSONEncodedDict, nullable
|
||||
scope : JSONEncodedList, nullable
|
||||
auto_trigger: Boolean
|
||||
|
||||
created_at : DateTime
|
||||
updated_at : DateTime
|
||||
@@ -73,7 +74,6 @@ table(action_plans) {
|
||||
foreign_key("audit_id : Integer, nullable")
|
||||
foreign_key("strategy_id : Integer")
|
||||
uuid : String[36]
|
||||
first_action_id : Integer
|
||||
state : String[20], nullable
|
||||
global_efficacy : JSONEncodedDict, nullable
|
||||
|
||||
@@ -91,7 +91,7 @@ table(actions) {
|
||||
action_type : String[255]
|
||||
input_parameters : JSONEncodedDict, nullable
|
||||
state : String[20], nullable
|
||||
next : String[36], nullable
|
||||
parents : JSONEncodedList, nullable
|
||||
|
||||
created_at : DateTime
|
||||
updated_at : DateTime
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 60 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 47 KiB |
@@ -43,7 +43,7 @@ Introduction
|
||||
|
||||
glossary
|
||||
architecture
|
||||
dev/contributing
|
||||
contributor/contributing
|
||||
|
||||
|
||||
Getting Started
|
||||
@@ -52,13 +52,7 @@ Getting Started
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
dev/environment
|
||||
dev/devstack
|
||||
deploy/configuration
|
||||
deploy/conf-files
|
||||
dev/notifications
|
||||
dev/testing
|
||||
dev/rally_link
|
||||
contributor/index
|
||||
|
||||
API References
|
||||
--------------
|
||||
@@ -66,7 +60,7 @@ API References
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
webapi/v1
|
||||
api/index
|
||||
|
||||
Plugins
|
||||
-------
|
||||
@@ -74,30 +68,38 @@ Plugins
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
dev/plugin/base-setup
|
||||
dev/plugin/goal-plugin
|
||||
dev/plugin/scoring-engine-plugin
|
||||
dev/plugin/strategy-plugin
|
||||
dev/plugin/cdmc-plugin
|
||||
dev/plugin/action-plugin
|
||||
dev/plugin/planner-plugin
|
||||
dev/plugins
|
||||
contributor/plugin/index
|
||||
|
||||
Installation
|
||||
============
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
install/index
|
||||
|
||||
Watcher Configuration Options
|
||||
=============================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
configuration/index
|
||||
|
||||
Admin Guide
|
||||
===========
|
||||
|
||||
Introduction
|
||||
------------
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
admin/index
|
||||
|
||||
User Guide
|
||||
==========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:maxdepth: 2
|
||||
|
||||
deploy/installation
|
||||
deploy/user-guide
|
||||
deploy/policy
|
||||
deploy/gmr
|
||||
strategies/strategies
|
||||
user/index
|
||||
|
||||
Watcher Manual Pages
|
||||
====================
|
||||
@@ -106,7 +108,7 @@ Watcher Manual Pages
|
||||
:glob:
|
||||
:maxdepth: 1
|
||||
|
||||
man/*
|
||||
man/index
|
||||
|
||||
.. # NOTE(mriedem): This is the section where we hide things that we don't
|
||||
# actually want in the table of contents but sphinx build would fail if
|
||||
|
||||
71
doc/source/install/common_configure.rst
Normal file
71
doc/source/install/common_configure.rst
Normal file
@@ -0,0 +1,71 @@
|
||||
2. Edit the ``/etc/watcher/watcher.conf`` file and complete the following
|
||||
actions:
|
||||
|
||||
* In the ``[database]`` section, configure database access:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[database]
|
||||
...
|
||||
connection = mysql+pymysql://watcher:WATCHER_DBPASS@controller/watcher?charset=utf8
|
||||
|
||||
* In the `[DEFAULT]` section, configure the transport url for RabbitMQ message broker.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
...
|
||||
control_exchange = watcher
|
||||
transport_url = rabbit://openstack:RABBIT_PASS@controller
|
||||
|
||||
Replace the RABBIT_PASS with the password you chose for OpenStack user in RabbitMQ.
|
||||
|
||||
* In the `[keystone_authtoken]` section, configure Identity service access.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[keystone_authtoken]
|
||||
...
|
||||
auth_uri = http://controller:5000
|
||||
auth_url = http://controller:35357
|
||||
memcached_servers = controller:11211
|
||||
auth_type = password
|
||||
project_domain_name = default
|
||||
user_domain_name = default
|
||||
project_name = service
|
||||
username = watcher
|
||||
password = WATCHER_PASS
|
||||
|
||||
Replace WATCHER_PASS with the password you chose for the watcher user in the Identity service.
|
||||
|
||||
* Watcher interacts with other OpenStack projects via project clients, in order to instantiate these
|
||||
clients, Watcher requests new session from Identity service. In the `[watcher_client_auth]` section,
|
||||
configure the identity service access to interact with other OpenStack project clients.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[watcher_client_auth]
|
||||
...
|
||||
auth_type = password
|
||||
auth_url = http://controller:35357
|
||||
username = watcher
|
||||
password = WATCHER_PASS
|
||||
project_domain_name = default
|
||||
user_domain_name = default
|
||||
project_name = service
|
||||
|
||||
Replace WATCHER_PASS with the password you chose for the watcher user in the Identity service.
|
||||
|
||||
* In the `[oslo_messaging_notifications]` section, configure the messaging driver.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[oslo_messaging_notifications]
|
||||
...
|
||||
driver = messagingv2
|
||||
|
||||
3. Populate watcher database:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
su -s /bin/sh -c "watcher-db-manage" watcher
|
||||
139
doc/source/install/common_prerequisites.rst
Normal file
139
doc/source/install/common_prerequisites.rst
Normal file
@@ -0,0 +1,139 @@
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
Before you install and configure the Infrastructure Optimization service,
|
||||
you must create a database, service credentials, and API endpoints.
|
||||
|
||||
1. Create the database, complete these steps:
|
||||
|
||||
* Use the database access client to connect to the database
|
||||
server as the ``root`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ mysql -u root -p
|
||||
|
||||
* Create the ``watcher`` database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
CREATE DATABASE watcher CHARACTER SET utf8;
|
||||
|
||||
* Grant proper access to the ``watcher`` database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
GRANT ALL PRIVILEGES ON watcher.* TO 'watcher'@'localhost' \
|
||||
IDENTIFIED BY 'WATCHER_DBPASS';
|
||||
GRANT ALL PRIVILEGES ON watcher.* TO 'watcher'@'%' \
|
||||
IDENTIFIED BY 'WATCHER_DBPASS';
|
||||
|
||||
Replace ``WATCHER_DBPASS`` with a suitable password.
|
||||
|
||||
* Exit the database access client.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
exit;
|
||||
|
||||
2. Source the ``admin`` credentials to gain access to
|
||||
admin-only CLI commands:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ . admin-openrc
|
||||
|
||||
3. To create the service credentials, complete these steps:
|
||||
|
||||
* Create the ``watcher`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack user create --domain default --password-prompt watcher
|
||||
User Password:
|
||||
Repeat User Password:
|
||||
+---------------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+---------------------+----------------------------------+
|
||||
| domain_id | default |
|
||||
| enabled | True |
|
||||
| id | b18ee38e06034b748141beda8fc8bfad |
|
||||
| name | watcher |
|
||||
| options | {} |
|
||||
| password_expires_at | None |
|
||||
+---------------------+----------------------------------+
|
||||
|
||||
|
||||
* Add the ``admin`` role to the ``watcher`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack role add --project service --user watcher admin
|
||||
|
||||
.. note::
|
||||
|
||||
This command produces no output.
|
||||
|
||||
* Create the watcher service entities:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack service create --name watcher --description "Infrastructure Optimization" infra-optim
|
||||
+-------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-------------+----------------------------------+
|
||||
| description | Infrastructure Optimization |
|
||||
| enabled | True |
|
||||
| id | d854f6fff0a64f77bda8003c8dedfada |
|
||||
| name | watcher |
|
||||
| type | infra-optim |
|
||||
+-------------+----------------------------------+
|
||||
|
||||
|
||||
4. Create the Infrastructure Optimization service API endpoints:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
infra-optim public http://controller:9322
|
||||
+-------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-------------+----------------------------------+
|
||||
| description | Infrastructure Optimization |
|
||||
| enabled | True |
|
||||
| id | d854f6fff0a64f77bda8003c8dedfada |
|
||||
| name | watcher |
|
||||
| type | infra-optim |
|
||||
+-------------+----------------------------------+
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
infra-optim internal http://controller:9322
|
||||
+--------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------+
|
||||
| enabled | True |
|
||||
| id | 225aef8465ef4df48a341aaaf2b0a390 |
|
||||
| interface | internal |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | d854f6fff0a64f77bda8003c8dedfada |
|
||||
| service_name | watcher |
|
||||
| service_type | infra-optim |
|
||||
| url | http://controller:9322 |
|
||||
+--------------+----------------------------------+
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
infra-optim admin http://controller:9322
|
||||
+--------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------+
|
||||
| enabled | True |
|
||||
| id | 375eb5057fb546edbdf3ee4866179672 |
|
||||
| interface | admin |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | d854f6fff0a64f77bda8003c8dedfada |
|
||||
| service_name | watcher |
|
||||
| service_type | infra-optim |
|
||||
| url | http://controller:9322 |
|
||||
+--------------+----------------------------------+
|
||||
27
doc/source/install/get_started.rst
Normal file
27
doc/source/install/get_started.rst
Normal file
@@ -0,0 +1,27 @@
|
||||
============================================
|
||||
Infrastructure Optimization service overview
|
||||
============================================
|
||||
The Infrastructure Optimization service provides flexible and scalable
|
||||
optimization service for multi-tenant OpenStack based clouds.
|
||||
|
||||
The Infrastructure Optimization service consists of the following components:
|
||||
|
||||
``watcher`` command-line client
|
||||
A CLI to communicate with ``watcher-api`` to optimize the cloud.
|
||||
|
||||
``watcher-api`` service
|
||||
An OpenStack-native REST API that accepts and responds to end-user calls
|
||||
by processing them and forwarding to appropriate underlying watcher
|
||||
services via AMQP.
|
||||
|
||||
``watcher-decision-engine`` service
|
||||
It runs audit and return an action plan to achieve optimization goal
|
||||
specified by the end-user in audit.
|
||||
|
||||
``watcher-applier`` service
|
||||
It executes action plan built by watcher-decision-engine. It interacts with
|
||||
other OpenStack components like nova to execute the given action
|
||||
plan.
|
||||
|
||||
``watcher-dashboard``
|
||||
Watcher UI implemented as a plugin for the OpenStack Dashboard.
|
||||
39
doc/source/install/index.rst
Normal file
39
doc/source/install/index.rst
Normal file
@@ -0,0 +1,39 @@
|
||||
===================================
|
||||
Infrastructure Optimization service
|
||||
===================================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
get_started.rst
|
||||
install.rst
|
||||
verify.rst
|
||||
next-steps.rst
|
||||
|
||||
The Infrastructure Optimization service (watcher) provides
|
||||
flexible and scalable resource optimization service for
|
||||
multi-tenant OpenStack-based clouds.
|
||||
|
||||
Watcher provides a complete optimization loop including
|
||||
everything from a metrics receiver, complex event processor
|
||||
and profiler, optimization processor and an action plan
|
||||
applier. This provides a robust framework to realize a wide
|
||||
range of cloud optimization goals, including the reduction
|
||||
of data center operating costs, increased system performance
|
||||
via intelligent virtual machine migration, increased energy
|
||||
efficiency—and more!
|
||||
|
||||
Watcher also supports a pluggable architecture by which custom
|
||||
optimization algorithms, data metrics and data profilers can be
|
||||
developed and inserted into the Watcher framework.
|
||||
|
||||
Check the documentation for watcher optimization strategies at
|
||||
https://docs.openstack.org/watcher/latest/strategies/index.html
|
||||
|
||||
Check watcher glossary at
|
||||
https://docs.openstack.org/watcher/latest/glossary.html
|
||||
|
||||
|
||||
This chapter assumes a working setup of OpenStack following the
|
||||
`OpenStack Installation Tutorial
|
||||
<https://docs.openstack.org/project-install-guide/ocata/>`_.
|
||||
35
doc/source/install/install-obs.rst
Normal file
35
doc/source/install/install-obs.rst
Normal file
@@ -0,0 +1,35 @@
|
||||
.. _install-obs:
|
||||
|
||||
|
||||
Install and configure for openSUSE and SUSE Linux Enterprise
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes how to install and configure the Infrastructure
|
||||
Optimization service for openSUSE Leap 42.1 and
|
||||
SUSE Linux Enterprise Server 12 SP1.
|
||||
|
||||
.. include:: common_prerequisites.rst
|
||||
|
||||
Install and configure components
|
||||
--------------------------------
|
||||
|
||||
#. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# zypper --quiet --non-interactive install
|
||||
|
||||
.. include:: common_configure.rst
|
||||
|
||||
|
||||
Finalize installation
|
||||
---------------------
|
||||
|
||||
Start the Infrastructure Optimization services and configure them to start when
|
||||
the system boots:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# systemctl enable openstack-watcher-api.service
|
||||
|
||||
# systemctl start openstack-watcher-api.service
|
||||
38
doc/source/install/install-rdo.rst
Normal file
38
doc/source/install/install-rdo.rst
Normal file
@@ -0,0 +1,38 @@
|
||||
.. _install-rdo:
|
||||
|
||||
Install and configure for Red Hat Enterprise Linux and CentOS
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
This section describes how to install and configure the Infrastructure
|
||||
Optimization service for Red Hat Enterprise Linux 7 and CentOS 7.
|
||||
|
||||
.. include:: common_prerequisites.rst
|
||||
|
||||
Install and configure components
|
||||
--------------------------------
|
||||
|
||||
1. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# sudo yum install openstack-watcher-api openstack-watcher-applier \
|
||||
openstack-watcher-decision-engine
|
||||
|
||||
.. include:: common_configure.rst
|
||||
|
||||
Finalize installation
|
||||
---------------------
|
||||
|
||||
Start the Infrastructure Optimization services and configure them to start when
|
||||
the system boots:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# systemctl enable openstack-watcher-api.service \
|
||||
openstack-watcher-decision-engine.service \
|
||||
openstack-watcher-applier.service
|
||||
|
||||
# systemctl start openstack-watcher-api.service \
|
||||
openstack-watcher-decision-engine.service \
|
||||
openstack-watcher-applier.service
|
||||
34
doc/source/install/install-ubuntu.rst
Normal file
34
doc/source/install/install-ubuntu.rst
Normal file
@@ -0,0 +1,34 @@
|
||||
.. _install-ubuntu:
|
||||
|
||||
Install and configure for Ubuntu
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes how to install and configure the Infrastructure
|
||||
Optimization service for Ubuntu 14.04 (LTS).
|
||||
|
||||
.. include:: common_prerequisites.rst
|
||||
|
||||
Install and configure components
|
||||
--------------------------------
|
||||
|
||||
1. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# apt install watcher-api watcher-decision-engine \
|
||||
watcher-applier
|
||||
|
||||
# apt install python-watcherclient
|
||||
|
||||
.. include:: common_configure.rst
|
||||
|
||||
Finalize installation
|
||||
---------------------
|
||||
|
||||
Restart the Infrastructure Optimization services:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# service watcher-api restart
|
||||
# service watcher-decision-engine restart
|
||||
# service watcher-applier restart
|
||||
20
doc/source/install/install.rst
Normal file
20
doc/source/install/install.rst
Normal file
@@ -0,0 +1,20 @@
|
||||
.. _install:
|
||||
|
||||
Install and configure
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes how to install and configure the Infrastructure
|
||||
Optimization service, code-named watcher, on the controller node.
|
||||
|
||||
This section assumes that you already have a working OpenStack
|
||||
environment with at least the following components installed:
|
||||
Identity Service, Compute Service, Telemetry data collection service.
|
||||
|
||||
Note that installation and configuration vary by distribution.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
install-obs.rst
|
||||
install-rdo.rst
|
||||
install-ubuntu.rst
|
||||
9
doc/source/install/next-steps.rst
Normal file
9
doc/source/install/next-steps.rst
Normal file
@@ -0,0 +1,9 @@
|
||||
.. _next-steps:
|
||||
|
||||
Next steps
|
||||
~~~~~~~~~~
|
||||
|
||||
Your OpenStack environment now includes the watcher service.
|
||||
|
||||
To add additional services, see
|
||||
https://docs.openstack.org/project-install-guide/ocata/.
|
||||
119
doc/source/install/verify.rst
Normal file
119
doc/source/install/verify.rst
Normal file
@@ -0,0 +1,119 @@
|
||||
.. _verify:
|
||||
|
||||
Verify operation
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
Verify operation of the Infrastructure Optimization service.
|
||||
|
||||
.. note::
|
||||
|
||||
Perform these commands on the controller node.
|
||||
|
||||
1. Source the ``admin`` project credentials to gain access to
|
||||
admin-only CLI commands:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ . admin-openrc
|
||||
|
||||
2. List service components to verify successful launch and registration
|
||||
of each process:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack optimize service list
|
||||
+----+-------------------------+------------+--------+
|
||||
| ID | Name | Host | Status |
|
||||
+----+-------------------------+------------+--------+
|
||||
| 1 | watcher-decision-engine | controller | ACTIVE |
|
||||
| 2 | watcher-applier | controller | ACTIVE |
|
||||
+----+-------------------------+------------+--------+
|
||||
|
||||
3. List goals and strategies:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack optimize goal list
|
||||
+--------------------------------------+----------------------+----------------------+
|
||||
| UUID | Name | Display name |
|
||||
+--------------------------------------+----------------------+----------------------+
|
||||
| a8cd6d1a-008b-4ff0-8dbc-b30493fcc5b9 | dummy | Dummy goal |
|
||||
| 03953f2f-02d0-42b5-9a12-7ba500a54395 | workload_balancing | Workload Balancing |
|
||||
| de0f8714-984b-4d6b-add1-9cad8120fbce | server_consolidation | Server Consolidation |
|
||||
| f056bc80-c6d1-40dc-b002-938ccade9385 | thermal_optimization | Thermal Optimization |
|
||||
| e7062856-892e-4f0f-b84d-b828464b3fd0 | airflow_optimization | Airflow Optimization |
|
||||
| 1f038da9-b36c-449f-9f04-c225bf3eb478 | unclassified | Unclassified |
|
||||
+--------------------------------------+----------------------+----------------------+
|
||||
|
||||
$ openstack optimize strategy list
|
||||
+--------------------------------------+---------------------------+---------------------------------------------+----------------------+
|
||||
| UUID | Name | Display name | Goal |
|
||||
+--------------------------------------+---------------------------+---------------------------------------------+----------------------+
|
||||
| 98ae84c8-7c9b-4cbd-8d9c-4bd7c6b106eb | dummy | Dummy strategy | dummy |
|
||||
| 02a170b6-c72e-479d-95c0-8a4fdd4cc1ef | dummy_with_scorer | Dummy Strategy using sample Scoring Engines | dummy |
|
||||
| 8bf591b8-57e5-4a9e-8c7d-c37bda735a45 | outlet_temperature | Outlet temperature based strategy | thermal_optimization |
|
||||
| 8a0810fb-9d9a-47b9-ab25-e442878abc54 | vm_workload_consolidation | VM Workload Consolidation Strategy | server_consolidation |
|
||||
| 1718859c-3eb5-45cb-9220-9cb79fe42fa5 | basic | Basic offline consolidation | server_consolidation |
|
||||
| b5e7f5f1-4824-42c7-bb52-cf50724f67bf | workload_stabilization | Workload stabilization | workload_balancing |
|
||||
| f853d71e-9286-4df3-9d3e-8eaf0f598e07 | workload_balance | Workload Balance Migration Strategy | workload_balancing |
|
||||
| 58bdfa89-95b5-4630-adf6-fd3af5ff1f75 | uniform_airflow | Uniform airflow migration strategy | airflow_optimization |
|
||||
| 66fde55d-a612-4be9-8cb0-ea63472b420b | dummy_with_resize | Dummy strategy with resize | dummy |
|
||||
+--------------------------------------+---------------------------+---------------------------------------------+----------------------+
|
||||
|
||||
4. Run an action plan by creating an audit with dummy goal:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack optimize audit create --goal dummy
|
||||
+--------------+--------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+--------------------------------------+
|
||||
| UUID | e94d4826-ad4e-44df-ad93-dff489fde457 |
|
||||
| Created At | 2017-05-23T11:46:58.763394+00:00 |
|
||||
| Updated At | None |
|
||||
| Deleted At | None |
|
||||
| State | PENDING |
|
||||
| Audit Type | ONESHOT |
|
||||
| Parameters | {} |
|
||||
| Interval | None |
|
||||
| Goal | dummy |
|
||||
| Strategy | auto |
|
||||
| Audit Scope | [] |
|
||||
| Auto Trigger | False |
|
||||
+--------------+--------------------------------------+
|
||||
|
||||
$ openstack optimize audit list
|
||||
+--------------------------------------+------------+-----------+-------+----------+--------------+
|
||||
| UUID | Audit Type | State | Goal | Strategy | Auto Trigger |
|
||||
+--------------------------------------+------------+-----------+-------+----------+--------------+
|
||||
| e94d4826-ad4e-44df-ad93-dff489fde457 | ONESHOT | SUCCEEDED | dummy | auto | False |
|
||||
+--------------------------------------+------------+-----------+-------+----------+--------------+
|
||||
|
||||
$ openstack optimize actionplan list
|
||||
+--------------------------------------+--------------------------------------+-------------+------------+-----------------+
|
||||
| UUID | Audit | State | Updated At | Global efficacy |
|
||||
+--------------------------------------+--------------------------------------+-------------+------------+-----------------+
|
||||
| ba9ce6b3-969c-4b8e-bb61-ae24e8630f81 | e94d4826-ad4e-44df-ad93-dff489fde457 | RECOMMENDED | None | None |
|
||||
+--------------------------------------+--------------------------------------+-------------+------------+-----------------+
|
||||
|
||||
$ openstack optimize actionplan start ba9ce6b3-969c-4b8e-bb61-ae24e8630f81
|
||||
+---------------------+--------------------------------------+
|
||||
| Field | Value |
|
||||
+---------------------+--------------------------------------+
|
||||
| UUID | ba9ce6b3-969c-4b8e-bb61-ae24e8630f81 |
|
||||
| Created At | 2017-05-23T11:46:58+00:00 |
|
||||
| Updated At | 2017-05-23T11:53:12+00:00 |
|
||||
| Deleted At | None |
|
||||
| Audit | e94d4826-ad4e-44df-ad93-dff489fde457 |
|
||||
| Strategy | dummy |
|
||||
| State | ONGOING |
|
||||
| Efficacy indicators | [] |
|
||||
| Global efficacy | {} |
|
||||
+---------------------+--------------------------------------+
|
||||
|
||||
$ openstack optimize actionplan list
|
||||
+--------------------------------------+--------------------------------------+-----------+---------------------------+-----------------+
|
||||
| UUID | Audit | State | Updated At | Global efficacy |
|
||||
+--------------------------------------+--------------------------------------+-----------+---------------------------+-----------------+
|
||||
| ba9ce6b3-969c-4b8e-bb61-ae24e8630f81 | e94d4826-ad4e-44df-ad93-dff489fde457 | SUCCEEDED | 2017-05-23T11:53:16+00:00 | None |
|
||||
+--------------------------------------+--------------------------------------+-----------+---------------------------+-----------------+
|
||||
8
doc/source/man/index.rst
Normal file
8
doc/source/man/index.rst
Normal file
@@ -0,0 +1,8 @@
|
||||
.. toctree::
|
||||
:glob:
|
||||
:maxdepth: 1
|
||||
|
||||
watcher-api
|
||||
watcher-applier
|
||||
watcher-db-manage
|
||||
watcher-decision-engine
|
||||
@@ -57,7 +57,7 @@ Planner
|
||||
|
||||
Default Watcher's planner:
|
||||
|
||||
.. watcher-term:: watcher.decision_engine.planner.default.DefaultPlanner
|
||||
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
@@ -71,6 +71,9 @@ parameter type default Value description
|
||||
be tried by the strategy while
|
||||
searching for potential candidates.
|
||||
To remove the limit, set it to 0
|
||||
``period`` Number 7200 The time interval in seconds
|
||||
for getting statistic aggregation
|
||||
from metric data source
|
||||
====================== ====== ============= ===================================
|
||||
|
||||
Efficacy Indicator
|
||||
|
||||
104
doc/source/strategies/outlet_temp_control.rst
Normal file
104
doc/source/strategies/outlet_temp_control.rst
Normal file
@@ -0,0 +1,104 @@
|
||||
=================================
|
||||
Outlet Temperature Based Strategy
|
||||
=================================
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
**display name**: ``outlet_temperature``
|
||||
|
||||
**goal**: ``thermal_optimization``
|
||||
|
||||
Outlet (Exhaust Air) temperature is a new thermal telemetry which can be
|
||||
used to measure the host's thermal/workload status. This strategy makes
|
||||
decisions to migrate workloads to the hosts with good thermal condition
|
||||
(lowest outlet temperature) when the outlet temperature of source hosts
|
||||
reach a configurable threshold.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
This strategy has a dependency on the host having Intel's Power
|
||||
Node Manager 3.0 or later enabled.
|
||||
|
||||
|
||||
Metrics
|
||||
*******
|
||||
|
||||
The *outlet_temperature* strategy requires the following metrics:
|
||||
|
||||
========================================= ============ ======= =======
|
||||
metric service name plugins comment
|
||||
========================================= ============ ======= =======
|
||||
``hardware.ipmi.node.outlet_temperature`` ceilometer_ IPMI
|
||||
========================================= ============ ======= =======
|
||||
|
||||
.. _ceilometer: http://docs.openstack.org/admin-guide/telemetry-measurements.html#ipmi-based-meters
|
||||
|
||||
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
|
||||
============== ====== ============= ====================================
|
||||
``threshold`` Number 35.0 Temperature threshold for migration
|
||||
``period`` Number 30 The time interval in seconds for
|
||||
getting statistic aggregation from
|
||||
metric data source
|
||||
============== ====== ============= ====================================
|
||||
|
||||
Efficacy Indicator
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Algorithm
|
||||
---------
|
||||
|
||||
For more information on the Outlet Temperature Based Strategy please refer to:
|
||||
https://specs.openstack.org/openstack/watcher-specs/specs/mitaka/implemented/outlet-temperature-based-strategy.html
|
||||
|
||||
How to use it ?
|
||||
---------------
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
$ openstack optimize audittemplate create \
|
||||
at1 thermal_optimization --strategy outlet_temperature
|
||||
|
||||
$ openstack optimize audit create -a at1 -p threshold=31.0
|
||||
|
||||
External Links
|
||||
--------------
|
||||
|
||||
- `Intel Power Node Manager 3.0 <http://www.intel.com/content/www/us/en/power-management/intelligent-power-node-manager-3-0-specification.html>`_
|
||||
107
doc/source/strategies/uniform_airflow.rst
Normal file
107
doc/source/strategies/uniform_airflow.rst
Normal file
@@ -0,0 +1,107 @@
|
||||
==================================
|
||||
Uniform Airflow Migration Strategy
|
||||
==================================
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
**display name**: ``uniform_airflow``
|
||||
|
||||
**goal**: ``airflow_optimization``
|
||||
|
||||
.. watcher-term:: watcher.decision_engine.strategy.strategies.uniform_airflow
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
This strategy has a dependency on the server having Intel's Power
|
||||
Node Manager 3.0 or later enabled.
|
||||
|
||||
Metrics
|
||||
*******
|
||||
|
||||
The *uniform_airflow* strategy requires the following metrics:
|
||||
|
||||
================================== ============ ======= =======
|
||||
metric service name plugins comment
|
||||
================================== ============ ======= =======
|
||||
``hardware.ipmi.node.airflow`` ceilometer_ IPMI
|
||||
``hardware.ipmi.node.temperature`` ceilometer_ IPMI
|
||||
``hardware.ipmi.node.power`` ceilometer_ IPMI
|
||||
================================== ============ ======= =======
|
||||
|
||||
.. _ceilometer: http://docs.openstack.org/admin-guide/telemetry-measurements.html#ipmi-based-meters
|
||||
|
||||
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 parameters are:
|
||||
|
||||
====================== ====== ============= ===========================
|
||||
parameter type default Value description
|
||||
====================== ====== ============= ===========================
|
||||
``threshold_airflow`` Number 400.0 Airflow threshold for
|
||||
migration Unit is 0.1CFM
|
||||
``threshold_inlet_t`` Number 28.0 Inlet temperature threshold
|
||||
for migration decision
|
||||
``threshold_power`` Number 350.0 System power threshold for
|
||||
migration decision
|
||||
``period`` Number 300 Aggregate time period of
|
||||
ceilometer
|
||||
====================== ====== ============= ===========================
|
||||
|
||||
Efficacy Indicator
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Algorithm
|
||||
---------
|
||||
|
||||
For more information on the Uniform Airflow Migration Strategy please refer to:
|
||||
https://specs.openstack.org/openstack/watcher-specs/specs/newton/implemented/uniform-airflow-migration-strategy.html
|
||||
|
||||
How to use it ?
|
||||
---------------
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
$ openstack optimize audittemplate create \
|
||||
at1 airflow_optimization --strategy uniform_airflow
|
||||
|
||||
$ openstack optimize audit create -a at1 -p threshold_airflow=410 \
|
||||
-p threshold_inlet_t=29.0 -p threshold_power=355.0 -p period=310
|
||||
|
||||
External Links
|
||||
--------------
|
||||
|
||||
- `Intel Power Node Manager 3.0 <http://www.intel.com/content/www/us/en/power-management/intelligent-power-node-manager-3-0-specification.html>`_
|
||||
@@ -67,7 +67,21 @@ Planner
|
||||
|
||||
Default Watcher's planner:
|
||||
|
||||
.. watcher-term:: watcher.decision_engine.planner.default.DefaultPlanner
|
||||
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
Strategy parameter is:
|
||||
|
||||
====================== ====== ============= ===================================
|
||||
parameter type default Value description
|
||||
====================== ====== ============= ===================================
|
||||
``period`` Number 3600 The time interval in seconds
|
||||
for getting statistic aggregation
|
||||
from metric data source
|
||||
====================== ====== ============= ===================================
|
||||
|
||||
|
||||
Efficacy Indicator
|
||||
@@ -89,7 +103,7 @@ How to use it ?
|
||||
.. code-block:: shell
|
||||
|
||||
$ openstack optimize audittemplate create \
|
||||
at1 vm_consolidation --strategy vm_workload_consolidation
|
||||
at1 server_consolidation --strategy vm_workload_consolidation
|
||||
|
||||
$ openstack optimize audit create -a at1
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ Planner
|
||||
|
||||
Default Watcher's planner:
|
||||
|
||||
.. watcher-term:: watcher.decision_engine.planner.default.DefaultPlanner
|
||||
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
@@ -92,12 +92,22 @@ parameter type default Value description
|
||||
host from list.
|
||||
``retry_count`` number 1 Count of random returned
|
||||
hosts.
|
||||
``periods`` object |periods| These periods are used to get
|
||||
statistic aggregation for
|
||||
instance and host metrics.
|
||||
The period is simply a
|
||||
repeating interval of time
|
||||
into which the samples are
|
||||
grouped for aggregation.
|
||||
Watcher uses only the last
|
||||
period of all recieved ones.
|
||||
==================== ====== ===================== =============================
|
||||
|
||||
.. |metrics| replace:: ["cpu_util", "memory.resident"]
|
||||
.. |thresholds| replace:: {"cpu_util": 0.2, "memory.resident": 0.2}
|
||||
.. |weights| replace:: {"cpu_util_weight": 1.0, "memory.resident_weight": 1.0}
|
||||
.. |instance_metrics| replace:: {"cpu_util": "hardware.cpu.util", "memory.resident": "hardware.memory.used"}
|
||||
.. |instance_metrics| replace:: {"cpu_util": "compute.node.cpu.percent", "memory.resident": "hardware.memory.used"}
|
||||
.. |periods| replace:: {"instance": 720, "node": 600}
|
||||
|
||||
Efficacy Indicator
|
||||
------------------
|
||||
|
||||
98
doc/source/strategies/workload_balance.rst
Normal file
98
doc/source/strategies/workload_balance.rst
Normal file
@@ -0,0 +1,98 @@
|
||||
===================================
|
||||
Workload Balance Migration Strategy
|
||||
===================================
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
**display name**: ``workload_balance``
|
||||
|
||||
**goal**: ``workload_balancing``
|
||||
|
||||
.. watcher-term:: watcher.decision_engine.strategy.strategies.workload_balance
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
None.
|
||||
|
||||
Metrics
|
||||
*******
|
||||
|
||||
The *workload_balance* strategy requires the following metrics:
|
||||
|
||||
======================= ============ ======= =======
|
||||
metric service name plugins comment
|
||||
======================= ============ ======= =======
|
||||
``cpu_util`` ceilometer_ none
|
||||
======================= ============ ======= =======
|
||||
|
||||
.. _ceilometer: http://docs.openstack.org/admin-guide/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 parameters are:
|
||||
|
||||
============== ====== ============= ====================================
|
||||
parameter type default Value description
|
||||
============== ====== ============= ====================================
|
||||
``threshold`` Number 25.0 Workload threshold for migration
|
||||
``period`` Number 300 Aggregate time period of ceilometer
|
||||
============== ====== ============= ====================================
|
||||
|
||||
Efficacy Indicator
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Algorithm
|
||||
---------
|
||||
|
||||
For more information on the Workload Balance Migration Strategy please refer
|
||||
to: https://specs.openstack.org/openstack/watcher-specs/specs/mitaka/implemented/workload-balance-migration-strategy.html
|
||||
|
||||
How to use it ?
|
||||
---------------
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
$ openstack optimize audittemplate create \
|
||||
at1 workload_balancing --strategy workload_balance
|
||||
|
||||
$ openstack optimize audit create -a at1 -p threshold=26.0 \
|
||||
-p period=310
|
||||
|
||||
External Links
|
||||
--------------
|
||||
|
||||
None.
|
||||
4
doc/source/user/index.rst
Normal file
4
doc/source/user/index.rst
Normal file
@@ -0,0 +1,4 @@
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
user-guide
|
||||
@@ -11,7 +11,7 @@ Watcher User Guide
|
||||
==================
|
||||
|
||||
See the
|
||||
`architecture page <http://docs.openstack.org/developer/watcher/architecture.html>`_
|
||||
`architecture page <https://docs.openstack.org/watcher/latest/architecture.html>`_
|
||||
for an architectural overview of the different components of Watcher and how
|
||||
they fit together.
|
||||
|
||||
33
etc/apache2/watcher
Normal file
33
etc/apache2/watcher
Normal file
@@ -0,0 +1,33 @@
|
||||
# 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.
|
||||
|
||||
# This is an example Apache2 configuration file for using
|
||||
# Watcher API through mod_wsgi
|
||||
Listen 9322
|
||||
|
||||
<VirtualHost *:9322>
|
||||
WSGIDaemonProcess watcher-api user=stack group=stack processes=2 threads=2 display-name=%{GROUP}
|
||||
WSGIScriptAlias / /opt/stack/watcher/watcher/api/app.wsgi
|
||||
WSGIProcessGroup watcher-api
|
||||
|
||||
ErrorLog /var/log/httpd/watcher_error.log
|
||||
LogLevel info
|
||||
CustomLog /var/log/httpd/watcher_access.log combined
|
||||
|
||||
<Directory /opt/stack/watcher/watcher/api>
|
||||
WSGIProcessGroup watcher-api
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
To generate the sample watcher.conf file, run the following
|
||||
command from the top level of the watcher directory:
|
||||
|
||||
tox -econfig
|
||||
tox -e genconfig
|
||||
|
||||
@@ -7,7 +7,7 @@ To launch this task with configured Rally you just need to run:
|
||||
|
||||
::
|
||||
|
||||
rally task start watcher/rally-jobs/watcher.yaml
|
||||
rally task start watcher/rally-jobs/watcher-watcher.yaml
|
||||
|
||||
Structure
|
||||
---------
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
name: "dummy"
|
||||
strategy:
|
||||
name: "dummy"
|
||||
extra: {}
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
||||
@@ -29,7 +28,6 @@
|
||||
name: "dummy"
|
||||
strategy:
|
||||
name: "dummy"
|
||||
extra: {}
|
||||
runner:
|
||||
type: "constant"
|
||||
times: 10
|
||||
@@ -56,12 +54,10 @@
|
||||
name: "workload_balancing"
|
||||
strategy:
|
||||
name: "workload_stabilization"
|
||||
extra: {}
|
||||
- goal:
|
||||
name: "dummy"
|
||||
strategy:
|
||||
name: "dummy"
|
||||
extra: {}
|
||||
sla:
|
||||
failure_rate:
|
||||
max: 0
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Adds feature to cancel an action-plan.
|
||||
@@ -0,0 +1,3 @@
|
||||
---
|
||||
features:
|
||||
- Add notifications related to Action plan object.
|
||||
@@ -0,0 +1,3 @@
|
||||
---
|
||||
features:
|
||||
- Add action for compute node power on/off
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
features:
|
||||
- Added a generic scoring engine module, which
|
||||
will standarize interactions with scoring engines
|
||||
will standardize interactions with scoring engines
|
||||
through the common API. It is possible to use the
|
||||
scoring engine by different Strategies, which
|
||||
improve the code and data model re-use.
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
---
|
||||
features:
|
||||
- Add notifications related to Audit object.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
features:
|
||||
- Watcher can continuously optimize the OpenStack cloud for a specific
|
||||
strategy or goal by triggering an audit periodically which generates
|
||||
an action plan and run it automatically.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user