Compare commits
580 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
072822d920 | ||
|
|
f67ce8cca5 | ||
|
|
9e6f768263 | ||
|
|
ba9c89186b | ||
|
|
16e7d9c13b | ||
|
|
c3536406bd | ||
|
|
0c66fe2e65 | ||
|
|
74933bf0ba | ||
|
|
1dae83da57 | ||
|
|
5ec8932182 | ||
|
|
701b258dc7 | ||
|
|
f7fcdf14d0 | ||
|
|
47ba6c0808 | ||
|
|
5b5fbbedb4 | ||
|
|
a1c575bfc5 | ||
|
|
27e887556d | ||
|
|
891f6bc241 | ||
|
|
5dd6817d47 | ||
|
|
7cdcb4743e | ||
|
|
6d03c4c543 | ||
|
|
bcc129cf94 | ||
|
|
40cff311c6 | ||
|
|
1a48a7fc57 | ||
|
|
652aa54586 | ||
|
|
42a3886ded | ||
|
|
3430493de1 | ||
|
|
f5bcf9d355 | ||
|
|
d809523bef | ||
|
|
bfe3c28986 | ||
|
|
3c8caa3d0a | ||
|
|
766d064dd0 | ||
|
|
ce196b68c4 | ||
|
|
42130c42a1 | ||
|
|
1a8639d256 | ||
|
|
1702fe1a83 | ||
|
|
354ebd35cc | ||
|
|
7297603f65 | ||
|
|
9626cb1356 | ||
|
|
9e027940d7 | ||
|
|
3754938d96 | ||
|
|
8a7f930a64 | ||
|
|
f7e506155b | ||
|
|
54da2a75fb | ||
|
|
5cbb9aca7e | ||
|
|
bd79882b16 | ||
|
|
960c50ba45 | ||
|
|
9411f85cd2 | ||
|
|
b4370f0461 | ||
|
|
97799521f9 | ||
|
|
96fa7f33ac | ||
|
|
1c2d0aa1f2 | ||
|
|
070aed7076 | ||
|
|
2b402d3cbf | ||
|
|
cca3e75ac1 | ||
|
|
6f27275f44 | ||
|
|
95548af426 | ||
|
|
cdc847d352 | ||
|
|
b69244f8ef | ||
|
|
cbd6d88025 | ||
|
|
028d7c939c | ||
|
|
a8fa969379 | ||
|
|
80ee4b29f5 | ||
|
|
e562c9173c | ||
|
|
ec0c359037 | ||
|
|
3b6bef180b | ||
|
|
640e4e1fea | ||
|
|
eeb817cd6e | ||
|
|
c6afa7c320 | ||
|
|
9ccd17e40b | ||
|
|
2a7e0d652c | ||
|
|
a94e35b60e | ||
|
|
72e3d5c7f9 | ||
|
|
be56441e55 | ||
|
|
aa2b213a45 | ||
|
|
668513d771 | ||
|
|
0242d33adb | ||
|
|
c38dc9828b | ||
|
|
c2e16bfa96 | ||
|
|
4ce1a9096b | ||
|
|
13644429b7 | ||
|
|
b8cc506fbe | ||
|
|
02163d64aa | ||
|
|
d91f0bff22 | ||
|
|
c91f6479f0 | ||
|
|
92572c5dec | ||
|
|
a8f08065fd | ||
|
|
e401cb7c9d | ||
|
|
0745d904fc | ||
|
|
bc4a58d2d7 | ||
|
|
f14795d29f | ||
|
|
e0104074b6 | ||
|
|
2993dea376 | ||
|
|
17b6019ea9 | ||
|
|
5969e5b52a | ||
|
|
e55f3793b6 | ||
|
|
901c598dd7 | ||
|
|
e41a90d7ad | ||
|
|
fa31341bbb | ||
|
|
051b4fcd06 | ||
|
|
cd045400ed | ||
|
|
2db668af30 | ||
|
|
39b1fcf07f | ||
|
|
94babf61da | ||
|
|
a5fba7ce28 | ||
|
|
24e01b6c98 | ||
|
|
4007f93aac | ||
|
|
77c9f88fc4 | ||
|
|
e9b7f067c5 | ||
|
|
f8aa02c4a7 | ||
|
|
3595108e49 | ||
|
|
d536ed248b | ||
|
|
71730c0eaf | ||
|
|
1b4c5dfc8b | ||
|
|
4179cfd036 | ||
|
|
49550db566 | ||
|
|
e0eba0ee7b | ||
|
|
165853ee2c | ||
|
|
0a7152fa55 | ||
|
|
6c29df11ca | ||
|
|
55bd0fd038 | ||
|
|
907cc2df16 | ||
|
|
8dcac1597b | ||
|
|
a3be1587e3 | ||
|
|
aa72f984e4 | ||
|
|
bcd2040025 | ||
|
|
f2c9dc9c32 | ||
|
|
6c94c235fc | ||
|
|
7ed45e3ef1 | ||
|
|
8722951022 | ||
|
|
568d4e831c | ||
|
|
deefc857ba | ||
|
|
d33736e7f0 | ||
|
|
1b1779cc49 | ||
|
|
d727bc3076 | ||
|
|
875b7e1ca3 | ||
|
|
c7f8755f9c | ||
|
|
0472715e0c | ||
|
|
2482e82548 | ||
|
|
e9c420467e | ||
|
|
2d5db7082b | ||
|
|
4a3a50435a | ||
|
|
05b57fee7a | ||
|
|
3729e39552 | ||
|
|
91911c8284 | ||
|
|
d7d56cbd79 | ||
|
|
84fb7423f1 | ||
|
|
ee5b01d33b | ||
|
|
b35feb5432 | ||
|
|
d722b62b97 | ||
|
|
bf713ac7e1 | ||
|
|
8343f4bf46 | ||
|
|
cd3f792eef | ||
|
|
7f7f7a9fd2 | ||
|
|
d5b778b730 | ||
|
|
62a902df7c | ||
|
|
5b6f65630d | ||
|
|
e5031ef04a | ||
|
|
ab2408ea67 | ||
|
|
4c0d2ab4b2 | ||
|
|
cf8d7bb2f4 | ||
|
|
b3d60cb13d | ||
|
|
ffdc3b554d | ||
|
|
9933d61065 | ||
|
|
b4bc1599e6 | ||
|
|
280188a762 | ||
|
|
3942f44e56 | ||
|
|
6208caba0c | ||
|
|
f3b3e82313 | ||
|
|
be69ebd8bd | ||
|
|
7d33bf8813 | ||
|
|
b3fa8a0f86 | ||
|
|
9d3cc28d2d | ||
|
|
eed2e128b0 | ||
|
|
7091fe435f | ||
|
|
7f9b562bbd | ||
|
|
f445fc451e | ||
|
|
fa7749ac8f | ||
|
|
e6c06c1bdf | ||
|
|
f461b8c567 | ||
|
|
c717be12a6 | ||
|
|
5814914aef | ||
|
|
fb3c2355a6 | ||
|
|
d4e6e82dd2 | ||
|
|
816765374d | ||
|
|
35e502f666 | ||
|
|
ee36bb8180 | ||
|
|
51b3a15c90 | ||
|
|
0213bee63b | ||
|
|
f516a9c3b9 | ||
|
|
8e89d5489c | ||
|
|
773b20a05f | ||
|
|
03d6580819 | ||
|
|
afa73238c4 | ||
|
|
2467780f9d | ||
|
|
25854aabd8 | ||
|
|
e4f4588e69 | ||
|
|
1465aa0c5f | ||
|
|
e6e0b3dbaa | ||
|
|
d8274e062e | ||
|
|
28b9766693 | ||
|
|
74bc31e562 | ||
|
|
998e86f6c7 | ||
|
|
a5e7fd90c2 | ||
|
|
a99a9ae69e | ||
|
|
6e6e5907ee | ||
|
|
c887499b4d | ||
|
|
58e4bf2727 | ||
|
|
1df395d31d | ||
|
|
f811c8af48 | ||
|
|
e447393f18 | ||
|
|
a25be6498c | ||
|
|
8e372ee153 | ||
|
|
7bc984b84a | ||
|
|
eeee32ad36 | ||
|
|
3a7fc7a8e5 | ||
|
|
63697d5a6e | ||
|
|
887fa746ae | ||
|
|
e74095da1f | ||
|
|
65c7cd0e02 | ||
|
|
5df54ea3fb | ||
|
|
51dba60e01 | ||
|
|
a9f33467fb | ||
|
|
4640d88adf | ||
|
|
154aca3948 | ||
|
|
fa7afc89ab | ||
|
|
790548fff0 | ||
|
|
a2fa13c8ff | ||
|
|
4c3c84dee9 | ||
|
|
8f585c3def | ||
|
|
c9a43d8da4 | ||
|
|
2ea7d61ac8 | ||
|
|
bbfd6711fc | ||
|
|
162aaa75ee | ||
|
|
4cb2b45e3a | ||
|
|
50935af15f | ||
|
|
cf92ece936 | ||
|
|
b7c4a0467c | ||
|
|
c12f132699 | ||
|
|
0329dafec9 | ||
|
|
e73ead4807 | ||
|
|
cb90f60cc1 | ||
|
|
d7994a2466 | ||
|
|
62822fa933 | ||
|
|
3f0ff1ed7e | ||
|
|
8e3b5c90a6 | ||
|
|
1c5e254124 | ||
|
|
39e200e5eb | ||
|
|
2650b89fe5 | ||
|
|
d5bcd37478 | ||
|
|
0c4b439c5e | ||
|
|
0e43504e44 | ||
|
|
322843b21c | ||
|
|
1b413f5536 | ||
|
|
f76a628d1f | ||
|
|
3e6ea71cbc | ||
|
|
e5c3df0c2f | ||
|
|
6005d6ebdd | ||
|
|
965af1b6fd | ||
|
|
daf428ad69 | ||
|
|
ab64dab646 | ||
|
|
eaa09a4cfc | ||
|
|
5c86a54d20 | ||
|
|
e78f2d073f | ||
|
|
47004b7c67 | ||
|
|
9ecd22f4c8 | ||
|
|
daee2336a4 | ||
|
|
893b730a44 | ||
|
|
d5b6e0a54f | ||
|
|
13b89c8dd2 | ||
|
|
7a300832b2 | ||
|
|
d218e6f107 | ||
|
|
d2f70f9d6f | ||
|
|
4951854f76 | ||
|
|
ffbd263888 | ||
|
|
985c6c49f9 | ||
|
|
adac2c0c16 | ||
|
|
f700ca4e0f | ||
|
|
5b741b2a4d | ||
|
|
382f641b22 | ||
|
|
5da5db8b56 | ||
|
|
5cc4716a95 | ||
|
|
c4888fee63 | ||
|
|
76f85591ea | ||
|
|
b006cadd22 | ||
|
|
1fd2053001 | ||
|
|
6a920fd307 | ||
|
|
514eeb75ef | ||
|
|
b43633fa6d | ||
|
|
d5a7d7674c | ||
|
|
b532355232 | ||
|
|
bce87b3d05 | ||
|
|
783627626c | ||
|
|
3043e57066 | ||
|
|
be8b163a62 | ||
|
|
4f38595e4e | ||
|
|
30def6f35b | ||
|
|
0b31828a01 | ||
|
|
b5ac97bc2d | ||
|
|
398974a7b0 | ||
|
|
3a29b4e710 | ||
|
|
8024dbf913 | ||
|
|
529b0d34ee | ||
|
|
dac0924194 | ||
|
|
3bb66b645c | ||
|
|
63cebc0bfa | ||
|
|
5a28ac772a | ||
|
|
fe7ad9e42b | ||
|
|
711de94855 | ||
|
|
5817f6833c | ||
|
|
a24b7f0b61 | ||
|
|
c03668cb02 | ||
|
|
aab18245eb | ||
|
|
c12178920b | ||
|
|
f733fbeecd | ||
|
|
67754102c8 | ||
|
|
6545f9c2ad | ||
|
|
583c23b9d9 | ||
|
|
ea9ab8d6e5 | ||
|
|
8fd57276be | ||
|
|
1d197e5e8f | ||
|
|
b33337b7bd | ||
|
|
d0b9b6ce38 | ||
|
|
3cd847e2ab | ||
|
|
ba907f4905 | ||
|
|
8e787d0a87 | ||
|
|
b45c7b678e | ||
|
|
ec64e04cc5 | ||
|
|
f206c2d425 | ||
|
|
bff76de6f1 | ||
|
|
1500bee1c6 | ||
|
|
9f813fb90d | ||
|
|
8167eec625 | ||
|
|
6731851383 | ||
|
|
0ddfa278ef | ||
|
|
aae7699bc5 | ||
|
|
8521608e19 | ||
|
|
2266e2baa3 | ||
|
|
e08a0e9af2 | ||
|
|
844577e9cc | ||
|
|
0b44492da7 | ||
|
|
b146e29c39 | ||
|
|
0cabd5bd3a | ||
|
|
728acc091b | ||
|
|
7340decf73 | ||
|
|
84e8eb4cb0 | ||
|
|
5283871af5 | ||
|
|
916fd73186 | ||
|
|
22ee0aa8f7 | ||
|
|
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 | ||
|
|
65f9646eae |
13
.gitignore
vendored
@@ -4,8 +4,7 @@
|
|||||||
*.so
|
*.so
|
||||||
|
|
||||||
# Packages
|
# Packages
|
||||||
*.egg
|
*.egg*
|
||||||
*.egg-info
|
|
||||||
dist
|
dist
|
||||||
build
|
build
|
||||||
eggs
|
eggs
|
||||||
@@ -25,6 +24,7 @@ pip-log.txt
|
|||||||
.coverage*
|
.coverage*
|
||||||
.tox
|
.tox
|
||||||
nosetests.xml
|
nosetests.xml
|
||||||
|
.stestr/
|
||||||
.testrepository
|
.testrepository
|
||||||
.venv
|
.venv
|
||||||
.idea
|
.idea
|
||||||
@@ -43,9 +43,11 @@ output/*/index.html
|
|||||||
|
|
||||||
# Sphinx
|
# Sphinx
|
||||||
doc/build
|
doc/build
|
||||||
doc/source/api
|
doc/source/api/*
|
||||||
doc/source/samples
|
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
|
# pbr generates these
|
||||||
AUTHORS
|
AUTHORS
|
||||||
@@ -71,3 +73,6 @@ releasenotes/build
|
|||||||
|
|
||||||
# Desktop Service Store
|
# Desktop Service Store
|
||||||
*.DS_Store
|
*.DS_Store
|
||||||
|
|
||||||
|
# Autogenerated sample config file
|
||||||
|
etc/watcher/watcher.conf.sample
|
||||||
|
|||||||
@@ -2,4 +2,3 @@
|
|||||||
host=review.openstack.org
|
host=review.openstack.org
|
||||||
port=29418
|
port=29418
|
||||||
project=openstack/watcher.git
|
project=openstack/watcher.git
|
||||||
defaultbranch=stable/ocata
|
|
||||||
|
|||||||
4
.stestr.conf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
test_path=${OS_TEST_PATH:-./watcher/tests}
|
||||||
|
top_dir=./
|
||||||
|
|
||||||
39
.zuul.yaml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
- project:
|
||||||
|
name: openstack/watcher
|
||||||
|
check:
|
||||||
|
jobs:
|
||||||
|
- watcher-tempest-multinode
|
||||||
|
- legacy-rally-dsvm-watcher-rally
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: watcher-tempest-base-multinode
|
||||||
|
parent: legacy-dsvm-base-multinode
|
||||||
|
run: playbooks/legacy/watcher-tempest-base-multinode/run.yaml
|
||||||
|
post-run: playbooks/legacy/watcher-tempest-base-multinode/post.yaml
|
||||||
|
timeout: 4200
|
||||||
|
required-projects:
|
||||||
|
- openstack-infra/devstack-gate
|
||||||
|
- openstack/python-openstackclient
|
||||||
|
- openstack/python-watcherclient
|
||||||
|
- openstack/watcher
|
||||||
|
- openstack/watcher-tempest-plugin
|
||||||
|
nodeset: legacy-ubuntu-xenial-2-node
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: watcher-tempest-multinode
|
||||||
|
parent: watcher-tempest-base-multinode
|
||||||
|
voting: false
|
||||||
|
|
||||||
|
- job:
|
||||||
|
# This job is used by python-watcherclient repo
|
||||||
|
name: watcherclient-tempest-functional
|
||||||
|
parent: legacy-dsvm-base
|
||||||
|
run: playbooks/legacy/watcherclient-tempest-functional/run.yaml
|
||||||
|
post-run: playbooks/legacy/watcherclient-tempest-functional/post.yaml
|
||||||
|
timeout: 4200
|
||||||
|
required-projects:
|
||||||
|
- openstack-dev/devstack
|
||||||
|
- openstack-infra/devstack-gate
|
||||||
|
- openstack/python-openstackclient
|
||||||
|
- openstack/python-watcherclient
|
||||||
|
- openstack/watcher
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
If you would like to contribute to the development of OpenStack,
|
If you would like to contribute to the development of OpenStack,
|
||||||
you must follow the steps in this page:
|
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
|
Once those steps have been completed, changes to OpenStack
|
||||||
should be submitted for review via the Gerrit tool, following
|
should be submitted for review via the Gerrit tool, following
|
||||||
the workflow documented at:
|
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.
|
Pull requests submitted through GitHub will be ignored.
|
||||||
|
|
||||||
|
|||||||
@@ -8,4 +8,4 @@
|
|||||||
watcher Style Commandments
|
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/
|
||||||
|
|||||||
10
README.rst
@@ -2,8 +2,8 @@
|
|||||||
Team and repository tags
|
Team and repository tags
|
||||||
========================
|
========================
|
||||||
|
|
||||||
.. image:: http://governance.openstack.org/badges/watcher.svg
|
.. image:: https://governance.openstack.org/badges/watcher.svg
|
||||||
:target: http://governance.openstack.org/reference/tags/index.html
|
:target: https://governance.openstack.org/reference/tags/index.html
|
||||||
|
|
||||||
.. Change things from this point on
|
.. Change things from this point on
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ operating costs, increased system performance via intelligent virtual machine
|
|||||||
migration, increased energy efficiency-and more!
|
migration, increased energy efficiency-and more!
|
||||||
|
|
||||||
* Free software: Apache license
|
* Free software: Apache license
|
||||||
* Wiki: http://wiki.openstack.org/wiki/Watcher
|
* Wiki: https://wiki.openstack.org/wiki/Watcher
|
||||||
* Source: https://github.com/openstack/watcher
|
* Source: https://github.com/openstack/watcher
|
||||||
* Bugs: http://bugs.launchpad.net/watcher
|
* Bugs: https://bugs.launchpad.net/watcher
|
||||||
* Documentation: http://docs.openstack.org/developer/watcher/
|
* Documentation: https://docs.openstack.org/watcher/latest/
|
||||||
|
|||||||
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>
|
||||||
@@ -42,7 +42,10 @@ WATCHER_AUTH_CACHE_DIR=${WATCHER_AUTH_CACHE_DIR:-/var/cache/watcher}
|
|||||||
|
|
||||||
WATCHER_CONF_DIR=/etc/watcher
|
WATCHER_CONF_DIR=/etc/watcher
|
||||||
WATCHER_CONF=$WATCHER_CONF_DIR/watcher.conf
|
WATCHER_CONF=$WATCHER_CONF_DIR/watcher.conf
|
||||||
WATCHER_POLICY_JSON=$WATCHER_CONF_DIR/policy.json
|
WATCHER_POLICY_YAML=$WATCHER_CONF_DIR/policy.yaml.sample
|
||||||
|
|
||||||
|
WATCHER_DEVSTACK_DIR=$WATCHER_DIR/devstack
|
||||||
|
WATCHER_DEVSTACK_FILES_DIR=$WATCHER_DEVSTACK_DIR/files
|
||||||
|
|
||||||
NOVA_CONF_DIR=/etc/nova
|
NOVA_CONF_DIR=/etc/nova
|
||||||
NOVA_CONF=$NOVA_CONF_DIR/nova.conf
|
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"
|
WATCHER_SERVICE_PROTOCOL="https"
|
||||||
fi
|
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
|
# Public facing bits
|
||||||
WATCHER_SERVICE_HOST=${WATCHER_SERVICE_HOST:-$HOST_IP}
|
WATCHER_SERVICE_HOST=${WATCHER_SERVICE_HOST:-$HOST_IP}
|
||||||
WATCHER_SERVICE_PORT=${WATCHER_SERVICE_PORT:-9322}
|
WATCHER_SERVICE_PORT=${WATCHER_SERVICE_PORT:-9322}
|
||||||
@@ -74,10 +84,21 @@ function is_watcher_enabled {
|
|||||||
return 1
|
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
|
# cleanup_watcher() - Remove residual data files, anything left over from previous
|
||||||
# runs that a clean run would need to clean up
|
# runs that a clean run would need to clean up
|
||||||
function cleanup_watcher {
|
function cleanup_watcher {
|
||||||
sudo rm -rf $WATCHER_STATE_PATH $WATCHER_AUTH_CACHE_DIR
|
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
|
# configure_watcher() - Set config files, create data dirs, etc
|
||||||
@@ -85,7 +106,25 @@ function configure_watcher {
|
|||||||
# Put config files in ``/etc/watcher`` for everyone to find
|
# Put config files in ``/etc/watcher`` for everyone to find
|
||||||
sudo install -d -o $STACK_USER $WATCHER_CONF_DIR
|
sudo install -d -o $STACK_USER $WATCHER_CONF_DIR
|
||||||
|
|
||||||
install_default_policy watcher
|
local project=watcher
|
||||||
|
local project_uc
|
||||||
|
project_uc=$(echo watcher|tr a-z A-Z)
|
||||||
|
local conf_dir="${project_uc}_CONF_DIR"
|
||||||
|
# eval conf dir to get the variable
|
||||||
|
conf_dir="${!conf_dir}"
|
||||||
|
local project_dir="${project_uc}_DIR"
|
||||||
|
# eval project dir to get the variable
|
||||||
|
project_dir="${!project_dir}"
|
||||||
|
local sample_conf_dir="${project_dir}/etc/${project}"
|
||||||
|
local sample_policy_dir="${project_dir}/etc/${project}/policy.d"
|
||||||
|
local sample_policy_generator="${project_dir}/etc/${project}/oslo-policy-generator/watcher-policy-generator.conf"
|
||||||
|
|
||||||
|
# first generate policy.yaml
|
||||||
|
oslopolicy-sample-generator --config-file $sample_policy_generator
|
||||||
|
# then optionally copy over policy.d
|
||||||
|
if [[ -d $sample_policy_dir ]]; then
|
||||||
|
cp -r $sample_policy_dir $conf_dir/policy.d
|
||||||
|
fi
|
||||||
|
|
||||||
# Rebuild the config file from scratch
|
# Rebuild the config file from scratch
|
||||||
create_watcher_conf
|
create_watcher_conf
|
||||||
@@ -108,6 +147,28 @@ function create_watcher_accounts {
|
|||||||
"$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST:$WATCHER_SERVICE_PORT"
|
"$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
|
# create_watcher_conf() - Create a new watcher.conf file
|
||||||
function create_watcher_conf {
|
function create_watcher_conf {
|
||||||
# (Re)create ``watcher.conf``
|
# (Re)create ``watcher.conf``
|
||||||
@@ -120,13 +181,13 @@ function create_watcher_conf {
|
|||||||
iniset $WATCHER_CONF api host "$WATCHER_SERVICE_HOST"
|
iniset $WATCHER_CONF api host "$WATCHER_SERVICE_HOST"
|
||||||
iniset $WATCHER_CONF api port "$WATCHER_SERVICE_PORT"
|
iniset $WATCHER_CONF api port "$WATCHER_SERVICE_PORT"
|
||||||
|
|
||||||
iniset $WATCHER_CONF oslo_policy policy_file $WATCHER_POLICY_JSON
|
iniset $WATCHER_CONF oslo_policy policy_file $WATCHER_POLICY_YAML
|
||||||
|
|
||||||
iniset $WATCHER_CONF oslo_messaging_rabbit rabbit_userid $RABBIT_USERID
|
iniset $WATCHER_CONF oslo_messaging_rabbit rabbit_userid $RABBIT_USERID
|
||||||
iniset $WATCHER_CONF oslo_messaging_rabbit rabbit_password $RABBIT_PASSWORD
|
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_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 oslo_messaging_notifications topics "notifications,watcher_notifications"
|
||||||
iniset $NOVA_CONF notifications notify_on_state_change "vm_and_task_state"
|
iniset $NOVA_CONF notifications notify_on_state_change "vm_and_task_state"
|
||||||
@@ -154,9 +215,13 @@ function create_watcher_conf {
|
|||||||
setup_colorized_logging $WATCHER_CONF DEFAULT
|
setup_colorized_logging $WATCHER_CONF DEFAULT
|
||||||
else
|
else
|
||||||
# Show user_name and project_name instead of user_id and project_id
|
# 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
|
fi
|
||||||
|
|
||||||
|
#config apache files
|
||||||
|
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
|
||||||
|
_config_watcher_apache_wsgi
|
||||||
|
fi
|
||||||
# Register SSL certificates if provided
|
# Register SSL certificates if provided
|
||||||
if is_ssl_enabled_service watcher; then
|
if is_ssl_enabled_service watcher; then
|
||||||
ensure_certificates WATCHER
|
ensure_certificates WATCHER
|
||||||
@@ -188,7 +253,7 @@ function init_watcher {
|
|||||||
recreate_database watcher
|
recreate_database watcher
|
||||||
|
|
||||||
# Create watcher schema
|
# Create watcher schema
|
||||||
$WATCHER_BIN_DIR/watcher-db-manage --config-file $WATCHER_CONF upgrade head
|
$WATCHER_BIN_DIR/watcher-db-manage --config-file $WATCHER_CONF upgrade
|
||||||
fi
|
fi
|
||||||
create_watcher_cache_dir
|
create_watcher_cache_dir
|
||||||
}
|
}
|
||||||
@@ -205,19 +270,26 @@ function install_watcherclient {
|
|||||||
function install_watcher {
|
function install_watcher {
|
||||||
git_clone $WATCHER_REPO $WATCHER_DIR $WATCHER_BRANCH
|
git_clone $WATCHER_REPO $WATCHER_DIR $WATCHER_BRANCH
|
||||||
setup_develop $WATCHER_DIR
|
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
|
# start_watcher_api() - Start the API process ahead of other things
|
||||||
function start_watcher_api {
|
function start_watcher_api {
|
||||||
# Get right service port for testing
|
# Get right service port for testing
|
||||||
|
|
||||||
local service_port=$WATCHER_SERVICE_PORT
|
local service_port=$WATCHER_SERVICE_PORT
|
||||||
local service_protocol=$WATCHER_SERVICE_PROTOCOL
|
local service_protocol=$WATCHER_SERVICE_PROTOCOL
|
||||||
if is_service_enabled tls-proxy; then
|
if is_service_enabled tls-proxy; then
|
||||||
service_port=$WATCHER_SERVICE_PORT_INT
|
service_port=$WATCHER_SERVICE_PORT_INT
|
||||||
service_protocol="http"
|
service_protocol="http"
|
||||||
fi
|
fi
|
||||||
|
if [[ "$WATCHER_USE_MOD_WSGI" == "True" ]]; then
|
||||||
run_process watcher-api "$WATCHER_BIN_DIR/watcher-api --config-file $WATCHER_CONF"
|
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..."
|
echo "Waiting for watcher-api to start..."
|
||||||
if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$WATCHER_SERVICE_HOST:$service_port; then
|
if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$WATCHER_SERVICE_HOST:$service_port; then
|
||||||
die $LINENO "watcher-api did not start"
|
die $LINENO "watcher-api did not start"
|
||||||
@@ -240,7 +312,12 @@ function start_watcher {
|
|||||||
|
|
||||||
# stop_watcher() - Stop running processes (non-screen)
|
# stop_watcher() - Stop running processes (non-screen)
|
||||||
function stop_watcher {
|
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
|
stop_process $serv
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ GLANCE_HOSTPORT=${SERVICE_HOST}:9292
|
|||||||
DATABASE_TYPE=mysql
|
DATABASE_TYPE=mysql
|
||||||
|
|
||||||
# Enable services (including neutron)
|
# 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
|
NOVA_VNC_ENABLED=True
|
||||||
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
|
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
|
||||||
|
|||||||
@@ -17,18 +17,15 @@ NETWORK_GATEWAY=10.254.1.1 # Change this for your network
|
|||||||
|
|
||||||
MULTI_HOST=1
|
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
|
# This is the controller node, so disable nova-compute
|
||||||
disable_service n-cpu
|
disable_service n-cpu
|
||||||
|
|
||||||
# Disable nova-network and use neutron instead
|
|
||||||
disable_service n-net
|
|
||||||
ENABLED_SERVICES+=,q-svc,q-dhcp,q-meta,q-agt,q-l3,neutron
|
|
||||||
|
|
||||||
# Enable remote console access
|
|
||||||
enable_service n-cauth
|
|
||||||
|
|
||||||
# Enable the Watcher Dashboard plugin
|
# 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 the Watcher plugin
|
||||||
enable_plugin watcher git://git.openstack.org/openstack/watcher
|
enable_plugin watcher git://git.openstack.org/openstack/watcher
|
||||||
@@ -39,6 +36,12 @@ enable_plugin ceilometer git://git.openstack.org/openstack/ceilometer
|
|||||||
# This is the controller node, so disable the ceilometer compute agent
|
# This is the controller node, so disable the ceilometer compute agent
|
||||||
disable_service ceilometer-acompute
|
disable_service ceilometer-acompute
|
||||||
|
|
||||||
|
# Enable the ceilometer api explicitly(bug:1667678)
|
||||||
|
enable_service ceilometer-api
|
||||||
|
|
||||||
|
# Enable the Gnocchi plugin
|
||||||
|
enable_plugin gnocchi https://github.com/gnocchixyz/gnocchi
|
||||||
|
|
||||||
LOGFILE=$DEST/logs/stack.sh.log
|
LOGFILE=$DEST/logs/stack.sh.log
|
||||||
LOGDAYS=2
|
LOGDAYS=2
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ _XTRACE_WATCHER_PLUGIN=$(set +o | grep xtrace)
|
|||||||
set -o xtrace
|
set -o xtrace
|
||||||
|
|
||||||
echo_summary "watcher's plugin.sh was called..."
|
echo_summary "watcher's plugin.sh was called..."
|
||||||
source $DEST/watcher/devstack/lib/watcher
|
. $DEST/watcher/devstack/lib/watcher
|
||||||
|
|
||||||
# Show all of defined environment variables
|
# Show all of defined environment variables
|
||||||
(set -o posix; set)
|
(set -o posix; set)
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# Make sure rabbit is enabled
|
# Make sure rabbit is enabled
|
||||||
enable_service rabbit
|
enable_service rabbit
|
||||||
|
|
||||||
|
# Make sure mysql is enabled
|
||||||
|
enable_service mysql
|
||||||
|
|
||||||
# Enable Watcher services
|
# Enable Watcher services
|
||||||
enable_service watcher-api
|
enable_service watcher-api
|
||||||
enable_service watcher-decision-engine
|
enable_service watcher-decision-engine
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ from docutils import nodes
|
|||||||
from docutils.parsers import rst
|
from docutils.parsers import rst
|
||||||
from docutils import statemachine
|
from docutils import statemachine
|
||||||
|
|
||||||
from watcher.version import version_info
|
from watcher.version import version_string
|
||||||
|
|
||||||
|
|
||||||
class BaseWatcherDirective(rst.Directive):
|
class BaseWatcherDirective(rst.Directive):
|
||||||
@@ -169,4 +169,4 @@ class WatcherFunc(BaseWatcherDirective):
|
|||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_directive('watcher-term', WatcherTerm)
|
app.add_directive('watcher-term', WatcherTerm)
|
||||||
app.add_directive('watcher-func', WatcherFunc)
|
app.add_directive('watcher-func', WatcherFunc)
|
||||||
return {'version': version_info.version_string()}
|
return {'version': version_string}
|
||||||
|
|||||||
41
doc/notification_samples/action-cancel-end.json
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"priority": "INFO",
|
||||||
|
"payload": {
|
||||||
|
"watcher_object.namespace": "watcher",
|
||||||
|
"watcher_object.version": "1.0",
|
||||||
|
"watcher_object.name": "ActionCancelPayload",
|
||||||
|
"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": "CANCELLED",
|
||||||
|
"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": "CANCELLING",
|
||||||
|
"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.cancel.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-cancel-error.json
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"priority": "ERROR",
|
||||||
|
"payload": {
|
||||||
|
"watcher_object.namespace": "watcher",
|
||||||
|
"watcher_object.version": "1.0",
|
||||||
|
"watcher_object.name": "ActionCancelPayload",
|
||||||
|
"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_cancel_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": "CANCELLING",
|
||||||
|
"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.cancel.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-cancel-start.json
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"priority": "INFO",
|
||||||
|
"payload": {
|
||||||
|
"watcher_object.namespace": "watcher",
|
||||||
|
"watcher_object.version": "1.0",
|
||||||
|
"watcher_object.name": "ActionCancelPayload",
|
||||||
|
"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": "CANCELLING",
|
||||||
|
"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": "CANCELLING",
|
||||||
|
"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.cancel.start",
|
||||||
|
"publisher_id": "infra-optim:node0",
|
||||||
|
"timestamp": "2017-01-01 00:00:00.000000",
|
||||||
|
"message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
|
||||||
|
}
|
||||||
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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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"
|
||||||
|
}
|
||||||
55
doc/notification_samples/action_plan-cancel-end.json
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"event_type": "action_plan.cancel.end",
|
||||||
|
"payload": {
|
||||||
|
"watcher_object.namespace": "watcher",
|
||||||
|
"watcher_object.name": "ActionPlanCancelPayload",
|
||||||
|
"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": "CANCELLED",
|
||||||
|
"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-cancel-error.json
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"event_type": "action_plan.cancel.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": "ActionPlanCancelPayload",
|
||||||
|
"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_cancel_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": "SUCCEEDED"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"global_efficacy": [],
|
||||||
|
"state": "CANCELLING"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": "2016-10-18 09:52:05.219414"
|
||||||
|
}
|
||||||
55
doc/notification_samples/action_plan-cancel-start.json
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"event_type": "action_plan.cancel.start",
|
||||||
|
"payload": {
|
||||||
|
"watcher_object.namespace": "watcher",
|
||||||
|
"watcher_object.name": "ActionPlanCancelPayload",
|
||||||
|
"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": "CANCELLING",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
"audit": {
|
"audit": {
|
||||||
"watcher_object.version": "1.0",
|
"watcher_object.version": "1.0",
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"scope": [],
|
"scope": [],
|
||||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||||
"audit": {
|
"audit": {
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
"created_at": "2016-10-18T09:52:05Z",
|
"created_at": "2016-10-18T09:52:05Z",
|
||||||
"deleted_at": null,
|
"deleted_at": null,
|
||||||
|
"name": "my_audit",
|
||||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||||
@@ -29,7 +30,7 @@
|
|||||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||||
"fault": null,
|
"fault": null,
|
||||||
"state": "ONGOING",
|
"state": "ONGOING",
|
||||||
"global_efficacy": {},
|
"global_efficacy": [],
|
||||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||||
"strategy": {
|
"strategy": {
|
||||||
"watcher_object.namespace": "watcher",
|
"watcher_object.namespace": "watcher",
|
||||||
|
|||||||
@@ -45,6 +45,7 @@
|
|||||||
"watcher_object.name": "TerseAuditPayload",
|
"watcher_object.name": "TerseAuditPayload",
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
"parameters": {},
|
"parameters": {},
|
||||||
|
"name": "my_audit",
|
||||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||||
@@ -57,7 +58,7 @@
|
|||||||
"state": "PENDING"
|
"state": "PENDING"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"global_efficacy": {},
|
"global_efficacy": [],
|
||||||
"state": "ONGOING"
|
"state": "ONGOING"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
"created_at": "2016-10-18T09:52:05Z",
|
"created_at": "2016-10-18T09:52:05Z",
|
||||||
"deleted_at": null,
|
"deleted_at": null,
|
||||||
|
"name": "my_audit",
|
||||||
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
|
||||||
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
|
||||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||||
@@ -29,7 +30,7 @@
|
|||||||
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
|
||||||
"fault": null,
|
"fault": null,
|
||||||
"state": "ONGOING",
|
"state": "ONGOING",
|
||||||
"global_efficacy": {},
|
"global_efficacy": [],
|
||||||
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
|
||||||
"strategy": {
|
"strategy": {
|
||||||
"watcher_object.namespace": "watcher",
|
"watcher_object.namespace": "watcher",
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"audit": {
|
"audit": {
|
||||||
"watcher_object.version": "1.0",
|
"watcher_object.version": "1.0",
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"scope": [],
|
"scope": [],
|
||||||
"created_at": "2016-10-18T09:52:05Z",
|
"created_at": "2016-10-18T09:52:05Z",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"priority": "INFO",
|
"priority": "INFO",
|
||||||
"payload": {
|
"payload": {
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"para2": "hello",
|
"para2": "hello",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"priority": "INFO",
|
"priority": "INFO",
|
||||||
"payload": {
|
"payload": {
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"para2": "hello",
|
"para2": "hello",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"priority": "INFO",
|
"priority": "INFO",
|
||||||
"payload": {
|
"payload": {
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"para2": "hello",
|
"para2": "hello",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"priority": "ERROR",
|
"priority": "ERROR",
|
||||||
"payload": {
|
"payload": {
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"para2": "hello",
|
"para2": "hello",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"priority": "INFO",
|
"priority": "INFO",
|
||||||
"payload": {
|
"payload": {
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"para2": "hello",
|
"para2": "hello",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"priority": "INFO",
|
"priority": "INFO",
|
||||||
"payload": {
|
"payload": {
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"para2": "hello",
|
"para2": "hello",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"priority": "ERROR",
|
"priority": "ERROR",
|
||||||
"payload": {
|
"payload": {
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"para2": "hello",
|
"para2": "hello",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"priority": "INFO",
|
"priority": "INFO",
|
||||||
"payload": {
|
"payload": {
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"audit_type": "ONESHOT",
|
"audit_type": "ONESHOT",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"para2": "hello",
|
"para2": "hello",
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"payload": {
|
"payload": {
|
||||||
"watcher_object.name": "AuditUpdatePayload",
|
"watcher_object.name": "AuditUpdatePayload",
|
||||||
"watcher_object.data": {
|
"watcher_object.data": {
|
||||||
|
"name": "my_audit",
|
||||||
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
"strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
|
||||||
"strategy": {
|
"strategy": {
|
||||||
"watcher_object.name": "StrategyPayload",
|
"watcher_object.name": "StrategyPayload",
|
||||||
|
|||||||
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
@@ -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
@@ -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/
|
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
|
This document describes some ways to install Watcher in order to use it.
|
||||||
intending to develop on or with Watcher, please read :doc:`../dev/environment`.
|
If you are intending to develop on or with Watcher,
|
||||||
|
please read :doc:`../contributor/environment`.
|
||||||
|
|
||||||
Prerequisites
|
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
|
packages, instead using the source for the code and the Python Package Index
|
||||||
(PyPi_).
|
(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_,
|
It's expected that your system already has python2.7_, latest version of pip_,
|
||||||
and git_ available.
|
and git_ available.
|
||||||
|
|
||||||
.. _python2.7: http://www.python.org
|
.. _python2.7: https://www.python.org
|
||||||
.. _pip: http://www.pip-installer.org/en/latest/installing.html
|
.. _pip: https://pip.pypa.io/en/latest/installing/
|
||||||
.. _git: http://git-scm.com/
|
.. _git: https://git-scm.com/
|
||||||
|
|
||||||
Your system shall also have some additional system libraries:
|
Your system shall also have some additional system libraries:
|
||||||
|
|
||||||
@@ -77,9 +78,10 @@ Install the Watcher modules dependencies:
|
|||||||
|
|
||||||
# pip install -r requirements.txt
|
# pip install -r requirements.txt
|
||||||
|
|
||||||
From here, refer to :doc:`configuration` to declare Watcher as a new service
|
From here, refer to :doc:`../configuration/configuring` to declare Watcher
|
||||||
into Keystone and to configure its different modules. Once configured, you
|
as a new service into Keystone and to configure its different modules.
|
||||||
should be able to run the Watcher services by issuing these commands:
|
Once configured, you should be able to run the Watcher services by issuing
|
||||||
|
these commands:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@@ -107,7 +109,7 @@ installed on your system.
|
|||||||
|
|
||||||
Once installed, you still need to declare Watcher as a new service into
|
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
|
Keystone and to configure its different modules, which you can find described
|
||||||
in :doc:`configuration`.
|
in :doc:`../configuration/configuring`.
|
||||||
|
|
||||||
|
|
||||||
Installing from packages: Debian (experimental)
|
Installing from packages: Debian (experimental)
|
||||||
@@ -124,9 +126,9 @@ Here is single Dockerfile snippet you can use to run your Docker container:
|
|||||||
MAINTAINER David TARDIVEL <david.tardivel@b-com.com>
|
MAINTAINER David TARDIVEL <david.tardivel@b-com.com>
|
||||||
|
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
RUN apt-get dist-upgrade -y
|
RUN apt-get dist-upgrade
|
||||||
RUN apt-get install -y vim net-tools
|
RUN apt-get install vim net-tools
|
||||||
RUN apt-get install -yt experimental watcher-api
|
RUN apt-get install experimental watcher-api
|
||||||
|
|
||||||
CMD ["/usr/bin/watcher-api"]
|
CMD ["/usr/bin/watcher-api"]
|
||||||
|
|
||||||
8
doc/source/api/index.rst
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
==================================================
|
||||||
|
OpenStack Infrastructure Optimization Service APIs
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
v1
|
||||||
@@ -20,6 +20,17 @@ Goals
|
|||||||
.. autotype:: watcher.api.controllers.v1.goal.Goal
|
.. autotype:: watcher.api.controllers.v1.goal.Goal
|
||||||
:members:
|
: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
|
Audit Templates
|
||||||
===============
|
===============
|
||||||
@@ -75,3 +86,15 @@ Actions
|
|||||||
|
|
||||||
.. autotype:: watcher.api.controllers.v1.action.Action
|
.. autotype:: watcher.api.controllers.v1.action.Action
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
Scoring Engine
|
||||||
|
==============
|
||||||
|
|
||||||
|
.. rest-controller:: watcher.api.controllers.v1.scoring_engine:ScoringEngineController
|
||||||
|
:webprefix: /v1/scoring_engine
|
||||||
|
|
||||||
|
.. autotype:: watcher.api.controllers.v1.scoring_engine.ScoringEngineCollection
|
||||||
|
:members:
|
||||||
|
|
||||||
|
.. autotype:: watcher.api.controllers.v1.scoring_engine.ScoringEngine
|
||||||
|
:members:
|
||||||
@@ -119,7 +119,7 @@ The watcher command-line interface (CLI) can be used to interact with the
|
|||||||
Watcher system in order to control it or to know its current status.
|
Watcher system in order to control it or to know its current status.
|
||||||
|
|
||||||
Please, read `the detailed documentation about Watcher CLI
|
Please, read `the detailed documentation about Watcher CLI
|
||||||
<https://factory.b-com.com/www/watcher/doc/python-watcherclient/>`_.
|
<https://docs.openstack.org/python-watcherclient/latest/cli/>`_.
|
||||||
|
|
||||||
.. _archi_watcher_dashboard_definition:
|
.. _archi_watcher_dashboard_definition:
|
||||||
|
|
||||||
@@ -130,7 +130,7 @@ The Watcher Dashboard can be used to interact with the Watcher system through
|
|||||||
Horizon in order to control it or to know its current status.
|
Horizon in order to control it or to know its current status.
|
||||||
|
|
||||||
Please, read `the detailed documentation about Watcher Dashboard
|
Please, read `the detailed documentation about Watcher Dashboard
|
||||||
<http://docs.openstack.org/developer/watcher-dashboard/>`_.
|
<https://docs.openstack.org/watcher-dashboard/latest>`_.
|
||||||
|
|
||||||
.. _archi_watcher_database_definition:
|
.. _archi_watcher_database_definition:
|
||||||
|
|
||||||
@@ -170,7 +170,7 @@ Unless specified, it then selects the most appropriate :ref:`strategy
|
|||||||
goal.
|
goal.
|
||||||
|
|
||||||
The :ref:`Strategy <strategy_definition>` is then dynamically loaded (via
|
The :ref:`Strategy <strategy_definition>` is then dynamically loaded (via
|
||||||
`stevedore <http://docs.openstack.org/developer/stevedore/>`_). The
|
`stevedore <https://docs.openstack.org/stevedore/latest>`_). The
|
||||||
:ref:`Watcher Decision Engine <watcher_decision_engine_definition>` executes
|
:ref:`Watcher Decision Engine <watcher_decision_engine_definition>` executes
|
||||||
the strategy.
|
the strategy.
|
||||||
|
|
||||||
@@ -407,6 +407,9 @@ be one of the following:
|
|||||||
- **CANCELLED** : the :ref:`Audit <audit_definition>` was in **PENDING** or
|
- **CANCELLED** : the :ref:`Audit <audit_definition>` was in **PENDING** or
|
||||||
**ONGOING** state and was cancelled by the
|
**ONGOING** state and was cancelled by the
|
||||||
:ref:`Administrator <administrator_definition>`
|
: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
|
The following diagram shows the different possible states of an
|
||||||
:ref:`Audit <audit_definition>` and what event makes the state change to a new
|
:ref:`Audit <audit_definition>` and what event makes the state change to a new
|
||||||
|
|||||||
@@ -31,8 +31,7 @@ sys.path.insert(0, os.path.abspath('./'))
|
|||||||
# Add any Sphinx extension module names here, as strings. They can be
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||||
extensions = [
|
extensions = [
|
||||||
'oslo_config.sphinxconfiggen',
|
'oslo_config.sphinxext',
|
||||||
'oslosphinx',
|
|
||||||
'sphinx.ext.autodoc',
|
'sphinx.ext.autodoc',
|
||||||
'sphinx.ext.viewcode',
|
'sphinx.ext.viewcode',
|
||||||
'sphinxcontrib.httpdomain',
|
'sphinxcontrib.httpdomain',
|
||||||
@@ -41,10 +40,14 @@ extensions = [
|
|||||||
'wsmeext.sphinxext',
|
'wsmeext.sphinxext',
|
||||||
'ext.term',
|
'ext.term',
|
||||||
'ext.versioned_notifications',
|
'ext.versioned_notifications',
|
||||||
|
'oslo_config.sphinxconfiggen',
|
||||||
|
'openstackdocstheme',
|
||||||
]
|
]
|
||||||
|
|
||||||
wsme_protocols = ['restjson']
|
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'
|
sample_config_basename = 'watcher'
|
||||||
|
|
||||||
# autodoc generation is a bit aggressive and a nuisance when doing heavy
|
# autodoc generation is a bit aggressive and a nuisance when doing heavy
|
||||||
@@ -69,7 +72,7 @@ copyright = u'OpenStack Foundation'
|
|||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = watcher_version.version_info.release_string()
|
release = watcher_version.version_info.release_string()
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = watcher_version.version_info.version_string()
|
version = watcher_version.version_string
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
# A list of ignored prefixes for module index sorting.
|
||||||
modindex_common_prefix = ['watcher.']
|
modindex_common_prefix = ['watcher.']
|
||||||
@@ -92,6 +95,8 @@ add_function_parentheses = True
|
|||||||
# unit titles (such as .. function::).
|
# unit titles (such as .. function::).
|
||||||
add_module_names = True
|
add_module_names = True
|
||||||
|
|
||||||
|
suppress_warnings = ['app.add_directive']
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
pygments_style = 'sphinx'
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
@@ -117,12 +122,20 @@ man_pages = [
|
|||||||
# Sphinx are currently 'default' and 'sphinxdoc'.
|
# Sphinx are currently 'default' and 'sphinxdoc'.
|
||||||
# html_theme_path = ["."]
|
# html_theme_path = ["."]
|
||||||
# html_theme = '_theme'
|
# html_theme = '_theme'
|
||||||
|
html_theme = 'openstackdocs'
|
||||||
# html_static_path = ['static']
|
# html_static_path = ['static']
|
||||||
html_theme_options = {'incubating': True}
|
# html_theme_options = {}
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = '%sdoc' % project
|
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
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
# (source start file, target name, title, author, documentclass
|
# (source start file, target name, title, author, documentclass
|
||||||
# [howto/manual]).
|
# [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
|
The Watcher system is a collection of services that provides support to
|
||||||
optimize your IAAS platform. 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:
|
configuration, interact with several other OpenStack services. This includes:
|
||||||
|
|
||||||
- the OpenStack Identity service (`keystone`_) for request authentication and
|
- the OpenStack Identity service (`keystone`_) for request authentication and
|
||||||
@@ -27,7 +27,7 @@ configuration, interact with several other OpenStack services. This includes:
|
|||||||
|
|
||||||
The Watcher service includes the following components:
|
The Watcher service includes the following components:
|
||||||
|
|
||||||
- ``watcher-decision-engine``: runs audit on part of your IAAS and return an
|
- ``watcher-decision-engine``: runs audit on part of your IaaS and return an
|
||||||
action plan in order to optimize resource placement.
|
action plan in order to optimize resource placement.
|
||||||
- ``watcher-api``: A RESTful API that processes application requests by sending
|
- ``watcher-api``: A RESTful API that processes application requests by sending
|
||||||
them to the watcher-decision-engine over RPC.
|
them to the watcher-decision-engine over RPC.
|
||||||
@@ -200,8 +200,8 @@ configuration file, in order:
|
|||||||
|
|
||||||
|
|
||||||
Although some configuration options are mentioned here, it is recommended that
|
Although some configuration options are mentioned here, it is recommended that
|
||||||
you review all the `available options
|
you review all the :ref:`available options
|
||||||
<https://git.openstack.org/cgit/openstack/watcher/tree/etc/watcher/watcher.conf.sample>`_
|
<watcher_sample_configuration_files>`
|
||||||
so that the watcher service is configured for your needs.
|
so that the watcher service is configured for your needs.
|
||||||
|
|
||||||
#. The Watcher Service stores information in a database. This guide uses the
|
#. The Watcher Service stores information in a database. This guide uses the
|
||||||
@@ -349,7 +349,7 @@ so that the watcher service is configured for your needs.
|
|||||||
[nova_client]
|
[nova_client]
|
||||||
|
|
||||||
# Version of Nova API to use in novaclient. (string value)
|
# Version of Nova API to use in novaclient. (string value)
|
||||||
#api_version = 2
|
#api_version = 2.53
|
||||||
api_version = 2.1
|
api_version = 2.1
|
||||||
|
|
||||||
#. Create the Watcher Service database tables::
|
#. Create the Watcher Service database tables::
|
||||||
@@ -366,15 +366,14 @@ Configure Nova compute
|
|||||||
Please check your hypervisor configuration to correctly handle
|
Please check your hypervisor configuration to correctly handle
|
||||||
`instance migration`_.
|
`instance migration`_.
|
||||||
|
|
||||||
.. _`instance migration`: http://docs.openstack.org/admin-guide/compute-live-migration-usage.html
|
.. _`instance migration`: https://docs.openstack.org/nova/latest/admin/migration.html
|
||||||
|
|
||||||
Configure Measurements
|
Configure Measurements
|
||||||
======================
|
======================
|
||||||
|
|
||||||
You can configure and install Ceilometer by following the documentation below :
|
You can configure and install Ceilometer by following the documentation below :
|
||||||
|
|
||||||
#. http://docs.openstack.org/developer/ceilometer
|
#. https://docs.openstack.org/ceilometer/latest
|
||||||
#. http://docs.openstack.org/kilo/install-guide/install/apt/content/ceilometer-nova.html
|
|
||||||
|
|
||||||
The built-in strategy 'basic_consolidation' provided by watcher requires
|
The built-in strategy 'basic_consolidation' provided by watcher requires
|
||||||
"**compute.node.cpu.percent**" and "**cpu_util**" measurements to be collected
|
"**compute.node.cpu.percent**" and "**cpu_util**" measurements to be collected
|
||||||
@@ -386,13 +385,13 @@ the OpenStack site.
|
|||||||
You can use 'ceilometer meter-list' to list the available meters.
|
You can use 'ceilometer meter-list' to list the available meters.
|
||||||
|
|
||||||
For more information:
|
For more information:
|
||||||
http://docs.openstack.org/developer/ceilometer/measurements.html
|
https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html
|
||||||
|
|
||||||
Ceilometer is designed to collect measurements from OpenStack services and from
|
Ceilometer is designed to collect measurements from OpenStack services and from
|
||||||
other external components. If you would like to add new meters to the currently
|
other external components. If you would like to add new meters to the currently
|
||||||
existing ones, you need to follow the documentation below:
|
existing ones, you need to follow the documentation below:
|
||||||
|
|
||||||
#. http://docs.openstack.org/developer/ceilometer/new_meters.html
|
#. https://docs.openstack.org/ceilometer/latest/contributor/measurements.html#new-measurements
|
||||||
|
|
||||||
The Ceilometer collector uses a pluggable storage system, meaning that you can
|
The Ceilometer collector uses a pluggable storage system, meaning that you can
|
||||||
pick any database system you prefer.
|
pick any database system you prefer.
|
||||||
@@ -424,12 +423,32 @@ to Watcher receives Nova notifications in ``watcher_notifications`` as well.
|
|||||||
into which Nova services will publish events ::
|
into which Nova services will publish events ::
|
||||||
|
|
||||||
[oslo_messaging_notifications]
|
[oslo_messaging_notifications]
|
||||||
driver = messaging
|
driver = messagingv2
|
||||||
topics = notifications,watcher_notifications
|
topics = notifications,watcher_notifications
|
||||||
|
|
||||||
* Restart the Nova services.
|
* Restart the Nova services.
|
||||||
|
|
||||||
|
|
||||||
|
Configure Cinder Notifications
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Watcher can also consume notifications generated by the Cinder services, in
|
||||||
|
order to build or update, in real time, its cluster data model related to
|
||||||
|
storage resources. To do so, you have to update the Cinder configuration
|
||||||
|
file on controller and volume nodes, in order to let Watcher receive Cinder
|
||||||
|
notifications in a dedicated ``watcher_notifications`` channel.
|
||||||
|
|
||||||
|
* In the file ``/etc/cinder/cinder.conf``, update the section
|
||||||
|
``[oslo_messaging_notifications]``, by redefining the list of topics
|
||||||
|
into which Cinder services will publish events ::
|
||||||
|
|
||||||
|
[oslo_messaging_notifications]
|
||||||
|
driver = messagingv2
|
||||||
|
topics = notifications,watcher_notifications
|
||||||
|
|
||||||
|
* Restart the Cinder services.
|
||||||
|
|
||||||
|
|
||||||
Workers
|
Workers
|
||||||
=======
|
=======
|
||||||
|
|
||||||
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
@@ -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
|
||||||
@@ -24,8 +24,8 @@ signed OpenStack's contributor's agreement.
|
|||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
* http://docs.openstack.org/infra/manual/developers.html
|
* https://docs.openstack.org/infra/manual/developers.html
|
||||||
* http://wiki.openstack.org/CLA
|
* https://wiki.openstack.org/CLA
|
||||||
|
|
||||||
LaunchPad Project
|
LaunchPad Project
|
||||||
-----------------
|
-----------------
|
||||||
@@ -37,22 +37,22 @@ notifications of important events.
|
|||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
* http://launchpad.net
|
* https://launchpad.net
|
||||||
* http://launchpad.net/watcher
|
* https://launchpad.net/watcher
|
||||||
* http://launchpad.net/~openstack
|
* https://launchpad.net/~openstack
|
||||||
|
|
||||||
|
|
||||||
Project Hosting Details
|
Project Hosting Details
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
Bug tracker
|
Bug tracker
|
||||||
http://launchpad.net/watcher
|
https://launchpad.net/watcher
|
||||||
|
|
||||||
Mailing list (prefix subjects with ``[watcher]`` for faster responses)
|
Mailing list (prefix subjects with ``[watcher]`` for faster responses)
|
||||||
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
|
https://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
|
||||||
|
|
||||||
Wiki
|
Wiki
|
||||||
http://wiki.openstack.org/Watcher
|
https://wiki.openstack.org/Watcher
|
||||||
|
|
||||||
Code Hosting
|
Code Hosting
|
||||||
https://git.openstack.org/cgit/openstack/watcher
|
https://git.openstack.org/cgit/openstack/watcher
|
||||||
@@ -64,8 +64,9 @@ IRC Channel
|
|||||||
``#openstack-watcher`` (changelog_)
|
``#openstack-watcher`` (changelog_)
|
||||||
|
|
||||||
Weekly Meetings
|
Weekly Meetings
|
||||||
on Wednesdays at 14:00 UTC on even weeks, 9:00 UTC on odd weeks, in the
|
On Wednesdays at 14:00 UTC on even weeks in the ``#openstack-meeting-4``
|
||||||
``#openstack-meeting-4`` IRC channel (`meetings logs`_)
|
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/
|
.. _changelog: http://eavesdrop.openstack.org/irclogs/%23openstack-watcher/
|
||||||
.. _meetings logs: http://eavesdrop.openstack.org/meetings/watcher/
|
.. _meetings logs: http://eavesdrop.openstack.org/meetings/watcher/
|
||||||
@@ -24,8 +24,8 @@ Watcher plugin::
|
|||||||
For more detailed instructions, see `Detailed DevStack Instructions`_. Check
|
For more detailed instructions, see `Detailed DevStack Instructions`_. Check
|
||||||
out the `DevStack documentation`_ for more information regarding DevStack.
|
out the `DevStack documentation`_ for more information regarding DevStack.
|
||||||
|
|
||||||
.. _PluginModelDocs: http://docs.openstack.org/developer/devstack/plugins.html
|
.. _PluginModelDocs: https://docs.openstack.org/devstack/latest/plugins.html
|
||||||
.. _DevStack documentation: http://docs.openstack.org/developer/devstack/
|
.. _DevStack documentation: https://docs.openstack.org/devstack/latest
|
||||||
|
|
||||||
Detailed DevStack Instructions
|
Detailed DevStack Instructions
|
||||||
==============================
|
==============================
|
||||||
@@ -37,7 +37,7 @@ Detailed DevStack Instructions
|
|||||||
needed (i.e., no computes are needed if you want to just experiment with
|
needed (i.e., no computes are needed if you want to just experiment with
|
||||||
the Watcher services). These servers can be VMs running on your local
|
the Watcher services). These servers can be VMs running on your local
|
||||||
machine via VirtualBox if you prefer. DevStack currently recommends that
|
machine via VirtualBox if you prefer. DevStack currently recommends that
|
||||||
you use Ubuntu 14.04 LTS. The servers should also have connections to the
|
you use Ubuntu 16.04 LTS. The servers should also have connections to the
|
||||||
same network such that they are all able to communicate with one another.
|
same network such that they are all able to communicate with one another.
|
||||||
|
|
||||||
#. For each server, clone the DevStack repository and create the stack user::
|
#. For each server, clone the DevStack repository and create the stack user::
|
||||||
@@ -92,6 +92,12 @@ Detailed DevStack Instructions
|
|||||||
Note: if you want to use a specific branch, specify WATCHER_BRANCH in the
|
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.
|
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::
|
#. Start stacking from the controller node::
|
||||||
|
|
||||||
./devstack/stack.sh
|
./devstack/stack.sh
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
https://creativecommons.org/licenses/by/3.0/
|
https://creativecommons.org/licenses/by/3.0/
|
||||||
|
|
||||||
.. _watcher_developement_environment:
|
.. _watcher_development_environment:
|
||||||
|
|
||||||
=========================================
|
=========================================
|
||||||
Set up a development environment manually
|
Set up a development environment manually
|
||||||
@@ -16,8 +16,8 @@ for development purposes.
|
|||||||
To install Watcher from packaging, refer instead to Watcher `User
|
To install Watcher from packaging, refer instead to Watcher `User
|
||||||
Documentation`_.
|
Documentation`_.
|
||||||
|
|
||||||
.. _`Git Repository`: http://git.openstack.org/cgit/openstack/watcher
|
.. _`Git Repository`: https://git.openstack.org/cgit/openstack/watcher
|
||||||
.. _`User Documentation`: http://docs.openstack.org/developer/watcher/
|
.. _`User Documentation`: https://docs.openstack.org/watcher/latest/
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
=============
|
=============
|
||||||
@@ -25,7 +25,7 @@ Prerequisites
|
|||||||
This document assumes you are using Ubuntu or Fedora, and that you have the
|
This document assumes you are using Ubuntu or Fedora, and that you have the
|
||||||
following tools available on your system:
|
following tools available on your system:
|
||||||
|
|
||||||
- Python_ 2.7 and 3.4
|
- Python_ 2.7 and 3.5
|
||||||
- git_
|
- git_
|
||||||
- setuptools_
|
- setuptools_
|
||||||
- pip_
|
- pip_
|
||||||
@@ -35,10 +35,10 @@ following tools available on your system:
|
|||||||
**Reminder**: If you're successfully using a different platform, or a
|
**Reminder**: If you're successfully using a different platform, or a
|
||||||
different version of the above, please document your configuration here!
|
different version of the above, please document your configuration here!
|
||||||
|
|
||||||
.. _Python: http://www.python.org/
|
.. _Python: https://www.python.org/
|
||||||
.. _git: http://git-scm.com/
|
.. _git: https://git-scm.com/
|
||||||
.. _setuptools: http://pypi.python.org/pypi/setuptools
|
.. _setuptools: https://pypi.python.org/pypi/setuptools
|
||||||
.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.org/en/latest/install.html
|
.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.io/en/latest/install.html
|
||||||
|
|
||||||
Getting the latest code
|
Getting the latest code
|
||||||
=======================
|
=======================
|
||||||
@@ -69,21 +69,21 @@ itself.
|
|||||||
|
|
||||||
These dependencies can be installed from PyPi_ using the Python tool pip_.
|
These dependencies can be installed from PyPi_ using the Python tool pip_.
|
||||||
|
|
||||||
.. _PyPi: http://pypi.python.org/
|
.. _PyPi: https://pypi.python.org/
|
||||||
.. _pip: http://pypi.python.org/pypi/pip
|
.. _pip: https://pypi.python.org/pypi/pip
|
||||||
|
|
||||||
However, your system *may* need additional dependencies that `pip` (and by
|
However, your system *may* need additional dependencies that `pip` (and by
|
||||||
extension, PyPi) cannot satisfy. These dependencies should be installed
|
extension, PyPi) cannot satisfy. These dependencies should be installed
|
||||||
prior to using `pip`, and the installation method may vary depending on
|
prior to using `pip`, and the installation method may vary depending on
|
||||||
your platform.
|
your platform.
|
||||||
|
|
||||||
* Ubuntu 14.04::
|
* Ubuntu 16.04::
|
||||||
|
|
||||||
$ sudo apt-get install python-dev libssl-dev libmysqlclient-dev libffi-dev
|
$ sudo apt-get install python-dev libssl-dev libmysqlclient-dev libffi-dev
|
||||||
|
|
||||||
* Fedora 19+::
|
* Fedora 24+::
|
||||||
|
|
||||||
$ sudo yum install openssl-devel libffi-devel mysql-devel
|
$ sudo dnf install redhat-rpm-config gcc python-devel libxml2-devel
|
||||||
|
|
||||||
* CentOS 7::
|
* CentOS 7::
|
||||||
|
|
||||||
@@ -125,7 +125,7 @@ You can re-activate this virtualenv for your current shell using:
|
|||||||
|
|
||||||
For more information on virtual environments, see virtualenv_.
|
For more information on virtual environments, see virtualenv_.
|
||||||
|
|
||||||
.. _virtualenv: http://www.virtualenv.org/
|
.. _virtualenv: https://www.virtualenv.org/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -175,11 +175,12 @@ The HTML files are available into ``doc/build`` directory.
|
|||||||
Configure the Watcher services
|
Configure the Watcher services
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
Watcher services require a configuration file. There is a sample configuration
|
Watcher services require a configuration file. Use tox to generate
|
||||||
file that can be used to get started:
|
a sample configuration file that can be used to get started:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ tox -e genconfig
|
||||||
$ cp etc/watcher.conf.sample etc/watcher.conf
|
$ cp etc/watcher.conf.sample etc/watcher.conf
|
||||||
|
|
||||||
Most of the default configuration should be enough to get you going, but you
|
Most of the default configuration should be enough to get you going, but you
|
||||||
@@ -193,7 +194,7 @@ still need to configure the following sections:
|
|||||||
message bus
|
message bus
|
||||||
|
|
||||||
So if you need some more details on how to configure one or more of these
|
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.
|
continuing.
|
||||||
|
|
||||||
|
|
||||||
@@ -239,7 +240,7 @@ To run the Watcher Applier service, use:
|
|||||||
(watcher) $ watcher-applier
|
(watcher) $ watcher-applier
|
||||||
|
|
||||||
Default configuration of these services are available into ``/etc/watcher``
|
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.
|
configured. By default, Watcher is configured with SQL backends.
|
||||||
|
|
||||||
|
|
||||||
8
doc/source/contributor/index.rst
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
environment
|
||||||
|
devstack
|
||||||
|
notifications
|
||||||
|
testing
|
||||||
|
rally_link
|
||||||
@@ -178,7 +178,7 @@ Here below is how you would proceed to register ``DummyAction`` using pbr_:
|
|||||||
watcher_actions =
|
watcher_actions =
|
||||||
dummy = thirdparty.dummy:DummyAction
|
dummy = thirdparty.dummy:DummyAction
|
||||||
|
|
||||||
.. _pbr: http://docs.openstack.org/developer/pbr/
|
.. _pbr: https://docs.openstack.org/pbr/latest
|
||||||
|
|
||||||
|
|
||||||
Using action plugins
|
Using action plugins
|
||||||
@@ -217,3 +217,11 @@ which is only able to process the Watcher built-in actions. Therefore, you will
|
|||||||
either have to use an existing third-party planner or :ref:`implement another
|
either have to use an existing third-party planner or :ref:`implement another
|
||||||
planner <implement_planner_plugin>` that will be able to take into account your
|
planner <implement_planner_plugin>` that will be able to take into account your
|
||||||
new action plugin.
|
new action plugin.
|
||||||
|
|
||||||
|
|
||||||
|
Test your new action
|
||||||
|
====================
|
||||||
|
|
||||||
|
In order to test your new action via a manual test or a Tempest test, you can
|
||||||
|
use the :py:class:`~.Actuator` strategy and pass it one or more actions to
|
||||||
|
execute. This way, you can isolate your action to see if it works as expected.
|
||||||
@@ -22,7 +22,7 @@ Pre-requisites
|
|||||||
We assume that you have set up a working Watcher development environment. So if
|
We assume that you have set up a working Watcher development environment. So if
|
||||||
this not already the case, you can check out our documentation which explains
|
this not already the case, you can check out our documentation which explains
|
||||||
how to set up a :ref:`development environment
|
how to set up a :ref:`development environment
|
||||||
<watcher_developement_environment>`.
|
<watcher_development_environment>`.
|
||||||
|
|
||||||
.. _development environment:
|
.. _development environment:
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ First off, we need to create the project structure. To do so, we can use
|
|||||||
generate the skeleton of our project::
|
generate the skeleton of our project::
|
||||||
|
|
||||||
$ virtualenv thirdparty
|
$ virtualenv thirdparty
|
||||||
$ source thirdparty/bin/activate
|
$ . thirdparty/bin/activate
|
||||||
$ pip install cookiecutter
|
$ pip install cookiecutter
|
||||||
$ cookiecutter https://github.com/openstack-dev/cookiecutter
|
$ cookiecutter https://github.com/openstack-dev/cookiecutter
|
||||||
|
|
||||||
@@ -28,6 +28,8 @@ In order to create a new cluster data model collector, you have to:
|
|||||||
- Implement its :py:meth:`~.BaseClusterDataModelCollector.execute` abstract
|
- Implement its :py:meth:`~.BaseClusterDataModelCollector.execute` abstract
|
||||||
method to return your entire cluster data model that this method should
|
method to return your entire cluster data model that this method should
|
||||||
build.
|
build.
|
||||||
|
- Implement its :py:meth:`~.BaseClusterDataModelCollector.audit_scope_handler`
|
||||||
|
abstract property to return your audit scope handler.
|
||||||
- Implement its :py:meth:`~.Goal.notification_endpoints` abstract property to
|
- Implement its :py:meth:`~.Goal.notification_endpoints` abstract property to
|
||||||
return the list of all the :py:class:`~.base.NotificationEndpoint` instances
|
return the list of all the :py:class:`~.base.NotificationEndpoint` instances
|
||||||
that will be responsible for handling incoming notifications in order to
|
that will be responsible for handling incoming notifications in order to
|
||||||
@@ -57,6 +59,10 @@ Here is an example showing how you can write a plugin called
|
|||||||
# Do something here...
|
# Do something here...
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
@property
|
||||||
|
def audit_scope_handler(self):
|
||||||
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def notification_endpoints(self):
|
def notification_endpoints(self):
|
||||||
return []
|
return []
|
||||||
@@ -135,6 +141,10 @@ class method as followed:
|
|||||||
# Do something here...
|
# Do something here...
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
@property
|
||||||
|
def audit_scope_handler(self):
|
||||||
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def notification_endpoints(self):
|
def notification_endpoints(self):
|
||||||
return []
|
return []
|
||||||
@@ -198,7 +208,7 @@ Here below is how to register ``DummyClusterDataModelCollector`` using pbr_:
|
|||||||
watcher_cluster_data_model_collectors =
|
watcher_cluster_data_model_collectors =
|
||||||
dummy = thirdparty.dummy:DummyClusterDataModelCollector
|
dummy = thirdparty.dummy:DummyClusterDataModelCollector
|
||||||
|
|
||||||
.. _pbr: http://docs.openstack.org/developer/pbr/
|
.. _pbr: http://docs.openstack.org/pbr/latest
|
||||||
|
|
||||||
|
|
||||||
Add new notification endpoints
|
Add new notification endpoints
|
||||||
@@ -123,10 +123,11 @@ Here below is how you would proceed to register ``NewGoal`` using pbr_:
|
|||||||
new_goal = thirdparty.new:NewGoal
|
new_goal = thirdparty.new:NewGoal
|
||||||
|
|
||||||
|
|
||||||
To get a better understanding on how to implement a more advanced goal,
|
To get a better understanding on how to implement a more advanced goal, have
|
||||||
have a look at the :py:class:`~.ServerConsolidation` class.
|
a look at the
|
||||||
|
:py:class:`watcher.decision_engine.goal.goals.ServerConsolidation` class.
|
||||||
|
|
||||||
.. _pbr: http://docs.openstack.org/developer/pbr/
|
.. _pbr: https://docs.openstack.org/pbr/latest
|
||||||
|
|
||||||
.. _implement_efficacy_specification:
|
.. _implement_efficacy_specification:
|
||||||
|
|
||||||
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
|
||||||
@@ -145,7 +145,7 @@ Here below is how you would proceed to register ``DummyPlanner`` using pbr_:
|
|||||||
watcher_planners =
|
watcher_planners =
|
||||||
dummy = third_party.dummy:DummyPlanner
|
dummy = third_party.dummy:DummyPlanner
|
||||||
|
|
||||||
.. _pbr: http://docs.openstack.org/developer/pbr/
|
.. _pbr: https://docs.openstack.org/pbr/latest
|
||||||
|
|
||||||
|
|
||||||
Using planner plugins
|
Using planner plugins
|
||||||
@@ -37,7 +37,8 @@ Create a new scoring engine plugin
|
|||||||
|
|
||||||
In order to create a new scoring engine you have to:
|
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
|
- 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
|
**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
|
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
|
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
|
.. autoclass:: watcher.decision_engine.scoring.base.ScoringEngine
|
||||||
:members:
|
:members:
|
||||||
@@ -188,7 +190,7 @@ the :py:class:`~.DummyScoringContainer` and the way it is configured in
|
|||||||
watcher_scoring_engine_containers =
|
watcher_scoring_engine_containers =
|
||||||
new_scoring_container = thirdparty.new:NewContainer
|
new_scoring_container = thirdparty.new:NewContainer
|
||||||
|
|
||||||
.. _pbr: http://docs.openstack.org/developer/pbr/
|
.. _pbr: https://docs.openstack.org/pbr/latest/
|
||||||
|
|
||||||
|
|
||||||
Using scoring engine plugins
|
Using scoring engine plugins
|
||||||
@@ -219,7 +219,7 @@ Here below is how you would proceed to register ``NewStrategy`` using pbr_:
|
|||||||
To get a better understanding on how to implement a more advanced strategy,
|
To get a better understanding on how to implement a more advanced strategy,
|
||||||
have a look at the :py:class:`~.BasicConsolidation` class.
|
have a look at the :py:class:`~.BasicConsolidation` class.
|
||||||
|
|
||||||
.. _pbr: http://docs.openstack.org/developer/pbr/
|
.. _pbr: https://docs.openstack.org/pbr/latest
|
||||||
|
|
||||||
Using strategy plugins
|
Using strategy plugins
|
||||||
======================
|
======================
|
||||||
@@ -263,12 +263,12 @@ requires new metrics not covered by Ceilometer, you can add them through a
|
|||||||
`Ceilometer plugin`_.
|
`Ceilometer plugin`_.
|
||||||
|
|
||||||
|
|
||||||
.. _`Helper`: https://github.com/openstack/watcher/blob/master/watcher/decision_engine/cluster/history/ceilometer.py
|
.. _`Helper`: https://github.com/openstack/watcher/blob/master/watcher/datasource/ceilometer.py
|
||||||
.. _`Ceilometer developer guide`: http://docs.openstack.org/developer/ceilometer/architecture.html#storing-the-data
|
.. _`Ceilometer developer guide`: https://docs.openstack.org/ceilometer/latest/contributor/architecture.html#storing-accessing-the-data
|
||||||
.. _`Ceilometer`: http://docs.openstack.org/developer/ceilometer/
|
.. _`Ceilometer`: https://docs.openstack.org/ceilometer/latest
|
||||||
.. _`Monasca`: https://github.com/openstack/monasca-api/blob/master/docs/monasca-api-spec.md
|
.. _`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
|
.. _`here`: https://docs.openstack.org/ceilometer/latest/contributor/install/dbreco.html#choosing-a-database-backend
|
||||||
.. _`Ceilometer plugin`: http://docs.openstack.org/developer/ceilometer/plugins.html
|
.. _`Ceilometer plugin`: https://docs.openstack.org/ceilometer/latest/contributor/plugins.html
|
||||||
.. _`Ceilosca`: https://github.com/openstack/monasca-ceilometer/blob/master/ceilosca/ceilometer/storage/impl_monasca.py
|
.. _`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 Watcher Datasource Helper
|
||||||
@@ -14,7 +14,7 @@ Unit tests
|
|||||||
==========
|
==========
|
||||||
|
|
||||||
All unit tests should be run using `tox`_. To run the same unit tests that are
|
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::
|
can issue the following command::
|
||||||
|
|
||||||
$ workon watcher
|
$ workon watcher
|
||||||
@@ -26,7 +26,7 @@ If you want to only run one of the aforementioned, you can then issue one of
|
|||||||
the following::
|
the following::
|
||||||
|
|
||||||
$ workon watcher
|
$ workon watcher
|
||||||
(watcher) $ tox -e py34
|
(watcher) $ tox -e py35
|
||||||
(watcher) $ tox -e py27
|
(watcher) $ tox -e py27
|
||||||
(watcher) $ tox -e pep8
|
(watcher) $ tox -e pep8
|
||||||
|
|
||||||
@@ -41,10 +41,18 @@ you can run the desired test::
|
|||||||
$ workon watcher
|
$ workon watcher
|
||||||
(watcher) $ tox -e py27 -- -r watcher.tests.api
|
(watcher) $ tox -e py27 -- -r watcher.tests.api
|
||||||
|
|
||||||
.. _os-testr: http://docs.openstack.org/developer/os-testr/
|
.. _os-testr: https://docs.openstack.org/os-testr/latest
|
||||||
|
|
||||||
When you're done, deactivate the virtualenv::
|
When you're done, deactivate the virtualenv::
|
||||||
|
|
||||||
$ deactivate
|
$ deactivate
|
||||||
|
|
||||||
.. include:: ../../../watcher_tempest_plugin/README.rst
|
.. _tempest_tests:
|
||||||
|
|
||||||
|
Tempest tests
|
||||||
|
=============
|
||||||
|
|
||||||
|
Tempest tests for Watcher has been migrated to the external repo
|
||||||
|
`watcher-tempest-plugin`_.
|
||||||
|
|
||||||
|
.. _watcher-tempest-plugin: https://github.com/openstack/watcher-tempest-plugin
|
||||||
@@ -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_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
|
Audit Template
|
||||||
==============
|
==============
|
||||||
|
|
||||||
@@ -75,7 +83,7 @@ Audit Template
|
|||||||
Availability Zone
|
Availability Zone
|
||||||
=================
|
=================
|
||||||
|
|
||||||
Please, read `the official OpenStack definition of an Availability Zone <http://docs.openstack.org/developer/nova/aggregates.html#availability-zones-azs>`_.
|
Please, read `the official OpenStack definition of an Availability Zone <https://docs.openstack.org/nova/latest/user/aggregates.html#availability-zones-azs>`_.
|
||||||
|
|
||||||
.. _cluster_definition:
|
.. _cluster_definition:
|
||||||
|
|
||||||
@@ -107,15 +115,8 @@ Cluster Data Model (CDM)
|
|||||||
Controller Node
|
Controller Node
|
||||||
===============
|
===============
|
||||||
|
|
||||||
A controller node is a machine that typically runs the following core OpenStack
|
Please, read `the official OpenStack definition of a Controller Node
|
||||||
services:
|
<https://docs.openstack.org/nova/latest/install/overview.html#controller>`_.
|
||||||
|
|
||||||
- Keystone: for identity and service management
|
|
||||||
- Cinder scheduler: for volumes management
|
|
||||||
- Glance controller: for image management
|
|
||||||
- Neutron controller: for network management
|
|
||||||
- Nova controller: for global compute resources management with services
|
|
||||||
such as nova-scheduler, nova-conductor and nova-network.
|
|
||||||
|
|
||||||
In many configurations, Watcher will reside on a controller node even if it
|
In many configurations, Watcher will reside on a controller node even if it
|
||||||
can potentially be hosted on a dedicated machine.
|
can potentially be hosted on a dedicated machine.
|
||||||
@@ -126,7 +127,7 @@ Compute node
|
|||||||
============
|
============
|
||||||
|
|
||||||
Please, read `the official OpenStack definition of a Compute Node
|
Please, read `the official OpenStack definition of a Compute Node
|
||||||
<http://docs.openstack.org/ops-guide/arch-compute-nodes.html>`_.
|
<https://docs.openstack.org/nova/latest/install/overview.html#compute>`_.
|
||||||
|
|
||||||
.. _customer_definition:
|
.. _customer_definition:
|
||||||
|
|
||||||
@@ -159,7 +160,7 @@ Host Aggregate
|
|||||||
==============
|
==============
|
||||||
|
|
||||||
Please, read `the official OpenStack definition of a Host Aggregate
|
Please, read `the official OpenStack definition of a Host Aggregate
|
||||||
<http://docs.openstack.org/developer/nova/aggregates.html>`_.
|
<https://docs.openstack.org/nova/latest/user/aggregates.html>`_.
|
||||||
|
|
||||||
.. _instance_definition:
|
.. _instance_definition:
|
||||||
|
|
||||||
@@ -198,18 +199,18 @@ the Watcher system can act on.
|
|||||||
Here are some examples of
|
Here are some examples of
|
||||||
:ref:`Managed resource types <managed_resource_definition>`:
|
:ref:`Managed resource types <managed_resource_definition>`:
|
||||||
|
|
||||||
- `Nova Host Aggregates <http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Nova::HostAggregate>`_
|
- `Nova Host Aggregates <https://docs.openstack.org/heat/latest/template_guide/openstack.html#OS::Nova::HostAggregate>`_
|
||||||
- `Nova Servers <http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Nova::Server>`_
|
- `Nova Servers <https://docs.openstack.org/heat/latest/template_guide/openstack.html#OS::Nova::Server>`_
|
||||||
- `Cinder Volumes <http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Cinder::Volume>`_
|
- `Cinder Volumes <https://docs.openstack.org/heat/latest/template_guide/openstack.html#OS::Cinder::Volume>`_
|
||||||
- `Neutron Routers <http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Neutron::Router>`_
|
- `Neutron Routers <https://docs.openstack.org/heat/latest/template_guide/openstack.html#OS::Neutron::Router>`_
|
||||||
- `Neutron Networks <http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Neutron::Net>`_
|
- `Neutron Networks <https://docs.openstack.org/heat/latest/template_guide/openstack.html#OS::Neutron::Net>`_
|
||||||
- `Neutron load-balancers <http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Neutron::LoadBalancer>`_
|
- `Neutron load-balancers <https://docs.openstack.org/heat/latest/template_guide/openstack.html#OS::Neutron::LoadBalancer>`_
|
||||||
- `Sahara Hadoop Cluster <http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Sahara::Cluster>`_
|
- `Sahara Hadoop Cluster <https://docs.openstack.org/heat/latest/template_guide/openstack.html#OS::Sahara::Cluster>`_
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
It can be any of the `the official list of available resource types defined in
|
It can be any of `the official list of available resource types defined in
|
||||||
OpenStack for HEAT
|
OpenStack for HEAT
|
||||||
<http://docs.openstack.org/developer/heat/template_guide/openstack.html>`_.
|
<https://docs.openstack.org/heat/latest/template_guide/openstack.html>`_.
|
||||||
|
|
||||||
.. _efficacy_indicator_definition:
|
.. _efficacy_indicator_definition:
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 58 KiB |
@@ -7,7 +7,9 @@ ONGOING --> FAILED: Something failed while executing\nthe Action Plan in the Wat
|
|||||||
ONGOING --> SUCCEEDED: The Watcher Applier executed\nthe Action Plan successfully
|
ONGOING --> SUCCEEDED: The Watcher Applier executed\nthe Action Plan successfully
|
||||||
FAILED --> DELETED : Administrator removes\nAction Plan
|
FAILED --> DELETED : Administrator removes\nAction Plan
|
||||||
SUCCEEDED --> DELETED : Administrator removes\nAction Plan
|
SUCCEEDED --> DELETED : Administrator removes\nAction Plan
|
||||||
ONGOING --> CANCELLED : Administrator cancels\nAction Plan
|
ONGOING --> CANCELLING : Administrator cancels\nAction Plan
|
||||||
|
CANCELLING --> CANCELLED : The Watcher Applier cancelled\nthe Action Plan successfully
|
||||||
|
CANCELLING --> FAILED : Something failed while cancelling\nthe Action Plan in the Watcher Applier
|
||||||
RECOMMENDED --> CANCELLED : Administrator cancels\nAction Plan
|
RECOMMENDED --> CANCELLED : Administrator cancels\nAction Plan
|
||||||
RECOMMENDED --> SUPERSEDED : The Watcher Decision Engine supersedes\nAction Plan
|
RECOMMENDED --> SUPERSEDED : The Watcher Decision Engine supersedes\nAction Plan
|
||||||
PENDING --> CANCELLED : Administrator cancels\nAction Plan
|
PENDING --> CANCELLED : Administrator cancels\nAction Plan
|
||||||
|
|||||||
@@ -4,11 +4,14 @@
|
|||||||
PENDING --> ONGOING: Audit request is received\nby the Watcher Decision Engine
|
PENDING --> ONGOING: Audit request is received\nby the Watcher Decision Engine
|
||||||
ONGOING --> FAILED: Audit fails\n(no solution found, technical error, ...)
|
ONGOING --> FAILED: Audit fails\n(no solution found, technical error, ...)
|
||||||
ONGOING --> SUCCEEDED: The Watcher Decision Engine\ncould find at least one Solution
|
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
|
FAILED --> DELETED : Administrator wants to\narchive/delete the Audit
|
||||||
SUCCEEDED --> DELETED : Administrator wants to\narchive/delete the Audit
|
SUCCEEDED --> DELETED : Administrator wants to\narchive/delete the Audit
|
||||||
PENDING --> CANCELLED : Administrator cancels\nthe Audit
|
PENDING --> CANCELLED : Administrator cancels\nthe Audit
|
||||||
ONGOING --> CANCELLED : Administrator cancels\nthe Audit
|
ONGOING --> CANCELLED : Administrator cancels\nthe Audit
|
||||||
CANCELLED --> DELETED : Administrator wants to\narchive/delete the Audit
|
CANCELLED --> DELETED : Administrator wants to\narchive/delete the Audit
|
||||||
|
SUSPENDED --> DELETED: Administrator wants to\narchive/delete the Audit
|
||||||
DELETED --> [*]
|
DELETED --> [*]
|
||||||
|
|
||||||
@enduml
|
@enduml
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 72 KiB |
@@ -75,7 +75,7 @@ table(action_plans) {
|
|||||||
foreign_key("strategy_id : Integer")
|
foreign_key("strategy_id : Integer")
|
||||||
uuid : String[36]
|
uuid : String[36]
|
||||||
state : String[20], nullable
|
state : String[20], nullable
|
||||||
global_efficacy : JSONEncodedDict, nullable
|
global_efficacy : JSONEncodedList, nullable
|
||||||
|
|
||||||
created_at : DateTime
|
created_at : DateTime
|
||||||
updated_at : DateTime
|
updated_at : DateTime
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 76 KiB |
@@ -13,7 +13,7 @@
|
|||||||
height="210mm"
|
height="210mm"
|
||||||
id="svg4946"
|
id="svg4946"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
inkscape:version="0.48.4 r9939"
|
inkscape:version="0.91 r13725"
|
||||||
sodipodi:docname="architecture.svg">
|
sodipodi:docname="architecture.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs4948">
|
id="defs4948">
|
||||||
@@ -325,6 +325,48 @@
|
|||||||
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
|
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
|
||||||
transform="matrix(-0.8,0,0,-0.8,4.8,0)" />
|
transform="matrix(-0.8,0,0,-0.8,4.8,0)" />
|
||||||
</marker>
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="EmptyTriangleInL"
|
||||||
|
orient="auto"
|
||||||
|
refY="0"
|
||||||
|
refX="0"
|
||||||
|
id="EmptyTriangleInL-5"
|
||||||
|
style="overflow:visible">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path7091-3"
|
||||||
|
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,4.8,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="EmptyTriangleInL"
|
||||||
|
orient="auto"
|
||||||
|
refY="0"
|
||||||
|
refX="0"
|
||||||
|
id="EmptyTriangleInL-6"
|
||||||
|
style="overflow:visible">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path7091-2"
|
||||||
|
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,4.8,0)" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
inkscape:stockid="EmptyTriangleInL"
|
||||||
|
orient="auto"
|
||||||
|
refY="0"
|
||||||
|
refX="0"
|
||||||
|
id="EmptyTriangleInL-12"
|
||||||
|
style="overflow:visible">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path7091-70"
|
||||||
|
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
|
||||||
|
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,4.8,0)" />
|
||||||
|
</marker>
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
@@ -333,17 +375,21 @@
|
|||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="4"
|
inkscape:zoom="1.4142136"
|
||||||
inkscape:cx="261.24633"
|
inkscape:cx="665.19215"
|
||||||
inkscape:cy="108.90512"
|
inkscape:cy="108.90512"
|
||||||
inkscape:current-layer="g5356"
|
inkscape:current-layer="g4866-2-3"
|
||||||
id="namedview4950"
|
id="namedview4950"
|
||||||
showgrid="false"
|
showgrid="true"
|
||||||
inkscape:window-width="1846"
|
inkscape:window-width="1211"
|
||||||
inkscape:window-height="1053"
|
inkscape:window-height="698"
|
||||||
inkscape:window-x="1911"
|
inkscape:window-x="65"
|
||||||
inkscape:window-y="37"
|
inkscape:window-y="24"
|
||||||
inkscape:window-maximized="1" />
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4203" />
|
||||||
|
</sodipodi:namedview>
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata4952">
|
id="metadata4952">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
@@ -363,6 +409,12 @@
|
|||||||
<g
|
<g
|
||||||
id="g5356"
|
id="g5356"
|
||||||
transform="translate(-15.096057,-107.16694)">
|
transform="translate(-15.096057,-107.16694)">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3284-4-2-3-77-5-9"
|
||||||
|
d="m 813.66791,753.1462 0,-92.21768"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#EmptyTriangleInL-6)" />
|
||||||
<rect
|
<rect
|
||||||
y="377.8927"
|
y="377.8927"
|
||||||
x="96.920677"
|
x="96.920677"
|
||||||
@@ -410,7 +462,7 @@
|
|||||||
sodipodi:cy="358.94418"
|
sodipodi:cy="358.94418"
|
||||||
sodipodi:rx="70.677063"
|
sodipodi:rx="70.677063"
|
||||||
sodipodi:ry="70.677063"
|
sodipodi:ry="70.677063"
|
||||||
d="m 394.67978,358.94418 c 0,39.03387 -31.6432,70.67707 -70.67706,70.67707 -39.03387,0 -70.67707,-31.6432 -70.67707,-70.67707 0,-39.03386 31.6432,-70.67706 70.67707,-70.67706 39.03386,0 70.67706,31.6432 70.67706,70.67706 z"
|
d="m 394.67978,358.94418 a 70.677063,70.677063 0 0 1 -70.67706,70.67707 70.677063,70.677063 0 0 1 -70.67707,-70.67707 70.677063,70.677063 0 0 1 70.67707,-70.67706 70.677063,70.677063 0 0 1 70.67706,70.67706 z"
|
||||||
transform="matrix(0.36664048,0,0,0.36664048,0.86684619,-80.697844)" />
|
transform="matrix(0.36664048,0,0,0.36664048,0.86684619,-80.697844)" />
|
||||||
<g
|
<g
|
||||||
id="g5262">
|
id="g5262">
|
||||||
@@ -536,29 +588,29 @@
|
|||||||
</g>
|
</g>
|
||||||
<rect
|
<rect
|
||||||
y="754.5235"
|
y="754.5235"
|
||||||
x="225.29219"
|
x="231.29219"
|
||||||
height="42.939091"
|
height="42.939091"
|
||||||
width="118.56741"
|
width="118.56741"
|
||||||
id="rect4267-4-7-7-3-3"
|
id="rect4267-4-7-7-3-3"
|
||||||
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-opacity:1;display:inline" />
|
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:1;stroke-opacity:1" />
|
||||||
<text
|
<text
|
||||||
sodipodi:linespacing="125%"
|
sodipodi:linespacing="125%"
|
||||||
id="text5037-4-6-9-1-4"
|
id="text5037-4-6-9-1-4"
|
||||||
y="783.03412"
|
y="783.03412"
|
||||||
x="284.34656"
|
x="290.34656"
|
||||||
style="font-size:20.86613655px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Sans"
|
style="font-style:normal;font-weight:normal;font-size:20.86613655px;line-height:125%;font-family:Sans;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none"
|
||||||
xml:space="preserve"><tspan
|
xml:space="preserve"><tspan
|
||||||
id="tspan5184-3-5-2-1"
|
id="tspan5184-3-5-2-1"
|
||||||
style="font-size:20px;text-align:center;text-anchor:middle"
|
style="font-size:20px;text-align:center;text-anchor:middle"
|
||||||
y="783.03412"
|
y="783.03412"
|
||||||
x="284.34656"
|
x="290.34656"
|
||||||
sodipodi:role="line">ceilometer</tspan></text>
|
sodipodi:role="line">ceilometer</tspan></text>
|
||||||
<g
|
<g
|
||||||
transform="matrix(1.7775787,0,0,1.7775787,593.58186,304.14299)"
|
transform="matrix(1.7775787,0,0,1.7775787,599.58186,304.14299)"
|
||||||
id="g4982"
|
id="g4982"
|
||||||
style="display:inline">
|
style="display:inline">
|
||||||
<rect
|
<rect
|
||||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.562563;stroke-opacity:1;display:inline"
|
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.562563;stroke-opacity:1"
|
||||||
id="rect4267-4-7-7-3-3-1"
|
id="rect4267-4-7-7-3-3-1"
|
||||||
width="66.701637"
|
width="66.701637"
|
||||||
height="24.155943"
|
height="24.155943"
|
||||||
@@ -566,7 +618,7 @@
|
|||||||
y="253.36743" />
|
y="253.36743" />
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-size:11.73851585px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Sans"
|
style="font-style:normal;font-weight:normal;font-size:11.73851585px;line-height:125%;font-family:Sans;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none"
|
||||||
x="-100.86156"
|
x="-100.86156"
|
||||||
y="268.36258"
|
y="268.36258"
|
||||||
id="text5037-4-6-9-1-4-3"
|
id="text5037-4-6-9-1-4-3"
|
||||||
@@ -620,12 +672,6 @@
|
|||||||
style="font-size:11.2512598px;text-align:center;text-anchor:middle"
|
style="font-size:11.2512598px;text-align:center;text-anchor:middle"
|
||||||
id="tspan5022">drivers</tspan></text>
|
id="tspan5022">drivers</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path5110"
|
|
||||||
d="m 376.75141,726.9703 -57.95106,0"
|
|
||||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
|
|
||||||
<g
|
<g
|
||||||
transform="matrix(1.7775787,0,0,1.7775787,704.59677,780.35846)"
|
transform="matrix(1.7775787,0,0,1.7775787,704.59677,780.35846)"
|
||||||
id="g5267"
|
id="g5267"
|
||||||
@@ -863,8 +909,8 @@
|
|||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
inkscape:connector-curvature="0"
|
inkscape:connector-curvature="0"
|
||||||
id="path5110-9"
|
id="path5110-9"
|
||||||
d="m 472.18905,726.66568 221.85496,0"
|
d="m 472.18905,726.66568 331.45651,0"
|
||||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1.22230256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
inkscape:connector-curvature="0"
|
inkscape:connector-curvature="0"
|
||||||
@@ -907,8 +953,8 @@
|
|||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
inkscape:connector-curvature="0"
|
inkscape:connector-curvature="0"
|
||||||
id="path3284-4-2-3-4-6"
|
id="path3284-4-2-3-4-6"
|
||||||
d="m 540.57926,651.7922 179.16488,0"
|
d="m 543.75943,651.7922 280.63651,0"
|
||||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.99999999, 1.99999999;stroke-dashoffset:0;marker-start:url(#TriangleInL);display:inline" />
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1.25154257;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.50308524, 2.50308524;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#TriangleInL)" />
|
||||||
<rect
|
<rect
|
||||||
y="262.01205"
|
y="262.01205"
|
||||||
x="451.89563"
|
x="451.89563"
|
||||||
@@ -1052,8 +1098,8 @@
|
|||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
inkscape:connector-curvature="0"
|
inkscape:connector-curvature="0"
|
||||||
id="path5112-89"
|
id="path5112-89"
|
||||||
d="m 328.87061,655.34778 0,71.7093"
|
d="m 324.87061,655.34778 0,71.7093"
|
||||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
inkscape:connector-curvature="0"
|
inkscape:connector-curvature="0"
|
||||||
@@ -1178,7 +1224,7 @@
|
|||||||
sodipodi:role="line">extensions</tspan></text>
|
sodipodi:role="line">extensions</tspan></text>
|
||||||
<path
|
<path
|
||||||
transform="translate(68.397849,130.15566)"
|
transform="translate(68.397849,130.15566)"
|
||||||
d="m 519.41589,367.58817 c 0,4.01434 -2.01125,7.2686 -4.49224,7.2686 -2.481,0 -4.49225,-3.25426 -4.49225,-7.2686 0,-4.01434 2.01125,-7.26861 4.49225,-7.26861 2.48099,0 4.49224,3.25427 4.49224,7.26861 z"
|
d="m 519.41589,367.58817 a 4.4922457,7.2686057 0 0 1 -4.49224,7.2686 4.4922457,7.2686057 0 0 1 -4.49225,-7.2686 4.4922457,7.2686057 0 0 1 4.49225,-7.26861 4.4922457,7.2686057 0 0 1 4.49224,7.26861 z"
|
||||||
sodipodi:ry="7.2686057"
|
sodipodi:ry="7.2686057"
|
||||||
sodipodi:rx="4.4922457"
|
sodipodi:rx="4.4922457"
|
||||||
sodipodi:cy="367.58817"
|
sodipodi:cy="367.58817"
|
||||||
@@ -1188,7 +1234,7 @@
|
|||||||
sodipodi:type="arc" />
|
sodipodi:type="arc" />
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,397.30905,368.17877)"
|
transform="matrix(0.36538461,0,0,0.36538461,397.30905,368.17877)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1198,7 +1244,7 @@
|
|||||||
sodipodi:type="arc" />
|
sodipodi:type="arc" />
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,-27.122619,99.964199)"
|
transform="matrix(0.36538461,0,0,0.36538461,-27.122619,99.964199)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1214,7 +1260,7 @@
|
|||||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3.99999997, 1.99999998, 0.99999999, 1.99999998;stroke-dashoffset:0;marker-start:none;display:inline" />
|
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3.99999997, 1.99999998, 0.99999999, 1.99999998;stroke-dashoffset:0;marker-start:none;display:inline" />
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,396.74123,268.71562)"
|
transform="matrix(0.36538461,0,0,0.36538461,396.74123,268.71562)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1224,7 +1270,7 @@
|
|||||||
sodipodi:type="arc" />
|
sodipodi:type="arc" />
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,428.69747,559.36511)"
|
transform="matrix(0.36538461,0,0,0.36538461,428.69747,559.36511)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1234,7 +1280,7 @@
|
|||||||
sodipodi:type="arc" />
|
sodipodi:type="arc" />
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,531.88959,559.36511)"
|
transform="matrix(0.36538461,0,0,0.36538461,531.88959,559.36511)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1250,7 +1296,7 @@
|
|||||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.99999998, 1.99999998;stroke-dashoffset:0;marker-start:none;display:inline" />
|
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.99999998, 1.99999998;stroke-dashoffset:0;marker-start:none;display:inline" />
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,748.91653,525.25993)"
|
transform="matrix(0.36538461,0,0,0.36538461,748.91653,525.25993)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1260,7 +1306,7 @@
|
|||||||
sodipodi:type="arc" />
|
sodipodi:type="arc" />
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,748.91653,495.84628)"
|
transform="matrix(0.36538461,0,0,0.36538461,748.91653,495.84628)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1313,7 +1359,7 @@
|
|||||||
</g>
|
</g>
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,396.74122,268.71562)"
|
transform="matrix(0.36538461,0,0,0.36538461,396.74122,268.71562)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1323,7 +1369,7 @@
|
|||||||
sodipodi:type="arc" />
|
sodipodi:type="arc" />
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,-27.122619,74.87915)"
|
transform="matrix(0.36538461,0,0,0.36538461,-27.122619,74.87915)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1339,7 +1385,7 @@
|
|||||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3.99999997, 1.99999998, 0.99999999, 1.99999998;stroke-dashoffset:0;marker-start:url(#TriangleInL);display:inline" />
|
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3.99999997, 1.99999998, 0.99999999, 1.99999998;stroke-dashoffset:0;marker-start:url(#TriangleInL);display:inline" />
|
||||||
<path
|
<path
|
||||||
transform="matrix(0.36538461,0,0,0.36538461,422.9095,223.59883)"
|
transform="matrix(0.36538461,0,0,0.36538461,422.9095,223.59883)"
|
||||||
d="m 521.38126,368.43045 c 0,4.03162 -3.26828,7.2999 -7.2999,7.2999 -4.03162,0 -7.2999,-3.26828 -7.2999,-7.2999 0,-4.03162 3.26828,-7.2999 7.2999,-7.2999 4.03162,0 7.2999,3.26828 7.2999,7.2999 z"
|
d="m 521.38126,368.43045 a 7.2998991,7.2998991 0 0 1 -7.2999,7.2999 7.2998991,7.2998991 0 0 1 -7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,-7.2999 7.2998991,7.2998991 0 0 1 7.2999,7.2999 z"
|
||||||
sodipodi:ry="7.2998991"
|
sodipodi:ry="7.2998991"
|
||||||
sodipodi:rx="7.2998991"
|
sodipodi:rx="7.2998991"
|
||||||
sodipodi:cy="368.43045"
|
sodipodi:cy="368.43045"
|
||||||
@@ -1351,15 +1397,87 @@
|
|||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
inkscape:connector-curvature="0"
|
inkscape:connector-curvature="0"
|
||||||
id="path3284-4-2-3-40"
|
id="path3284-4-2-3-40"
|
||||||
d="m 319.30136,753.47677 0,-27.00021"
|
d="m 325.23661,753.47677 0,-27.00021"
|
||||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#EmptyTriangleInL);display:inline" />
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#EmptyTriangleInL)" />
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="cc"
|
sodipodi:nodetypes="cc"
|
||||||
inkscape:connector-curvature="0"
|
inkscape:connector-curvature="0"
|
||||||
id="path3284-4-2-3-8"
|
id="path3284-4-2-3-8"
|
||||||
d="m 376.2546,753.65849 0,-27.00021"
|
d="m 414.2546,753.65849 0,-27.00021"
|
||||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#EmptyTriangleInL);display:inline" />
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#EmptyTriangleInL)" />
|
||||||
|
<rect
|
||||||
|
y="754.5235"
|
||||||
|
x="102.92204"
|
||||||
|
height="42.939091"
|
||||||
|
width="118.56741"
|
||||||
|
id="rect4267-4-7-7-3-3-3"
|
||||||
|
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:1;stroke-opacity:1" />
|
||||||
|
<text
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text5037-4-6-9-1-4-6"
|
||||||
|
y="783.03412"
|
||||||
|
x="160.34656"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:20.86613655px;line-height:125%;font-family:Sans;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
id="tspan5184-3-5-2-1-7"
|
||||||
|
style="font-size:20px;text-align:center;text-anchor:middle"
|
||||||
|
y="783.03412"
|
||||||
|
x="160.34656"
|
||||||
|
sodipodi:role="line">gnocchi</tspan></text>
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3284-4-2-3-40-5"
|
||||||
|
d="m 191.30136,753.47677 0,-27.00021"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#EmptyTriangleInL-5)" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5110-9-6"
|
||||||
|
d="m 192.18905,726.66568 221.85496,0"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||||
|
<g
|
||||||
|
id="g4866-2-3"
|
||||||
|
style="display:inline"
|
||||||
|
transform="matrix(1.7775787,0,0,1.7775787,991.15946,596.08131)">
|
||||||
|
<rect
|
||||||
|
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.562563;stroke-opacity:1"
|
||||||
|
id="rect4267-4-7-7-6"
|
||||||
|
width="49.81258"
|
||||||
|
height="24.243191"
|
||||||
|
x="-116.67716"
|
||||||
|
y="88.977051" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:11.73851585px;line-height:125%;font-family:Sans;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none"
|
||||||
|
x="-91.899979"
|
||||||
|
y="104.01585"
|
||||||
|
id="text5037-4-6-9-7"
|
||||||
|
sodipodi:linespacing="125%"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="-91.899979"
|
||||||
|
y="104.01585"
|
||||||
|
style="font-size:11.2512598px;text-align:center;text-anchor:middle"
|
||||||
|
id="tspan5184-3-5-5">cinder</tspan></text>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3284-4-2-3-4-9-3"
|
||||||
|
d="m 824.37881,651.58554 0,102.98987"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.99999999, 1.99999999;stroke-dashoffset:0;stroke-opacity:1;marker-start:none" />
|
||||||
|
<circle
|
||||||
|
r="2.6672709"
|
||||||
|
cy="693.98395"
|
||||||
|
cx="823.72699"
|
||||||
|
id="path13407-89-5"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3284-4-2-3-7-9"
|
||||||
|
d="m 804.16781,752.35205 0,-26.2061"
|
||||||
|
style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#EmptyTriangleInL-12)" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 47 KiB |
@@ -43,7 +43,7 @@ Introduction
|
|||||||
|
|
||||||
glossary
|
glossary
|
||||||
architecture
|
architecture
|
||||||
dev/contributing
|
contributor/contributing
|
||||||
|
|
||||||
|
|
||||||
Getting Started
|
Getting Started
|
||||||
@@ -52,13 +52,7 @@ Getting Started
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
dev/environment
|
contributor/index
|
||||||
dev/devstack
|
|
||||||
deploy/configuration
|
|
||||||
deploy/conf-files
|
|
||||||
dev/notifications
|
|
||||||
dev/testing
|
|
||||||
dev/rally_link
|
|
||||||
|
|
||||||
API References
|
API References
|
||||||
--------------
|
--------------
|
||||||
@@ -66,7 +60,7 @@ API References
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
webapi/v1
|
api/index
|
||||||
|
|
||||||
Plugins
|
Plugins
|
||||||
-------
|
-------
|
||||||
@@ -74,30 +68,38 @@ Plugins
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
dev/plugin/base-setup
|
contributor/plugin/index
|
||||||
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
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
install/index
|
||||||
|
|
||||||
|
Watcher Configuration Options
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
configuration/index
|
||||||
|
|
||||||
Admin Guide
|
Admin Guide
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Introduction
|
.. toctree::
|
||||||
------------
|
:maxdepth: 2
|
||||||
|
|
||||||
|
admin/index
|
||||||
|
|
||||||
|
User Guide
|
||||||
|
==========
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 2
|
||||||
|
|
||||||
deploy/installation
|
user/index
|
||||||
deploy/user-guide
|
|
||||||
deploy/policy
|
|
||||||
deploy/gmr
|
|
||||||
strategies/strategies
|
|
||||||
|
|
||||||
Watcher Manual Pages
|
Watcher Manual Pages
|
||||||
====================
|
====================
|
||||||
@@ -106,7 +108,7 @@ Watcher Manual Pages
|
|||||||
:glob:
|
:glob:
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
man/*
|
man/index
|
||||||
|
|
||||||
.. # NOTE(mriedem): This is the section where we hide things that we don't
|
.. # 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
|
# actually want in the table of contents but sphinx build would fail if
|
||||||
|
|||||||
81
doc/source/install/common_configure.rst
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
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_clients_auth]` section,
|
||||||
|
configure the identity service access to interact with other OpenStack project clients.
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[watcher_clients_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 `[api]` section, configure host option.
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[api]
|
||||||
|
...
|
||||||
|
host = controller
|
||||||
|
|
||||||
|
Replace controller with the IP address of the management network interface on your controller node, typically 10.0.0.11 for the first node in the example architecture.
|
||||||
|
|
||||||
|
* 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 --config-file /etc/watcher/watcher.conf upgrade"
|
||||||
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
@@ -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
@@ -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/queens/install/>`_.
|
||||||
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
@@ -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
|
||||||
19
doc/source/install/install.rst
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
.. _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-rdo.rst
|
||||||
|
install-ubuntu.rst
|
||||||
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/queens/install/.
|
||||||
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
@@ -0,0 +1,8 @@
|
|||||||
|
.. toctree::
|
||||||
|
:glob:
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
watcher-api
|
||||||
|
watcher-applier
|
||||||
|
watcher-db-manage
|
||||||
|
watcher-decision-engine
|
||||||
@@ -5,7 +5,7 @@ Basic Offline Server Consolidation
|
|||||||
Synopsis
|
Synopsis
|
||||||
--------
|
--------
|
||||||
|
|
||||||
**display name**: ``basic``
|
**display name**: ``Basic offline consolidation``
|
||||||
|
|
||||||
**goal**: ``server_consolidation``
|
**goal**: ``server_consolidation``
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ metric service name plugins comment
|
|||||||
``cpu_util`` ceilometer_ none
|
``cpu_util`` ceilometer_ none
|
||||||
============================ ============ ======= =======
|
============================ ============ ======= =======
|
||||||
|
|
||||||
.. _ceilometer: http://docs.openstack.org/admin-guide/telemetry-measurements.html#openstack-compute
|
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute
|
||||||
|
|
||||||
Cluster data model
|
Cluster data model
|
||||||
******************
|
******************
|
||||||
@@ -57,7 +57,7 @@ Planner
|
|||||||
|
|
||||||
Default Watcher's planner:
|
Default Watcher's planner:
|
||||||
|
|
||||||
.. watcher-term:: watcher.decision_engine.planner.default.DefaultPlanner
|
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
-------------
|
-------------
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Outlet Temperature Based Strategy
|
|||||||
Synopsis
|
Synopsis
|
||||||
--------
|
--------
|
||||||
|
|
||||||
**display name**: ``outlet_temperature``
|
**display name**: ``Outlet temperature based strategy``
|
||||||
|
|
||||||
**goal**: ``thermal_optimization``
|
**goal**: ``thermal_optimization``
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ metric service name plugins comment
|
|||||||
``hardware.ipmi.node.outlet_temperature`` ceilometer_ IPMI
|
``hardware.ipmi.node.outlet_temperature`` ceilometer_ IPMI
|
||||||
========================================= ============ ======= =======
|
========================================= ============ ======= =======
|
||||||
|
|
||||||
.. _ceilometer: http://docs.openstack.org/admin-guide/telemetry-measurements.html#ipmi-based-meters
|
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#ipmi-based-meters
|
||||||
|
|
||||||
Cluster data model
|
Cluster data model
|
||||||
******************
|
******************
|
||||||
@@ -61,7 +61,7 @@ Planner
|
|||||||
|
|
||||||
Default Watcher's planner:
|
Default Watcher's planner:
|
||||||
|
|
||||||
.. watcher-term:: watcher.decision_engine.planner.default.DefaultPlanner
|
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
-------------
|
-------------
|
||||||
@@ -72,6 +72,9 @@ Strategy parameter is:
|
|||||||
parameter type default Value description
|
parameter type default Value description
|
||||||
============== ====== ============= ====================================
|
============== ====== ============= ====================================
|
||||||
``threshold`` Number 35.0 Temperature threshold for migration
|
``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
|
Efficacy Indicator
|
||||||
|
|||||||
100
doc/source/strategies/saving_energy.rst
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
======================
|
||||||
|
Saving Energy Strategy
|
||||||
|
======================
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
|
||||||
|
**display name**: ``Saving Energy Strategy``
|
||||||
|
|
||||||
|
**goal**: ``saving_energy``
|
||||||
|
|
||||||
|
.. watcher-term:: watcher.decision_engine.strategy.strategies.saving_energy
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
This feature will use Ironic to do the power on/off actions, therefore
|
||||||
|
this feature requires that the ironic component is configured.
|
||||||
|
And the compute node should be managed by Ironic.
|
||||||
|
|
||||||
|
Ironic installation: https://docs.openstack.org/ironic/latest/install/index.html
|
||||||
|
|
||||||
|
Cluster data model
|
||||||
|
******************
|
||||||
|
|
||||||
|
Default Watcher's Compute cluster data model:
|
||||||
|
|
||||||
|
.. watcher-term:: watcher.decision_engine.model.collector.nova.NovaClusterDataModelCollector
|
||||||
|
|
||||||
|
Actions
|
||||||
|
*******
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: 30 30
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - action
|
||||||
|
- description
|
||||||
|
* - ``change_node_power_state``
|
||||||
|
- .. watcher-term:: watcher.applier.actions.change_node_power_state.ChangeNodePowerState
|
||||||
|
|
||||||
|
Planner
|
||||||
|
*******
|
||||||
|
|
||||||
|
Default Watcher's planner:
|
||||||
|
|
||||||
|
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
|
||||||
|
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Strategy parameter is:
|
||||||
|
|
||||||
|
====================== ====== ======= ======================================
|
||||||
|
parameter type default description
|
||||||
|
Value
|
||||||
|
====================== ====== ======= ======================================
|
||||||
|
``free_used_percent`` Number 10.0 a rational number, which describes the
|
||||||
|
the quotient of
|
||||||
|
min_free_hosts_num/nodes_with_VMs_num
|
||||||
|
``min_free_hosts_num`` Int 1 an int number describes minimum free
|
||||||
|
compute nodes
|
||||||
|
====================== ====== ======= ======================================
|
||||||
|
|
||||||
|
|
||||||
|
Efficacy Indicator
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Energy saving strategy efficacy indicator is unclassified.
|
||||||
|
https://github.com/openstack/watcher/blob/master/watcher/decision_engine/goal/goals.py#L215-L218
|
||||||
|
|
||||||
|
Algorithm
|
||||||
|
---------
|
||||||
|
|
||||||
|
For more information on the Energy Saving Strategy please refer to:http://specs.openstack.org/openstack/watcher-specs/specs/pike/implemented/energy-saving-strategy.html
|
||||||
|
|
||||||
|
How to use it ?
|
||||||
|
---------------
|
||||||
|
step1: Add compute nodes info into ironic node management
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
$ ironic node-create -d pxe_ipmitool -i ipmi_address=10.43.200.184 \
|
||||||
|
ipmi_username=root -i ipmi_password=nomoresecret -e compute_node_id=3
|
||||||
|
|
||||||
|
step 2: Create audit to do optimization
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
$ openstack optimize audittemplate create \
|
||||||
|
at1 saving_energy --strategy saving_energy
|
||||||
|
|
||||||
|
$ openstack optimize audit create -a at1
|
||||||
|
|
||||||
|
External Links
|
||||||
|
--------------
|
||||||
|
|
||||||
|
*Spec URL*
|
||||||
|
http://specs.openstack.org/openstack/watcher-specs/specs/pike/implemented/energy-saving-strategy.html
|
||||||
@@ -33,7 +33,7 @@ power ceilometer_ kwapi_ one point every 60s
|
|||||||
======================= ============ ======= =======
|
======================= ============ ======= =======
|
||||||
|
|
||||||
|
|
||||||
.. _ceilometer: http://docs.openstack.org/admin-guide/telemetry-measurements.html#openstack-compute
|
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute
|
||||||
.. _monasca: https://github.com/openstack/monasca-agent/blob/master/docs/Libvirt.md
|
.. _monasca: https://github.com/openstack/monasca-agent/blob/master/docs/Libvirt.md
|
||||||
.. _kwapi: https://kwapi.readthedocs.io/en/latest/index.html
|
.. _kwapi: https://kwapi.readthedocs.io/en/latest/index.html
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Uniform Airflow Migration Strategy
|
|||||||
Synopsis
|
Synopsis
|
||||||
--------
|
--------
|
||||||
|
|
||||||
**display name**: ``uniform_airflow``
|
**display name**: ``Uniform airflow migration strategy``
|
||||||
|
|
||||||
**goal**: ``airflow_optimization``
|
**goal**: ``airflow_optimization``
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ Planner
|
|||||||
|
|
||||||
Default Watcher's planner:
|
Default Watcher's planner:
|
||||||
|
|
||||||
.. watcher-term:: watcher.decision_engine.planner.default.DefaultPlanner
|
.. watcher-term:: watcher.decision_engine.planner.weight.WeightPlanner
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
-------------
|
-------------
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ VM Workload Consolidation Strategy
|
|||||||
Synopsis
|
Synopsis
|
||||||
--------
|
--------
|
||||||
|
|
||||||
**display name**: ``vm_workload_consolidation``
|
**display name**: ``VM Workload Consolidation Strategy``
|
||||||
|
|
||||||
**goal**: ``vm_consolidation``
|
**goal**: ``vm_consolidation``
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ The *vm_workload_consolidation* strategy requires the following metrics:
|
|||||||
============================ ============ ======= =======
|
============================ ============ ======= =======
|
||||||
metric service name plugins comment
|
metric service name plugins comment
|
||||||
============================ ============ ======= =======
|
============================ ============ ======= =======
|
||||||
``memory`` ceilometer_ none
|
``memory`` ceilometer_ none
|
||||||
``disk.root.size`` ceilometer_ none
|
``disk.root.size`` ceilometer_ none
|
||||||
============================ ============ ======= =======
|
============================ ============ ======= =======
|
||||||
|
|
||||||
@@ -32,11 +32,11 @@ the strategy if available:
|
|||||||
============================ ============ ======= =======
|
============================ ============ ======= =======
|
||||||
metric service name plugins comment
|
metric service name plugins comment
|
||||||
============================ ============ ======= =======
|
============================ ============ ======= =======
|
||||||
``memory.usage`` ceilometer_ none
|
``memory.resident`` ceilometer_ none
|
||||||
``cpu_util`` ceilometer_ none
|
``cpu_util`` ceilometer_ none
|
||||||
============================ ============ ======= =======
|
============================ ============ ======= =======
|
||||||
|
|
||||||
.. _ceilometer: http://docs.openstack.org/admin-guide/telemetry-measurements.html#openstack-compute
|
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute
|
||||||
|
|
||||||
Cluster data model
|
Cluster data model
|
||||||
******************
|
******************
|
||||||
@@ -67,7 +67,21 @@ Planner
|
|||||||
|
|
||||||
Default Watcher's 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
|
Efficacy Indicator
|
||||||
|
|||||||