mirror of
https://github.com/ansible-middleware/keycloak.git
synced 2026-06-13 12:05:54 +00:00
Compare commits
818 Commits
v0.1.8
...
rhbk_versi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6600082294 | ||
|
|
5cb555d6c2 | ||
|
|
3ab0f2b259 | ||
|
|
9394e2598f | ||
|
|
123906d739 | ||
|
|
bdc090de64 | ||
|
|
d4a92c9f4f | ||
|
|
926ea0192d | ||
|
|
88c825c997 | ||
|
|
0e3a9e3741 | ||
|
|
7495385ccb | ||
|
|
494a522ab2 | ||
|
|
64e7fa3129 | ||
|
|
15a0c6ee46 | ||
|
|
e4d1a79d1f | ||
|
|
f4588dbbdf | ||
|
|
a9a771c6bc | ||
|
|
f00c714798 | ||
|
|
50750ef125 | ||
|
|
b631b07cae | ||
|
|
195e104f5e | ||
|
|
047ddcaa92 | ||
|
|
0b2f2786dd | ||
|
|
4cc360052e | ||
|
|
c6e3337778 | ||
|
|
d1b295f551 | ||
|
|
5e13f4ea50 | ||
|
|
06cf664b08 | ||
|
|
e5690d7513 | ||
|
|
fb76736441 | ||
|
|
6d00dcff48 | ||
|
|
eaf9964aab | ||
|
|
180f075a9f | ||
|
|
1013a05f8c | ||
|
|
22f1ce516d | ||
|
|
7be872cc48 | ||
|
|
55248de9ae | ||
|
|
c6d4dfb8bb | ||
|
|
c8f4065eb5 | ||
|
|
06e096ac50 | ||
|
|
c6189bfc51 | ||
|
|
03fffaaf5f | ||
|
|
a337a1d70c | ||
|
|
28168a9a4f | ||
|
|
64469b6fac | ||
|
|
75e308b710 | ||
|
|
9cdf24ce28 | ||
|
|
a00a602c3c | ||
|
|
a5a75c6d46 | ||
|
|
7212e572cd | ||
|
|
bc669ce0cd | ||
|
|
3c097ebf09 | ||
|
|
9562bf727e | ||
|
|
6c3e327294 | ||
|
|
be0c8a4ae3 | ||
|
|
6bf10cc3e9 | ||
|
|
d0161dbeef | ||
|
|
bf5c805fcd | ||
|
|
2b1c07d87e | ||
|
|
f1305e5aac | ||
|
|
412e17e9ea | ||
|
|
fa87c004e3 | ||
|
|
6c9bddbd61 | ||
|
|
4602d254cf | ||
|
|
8b2ef22023 | ||
|
|
66228c3a13 | ||
|
|
556d155533 | ||
|
|
07063353b8 | ||
|
|
c1bf9727f9 | ||
|
|
f79fd227eb | ||
|
|
19564987ca | ||
|
|
1ff25325a7 | ||
|
|
0099f1cf07 | ||
|
|
725ec8e37b | ||
|
|
bbe568baa5 | ||
|
|
dcd448443f | ||
|
|
3780a4e3c0 | ||
|
|
e60a5b7cf6 | ||
|
|
6143ae25e2 | ||
|
|
ef6d8890fb | ||
|
|
55185a1439 | ||
|
|
bb64b97e43 | ||
|
|
a9c9e05569 | ||
|
|
8b27cb0706 | ||
|
|
41127504dc | ||
|
|
bcc961999c | ||
|
|
b8907d765d | ||
|
|
5c5e84b63e | ||
|
|
3d4bd734f1 | ||
|
|
3de96a6666 | ||
|
|
de0ea02272 | ||
|
|
b6e585f503 | ||
|
|
18de37706f | ||
|
|
b569e4e713 | ||
|
|
919d55f806 | ||
|
|
476bc0ec0b | ||
|
|
2954bf81e8 | ||
|
|
0403939c03 | ||
|
|
88e4ea8d99 | ||
|
|
0a5fc3ae25 | ||
|
|
f4a1798f26 | ||
|
|
d23ae39c25 | ||
|
|
8f95bcb9e6 | ||
|
|
f8c75de5d5 | ||
|
|
8093b1af2a | ||
|
|
a70aece0d9 | ||
|
|
d427a6b721 | ||
|
|
c614af127e | ||
|
|
0936d415c7 | ||
|
|
a120b1c9b5 | ||
|
|
5cd400b053 | ||
|
|
e0c4b1e1ff | ||
|
|
88be789260 | ||
|
|
868dac4f72 | ||
|
|
c45f7c0d60 | ||
|
|
77c5b893b1 | ||
|
|
9974ab2ee1 | ||
|
|
b8a2ebc699 | ||
|
|
5beb5dcda4 | ||
|
|
d97044523d | ||
|
|
2abc580041 | ||
|
|
2379e10091 | ||
|
|
c86dff66ba | ||
|
|
f750e93d02 | ||
|
|
1a4590b0b8 | ||
|
|
5e9535c866 | ||
|
|
b8028d376a | ||
|
|
20797e4cad | ||
|
|
70d61ce8de | ||
|
|
69a947c0b6 | ||
|
|
c7ce7be6c4 | ||
|
|
e9061b29ef | ||
|
|
c92bf19720 | ||
|
|
1ca0b30a81 | ||
|
|
7738e0feb1 | ||
|
|
671cf4eb53 | ||
|
|
f146eb5fda | ||
|
|
a10bc95bfc | ||
|
|
314e2f26b2 | ||
|
|
f628b84fb0 | ||
|
|
ac0ceca35f | ||
|
|
744766fe3b | ||
|
|
7f980c44d2 | ||
|
|
532dc12a60 | ||
|
|
173a85638f | ||
|
|
81f019f8b5 | ||
|
|
5db96afa56 | ||
|
|
fa36721207 | ||
|
|
86284b12c2 | ||
|
|
b3e93dd89b | ||
|
|
e029e1c2fd | ||
|
|
d0f19b59dc | ||
|
|
213449ec58 | ||
|
|
277e1336ee | ||
|
|
58233549a7 | ||
|
|
0c58ae48ff | ||
|
|
bf0bd9e1da | ||
|
|
5d15d37890 | ||
|
|
910a2aa5d4 | ||
|
|
5f534ca566 | ||
|
|
692fb59797 | ||
|
|
d1859aaff2 | ||
|
|
0d0e52f9ff | ||
|
|
68a0f88423 | ||
|
|
333d55ad73 | ||
|
|
f6fdae4aa8 | ||
|
|
b8c11f3ca8 | ||
|
|
1279937bb0 | ||
|
|
c57753f608 | ||
|
|
be19ec1289 | ||
|
|
5f1b43f37b | ||
|
|
c6bb815979 | ||
|
|
ac4511bea9 | ||
|
|
c8021f3102 | ||
|
|
0386254073 | ||
|
|
b2edea8777 | ||
|
|
fc0ee5a896 | ||
|
|
eb66d4a412 | ||
|
|
f170257205 | ||
|
|
3f4617c32c | ||
|
|
34caf6a490 | ||
|
|
fa6ac99b34 | ||
|
|
a35c963a65 | ||
|
|
11aab0f5e2 | ||
|
|
fa2319d5da | ||
|
|
7c520dcdd2 | ||
|
|
35b3b090f6 | ||
|
|
94f1b8b355 | ||
|
|
e40f554936 | ||
|
|
64e2a95685 | ||
|
|
c6fac7bb70 | ||
|
|
5f059e8d63 | ||
|
|
e927ddbb6c | ||
|
|
a82bdfbbb6 | ||
|
|
c850484e67 | ||
|
|
a4deaa005a | ||
|
|
4fb44091d6 | ||
|
|
883127d280 | ||
|
|
e69e5b7ba4 | ||
|
|
bf1871182b | ||
|
|
adfee5f6e1 | ||
|
|
ef53ca545a | ||
|
|
2092c2d23a | ||
|
|
8ca73364e9 | ||
|
|
df1939e387 | ||
|
|
0de0b654ee | ||
|
|
62cbaa3596 | ||
|
|
92c24e49e7 | ||
|
|
cc012767a4 | ||
|
|
4d31117c16 | ||
|
|
0fd8eb52d2 | ||
|
|
6f2ed4d53b | ||
|
|
1519d46f0e | ||
|
|
4b21569f36 | ||
|
|
f63b20b9d4 | ||
|
|
fdcf1b2ed2 | ||
|
|
c22389c86f | ||
|
|
2d573c2b62 | ||
|
|
1e9a669dea | ||
|
|
db831fa339 | ||
|
|
d57be1f188 | ||
|
|
5adb28dcd8 | ||
|
|
477ce5eaa3 | ||
|
|
d2ece93c12 | ||
|
|
1a23350a8f | ||
|
|
26316ddc50 | ||
|
|
6d01ffbb77 | ||
|
|
d87c8ca8ac | ||
|
|
d8e9620a8a | ||
|
|
4b902adc8d | ||
|
|
1b69191a6e | ||
|
|
6682853a2d | ||
|
|
9f4623b05a | ||
|
|
599ce0179c | ||
|
|
8f14be37d7 | ||
|
|
3076c3d5ce | ||
|
|
6610a310ff | ||
|
|
fcf629d05e | ||
|
|
4bbc8e0256 | ||
|
|
4c96cbe7f6 | ||
|
|
22f5ad902f | ||
|
|
3c22417674 | ||
|
|
cd36eacb07 | ||
|
|
a019823871 | ||
|
|
3863508df5 | ||
|
|
1115ee409a | ||
|
|
b497e946cc | ||
|
|
5067c03201 | ||
|
|
a45b18dc85 | ||
|
|
70834ccf13 | ||
|
|
2a7395c444 | ||
|
|
4da0e83ae9 | ||
|
|
b427cb8a24 | ||
|
|
fa39e9b824 | ||
|
|
320a5f0d9a | ||
|
|
7141e1c9b2 | ||
|
|
9bc1ae69e9 | ||
|
|
bfbbacc72b | ||
|
|
feec4d9f8b | ||
|
|
ba127153ff | ||
|
|
b14d75dfab | ||
|
|
1d6a6eb7ee | ||
|
|
1ab3ebc2a4 | ||
|
|
d16c23faf9 | ||
|
|
978494524f | ||
|
|
1a73c39a91 | ||
|
|
9e6a6f6076 | ||
|
|
55f6881b2f | ||
|
|
41cbcc41e8 | ||
|
|
c2904bf20d | ||
|
|
e76b33e1db | ||
|
|
a7b9f0ef97 | ||
|
|
eafc4586d6 | ||
|
|
8493adc5c8 | ||
|
|
43b9ffcb64 | ||
|
|
a33393a477 | ||
|
|
278a70d627 | ||
|
|
6967385c7f | ||
|
|
ac23e04d6a | ||
|
|
4c056d886e | ||
|
|
213a9a0766 | ||
|
|
2925ea8cf1 | ||
|
|
82498ab3f5 | ||
|
|
16accd5e30 | ||
|
|
04bb465992 | ||
|
|
b978e8bb88 | ||
|
|
289b4767e0 | ||
|
|
9a961f743b | ||
|
|
b8cba487ac | ||
|
|
ff198bcd3e | ||
|
|
d06dcea998 | ||
|
|
89db3fa36f | ||
|
|
cd8d61afc3 | ||
|
|
47e6644fdd | ||
|
|
3e28b3f4f7 | ||
|
|
f7bcac79d0 | ||
|
|
10057262bc | ||
|
|
5808d055ae | ||
|
|
8060dd7fb8 | ||
|
|
4f8ed5194c | ||
|
|
462389cf0f | ||
|
|
903938ca16 | ||
|
|
74636e8629 | ||
|
|
6706fd9bf5 | ||
|
|
e991bd32c8 | ||
|
|
d469d389f3 | ||
|
|
c38642e0cd | ||
|
|
0ee29eb483 | ||
|
|
60ca798e1a | ||
|
|
921364b451 | ||
|
|
50d189ee14 | ||
|
|
5b459f3dde | ||
|
|
f0318b2ecf | ||
|
|
1f910bd400 | ||
|
|
d17c364257 | ||
|
|
1ff6f237a9 | ||
|
|
0c0c4e19ea | ||
|
|
7bedb08f6e | ||
|
|
5464a01a62 | ||
|
|
2cf3e2470d | ||
|
|
ad6021c29a | ||
|
|
05ebd90121 | ||
|
|
1229a0b023 | ||
|
|
4ba9014edb | ||
|
|
ea57f8b689 | ||
|
|
3fbae4882e | ||
|
|
27717d7b4e | ||
|
|
4aa862101c | ||
|
|
8e2f3eb77f | ||
|
|
10d4cb8db7 | ||
|
|
8f8de33350 | ||
|
|
7dceb7f819 | ||
|
|
c2e456e1d5 | ||
|
|
4421375dd5 | ||
|
|
2bbf7d9cc4 | ||
|
|
467cfda0f7 | ||
|
|
e17505fe42 | ||
|
|
0e4df659f4 | ||
|
|
3400b64b10 | ||
|
|
3b1534d700 | ||
|
|
dd6171f024 | ||
|
|
c1da6ea38d | ||
|
|
56e4a43cf9 | ||
|
|
7a0a99a31c | ||
|
|
fdce0bd922 | ||
|
|
b9d9874a00 | ||
|
|
1cecf51f37 | ||
|
|
0cea03dfc0 | ||
|
|
0c079740e1 | ||
|
|
96804d8086 | ||
|
|
a875166fe0 | ||
|
|
a97c349f41 | ||
|
|
a59a1fb8dd | ||
|
|
d74820190f | ||
|
|
6541b5e386 | ||
|
|
1e1665adb0 | ||
|
|
33a839fec6 | ||
|
|
d97ddbde3c | ||
|
|
7f021a849e | ||
|
|
167bf512c5 | ||
|
|
beee25dec2 | ||
|
|
5bd39a0d0e | ||
|
|
7324f48e8d | ||
|
|
b3ca517583 | ||
|
|
b1848046dc | ||
|
|
983a1fb8f2 | ||
|
|
d4fb20b230 | ||
|
|
f7bef0a956 | ||
|
|
f62a97709a | ||
|
|
9593752e62 | ||
|
|
d6c29ed4fc | ||
|
|
df81dc5497 | ||
|
|
4adab64dc0 | ||
|
|
e0d4920a49 | ||
|
|
c2009a0a12 | ||
|
|
0c5047bcc1 | ||
|
|
63f83d7744 | ||
|
|
64fa8bb788 | ||
|
|
688ec956fc | ||
|
|
e866d1f4e4 | ||
|
|
2985f808ea | ||
|
|
30309582f3 | ||
|
|
40229631e6 | ||
|
|
8adc018cb3 | ||
|
|
053d0f9873 | ||
|
|
eb80ed0bd4 | ||
|
|
d138b4b2ff | ||
|
|
922e4c10f5 | ||
|
|
313bd8452a | ||
|
|
b1b31427d5 | ||
|
|
b057f0297a | ||
|
|
bfd9db6703 | ||
|
|
1d5ce87c16 | ||
|
|
83bcb6712a | ||
|
|
dab388d744 | ||
|
|
ed6dbd60fb | ||
|
|
db19fd5d19 | ||
|
|
473fb212c3 | ||
|
|
98b82ccb4f | ||
|
|
0fbf454279 | ||
|
|
d469d5df8b | ||
|
|
a23bf4c540 | ||
|
|
ac0b421456 | ||
|
|
5b8fcb67dc | ||
|
|
acdee7fa63 | ||
|
|
86576de6e8 | ||
|
|
89944a6cd1 | ||
|
|
33e6d428b5 | ||
|
|
f365351abf | ||
|
|
75899dfa77 | ||
|
|
593c4df861 | ||
|
|
4a72e3818c | ||
|
|
72ca9f5dfa | ||
|
|
842e61c43e | ||
|
|
1728b20cd3 | ||
|
|
c01ffed113 | ||
|
|
fea7ae0c6f | ||
|
|
94530640c1 | ||
|
|
d6f020ab44 | ||
|
|
55c02d7fc5 | ||
|
|
5e8e8c67e8 | ||
|
|
88935abb62 | ||
|
|
3a1d9099a7 | ||
|
|
a439ccab5e | ||
|
|
e086ee8d29 | ||
|
|
2841c7a951 | ||
|
|
d947e85745 | ||
|
|
143084d726 | ||
|
|
23bda1b4c5 | ||
|
|
efc3e547fe | ||
|
|
8af5d6e556 | ||
|
|
a0f6a4931f | ||
|
|
49c5071733 | ||
|
|
7a1eeec6b6 | ||
|
|
69bd5b6ca8 | ||
|
|
cee02cfd36 | ||
|
|
ea086e8a62 | ||
|
|
24787e4607 | ||
|
|
0e510c093a | ||
|
|
880d70ffb9 | ||
|
|
c8f968a587 | ||
|
|
8eb5185287 | ||
|
|
316cde4759 | ||
|
|
92639e40cb | ||
|
|
027ac1a78e | ||
|
|
5543217c6a | ||
|
|
61730b981b | ||
|
|
03175e283b | ||
|
|
62e5380d38 | ||
|
|
a538828f0d | ||
|
|
12147b4769 | ||
|
|
cad87557d6 | ||
|
|
363c5d9f9e | ||
|
|
19a2013fa8 | ||
|
|
b819c98ab3 | ||
|
|
9ddd6d7d5e | ||
|
|
6f26fa3da4 | ||
|
|
6970236201 | ||
|
|
e5f0a3efe1 | ||
|
|
41c1306602 | ||
|
|
c67b301f97 | ||
|
|
d945c51172 | ||
|
|
d6c57a17a8 | ||
|
|
bf1cb3695e | ||
|
|
307eee771f | ||
|
|
e842462a22 | ||
|
|
0f7bbc7ef9 | ||
|
|
00e6cb6b0e | ||
|
|
dded412bd0 | ||
|
|
5b70d3db2a | ||
|
|
e3ce4bd574 | ||
|
|
af0dc3c5f1 | ||
|
|
f3104285bc | ||
|
|
cb25c28bb8 | ||
|
|
3bb32ed075 | ||
|
|
80e4df8dce | ||
|
|
194101f010 | ||
|
|
f0f90b8930 | ||
|
|
38ff519624 | ||
|
|
9c361c9628 | ||
|
|
9a46b455f6 | ||
|
|
aa7902b9c3 | ||
|
|
0f17e09731 | ||
|
|
942b5fce0f | ||
|
|
bef20b6a57 | ||
|
|
d673fcf48a | ||
|
|
b72460e464 | ||
|
|
6c65fadf31 | ||
|
|
d12f62b89d | ||
|
|
7bb9647d0d | ||
|
|
0199e554b5 | ||
|
|
276444ce0e | ||
|
|
40c015d3e1 | ||
|
|
df7fab8f41 | ||
|
|
6330f08b28 | ||
|
|
5c8d7d9554 | ||
|
|
2513ac2c43 | ||
|
|
6e6bf2ff71 | ||
|
|
11621516e3 | ||
|
|
7c05ee5239 | ||
|
|
5251826477 | ||
|
|
0783000849 | ||
|
|
ca2dbe78c2 | ||
|
|
52d9286ea3 | ||
|
|
c8ebbe72d2 | ||
|
|
91ec411699 | ||
|
|
07b1c514bb | ||
|
|
345c50fb85 | ||
|
|
db0aafd465 | ||
|
|
b950cdb8b4 | ||
|
|
5b01123846 | ||
|
|
84d6e7baca | ||
|
|
ea735ea79e | ||
|
|
9db1cbd564 | ||
|
|
7933592725 | ||
|
|
3170af8b2b | ||
|
|
f400a5bbf8 | ||
|
|
5385fbb8e9 | ||
|
|
7fea211639 | ||
|
|
8738240a24 | ||
|
|
f195d164d1 | ||
|
|
7c4d420fea | ||
|
|
d45071bf58 | ||
|
|
10876ba615 | ||
|
|
f3815403c8 | ||
|
|
18d686b43a | ||
|
|
26a9249d07 | ||
|
|
fae3079751 | ||
|
|
a82e654cc4 | ||
|
|
cebec9c717 | ||
|
|
ad59cd8cb3 | ||
|
|
926353f395 | ||
|
|
fed86ac0c3 | ||
|
|
5f1f8b5762 | ||
|
|
bab3069712 | ||
|
|
fc6e00974d | ||
|
|
83525dbed0 | ||
|
|
7ec695ee15 | ||
|
|
14e7b402b7 | ||
|
|
832432b86c | ||
|
|
8f697f6a53 | ||
|
|
1dd579a6d1 | ||
|
|
3340428194 | ||
|
|
18e60daa93 | ||
|
|
874215a592 | ||
|
|
97bea7ba39 | ||
|
|
e99a0db174 | ||
|
|
3b03c54fed | ||
|
|
ced4ce7828 | ||
|
|
6986190159 | ||
|
|
db480d0bc9 | ||
|
|
bc4cb5c52a | ||
|
|
8f042d3e29 | ||
|
|
24eaacc1ac | ||
|
|
623db426e0 | ||
|
|
b77c166945 | ||
|
|
b7eef6a720 | ||
|
|
203e6c06ac | ||
|
|
aaae1d1129 | ||
|
|
cca20a067d | ||
|
|
2be35f9a67 | ||
|
|
19f1750a33 | ||
|
|
c3d8bbc94e | ||
|
|
c4b4be3c3b | ||
|
|
98e1633c43 | ||
|
|
fd375a141d | ||
|
|
0cf7b3ac49 | ||
|
|
370d424b24 | ||
|
|
01fd2cc4fd | ||
|
|
7471e07921 | ||
|
|
e8e0f6718b | ||
|
|
e4811221be | ||
|
|
6cb4aac556 | ||
|
|
aad373a8e9 | ||
|
|
fd0a4e4492 | ||
|
|
706677910b | ||
|
|
a3bffe9401 | ||
|
|
f566917bc2 | ||
|
|
44ad3b8e6d | ||
|
|
1a450ea1d7 | ||
|
|
b0a01a8e46 | ||
|
|
020bc86955 | ||
|
|
d72d46c945 | ||
|
|
c7d2bdcee3 | ||
|
|
43d978370d | ||
|
|
3d37def38d | ||
|
|
8d16e241c1 | ||
|
|
6ac0c18842 | ||
|
|
6334daf244 | ||
|
|
87ad97d57f | ||
|
|
242b1cea0a | ||
|
|
c0b72b6890 | ||
|
|
1cfa229a5f | ||
|
|
f013a99832 | ||
|
|
6bfe046f5e | ||
|
|
526f64e5eb | ||
|
|
a2c17f545e | ||
|
|
40c29d07b8 | ||
|
|
91a18bf571 | ||
|
|
ecb6cbb9bf | ||
|
|
05dccdaf3b | ||
|
|
398c3c478e | ||
|
|
ed24ca637a | ||
|
|
23ce09d595 | ||
|
|
59b69a6592 | ||
|
|
bf89b1895a | ||
|
|
2ce7104077 | ||
|
|
d438648e39 | ||
|
|
49566455d6 | ||
|
|
1f2a88982d | ||
|
|
a554736246 | ||
|
|
7bbe5ae386 | ||
|
|
7c9cc7ce36 | ||
|
|
ce18c91b67 | ||
|
|
d15324c1c8 | ||
|
|
527d3eb264 | ||
|
|
ccf773057b | ||
|
|
e530ccdc31 | ||
|
|
6852871aeb | ||
|
|
68bcff36f6 | ||
|
|
a7c9304c68 | ||
|
|
6e9a17bbf5 | ||
|
|
0052025917 | ||
|
|
7050dafcbd | ||
|
|
65e4b3b813 | ||
|
|
00ae087732 | ||
|
|
e15ebd3233 | ||
|
|
d27d15efa9 | ||
|
|
41eed509ea | ||
|
|
0d2624cfff | ||
|
|
f980d4d1e1 | ||
|
|
2959cb3cf0 | ||
|
|
821c256f04 | ||
|
|
7abdd83ea4 | ||
|
|
007094ab5b | ||
|
|
5cdaa7aabb | ||
|
|
808b944f19 | ||
|
|
ae95d69435 | ||
|
|
73d7a46307 | ||
|
|
9196b234b6 | ||
|
|
46d5af90ba | ||
|
|
8ed82d937c | ||
|
|
842cb7bf23 | ||
|
|
cd1c2ae3e7 | ||
|
|
2a219222bc | ||
|
|
ab3247fc3b | ||
|
|
320f167bea | ||
|
|
5563317718 | ||
|
|
e209507a3f | ||
|
|
b9560458d8 | ||
|
|
d7829f77df | ||
|
|
e17fda2da9 | ||
|
|
34cab23abe | ||
|
|
7c8db06378 | ||
|
|
699ab1a5c4 | ||
|
|
007464d6b3 | ||
|
|
2054082b40 | ||
|
|
9157f83f96 | ||
|
|
6e4b224fe1 | ||
|
|
2594fd9186 | ||
|
|
853d4ab96b | ||
|
|
2df5fd22cf | ||
|
|
422986a8fd | ||
|
|
ad4d5dae68 | ||
|
|
e624870e38 | ||
|
|
63dc369148 | ||
|
|
f4fe9df97c | ||
|
|
b3b016bf3b | ||
|
|
3d0cfc9e42 | ||
|
|
89fa82eddb | ||
|
|
c0d4c6211e | ||
|
|
bdc1ad8b51 | ||
|
|
db111aaf3a | ||
|
|
ab1c06a2e8 | ||
|
|
c8a2283cc6 | ||
|
|
bea5062287 | ||
|
|
65da436d74 | ||
|
|
be582171ce | ||
|
|
a7fbce2990 | ||
|
|
dfc1912a99 | ||
|
|
ec47a1c5a8 | ||
|
|
52e38f7398 | ||
|
|
69a8860551 | ||
|
|
9f8b1c6d76 | ||
|
|
5e89139870 | ||
|
|
38b5a02e95 | ||
|
|
9b2ea35184 | ||
|
|
ded44b084d | ||
|
|
1b1127ed91 | ||
|
|
9252433cc8 | ||
|
|
adb0a4da45 | ||
|
|
41caa49cfc | ||
|
|
d47e045f5e | ||
|
|
4baa61e0cf | ||
|
|
065fb53eb2 | ||
|
|
713437343d | ||
|
|
46f445560b | ||
|
|
76cbb4c676 | ||
|
|
469036e9e7 | ||
|
|
8454f5c341 | ||
|
|
d5a63f55f9 | ||
|
|
09a34567a7 | ||
|
|
bc63cbf649 | ||
|
|
281767f505 | ||
|
|
8bede6791e | ||
|
|
0ddbc66448 | ||
|
|
31420fc24c | ||
|
|
2cc835219c | ||
|
|
9e3cd22484 | ||
|
|
9278d3440e | ||
|
|
3b45c133b8 | ||
|
|
95c346d4b3 | ||
|
|
f4674a8762 | ||
|
|
3714145526 | ||
|
|
4167edda63 | ||
|
|
7d57857a1f | ||
|
|
8341416ee0 | ||
|
|
fbc0d7ab99 | ||
|
|
78d5499abf | ||
|
|
9987f6a044 | ||
|
|
e3bb10d901 | ||
|
|
7028b068b6 | ||
|
|
0751b97b87 | ||
|
|
548db6fc4b | ||
|
|
dc33cbc358 | ||
|
|
9bb9816a01 | ||
|
|
33c8f74122 | ||
|
|
cf92da9e94 | ||
|
|
419c862341 | ||
|
|
c7b6bc1d61 | ||
|
|
a62f26648f | ||
|
|
29aaafb9e4 | ||
|
|
9d57057272 | ||
|
|
fddfa9a493 | ||
|
|
5cbe905dda | ||
|
|
4e6ea2f1ca | ||
|
|
28ff78d809 | ||
|
|
9365d38162 | ||
|
|
d3f9b0ca86 | ||
|
|
bada6f4073 | ||
|
|
b91c9e17fc | ||
|
|
b974bf1967 | ||
|
|
9ee6788f98 | ||
|
|
c166c643fc | ||
|
|
abd922417c | ||
|
|
5a45d1f4f8 | ||
|
|
6091477294 | ||
|
|
63f31fe258 | ||
|
|
fc780599b0 | ||
|
|
494a1c518b | ||
|
|
f736ad5632 | ||
|
|
b0a11013fa | ||
|
|
10ff1763c1 | ||
|
|
85b0a2549a | ||
|
|
d854791183 | ||
|
|
a67081a68d | ||
|
|
8173be4b58 | ||
|
|
6270762a3a | ||
|
|
5828c0a7bb | ||
|
|
e773e12e24 | ||
|
|
33e80a0cd4 | ||
|
|
bf26c727a8 | ||
|
|
d5bf0a195a | ||
|
|
c5b38e8bac | ||
|
|
266f2bc00b | ||
|
|
cfdc043770 | ||
|
|
707d8cfb11 | ||
|
|
f5cd6d8061 | ||
|
|
b88c43933c | ||
|
|
0bc81cc781 | ||
|
|
60c5a42ae4 | ||
|
|
2073c90e1d | ||
|
|
ffd146d392 | ||
|
|
78f225b10c | ||
|
|
a043021e48 | ||
|
|
a0ea9c62a7 | ||
|
|
b90684a44a | ||
|
|
73bbca9fc1 | ||
|
|
124c8ae0ad | ||
|
|
bce963923d | ||
|
|
147ee5214e | ||
|
|
042089d100 | ||
|
|
ac62d2e43d | ||
|
|
662918f5f8 | ||
|
|
e0664d53a9 | ||
|
|
20f321c628 | ||
|
|
9cafd431fb | ||
|
|
f74d504b53 | ||
|
|
c853df5745 | ||
|
|
a800517422 | ||
|
|
cbb8ed4993 | ||
|
|
318bb10cbc | ||
|
|
cc6ddd3959 | ||
|
|
d3887ae9bd | ||
|
|
81005141c5 | ||
|
|
ce6982ad51 | ||
|
|
c2314ad068 | ||
|
|
47751a2f39 | ||
|
|
b73f187930 | ||
|
|
99c14a79da | ||
|
|
eaea4567cf | ||
|
|
dbad4ea086 | ||
|
|
c5ee73cffc | ||
|
|
6a28da3736 | ||
|
|
0f02037746 | ||
|
|
8882b36c83 | ||
|
|
8895bc8e1f | ||
|
|
34c18888c9 | ||
|
|
906ba3c577 | ||
|
|
11fb2cc43b | ||
|
|
44f0952afe | ||
|
|
82fb60509b | ||
|
|
2324d4070e | ||
|
|
73a98ccfa6 | ||
|
|
0fdd89d571 | ||
|
|
bd84d99fd1 | ||
|
|
249e1840bb | ||
|
|
8da1483354 |
42
.ansible-lint
Normal file
42
.ansible-lint
Normal file
@@ -0,0 +1,42 @@
|
||||
# .ansible-lint
|
||||
exclude_paths:
|
||||
- .cache/
|
||||
- .github/
|
||||
- molecule/
|
||||
- .ansible-lint
|
||||
- .yamllint
|
||||
- meta/
|
||||
- playbooks/roles/
|
||||
|
||||
rulesdir:
|
||||
- ../../ansible-lint-custom-rules/rules/
|
||||
|
||||
enable_list:
|
||||
- fqcn-builtins # opt-in
|
||||
- no-log-password # opt-in
|
||||
|
||||
warn_list:
|
||||
- role_vars_start_with_role_name
|
||||
- vars_in_vars_files_have_valid_names
|
||||
- experimental
|
||||
- ignore-errors
|
||||
- no-handler
|
||||
- no-log-password
|
||||
- jinja[spacing]
|
||||
- jinja[invalid]
|
||||
- meta-no-tags
|
||||
- name[casing]
|
||||
- fqcn[action]
|
||||
- schema[meta]
|
||||
- key-order[task]
|
||||
- blocked_modules
|
||||
- run-once[task]
|
||||
|
||||
skip_list:
|
||||
- vars_should_not_be_used
|
||||
- file_is_small_enough
|
||||
- file_has_valid_name
|
||||
- name[template]
|
||||
- var-naming[no-role-prefix]
|
||||
|
||||
use_default_rules: true
|
||||
48
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
48
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
name: 🐛 Bug report
|
||||
about: Create a report to help us improve
|
||||
|
||||
---
|
||||
|
||||
##### SUMMARY
|
||||
<!-- Explain the problem briefly -->
|
||||
|
||||
|
||||
##### ISSUE TYPE
|
||||
- Bug Report
|
||||
|
||||
|
||||
##### ANSIBLE VERSION
|
||||
<!-- Paste, BELOW THIS COMMENT, verbatim output from "ansible --version"-->
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
##### COLLECTION VERSION
|
||||
<!-- Paste, BELOW THIS COMMENT, verbatim output from "ansible-galaxy collection list"-->
|
||||
<!-- If using virtual environments or execution environments, remember to activate them-->
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
##### STEPS TO REPRODUCE
|
||||
<!-- List the steps to reproduce the problem, using a minimal test-case. -->
|
||||
|
||||
<!-- Paste example playbook below -->
|
||||
```yaml
|
||||
|
||||
```
|
||||
|
||||
##### EXPECTED RESULTS
|
||||
<!-- What did you expect to happen when running the steps above? -->
|
||||
|
||||
|
||||
##### ACTUAL RESULTS
|
||||
<!-- What actually happened? If possible run with extra verbosity (-vvvv) and diff (--diff) -->
|
||||
<!-- Please also include check mode (--check --diff) output if the API returns an error -->
|
||||
<!-- Be sure to mask any sensitive information -->
|
||||
|
||||
<!--- Paste verbatim command output between quotes below -->
|
||||
```
|
||||
|
||||
```
|
||||
12
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
12
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: ✨ Feature request
|
||||
about: Suggest an idea for this project
|
||||
|
||||
---
|
||||
|
||||
##### SUMMARY
|
||||
<!--- Explain the problem briefly -->
|
||||
|
||||
|
||||
##### ISSUE TYPE
|
||||
- Feature Idea
|
||||
51
.github/workflows/ci.yml
vendored
51
.github/workflows/ci.yml
vendored
@@ -1,44 +1,25 @@
|
||||
---
|
||||
name: CI
|
||||
"on":
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
debug_verbosity:
|
||||
description: 'ANSIBLE_VERBOSITY envvar value'
|
||||
required: false
|
||||
schedule:
|
||||
- cron: '15 6 * * *'
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python_version: ["3.9"]
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
path: ansible_collections/middleware_automation/keycloak
|
||||
|
||||
- name: Set up Python ${{ matrix.python_version }}
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ matrix.python_version }}
|
||||
|
||||
- name: Install yamllint, ansible and molecule
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install yamllint 'molecule[docker]~=3.5.2' ansible-core flake8 ansible-lint voluptuous
|
||||
|
||||
- name: Create default collection path
|
||||
run: |
|
||||
mkdir -p /home/runner/.ansible/collections/ansible_collections
|
||||
|
||||
- name: Run sanity tests
|
||||
run: ansible-test sanity --docker -v --color --python ${{ matrix.python_version }}
|
||||
working-directory: ./ansible_collections/middleware_automation/keycloak
|
||||
|
||||
- name: Run molecule test
|
||||
run: molecule test --all
|
||||
working-directory: ./ansible_collections/middleware_automation/keycloak
|
||||
env:
|
||||
PY_COLORS: '1'
|
||||
ANSIBLE_FORCE_COLOR: '1'
|
||||
uses: ansible-middleware/github-actions/.github/workflows/ci.yml@rootperm
|
||||
secrets: inherit
|
||||
with:
|
||||
fqcn: 'middleware_automation/keycloak'
|
||||
root_permission_varname: 'keycloak_install_requires_become'
|
||||
debug_verbosity: "${{ github.event.inputs.debug_verbosity }}"
|
||||
molecule_tests: >-
|
||||
[ "debian", "quarkus", "quarkus_ha", "quarkus_ha_remote", "quarkus_ha_26.4_below", "default", "quarkus_devmode", "quarkus_upgrade", "keycloak_modules" ]
|
||||
|
||||
18
.github/workflows/docs.yml
vendored
Normal file
18
.github/workflows/docs.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
name: Documentation
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
tags:
|
||||
- "[0-9]+.[0-9]+.[0-9]+"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
docs:
|
||||
uses: ansible-middleware/github-actions/.github/workflows/docs.yml@main
|
||||
secrets: inherit
|
||||
with:
|
||||
fqcn: 'middleware_automation/keycloak'
|
||||
collection_fqcn: 'middleware_automation.keycloak'
|
||||
historical_docs: 'false'
|
||||
56
.github/workflows/release.yml
vendored
56
.github/workflows/release.yml
vendored
@@ -1,38 +1,34 @@
|
||||
---
|
||||
name: Release collection
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "*.*.*"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
release_summary:
|
||||
description: 'Optional release summary for changelogs'
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
release:
|
||||
uses: ansible-middleware/github-actions/.github/workflows/release.yml@main
|
||||
with:
|
||||
collection_fqcn: 'middleware_automation.keycloak'
|
||||
downstream_name: 'rhbk'
|
||||
release_summary: "${{ github.event.inputs.release_summary }}"
|
||||
secrets:
|
||||
galaxy_token: ${{ secrets.ANSIBLE_GALAXY_API_KEY }}
|
||||
jira_webhook: ${{ secrets.JIRA_WEBHOOK_CREATE_VERSION }}
|
||||
|
||||
dispatch:
|
||||
needs: release
|
||||
strategy:
|
||||
matrix:
|
||||
repo: ['ansible-middleware/ansible-middleware-ee']
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Repository Dispatch
|
||||
uses: peter-evans/repository-dispatch@v1
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- name: Get Tag Version
|
||||
id: get_version
|
||||
run: echo ::set-output name=TAG_VERSION::${GITHUB_REF#refs/tags/}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install ansible-core
|
||||
- name: Build collection
|
||||
run: |
|
||||
ansible-galaxy collection build .
|
||||
- name: Publish Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
files: "*.tar.gz"
|
||||
body: "Release ${{ steps.get_version.outputs.TAG_VERSION }}"
|
||||
- name: Publish collection
|
||||
env:
|
||||
ANSIBLE_GALAXY_API_KEY: ${{ secrets.ANSIBLE_GALAXY_API_KEY }}
|
||||
run: |
|
||||
ansible-galaxy collection publish *.tar.gz --api-key $ANSIBLE_GALAXY_API_KEY
|
||||
token: ${{ secrets.TRIGGERING_PAT }}
|
||||
repository: ${{ matrix.repo }}
|
||||
event-type: "Dependency released - Keycloak v${{ needs.release.outputs.tag_version }}"
|
||||
client-payload: '{ "github": ${{toJson(github)}} }'
|
||||
|
||||
26
.github/workflows/traffic.yml
vendored
Normal file
26
.github/workflows/traffic.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Collect traffic stats
|
||||
on:
|
||||
schedule:
|
||||
- cron: "51 23 * * 0"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
traffic:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
ref: "gh-pages"
|
||||
|
||||
- name: GitHub traffic
|
||||
uses: sangonzal/repository-traffic-action@v.0.1.6
|
||||
env:
|
||||
TRAFFIC_ACTION_TOKEN: ${{ secrets.TRIGGERING_PAT }}
|
||||
|
||||
- name: Commit changes
|
||||
uses: EndBug/add-and-commit@v4
|
||||
with:
|
||||
author_name: Ansible Middleware
|
||||
message: "GitHub traffic"
|
||||
add: "./traffic/*"
|
||||
ref: "gh-pages"
|
||||
16
.gitignore
vendored
16
.gitignore
vendored
@@ -1 +1,17 @@
|
||||
*.tar.gz
|
||||
*.zip
|
||||
.tmp
|
||||
.cache
|
||||
.vscode/
|
||||
__pycache__/
|
||||
docs/plugins/
|
||||
docs/roles/
|
||||
docs/_build/
|
||||
.pytest_cache/
|
||||
.mypy_cache/
|
||||
*.retry
|
||||
changelogs/.plugin-cache.yaml
|
||||
*.pem
|
||||
*.key
|
||||
*.p12
|
||||
.ansible/
|
||||
@@ -15,7 +15,8 @@ rules:
|
||||
commas:
|
||||
max-spaces-after: -1
|
||||
level: error
|
||||
comments: disable
|
||||
comments:
|
||||
min-spaces-from-content: 1
|
||||
comments-indentation: disable
|
||||
document-start: disable
|
||||
empty-lines:
|
||||
@@ -31,3 +32,7 @@ rules:
|
||||
type: unix
|
||||
trailing-spaces: disable
|
||||
truthy: disable
|
||||
octal-values:
|
||||
forbid-implicit-octal: true
|
||||
forbid-explicit-octal: true
|
||||
|
||||
|
||||
589
CHANGELOG.rst
Normal file
589
CHANGELOG.rst
Normal file
@@ -0,0 +1,589 @@
|
||||
=============================================
|
||||
middleware\_automation.keycloak Release Notes
|
||||
=============================================
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
This changelog describes changes after version 0.2.6.
|
||||
|
||||
v3.0.7
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Migrate Keycloak modules from the community.general collection to Keycloak collection. `#341 <https://github.com/ansible-middleware/keycloak/pull/341>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Fixing common module usage `#343 <https://github.com/ansible-middleware/keycloak/pull/343>`_
|
||||
- fix #336: https://github.com/ansible-middleware/common/pull/38 `#338 <https://github.com/ansible-middleware/keycloak/pull/338>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fix molecule tests `#339 <https://github.com/ansible-middleware/keycloak/pull/339>`_
|
||||
|
||||
v3.0.6
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- AMW-540 Fix the upstream collection requirements with common v1.2.4 `#337 <https://github.com/ansible-middleware/keycloak/pull/337>`_
|
||||
|
||||
v3.0.5
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- AMW-528 Deployment fails in keycloak_quarkus due to missing escalation variables `#335 <https://github.com/ansible-middleware/keycloak/pull/335>`_
|
||||
|
||||
v3.0.4
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- AMW-467 Download keycloak binary from password protected HTTP location `#321 <https://github.com/ansible-middleware/keycloak/pull/321>`_
|
||||
- v26.4.x compability `#317 <https://github.com/ansible-middleware/keycloak/pull/317>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- AMW-518 Validating arguments against arg spec 'main' fails unexpectedly. `#324 <https://github.com/ansible-middleware/keycloak/pull/324>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Removing parseable from lint file as Additional properties are not allowed `#319 <https://github.com/ansible-middleware/keycloak/pull/319>`_
|
||||
|
||||
v3.0.3
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Update to keycloak 26.3.0 `#293 <https://github.com/ansible-middleware/keycloak/pull/293>`_
|
||||
- ansible-core 2.19 compatibility `#310 <https://github.com/ansible-middleware/keycloak/pull/310>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Allow to install provider jars from remote paths `#303 <https://github.com/ansible-middleware/keycloak/pull/303>`_
|
||||
- Declared proxy_mode as deprecated, updated quarkus and realm readme `#306 <https://github.com/ansible-middleware/keycloak/pull/306>`_
|
||||
- Fix config_key_store_file description to match variable name `#308 <https://github.com/ansible-middleware/keycloak/pull/308>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- keycloak collection CI label is showing no status `#312 <https://github.com/ansible-middleware/keycloak/pull/312>`_
|
||||
- keycloak_realm: allow secret in keycloak_clients `#304 <https://github.com/ansible-middleware/keycloak/pull/304>`_
|
||||
|
||||
v3.0.2
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- New ``checksum`` property for keycloak_quarkus_providers `#280 <https://github.com/ansible-middleware/keycloak/pull/280>`_
|
||||
- New parameter to set the jgroups host IP address `#281 <https://github.com/ansible-middleware/keycloak/pull/281>`_
|
||||
- Session storage / distributed caches `#287 <https://github.com/ansible-middleware/keycloak/pull/287>`_
|
||||
- Update keycloak/RHBK to v26.2.4 `#283 <https://github.com/ansible-middleware/keycloak/pull/283>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fix ``keycloak_quarkus_force_install`` parameter being ignored by install `#296 <https://github.com/ansible-middleware/keycloak/pull/296>`_
|
||||
- Fix alternate download location being ignored (JBossNeworkAPI always used) `#298 <https://github.com/ansible-middleware/keycloak/pull/298>`_
|
||||
- Run config rebuild after SPI providers update `#285 <https://github.com/ansible-middleware/keycloak/pull/285>`_
|
||||
- Use jdk21 as default in debian `#289 <https://github.com/ansible-middleware/keycloak/pull/289>`_
|
||||
- keycloak_realm: federation default provider type should be a string `#302 <https://github.com/ansible-middleware/keycloak/pull/302>`_
|
||||
|
||||
v3.0.1
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Version update to 26.0.8 / rhbk 26.0.11 `#277 <https://github.com/ansible-middleware/keycloak/pull/277>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Trigger rebuild handler on envvars file change `#276 <https://github.com/ansible-middleware/keycloak/pull/276>`_
|
||||
|
||||
v3.0.0
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add theme cache invalidation handler `#252 <https://github.com/ansible-middleware/keycloak/pull/252>`_
|
||||
- keycloak_realm: change url variables to defaults `#268 <https://github.com/ansible-middleware/keycloak/pull/268>`_
|
||||
|
||||
Breaking Changes / Porting Guide
|
||||
--------------------------------
|
||||
|
||||
- Bump major and ansible-core versions `#266 <https://github.com/ansible-middleware/keycloak/pull/266>`_
|
||||
- Rename parameters to follow upstream `#270 <https://github.com/ansible-middleware/keycloak/pull/270>`_
|
||||
- Update for keycloak v26 `#254 <https://github.com/ansible-middleware/keycloak/pull/254>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Access token lifespan is too short for ansible run `#251 <https://github.com/ansible-middleware/keycloak/pull/251>`_
|
||||
- Load environment vars during kc rebuild `#274 <https://github.com/ansible-middleware/keycloak/pull/274>`_
|
||||
- Rebuild config and restart service for local providers `#250 <https://github.com/ansible-middleware/keycloak/pull/250>`_
|
||||
- Rename and honour parameter ``keycloak_quarkus_http_host`` `#271 <https://github.com/ansible-middleware/keycloak/pull/271>`_
|
||||
|
||||
New Modules
|
||||
-----------
|
||||
|
||||
- middleware_automation.keycloak.keycloak_realm - Allows administration of Keycloak realm via Keycloak API
|
||||
|
||||
v2.4.3
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Update keycloak to 24.0.5 `#241 <https://github.com/ansible-middleware/keycloak/pull/241>`_
|
||||
|
||||
v2.4.2
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- New parameter ``keycloak_quarkus_download_path`` `#239 <https://github.com/ansible-middleware/keycloak/pull/239>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Add wait_for_port number parameter `#237 <https://github.com/ansible-middleware/keycloak/pull/237>`_
|
||||
|
||||
v2.4.1
|
||||
======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
Internal release, documentation or test changes only.
|
||||
|
||||
v2.4.0
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Enable by default health check on restart `#234 <https://github.com/ansible-middleware/keycloak/pull/234>`_
|
||||
- Update minimum ansible-core version > 2.15 `#232 <https://github.com/ansible-middleware/keycloak/pull/232>`_
|
||||
|
||||
v2.3.0
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Allow for custom providers hosted on maven repositories `#223 <https://github.com/ansible-middleware/keycloak/pull/223>`_
|
||||
- Restart handler strategy behaviour `#231 <https://github.com/ansible-middleware/keycloak/pull/231>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add support for policy files `#225 <https://github.com/ansible-middleware/keycloak/pull/225>`_
|
||||
- Allow to add extra custom env vars in sysconfig file `#229 <https://github.com/ansible-middleware/keycloak/pull/229>`_
|
||||
- Download from alternate URL with optional http authentication `#220 <https://github.com/ansible-middleware/keycloak/pull/220>`_
|
||||
- Update Keycloak to version 24.0.4 `#218 <https://github.com/ansible-middleware/keycloak/pull/218>`_
|
||||
- ``proxy-header`` enhancement `#227 <https://github.com/ansible-middleware/keycloak/pull/227>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- ``kc.sh build`` uses configured jdk `#211 <https://github.com/ansible-middleware/keycloak/pull/211>`_
|
||||
|
||||
v2.2.2
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Copying of key material for TLS configuration `#210 <https://github.com/ansible-middleware/keycloak/pull/210>`_
|
||||
- Validate certs parameter for JDBC driver downloads `#207 <https://github.com/ansible-middleware/keycloak/pull/207>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Turn off controller privilege escalation `#209 <https://github.com/ansible-middleware/keycloak/pull/209>`_
|
||||
|
||||
v2.2.1
|
||||
======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
Internal release, documentation or test changes only.
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- JDBC provider: fix clause in argument validation `#204 <https://github.com/ansible-middleware/keycloak/pull/204>`_
|
||||
|
||||
v2.2.0
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Support java keystore for configuration of sensitive options `#189 <https://github.com/ansible-middleware/keycloak/pull/189>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add ``wait_for_port`` and ``wait_for_log`` systemd unit logic `#199 <https://github.com/ansible-middleware/keycloak/pull/199>`_
|
||||
- Customize jdbc driver downloads, optional authentication `#202 <https://github.com/ansible-middleware/keycloak/pull/202>`_
|
||||
- Keystore-based vault SPI configuration `#196 <https://github.com/ansible-middleware/keycloak/pull/196>`_
|
||||
- New ``keycloak_quarkus_hostname_strict_https`` parameter `#195 <https://github.com/ansible-middleware/keycloak/pull/195>`_
|
||||
- Providers config and custom providers `#201 <https://github.com/ansible-middleware/keycloak/pull/201>`_
|
||||
- Remove administrator credentials from files once keycloak is bootstrapped `#197 <https://github.com/ansible-middleware/keycloak/pull/197>`_
|
||||
- Update keycloak to 24.0 `#194 <https://github.com/ansible-middleware/keycloak/pull/194>`_
|
||||
|
||||
v2.1.2
|
||||
======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
Internal release, documentation or test changes only.
|
||||
|
||||
v2.1.1
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add reverse ``proxy_headers`` config, supersedes ``proxy_mode`` `#187 <https://github.com/ansible-middleware/keycloak/pull/187>`_
|
||||
- Debian/Ubuntu compatibility `#178 <https://github.com/ansible-middleware/keycloak/pull/178>`_
|
||||
- Use ``keycloak_realm`` as default for sub-entities `#180 <https://github.com/ansible-middleware/keycloak/pull/180>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fix permissions on controller-side downloaded artifacts `#184 <https://github.com/ansible-middleware/keycloak/pull/184>`_
|
||||
- JVM args moved to ``JAVA_OPTS`` envvar (instead of JAVA_OPTS_APPEND) `#186 <https://github.com/ansible-middleware/keycloak/pull/186>`_
|
||||
- Unrelax configuration file permissions `#191 <https://github.com/ansible-middleware/keycloak/pull/191>`_
|
||||
- Utilize comment filter for ``ansible_managed`` annotations `#176 <https://github.com/ansible-middleware/keycloak/pull/176>`_
|
||||
|
||||
v2.1.0
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Implement infinispan TCPPING discovery protocol `#159 <https://github.com/ansible-middleware/keycloak/pull/159>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Set enable-recovery when xa transactions are enabled `#167 <https://github.com/ansible-middleware/keycloak/pull/167>`_
|
||||
- keycloak_quarkus: Allow configuring log rotate options in quarkus configuration `#161 <https://github.com/ansible-middleware/keycloak/pull/161>`_
|
||||
- keycloak_quarkus: ``sticky-session`` for infinispan routes `#163 <https://github.com/ansible-middleware/keycloak/pull/163>`_
|
||||
|
||||
Breaking Changes / Porting Guide
|
||||
--------------------------------
|
||||
|
||||
- keycloak_quarkus: renamed infinispan host list configuration `#157 <https://github.com/ansible-middleware/keycloak/pull/157>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- keycloak_quarkus: fix custom JAVA_HOME parameter name `#171 <https://github.com/ansible-middleware/keycloak/pull/171>`_
|
||||
|
||||
v2.0.2
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- keycloak_quarkus: Add support for sqlserver jdbc driver `#148 <https://github.com/ansible-middleware/keycloak/pull/148>`_
|
||||
- keycloak_quarkus: allow configuration of ``hostname-strict-backchannel`` `#152 <https://github.com/ansible-middleware/keycloak/pull/152>`_
|
||||
- keycloak_quarkus: systemd restart behavior `#145 <https://github.com/ansible-middleware/keycloak/pull/145>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- keycloak_quarkus: Use ``keycloak_quarkus_java_opts`` `#154 <https://github.com/ansible-middleware/keycloak/pull/154>`_
|
||||
- keycloak_quarkus: allow ports <1024 (e.g. :443) in systemd unit `#150 <https://github.com/ansible-middleware/keycloak/pull/150>`_
|
||||
|
||||
v2.0.1
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- keycloak_quarkus: add hostname-strict parameter `#139 <https://github.com/ansible-middleware/keycloak/pull/139>`_
|
||||
- keycloak_quarkus: update to version 23.0.1 `#133 <https://github.com/ansible-middleware/keycloak/pull/133>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- keycloak_quarkus: template requires lowercase boolean values `#138 <https://github.com/ansible-middleware/keycloak/pull/138>`_
|
||||
|
||||
v2.0.0
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add new parameter for port offset configuration `#124 <https://github.com/ansible-middleware/keycloak/pull/124>`_
|
||||
- Update Keycloak to version 22.0.5 `#122 <https://github.com/ansible-middleware/keycloak/pull/122>`_
|
||||
|
||||
Breaking Changes / Porting Guide
|
||||
--------------------------------
|
||||
|
||||
- Add support for more http-related configs `#115 <https://github.com/ansible-middleware/keycloak/pull/115>`_
|
||||
- Update minimum ansible-core version > 2.14 `#119 <https://github.com/ansible-middleware/keycloak/pull/119>`_
|
||||
- keycloak_quarkus: enable config of key store and trust store `#116 <https://github.com/ansible-middleware/keycloak/pull/116>`_
|
||||
|
||||
v1.3.0
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Run service as ``keycloak_service_user`` `#106 <https://github.com/ansible-middleware/keycloak/pull/106>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- keycloak_quarkus: Update Keycloak to version 22.0.3 `#112 <https://github.com/ansible-middleware/keycloak/pull/112>`_
|
||||
- keycloak_quarkus: fix admin console redirect when running locally `#111 <https://github.com/ansible-middleware/keycloak/pull/111>`_
|
||||
- keycloak_quarkus: skip proxy config if ``keycloak_quarkus_proxy_mode`` is ``none`` `#109 <https://github.com/ansible-middleware/keycloak/pull/109>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- keycloak_quarkus: fix validation failure upon port configuration change `#113 <https://github.com/ansible-middleware/keycloak/pull/113>`_
|
||||
|
||||
v1.2.8
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- keycloak_quarkus: set openjdk 17 as default `#103 <https://github.com/ansible-middleware/keycloak/pull/103>`_
|
||||
- keycloak_quarkus: update to version 22.0.1 `#107 <https://github.com/ansible-middleware/keycloak/pull/107>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fix incorrect checks for ``keycloak_jgroups_subnet`` `#98 <https://github.com/ansible-middleware/keycloak/pull/98>`_
|
||||
- Undefine ``keycloak_db_valid_conn_sql`` default `#91 <https://github.com/ansible-middleware/keycloak/pull/91>`_
|
||||
- Update bindep.txt package python3-devel to support RHEL9 `#105 <https://github.com/ansible-middleware/keycloak/pull/105>`_
|
||||
|
||||
v1.2.7
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Allow to override jgroups subnet `#93 <https://github.com/ansible-middleware/keycloak/pull/93>`_
|
||||
- keycloak-quarkus: update keycloakx to v21.1.1 `#92 <https://github.com/ansible-middleware/keycloak/pull/92>`_
|
||||
|
||||
v1.2.6
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add profile features enabling/disabling `#87 <https://github.com/ansible-middleware/keycloak/pull/87>`_
|
||||
- Improve service restart behavior configuration `#88 <https://github.com/ansible-middleware/keycloak/pull/88>`_
|
||||
- Update default xa_datasource_class value for mariadb jdbc configuration `#89 <https://github.com/ansible-middleware/keycloak/pull/89>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Handle WFLYCTL0117 when background validation millis is 0 `#90 <https://github.com/ansible-middleware/keycloak/pull/90>`_
|
||||
|
||||
v1.2.5
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add configuration for database connection pool validation `#85 <https://github.com/ansible-middleware/keycloak/pull/85>`_
|
||||
- Allow to configure administration endpoint URL `#86 <https://github.com/ansible-middleware/keycloak/pull/86>`_
|
||||
- Allow to force backend URLs to frontend URLs `#84 <https://github.com/ansible-middleware/keycloak/pull/84>`_
|
||||
- Introduce systemd unit restart behavior `#81 <https://github.com/ansible-middleware/keycloak/pull/81>`_
|
||||
|
||||
v1.2.4
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add ``sqlserver`` to keycloak role jdbc configurations `#78 <https://github.com/ansible-middleware/keycloak/pull/78>`_
|
||||
- Add configurability for XA transactions `#73 <https://github.com/ansible-middleware/keycloak/pull/73>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Fix deprecation warning for ``ipaddr`` `#77 <https://github.com/ansible-middleware/keycloak/pull/77>`_
|
||||
- Fix undefined facts when offline patching sso `#71 <https://github.com/ansible-middleware/keycloak/pull/71>`_
|
||||
|
||||
v1.2.1
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Allow to setup keycloak HA cluster without remote cache store `#68 <https://github.com/ansible-middleware/keycloak/pull/68>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Pass attributes to realm clients `#69 <https://github.com/ansible-middleware/keycloak/pull/69>`_
|
||||
|
||||
v1.2.0
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Provide config for multiple modcluster proxies `#60 <https://github.com/ansible-middleware/keycloak/pull/60>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Allow to configure TCPPING for cluster discovery `#62 <https://github.com/ansible-middleware/keycloak/pull/62>`_
|
||||
- Drop community.general from dependencies `#61 <https://github.com/ansible-middleware/keycloak/pull/61>`_
|
||||
- Switch middleware_automation.redhat_csp_download for middleware_automation.common `#63 <https://github.com/ansible-middleware/keycloak/pull/63>`_
|
||||
- Switch to middleware_automation.common for rh-sso patching `#64 <https://github.com/ansible-middleware/keycloak/pull/64>`_
|
||||
|
||||
v1.1.1
|
||||
======
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- keycloak-quarkus: fix ``cache-config-file`` path in keycloak.conf.j2 template `#53 <https://github.com/ansible-middleware/keycloak/pull/53>`_
|
||||
|
||||
v1.1.0
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Update keycloak to 18.0.2 - sso to 7.6.1 `#46 <https://github.com/ansible-middleware/keycloak/pull/46>`_
|
||||
- Variable ``keycloak_no_log`` controls ansible ``no_log`` parameter (for debugging purposes) `#47 <https://github.com/ansible-middleware/keycloak/pull/47>`_
|
||||
- Variables to override service start retries and delay `#51 <https://github.com/ansible-middleware/keycloak/pull/51>`_
|
||||
- keycloak_quarkus: variable to enable development mode `#45 <https://github.com/ansible-middleware/keycloak/pull/45>`_
|
||||
|
||||
Breaking Changes / Porting Guide
|
||||
--------------------------------
|
||||
|
||||
- Rename variables from ``infinispan_`` prefix to ``keycloak_infinispan_`` `#42 <https://github.com/ansible-middleware/keycloak/pull/42>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- keycloak_quarkus: fix /var/log/keycloak symlink to keycloak log directory `#44 <https://github.com/ansible-middleware/keycloak/pull/44>`_
|
||||
|
||||
v1.0.7
|
||||
======
|
||||
|
||||
Breaking Changes / Porting Guide
|
||||
--------------------------------
|
||||
|
||||
- keycloak_quarkus: use absolute path for certificate files `#39 <https://github.com/ansible-middleware/keycloak/pull/39>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- keycloak_quarkus: use become for tasks that will otherwise fail `#38 <https://github.com/ansible-middleware/keycloak/pull/38>`_
|
||||
|
||||
v1.0.6
|
||||
======
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- keycloak_quarkus: add selected java to PATH in systemd unit `#34 <https://github.com/ansible-middleware/keycloak/pull/34>`_
|
||||
- keycloak_quarkus: set logfile path correctly under keycloak home `#35 <https://github.com/ansible-middleware/keycloak/pull/35>`_
|
||||
|
||||
v1.0.5
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Update config options: keycloak and quarkus `#32 <https://github.com/ansible-middleware/keycloak/pull/32>`_
|
||||
|
||||
v1.0.4
|
||||
======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
Internal release, documentation or test changes only.
|
||||
|
||||
v1.0.3
|
||||
======
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- New role for installing keycloak >= 17.0.0 (quarkus) `#29 <https://github.com/ansible-middleware/keycloak/pull/29>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Add ``keycloak_config_override_template`` parameter for passing a custom xml config template `#30 <https://github.com/ansible-middleware/keycloak/pull/30>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Make sure systemd unit starts with selected java JVM `#31 <https://github.com/ansible-middleware/keycloak/pull/31>`_
|
||||
|
||||
v1.0.2
|
||||
======
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Make ``keycloak_admin_password`` a default with assert (was: role variable) `#26 <https://github.com/ansible-middleware/keycloak/pull/26>`_
|
||||
- Simplify dependency install logic and reduce play execution time `#19 <https://github.com/ansible-middleware/keycloak/pull/19>`_
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Set ``keycloak_frontend_url`` default according to other defaults `#25 <https://github.com/ansible-middleware/keycloak/pull/25>`_
|
||||
|
||||
v1.0.1
|
||||
======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
Minor enhancements, bug and documentation fixes.
|
||||
|
||||
Major Changes
|
||||
-------------
|
||||
|
||||
- Apply latest cumulative patch of RH-SSO automatically when new parameter ``keycloak_rhsso_apply_patches`` is ``true`` `#18 <https://github.com/ansible-middleware/keycloak/pull/18>`_
|
||||
|
||||
Minor Changes
|
||||
-------------
|
||||
|
||||
- Clustered installs now perform database initialization on first node to avoid locking issues `#17 <https://github.com/ansible-middleware/keycloak/pull/17>`_
|
||||
|
||||
v1.0.0
|
||||
======
|
||||
|
||||
Release Summary
|
||||
---------------
|
||||
|
||||
This is the first stable release of the ``middleware_automation.keycloak`` collection.
|
||||
48
CONTRIBUTING.md
Normal file
48
CONTRIBUTING.md
Normal file
@@ -0,0 +1,48 @@
|
||||
## Developing
|
||||
|
||||
### Build and install locally
|
||||
|
||||
Clone the repository, checkout the tag you want to build, or pick the main branch for the development version; then:
|
||||
|
||||
ansible-galaxy collection build .
|
||||
ansible-galaxy collection install middleware_automation-keycloak-*.tar.gz
|
||||
|
||||
|
||||
### Development environment
|
||||
|
||||
Make sure your development machine has avilable:
|
||||
|
||||
* python 3.11+
|
||||
* virtualenv
|
||||
* docker (or podman)
|
||||
|
||||
In order to run setup the development environment and run the molecule tests locally, after cloning the repository:
|
||||
|
||||
```
|
||||
# create new virtualenv using python 3
|
||||
virtualenv $PATH_TO_DEV_VIRTUALENV
|
||||
# activate the virtual env
|
||||
source $PATH_TO_DEV_VIRTUALENV/bin/activate
|
||||
# install ansible and tools onto the virtualenv
|
||||
pip install yamllint 'molecule>=6.0' 'molecule-plugins[docker]' 'ansible-core>=2.16' ansible-lint
|
||||
# install collection dependencies
|
||||
ansible-galaxy collection install -r requirements.yml
|
||||
# install python dependencies
|
||||
pip install -r requirements.txt molecule/requirements.txt
|
||||
# execute the tests (replace --all with -s subdirectory to run a single test)
|
||||
molecule test --all
|
||||
```
|
||||
|
||||
## Contributor's Guidelines
|
||||
|
||||
- All YAML files named with `.yml` extension
|
||||
- Use spaces around jinja variables. `{{ var }}` over `{{var}}`
|
||||
- Variables that are internal to the role should be lowercase and start with the role name
|
||||
- Keep roles self contained - Roles should avoid including tasks from other roles when possible
|
||||
- Plays should do nothing more than include a list of roles, except where `pre_tasks` and `post_tasks` are required, when possible
|
||||
- Separators - Use valid names, ie. underscores (e.g. `my_role` `my_playbook`) not dashes (`my-role`)
|
||||
- Paths - When defining paths, do not include trailing slashes (e.g. `my_path: /foo` not `my_path: /foo/`); when concatenating paths, follow the same convention (e.g. `{{ my_path }}/bar` not `{{ my_path }}bar`)
|
||||
- Indentation - Use 2 spaces for each indent
|
||||
- `vars/` vs `defaults/` - internal or interpolated variables that don't need to change or be overridden by user go in `vars/`, those that a user would likely override, go under `defaults/` directory
|
||||
- All role arguments have a specification in `meta/argument_specs.yml`
|
||||
- All playbooks/roles should be focused on compatibility with Ansible Automation Platform
|
||||
233
README.md
233
README.md
@@ -1,26 +1,34 @@
|
||||
# Ansible Collection - keycloak
|
||||
# Ansible Collection - middleware_automation.keycloak
|
||||
|
||||
[](https://github.com/ansible-middleware/keycloak/actions/workflows/ci.yml)
|
||||
<!--start build_status -->
|
||||
[](https://github.com/ansible-middleware/keycloak/actions/workflows/ci.yml)
|
||||
|
||||
> **_NOTE:_ If you are Red Hat customer, install `redhat.rhbk` (for Red Hat Build of Keycloak) or `redhat.sso` (for Red Hat Single Sign-On) from [Automation Hub](https://console.redhat.com/ansible/ansible-dashboard) as the certified version of this collection.**
|
||||
|
||||
Collection to install and configure [Keycloak](https://www.keycloak.org/) or [Red Hat Single Sign-On](https://access.redhat.com/products/red-hat-single-sign-on).
|
||||
|
||||
<!--end build_status -->
|
||||
<!--start description -->
|
||||
Collection to install and configure [Keycloak](https://www.keycloak.org/) or [Red Hat Single Sign-On](https://access.redhat.com/products/red-hat-single-sign-on) / [Red Hat Build of Keycloak](https://access.redhat.com/products/red-hat-build-of-keycloak).
|
||||
<!--end description -->
|
||||
<!--start requires_ansible-->
|
||||
## Ansible version compatibility
|
||||
|
||||
This collection has been tested against following Ansible versions: **>=2.9.10**.
|
||||
This collection has been tested against following Ansible versions: **>=2.16.0**.
|
||||
|
||||
Plugins and modules within a collection may be tested with only specific Ansible versions. A collection may contain metadata that identifies these versions.
|
||||
<!--end requires_ansible-->
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
<!--start galaxy_download -->
|
||||
### Installing the Collection from Ansible Galaxy
|
||||
|
||||
Before using the collection, you need to install it with the Ansible Galaxy CLI:
|
||||
|
||||
ansible-galaxy collection install middleware_automation.keycloak
|
||||
|
||||
<!--end galaxy_download -->
|
||||
|
||||
You can also include it in a `requirements.yml` file and install it via `ansible-galaxy collection install -r requirements.yml`, using the format:
|
||||
|
||||
```yaml
|
||||
@@ -29,70 +37,102 @@ collections:
|
||||
- name: middleware_automation.keycloak
|
||||
```
|
||||
|
||||
### Install Playbook
|
||||
The keycloak collection also depends on the following python packages to be present on the controller host:
|
||||
|
||||
`playbooks/keycloak.yml` installs the upstream(Keycloak) based on the defined variables.
|
||||
`playbooks/rhsso.yml` installs Red Hat Single Sign-On(RHSSO) based on defined variables.
|
||||
* netaddr
|
||||
* lxml
|
||||
|
||||
### Choosing between upstream(Keycloak) project and Red Hat Single Sign-On(RHSSO)
|
||||
A requirement file is provided to install:
|
||||
|
||||
The roles supports installing upstream(Keycloak) or Red Hat Single Sign-On in the following ways
|
||||
pip install -r requirements.txt
|
||||
|
||||
#### Install upstream(Keycloak) from remote source
|
||||
<!--start roles_paths -->
|
||||
### Included roles
|
||||
|
||||
This is default approach, there is one required variable
|
||||
* `keycloak_quarkus`: role for installing keycloak (>= 19.0.0, quarkus based).
|
||||
* `keycloak_realm`: role for configuring a realm, user federation(s), clients and users, in an installed service.
|
||||
* `keycloak`: role for installing legacy keycloak (<= 19.0, wildfly based).
|
||||
|
||||
```
|
||||
keycloak_admin_password: "<changeme>"
|
||||
<!--end roles_paths -->
|
||||
|
||||
### Included modules
|
||||
|
||||
All Keycloak administration modules from `community.general` are provided in this collection for Keycloak 17+ (Quarkus). Use `auth_keycloak_url` without the legacy `/auth` context path (for example `http://localhost:8080`). Set `keycloak_context` to `/auth` only when automating WildFly-based Keycloak with the `keycloak` role.
|
||||
|
||||
* `keycloak_authentication`: manage authentication flows and executions using Keycloak Admin REST API.
|
||||
* `keycloak_authentication_flow`: manage custom authentication flows and flow executions.
|
||||
* `keycloak_authentication_required_actions`: manage required actions available in realm authentication.
|
||||
* `keycloak_authentication_v2`: manage authentication flows with newer Keycloak API handling.
|
||||
* `keycloak_authz_authorization_scope`: manage authorization scopes for a client resource server.
|
||||
* `keycloak_authz_custom_policy`: manage custom authorization policies for a client resource server.
|
||||
* `keycloak_authz_permission`: manage authorization permissions for a client resource server.
|
||||
* `keycloak_authz_permission_info`: retrieve authorization permission information for a client resource server.
|
||||
* `keycloak_client`: manage Keycloak clients (create/update/delete).
|
||||
* `keycloak_client_rolemapping`: manage client role mappings for users and groups.
|
||||
* `keycloak_client_rolescope`: manage client role scope mappings.
|
||||
* `keycloak_client_scope`: manage client scopes and protocol mappers (replaces `community.general.keycloak_clientscope`).
|
||||
* `keycloak_clientscope_type`: manage default and optional client scope assignments.
|
||||
* `keycloak_clientsecret_info`: retrieve client secret information.
|
||||
* `keycloak_clientsecret_regenerate`: regenerate a client secret.
|
||||
* `keycloak_clienttemplate`: manage legacy client templates.
|
||||
* `keycloak_component`: manage realm components.
|
||||
* `keycloak_component_info`: retrieve realm component information.
|
||||
* `keycloak_group`: manage realm groups and subgroups.
|
||||
* `keycloak_identity_provider`: manage identity provider instances and configuration.
|
||||
* `keycloak_realm`: manage realms (create/update/delete).
|
||||
* `keycloak_realm_info`: retrieve realm information.
|
||||
* `keycloak_realm_key`: manage realm key providers.
|
||||
* `keycloak_realm_keys_metadata_info`: retrieve realm keys metadata.
|
||||
* `keycloak_realm_localization`: manage realm localization texts.
|
||||
* `keycloak_realm_rolemapping`: manage realm role mappings for users and groups.
|
||||
* `keycloak_role`: manage realm and client roles.
|
||||
* `keycloak_user`: manage users (create/update/delete).
|
||||
* `keycloak_user_execute_actions_email`: trigger execute-actions emails for users.
|
||||
* `keycloak_user_federation`: manage user federation providers (for example LDAP/AD).
|
||||
* `keycloak_user_rolemapping`: manage user role mappings.
|
||||
* `keycloak_userprofile`: manage user profile configuration.
|
||||
|
||||
## Usage
|
||||
|
||||
The collection provides roles to install Keycloak and modules to manage realms, clients, users, and related settings via the [Keycloak Admin REST API](https://www.keycloak.org/docs-api/latest/rest-api/index.html).
|
||||
|
||||
For Quarkus-based Keycloak (17+), set `auth_keycloak_url` to the server root URL without the legacy `/auth` path, for example `http://localhost:8080`. When using the legacy `keycloak` role with WildFly-based Keycloak, set `keycloak_context` to `/auth` in the `keycloak_realm` role.
|
||||
|
||||
### Install Keycloak
|
||||
|
||||
* [`playbooks/keycloak_quarkus.yml`](https://github.com/ansible-middleware/keycloak/blob/main/playbooks/keycloak_quarkus.yml) installs Keycloak >= 17 using the `keycloak_quarkus` role.
|
||||
* [`playbooks/keycloak.yml`](https://github.com/ansible-middleware/keycloak/blob/main/playbooks/keycloak.yml) installs legacy Keycloak (<= 19) using the `keycloak` role.
|
||||
|
||||
For full service configuration details, refer to the [keycloak_quarkus role README](https://github.com/ansible-middleware/keycloak/blob/main/roles/keycloak_quarkus/README.md) or the [keycloak role README](https://github.com/ansible-middleware/keycloak/blob/main/roles/keycloak/README.md).
|
||||
|
||||
#### Install from controller node (offline)
|
||||
|
||||
Making the keycloak zip archive available to the playbook working directory, and setting `keycloak_offline_install` to `true`, allows to skip
|
||||
the download tasks. The local path for the archive does match the downloaded archive path, so that it is also used as a cache when multiple hosts are provisioned in a cluster.
|
||||
|
||||
```yaml
|
||||
keycloak_offline_install: true
|
||||
```
|
||||
|
||||
#### Install upstream(Keycloak) from local source when the following variable is defined
|
||||
|
||||
```
|
||||
keycloak_admin_password: "<changeme>"
|
||||
zip_file_local_path: <keycloak zip file on Ansible control node local path>
|
||||
<!--start rhn_credentials -->
|
||||
<!--end rhn_credentials -->
|
||||
|
||||
|
||||
#### Install from alternate sources (like corporate Nexus, artifactory, proxy, etc)
|
||||
|
||||
It is possible to perform downloads from alternate sources, using the `keycloak_download_url` variable; make sure the final downloaded filename matches with the source filename (ie. keycloak-legacy-x.y.zip or rh-sso-x.y.z-server-dist.zip).
|
||||
|
||||
|
||||
#### Example installation command
|
||||
|
||||
Execute the following command from the source root directory:
|
||||
|
||||
```bash
|
||||
ansible-playbook -i <ansible_hosts> playbooks/keycloak_quarkus.yml -e keycloak_quarkus_bootstrap_admin_password=<changeme>
|
||||
```
|
||||
|
||||
#### Install RHSSO from the Red Hat Customer Support Portal, when the following variables are defined
|
||||
|
||||
```
|
||||
keycloak_admin_password: "<changeme>"
|
||||
rhn_username: '<customer_portal_username>'
|
||||
rhn_password: '<customer_portal_password>'
|
||||
rhsso_rhn_id: '<sso_product_id>'
|
||||
```
|
||||
|
||||
where `sso_product_id` is the ID for the specific Red Hat Single Sign-On version, ie. _101971_ will install version _7.5_)
|
||||
|
||||
#### Install RHSSO from remote sources like Nexus etc, when the following variables are defined
|
||||
|
||||
```
|
||||
keycloak_admin_password: "<changeme>"
|
||||
keycloak_rhsso_enable: True
|
||||
rhsso_source_download_url: '<url to download RHSSO zip file>'
|
||||
```
|
||||
|
||||
#### Install RHSSO from local source when the following variable is defined
|
||||
|
||||
```
|
||||
keycloak_admin_password: "<changeme>"
|
||||
keycloak_rhsso_enable: True
|
||||
zip_file_local_path: <rhsso zip file on Ansible control node local path>
|
||||
```
|
||||
|
||||
### Install role
|
||||
|
||||
* [`keycloak`](https://github.com/ansible-middleware/keycloak/blob/main/roles/keycloak/README.md): role for installing the service. _Requires: python3-netaddr_
|
||||
|
||||
### Example installation command
|
||||
|
||||
Execute the following command from the source root directory
|
||||
|
||||
```
|
||||
ansible-playbook -i <ansible_hosts> -e @rhn-creds.yml playbooks/keycloak.yml -e keycloak_admin_password=<changeme>
|
||||
```
|
||||
|
||||
- `keycloak_admin_password` Password for the administration console user account.
|
||||
- `keycloak_quarkus_bootstrap_admin_password` password for the administration console user account.
|
||||
- `ansible_hosts` is the inventory, below is an example inventory for deploying to localhost
|
||||
|
||||
```
|
||||
@@ -100,22 +140,22 @@ ansible-playbook -i <ansible_hosts> -e @rhn-creds.yml playbooks/keycloak.yml -e
|
||||
localhost ansible_connection=local
|
||||
```
|
||||
|
||||
## Configuration
|
||||
Note: when deploying clustered configurations, all hosts belonging to the cluster must be present in `ansible_play_batch`; ie. they must be targeted by the same ansible-playbook execution.
|
||||
|
||||
### Config Playbook
|
||||
### Configure with roles
|
||||
|
||||
`playbooks/keycloak-realm.yml` creates provided realm, user federation(s), client(s), client role(s) and client user(s) if they don't exist.
|
||||
<!--start rhbk_realm_playbook -->
|
||||
* [`playbooks/keycloak_realm.yml`](https://github.com/ansible-middleware/keycloak/blob/main/playbooks/keycloak_realm.yml) creates or updates provided realm, user federation(s), client(s), client role(s) and client user(s).
|
||||
<!--end rhbk_realm_playbook -->
|
||||
* [`playbooks/keycloak_realm_client.yml`](https://github.com/ansible-middleware/keycloak/blob/main/playbooks/keycloak_realm_client.yml) creates a realm with clients, roles and users using the `keycloak_realm` role.
|
||||
* [`playbooks/keycloak_federation.yml`](https://github.com/ansible-middleware/keycloak/blob/main/playbooks/keycloak_federation.yml) configures user federation providers.
|
||||
|
||||
### Config role
|
||||
#### Example configuration command
|
||||
|
||||
* [`keycloak_realm`](https://github.com/ansible-middleware/keycloak/blob/main/roles/keycloak_realm/README.md): role for configuring a realm, user federation(s), clients and users, in an installed service.
|
||||
Execute the following command from the source root directory:
|
||||
|
||||
### Example configuration command
|
||||
|
||||
Execute the following command from the source root directory
|
||||
|
||||
```
|
||||
ansible-playbook -i <ansible_hosts> playbooks/keycloak-realm.yml -e keycloak_admin_password=<changeme> -e keycloak_realm=test
|
||||
```bash
|
||||
ansible-playbook -i <ansible_hosts> playbooks/keycloak_realm.yml -e keycloak_admin_password=<changeme> -e keycloak_realm=test
|
||||
```
|
||||
|
||||
- `keycloak_admin_password` password for the administration console user account.
|
||||
@@ -126,10 +166,59 @@ ansible-playbook -i <ansible_hosts> playbooks/keycloak-realm.yml -e keycloak_adm
|
||||
[keycloak]
|
||||
localhost ansible_connection=local
|
||||
```
|
||||
<!--start rhbk_realm_readme -->
|
||||
For full configuration details, refer to the [keycloak_realm role README](https://github.com/ansible-middleware/keycloak/blob/main/roles/keycloak_realm/README.md).
|
||||
<!--end rhbk_realm_readme -->
|
||||
|
||||
### Configure with modules
|
||||
|
||||
Module playbooks target an already running Keycloak instance. All modules use the `middleware_automation.keycloak` collection namespace.
|
||||
|
||||
* [`playbooks/keycloak_client_scope.yml`](https://github.com/ansible-middleware/keycloak/blob/main/playbooks/keycloak_client_scope.yml) creates a client scope with protocol mappers using the `keycloak_client_scope` module.
|
||||
* [`playbooks/keycloak_authentication_flow.yml`](https://github.com/ansible-middleware/keycloak/blob/main/playbooks/keycloak_authentication_flow.yml) creates a custom authentication flow with execution steps using the `keycloak_authentication_flow` module.
|
||||
|
||||
Example task using shared authentication defaults:
|
||||
|
||||
```yaml
|
||||
- hosts: localhost
|
||||
module_defaults:
|
||||
group/middleware_automation.keycloak.keycloak:
|
||||
auth_keycloak_url: http://localhost:8080
|
||||
auth_realm: master
|
||||
auth_username: admin
|
||||
auth_password: "{{ keycloak_admin_password }}"
|
||||
tasks:
|
||||
- name: Create a user in a realm
|
||||
middleware_automation.keycloak.keycloak_user:
|
||||
realm: TestRealm
|
||||
username: testuser
|
||||
first_name: Test
|
||||
last_name: User
|
||||
email: testuser@example.com
|
||||
enabled: true
|
||||
state: present
|
||||
```
|
||||
|
||||
When migrating from `community.general`, replace the collection prefix in playbooks (for example `community.general.keycloak_user` becomes `middleware_automation.keycloak.keycloak_user`) and use `keycloak_client_scope` instead of `keycloak_clientscope`.
|
||||
|
||||
|
||||
## Support
|
||||
|
||||
<!--start support -->
|
||||
|
||||
For bug reports and feature requests, use [GitHub Issues](https://github.com/ansible-middleware/keycloak/issues).
|
||||
|
||||
<!--end support -->
|
||||
|
||||
|
||||
## Release and Upgrade Notes
|
||||
|
||||
For details on changes between versions, please see the [CHANGELOG](https://github.com/ansible-middleware/keycloak/blob/main/CHANGELOG.rst) for this collection.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
Apache License v2.0 or later
|
||||
|
||||
See [LICENCE](LICENSE) to view the full text.
|
||||
|
||||
<!--start license -->
|
||||
See [LICENSE](LICENSE) to view the full text.
|
||||
<!--end license -->
|
||||
|
||||
9
bindep.txt
Normal file
9
bindep.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
python3-dev [compile platform:dpkg]
|
||||
python3-devel [compile platform:rpm]
|
||||
python39-devel [compile platform:centos-8 platform:rhel-8]
|
||||
git-lfs [platform:rpm platform:dpkg]
|
||||
python3-netaddr [platform:rpm platform:dpkg]
|
||||
python3-lxml [platform:rpm platform:dpkg]
|
||||
python3-jmespath [platform:rpm platform:dpkg]
|
||||
python3-requests [platform:rpm platform:dpkg]
|
||||
|
||||
827
changelogs/changelog.yaml
Normal file
827
changelogs/changelog.yaml
Normal file
@@ -0,0 +1,827 @@
|
||||
ancestor: 0.2.6
|
||||
releases:
|
||||
1.0.0:
|
||||
changes:
|
||||
release_summary: 'This is the first stable release of the ``middleware_automation.keycloak``
|
||||
collection.
|
||||
|
||||
'
|
||||
release_date: '2022-03-04'
|
||||
1.0.1:
|
||||
changes:
|
||||
major_changes:
|
||||
- Apply latest cumulative patch of RH-SSO automatically when new parameter ``keycloak_rhsso_apply_patches``
|
||||
is ``true`` `#18 <https://github.com/ansible-middleware/keycloak/pull/18>`_
|
||||
minor_changes:
|
||||
- Clustered installs now perform database initialization on first node to avoid
|
||||
locking issues `#17 <https://github.com/ansible-middleware/keycloak/pull/17>`_
|
||||
release_summary: 'Minor enhancements, bug and documentation fixes.
|
||||
|
||||
'
|
||||
release_date: '2022-03-11'
|
||||
1.0.2:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Set ``keycloak_frontend_url`` default according to other defaults `#25 <https://github.com/ansible-middleware/keycloak/pull/25>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Make ``keycloak_admin_password`` a default with assert (was: role variable)
|
||||
`#26 <https://github.com/ansible-middleware/keycloak/pull/26>`_
|
||||
|
||||
'
|
||||
- 'Simplify dependency install logic and reduce play execution time `#19 <https://github.com/ansible-middleware/keycloak/pull/19>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 19.yaml
|
||||
- 25.yaml
|
||||
- 26.yaml
|
||||
release_date: '2022-04-01'
|
||||
1.0.3:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Make sure systemd unit starts with selected java JVM `#31 <https://github.com/ansible-middleware/keycloak/pull/31>`_
|
||||
|
||||
'
|
||||
major_changes:
|
||||
- 'New role for installing keycloak >= 17.0.0 (quarkus) `#29 <https://github.com/ansible-middleware/keycloak/pull/29>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Add ``keycloak_config_override_template`` parameter for passing a custom
|
||||
xml config template `#30 <https://github.com/ansible-middleware/keycloak/pull/30>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 29.yaml
|
||||
- 30.yaml
|
||||
- 31.yaml
|
||||
release_date: '2022-05-09'
|
||||
1.0.4:
|
||||
changes:
|
||||
release_summary: 'Internal release, documentation or test changes only.
|
||||
|
||||
'
|
||||
release_date: '2022-05-11'
|
||||
1.0.5:
|
||||
changes:
|
||||
minor_changes:
|
||||
- 'Update config options: keycloak and quarkus `#32 <https://github.com/ansible-middleware/keycloak/pull/32>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 32.yaml
|
||||
release_date: '2022-05-25'
|
||||
1.0.6:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'keycloak_quarkus: add selected java to PATH in systemd unit `#34 <https://github.com/ansible-middleware/keycloak/pull/34>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: set logfile path correctly under keycloak home `#35 <https://github.com/ansible-middleware/keycloak/pull/35>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 34.yaml
|
||||
- 35.yaml
|
||||
release_date: '2022-06-01'
|
||||
1.0.7:
|
||||
changes:
|
||||
breaking_changes:
|
||||
- 'keycloak_quarkus: use absolute path for certificate files `#39 <https://github.com/ansible-middleware/keycloak/pull/39>`_
|
||||
|
||||
'
|
||||
bugfixes:
|
||||
- 'keycloak_quarkus: use become for tasks that will otherwise fail `#38 <https://github.com/ansible-middleware/keycloak/pull/38>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 38.yaml
|
||||
- 39.yaml
|
||||
release_date: '2022-07-06'
|
||||
1.1.0:
|
||||
changes:
|
||||
breaking_changes:
|
||||
- 'Rename variables from ``infinispan_`` prefix to ``keycloak_infinispan_``
|
||||
`#42 <https://github.com/ansible-middleware/keycloak/pull/42>`_
|
||||
|
||||
'
|
||||
bugfixes:
|
||||
- 'keycloak_quarkus: fix /var/log/keycloak symlink to keycloak log directory
|
||||
`#44 <https://github.com/ansible-middleware/keycloak/pull/44>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Update keycloak to 18.0.2 - sso to 7.6.1 `#46 <https://github.com/ansible-middleware/keycloak/pull/46>`_
|
||||
|
||||
'
|
||||
- 'Variable ``keycloak_no_log`` controls ansible ``no_log`` parameter (for debugging
|
||||
purposes) `#47 <https://github.com/ansible-middleware/keycloak/pull/47>`_
|
||||
|
||||
'
|
||||
- 'Variables to override service start retries and delay `#51 <https://github.com/ansible-middleware/keycloak/pull/51>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: variable to enable development mode `#45 <https://github.com/ansible-middleware/keycloak/pull/45>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 42.yaml
|
||||
- 44.yaml
|
||||
- 45.yaml
|
||||
- 46.yaml
|
||||
- 47.yaml
|
||||
- 51.yaml
|
||||
release_date: '2023-01-09'
|
||||
1.1.1:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'keycloak-quarkus: fix ``cache-config-file`` path in keycloak.conf.j2 template
|
||||
`#53 <https://github.com/ansible-middleware/keycloak/pull/53>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 53.yaml
|
||||
release_date: '2023-03-07'
|
||||
1.2.0:
|
||||
changes:
|
||||
major_changes:
|
||||
- 'Provide config for multiple modcluster proxies `#60 <https://github.com/ansible-middleware/keycloak/pull/60>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Allow to configure TCPPING for cluster discovery `#62 <https://github.com/ansible-middleware/keycloak/pull/62>`_
|
||||
|
||||
'
|
||||
- 'Drop community.general from dependencies `#61 <https://github.com/ansible-middleware/keycloak/pull/61>`_
|
||||
|
||||
'
|
||||
- 'Switch middleware_automation.redhat_csp_download for middleware_automation.common
|
||||
`#63 <https://github.com/ansible-middleware/keycloak/pull/63>`_
|
||||
|
||||
'
|
||||
- 'Switch to middleware_automation.common for rh-sso patching `#64 <https://github.com/ansible-middleware/keycloak/pull/64>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 60.yaml
|
||||
- 61.yaml
|
||||
- 62.yaml
|
||||
- 63.yaml
|
||||
- 64.yaml
|
||||
release_date: '2023-03-16'
|
||||
1.2.1:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Pass attributes to realm clients `#69 <https://github.com/ansible-middleware/keycloak/pull/69>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Allow to setup keycloak HA cluster without remote cache store `#68 <https://github.com/ansible-middleware/keycloak/pull/68>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 68.yaml
|
||||
- 69.yaml
|
||||
release_date: '2023-04-11'
|
||||
1.2.4:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Fix deprecation warning for ``ipaddr`` `#77 <https://github.com/ansible-middleware/keycloak/pull/77>`_
|
||||
|
||||
'
|
||||
- 'Fix undefined facts when offline patching sso `#71 <https://github.com/ansible-middleware/keycloak/pull/71>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Add ``sqlserver`` to keycloak role jdbc configurations `#78 <https://github.com/ansible-middleware/keycloak/pull/78>`_
|
||||
|
||||
'
|
||||
- 'Add configurability for XA transactions `#73 <https://github.com/ansible-middleware/keycloak/pull/73>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 71.yaml
|
||||
- 73.yaml
|
||||
- 77.yaml
|
||||
- 78.yaml
|
||||
release_date: '2023-05-09'
|
||||
1.2.5:
|
||||
changes:
|
||||
minor_changes:
|
||||
- 'Add configuration for database connection pool validation `#85 <https://github.com/ansible-middleware/keycloak/pull/85>`_
|
||||
|
||||
'
|
||||
- 'Allow to configure administration endpoint URL `#86 <https://github.com/ansible-middleware/keycloak/pull/86>`_
|
||||
|
||||
'
|
||||
- 'Allow to force backend URLs to frontend URLs `#84 <https://github.com/ansible-middleware/keycloak/pull/84>`_
|
||||
|
||||
'
|
||||
- 'Introduce systemd unit restart behavior `#81 <https://github.com/ansible-middleware/keycloak/pull/81>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 81.yaml
|
||||
- 84.yaml
|
||||
- 85.yaml
|
||||
- 86.yaml
|
||||
release_date: '2023-05-26'
|
||||
1.2.6:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Handle WFLYCTL0117 when background validation millis is 0 `#90 <https://github.com/ansible-middleware/keycloak/pull/90>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Add profile features enabling/disabling `#87 <https://github.com/ansible-middleware/keycloak/pull/87>`_
|
||||
|
||||
'
|
||||
- 'Improve service restart behavior configuration `#88 <https://github.com/ansible-middleware/keycloak/pull/88>`_
|
||||
|
||||
'
|
||||
- 'Update default xa_datasource_class value for mariadb jdbc configuration `#89
|
||||
<https://github.com/ansible-middleware/keycloak/pull/89>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 87.yaml
|
||||
- 88.yaml
|
||||
- 89.yaml
|
||||
- 90.yaml
|
||||
release_date: '2023-06-07'
|
||||
1.2.7:
|
||||
changes:
|
||||
minor_changes:
|
||||
- 'Allow to override jgroups subnet `#93 <https://github.com/ansible-middleware/keycloak/pull/93>`_
|
||||
|
||||
'
|
||||
- 'keycloak-quarkus: update keycloakx to v21.1.1 `#92 <https://github.com/ansible-middleware/keycloak/pull/92>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 92.yaml
|
||||
- 93.yaml
|
||||
release_date: '2023-06-19'
|
||||
1.2.8:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Fix incorrect checks for ``keycloak_jgroups_subnet`` `#98 <https://github.com/ansible-middleware/keycloak/pull/98>`_
|
||||
|
||||
'
|
||||
- 'Undefine ``keycloak_db_valid_conn_sql`` default `#91 <https://github.com/ansible-middleware/keycloak/pull/91>`_
|
||||
|
||||
'
|
||||
- 'Update bindep.txt package python3-devel to support RHEL9 `#105 <https://github.com/ansible-middleware/keycloak/pull/105>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'keycloak_quarkus: set openjdk 17 as default `#103 <https://github.com/ansible-middleware/keycloak/pull/103>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: update to version 22.0.1 `#107 <https://github.com/ansible-middleware/keycloak/pull/107>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 103.yaml
|
||||
- 105.yaml
|
||||
- 107.yaml
|
||||
- 91.yaml
|
||||
- 98.yaml
|
||||
release_date: '2023-08-28'
|
||||
1.3.0:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'keycloak_quarkus: fix validation failure upon port configuration change `#113
|
||||
<https://github.com/ansible-middleware/keycloak/pull/113>`_
|
||||
|
||||
'
|
||||
major_changes:
|
||||
- 'Run service as ``keycloak_service_user`` `#106 <https://github.com/ansible-middleware/keycloak/pull/106>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'keycloak_quarkus: Update Keycloak to version 22.0.3 `#112 <https://github.com/ansible-middleware/keycloak/pull/112>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: fix admin console redirect when running locally `#111 <https://github.com/ansible-middleware/keycloak/pull/111>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: skip proxy config if ``keycloak_quarkus_proxy_mode`` is
|
||||
``none`` `#109 <https://github.com/ansible-middleware/keycloak/pull/109>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 106.yaml
|
||||
- 109.yaml
|
||||
- 111.yaml
|
||||
- 112.yaml
|
||||
- 113.yaml
|
||||
release_date: '2023-09-25'
|
||||
2.0.0:
|
||||
changes:
|
||||
breaking_changes:
|
||||
- 'Add support for more http-related configs `#115 <https://github.com/ansible-middleware/keycloak/pull/115>`_
|
||||
|
||||
'
|
||||
- 'Update minimum ansible-core version > 2.14 `#119 <https://github.com/ansible-middleware/keycloak/pull/119>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: enable config of key store and trust store `#116 <https://github.com/ansible-middleware/keycloak/pull/116>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Add new parameter for port offset configuration `#124 <https://github.com/ansible-middleware/keycloak/pull/124>`_
|
||||
|
||||
'
|
||||
- 'Update Keycloak to version 22.0.5 `#122 <https://github.com/ansible-middleware/keycloak/pull/122>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 115.yaml
|
||||
- 116.yaml
|
||||
- 119.yaml
|
||||
- 122.yaml
|
||||
- 124.yaml
|
||||
release_date: '2023-11-20'
|
||||
2.0.1:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'keycloak_quarkus: template requires lowercase boolean values `#138 <https://github.com/ansible-middleware/keycloak/pull/138>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'keycloak_quarkus: add hostname-strict parameter `#139 <https://github.com/ansible-middleware/keycloak/pull/139>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: update to version 23.0.1 `#133 <https://github.com/ansible-middleware/keycloak/pull/133>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 133.yaml
|
||||
- 138.yaml
|
||||
- 139.yaml
|
||||
release_date: '2023-12-07'
|
||||
2.0.2:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'keycloak_quarkus: Use ``keycloak_quarkus_java_opts`` `#154 <https://github.com/ansible-middleware/keycloak/pull/154>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: allow ports <1024 (e.g. :443) in systemd unit `#150 <https://github.com/ansible-middleware/keycloak/pull/150>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'keycloak_quarkus: Add support for sqlserver jdbc driver `#148 <https://github.com/ansible-middleware/keycloak/pull/148>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: allow configuration of ``hostname-strict-backchannel``
|
||||
`#152 <https://github.com/ansible-middleware/keycloak/pull/152>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: systemd restart behavior `#145 <https://github.com/ansible-middleware/keycloak/pull/145>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 145.yaml
|
||||
- 148.yaml
|
||||
- 150.yaml
|
||||
- 152.yaml
|
||||
- 154.yaml
|
||||
release_date: '2024-01-17'
|
||||
2.1.0:
|
||||
changes:
|
||||
breaking_changes:
|
||||
- 'keycloak_quarkus: renamed infinispan host list configuration `#157 <https://github.com/ansible-middleware/keycloak/pull/157>`_
|
||||
|
||||
'
|
||||
bugfixes:
|
||||
- 'keycloak_quarkus: fix custom JAVA_HOME parameter name `#171 <https://github.com/ansible-middleware/keycloak/pull/171>`_
|
||||
|
||||
'
|
||||
major_changes:
|
||||
- 'Implement infinispan TCPPING discovery protocol `#159 <https://github.com/ansible-middleware/keycloak/pull/159>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Set enable-recovery when xa transactions are enabled `#167 <https://github.com/ansible-middleware/keycloak/pull/167>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: Allow configuring log rotate options in quarkus configuration
|
||||
`#161 <https://github.com/ansible-middleware/keycloak/pull/161>`_
|
||||
|
||||
'
|
||||
- 'keycloak_quarkus: ``sticky-session`` for infinispan routes `#163 <https://github.com/ansible-middleware/keycloak/pull/163>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 157.yaml
|
||||
- 159.yaml
|
||||
- 161.yaml
|
||||
- 163.yaml
|
||||
- 167.yaml
|
||||
- 171.yaml
|
||||
release_date: '2024-02-28'
|
||||
2.1.1:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Fix permissions on controller-side downloaded artifacts `#184 <https://github.com/ansible-middleware/keycloak/pull/184>`_
|
||||
|
||||
'
|
||||
- 'JVM args moved to ``JAVA_OPTS`` envvar (instead of JAVA_OPTS_APPEND) `#186
|
||||
<https://github.com/ansible-middleware/keycloak/pull/186>`_
|
||||
|
||||
'
|
||||
- 'Unrelax configuration file permissions `#191 <https://github.com/ansible-middleware/keycloak/pull/191>`_
|
||||
|
||||
'
|
||||
- 'Utilize comment filter for ``ansible_managed`` annotations `#176 <https://github.com/ansible-middleware/keycloak/pull/176>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Add reverse ``proxy_headers`` config, supersedes ``proxy_mode`` `#187 <https://github.com/ansible-middleware/keycloak/pull/187>`_
|
||||
|
||||
'
|
||||
- 'Debian/Ubuntu compatibility `#178 <https://github.com/ansible-middleware/keycloak/pull/178>`_
|
||||
|
||||
'
|
||||
- 'Use ``keycloak_realm`` as default for sub-entities `#180 <https://github.com/ansible-middleware/keycloak/pull/180>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 176.yaml
|
||||
- 178.yaml
|
||||
- 180.yaml
|
||||
- 184.yaml
|
||||
- 186.yaml
|
||||
- 187.yaml
|
||||
- 191.yaml
|
||||
release_date: '2024-04-17'
|
||||
2.1.2:
|
||||
changes:
|
||||
release_summary: 'Internal release, documentation or test changes only.
|
||||
|
||||
'
|
||||
release_date: '2024-04-17'
|
||||
2.2.0:
|
||||
changes:
|
||||
major_changes:
|
||||
- 'Support java keystore for configuration of sensitive options `#189 <https://github.com/ansible-middleware/keycloak/pull/189>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Add ``wait_for_port`` and ``wait_for_log`` systemd unit logic `#199 <https://github.com/ansible-middleware/keycloak/pull/199>`_
|
||||
|
||||
'
|
||||
- 'Customize jdbc driver downloads, optional authentication `#202 <https://github.com/ansible-middleware/keycloak/pull/202>`_
|
||||
|
||||
'
|
||||
- 'Keystore-based vault SPI configuration `#196 <https://github.com/ansible-middleware/keycloak/pull/196>`_
|
||||
|
||||
'
|
||||
- 'New ``keycloak_quarkus_hostname_strict_https`` parameter `#195 <https://github.com/ansible-middleware/keycloak/pull/195>`_
|
||||
|
||||
'
|
||||
- 'Providers config and custom providers `#201 <https://github.com/ansible-middleware/keycloak/pull/201>`_
|
||||
|
||||
'
|
||||
- 'Remove administrator credentials from files once keycloak is bootstrapped
|
||||
`#197 <https://github.com/ansible-middleware/keycloak/pull/197>`_
|
||||
|
||||
'
|
||||
- 'Update keycloak to 24.0 `#194 <https://github.com/ansible-middleware/keycloak/pull/194>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 189.yaml
|
||||
- 194.yaml
|
||||
- 195.yaml
|
||||
- 196.yaml
|
||||
- 197.yaml
|
||||
- 199.yaml
|
||||
- 201.yaml
|
||||
- 202.yaml
|
||||
release_date: '2024-05-01'
|
||||
2.2.1:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'JDBC provider: fix clause in argument validation `#204 <https://github.com/ansible-middleware/keycloak/pull/204>`_
|
||||
|
||||
'
|
||||
release_summary: Internal release, documentation or test changes only.
|
||||
fragments:
|
||||
- 204.yaml
|
||||
- v2.2.1-devel_summary.yaml
|
||||
release_date: '2024-05-02'
|
||||
2.2.2:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Turn off controller privilege escalation `#209 <https://github.com/ansible-middleware/keycloak/pull/209>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Copying of key material for TLS configuration `#210 <https://github.com/ansible-middleware/keycloak/pull/210>`_
|
||||
|
||||
'
|
||||
- 'Validate certs parameter for JDBC driver downloads `#207 <https://github.com/ansible-middleware/keycloak/pull/207>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 207.yaml
|
||||
- 209.yaml
|
||||
- 210.yaml
|
||||
release_date: '2024-05-06'
|
||||
2.3.0:
|
||||
changes:
|
||||
bugfixes:
|
||||
- '``kc.sh build`` uses configured jdk `#211 <https://github.com/ansible-middleware/keycloak/pull/211>`_
|
||||
|
||||
'
|
||||
major_changes:
|
||||
- 'Allow for custom providers hosted on maven repositories `#223 <https://github.com/ansible-middleware/keycloak/pull/223>`_
|
||||
|
||||
'
|
||||
- 'Restart handler strategy behaviour `#231 <https://github.com/ansible-middleware/keycloak/pull/231>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Add support for policy files `#225 <https://github.com/ansible-middleware/keycloak/pull/225>`_
|
||||
|
||||
'
|
||||
- 'Allow to add extra custom env vars in sysconfig file `#229 <https://github.com/ansible-middleware/keycloak/pull/229>`_
|
||||
|
||||
'
|
||||
- 'Download from alternate URL with optional http authentication `#220 <https://github.com/ansible-middleware/keycloak/pull/220>`_
|
||||
|
||||
'
|
||||
- 'Update Keycloak to version 24.0.4 `#218 <https://github.com/ansible-middleware/keycloak/pull/218>`_
|
||||
|
||||
'
|
||||
- '``proxy-header`` enhancement `#227 <https://github.com/ansible-middleware/keycloak/pull/227>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 211.yaml
|
||||
- 218.yaml
|
||||
- 220.yaml
|
||||
- 223.yaml
|
||||
- 225.yaml
|
||||
- 227.yaml
|
||||
- 229.yaml
|
||||
- 231.yaml
|
||||
release_date: '2024-05-20'
|
||||
2.4.0:
|
||||
changes:
|
||||
major_changes:
|
||||
- 'Enable by default health check on restart `#234 <https://github.com/ansible-middleware/keycloak/pull/234>`_
|
||||
|
||||
'
|
||||
- 'Update minimum ansible-core version > 2.15 `#232 <https://github.com/ansible-middleware/keycloak/pull/232>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 232.yaml
|
||||
- 234.yaml
|
||||
release_date: '2024-06-04'
|
||||
2.4.1:
|
||||
changes:
|
||||
release_summary: Internal release, documentation or test changes only.
|
||||
fragments:
|
||||
- v2.4.1-devel_summary.yaml
|
||||
release_date: '2024-07-02'
|
||||
2.4.2:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Add wait_for_port number parameter `#237 <https://github.com/ansible-middleware/keycloak/pull/237>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'New parameter ``keycloak_quarkus_download_path`` `#239 <https://github.com/ansible-middleware/keycloak/pull/239>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 237.yaml
|
||||
- 239.yaml
|
||||
release_date: '2024-09-26'
|
||||
2.4.3:
|
||||
changes:
|
||||
minor_changes:
|
||||
- 'Update keycloak to 24.0.5 `#241 <https://github.com/ansible-middleware/keycloak/pull/241>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 241.yaml
|
||||
release_date: '2024-10-16'
|
||||
3.0.0:
|
||||
changes:
|
||||
breaking_changes:
|
||||
- 'Bump major and ansible-core versions `#266 <https://github.com/ansible-middleware/keycloak/pull/266>`_
|
||||
|
||||
'
|
||||
- 'Rename parameters to follow upstream `#270 <https://github.com/ansible-middleware/keycloak/pull/270>`_
|
||||
|
||||
'
|
||||
- 'Update for keycloak v26 `#254 <https://github.com/ansible-middleware/keycloak/pull/254>`_
|
||||
|
||||
'
|
||||
bugfixes:
|
||||
- 'Access token lifespan is too short for ansible run `#251 <https://github.com/ansible-middleware/keycloak/pull/251>`_
|
||||
|
||||
'
|
||||
- 'Load environment vars during kc rebuild `#274 <https://github.com/ansible-middleware/keycloak/pull/274>`_
|
||||
|
||||
'
|
||||
- 'Rebuild config and restart service for local providers `#250 <https://github.com/ansible-middleware/keycloak/pull/250>`_
|
||||
|
||||
'
|
||||
- 'Rename and honour parameter ``keycloak_quarkus_http_host`` `#271 <https://github.com/ansible-middleware/keycloak/pull/271>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Add theme cache invalidation handler `#252 <https://github.com/ansible-middleware/keycloak/pull/252>`_
|
||||
|
||||
'
|
||||
- 'keycloak_realm: change url variables to defaults `#268 <https://github.com/ansible-middleware/keycloak/pull/268>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 250.yaml
|
||||
- 251.yaml
|
||||
- 252.yaml
|
||||
- 254.yaml
|
||||
- 266.yaml
|
||||
- 268.yaml
|
||||
- 270.yaml
|
||||
- 271.yaml
|
||||
- 274.yaml
|
||||
modules:
|
||||
- description: Allows administration of Keycloak realm via Keycloak API
|
||||
name: keycloak_realm
|
||||
namespace: ''
|
||||
release_date: '2025-04-23'
|
||||
3.0.1:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Trigger rebuild handler on envvars file change `#276 <https://github.com/ansible-middleware/keycloak/pull/276>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Version update to 26.0.8 / rhbk 26.0.11 `#277 <https://github.com/ansible-middleware/keycloak/pull/277>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 276.yaml
|
||||
- 277.yaml
|
||||
release_date: '2025-05-02'
|
||||
3.0.2:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Fix ``keycloak_quarkus_force_install`` parameter being ignored by install
|
||||
`#296 <https://github.com/ansible-middleware/keycloak/pull/296>`_
|
||||
|
||||
'
|
||||
- 'Fix alternate download location being ignored (JBossNeworkAPI always used)
|
||||
`#298 <https://github.com/ansible-middleware/keycloak/pull/298>`_
|
||||
|
||||
'
|
||||
- 'Run config rebuild after SPI providers update `#285 <https://github.com/ansible-middleware/keycloak/pull/285>`_
|
||||
|
||||
'
|
||||
- 'Use jdk21 as default in debian `#289 <https://github.com/ansible-middleware/keycloak/pull/289>`_
|
||||
|
||||
'
|
||||
- 'keycloak_realm: federation default provider type should be a string `#302
|
||||
<https://github.com/ansible-middleware/keycloak/pull/302>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'New ``checksum`` property for keycloak_quarkus_providers `#280 <https://github.com/ansible-middleware/keycloak/pull/280>`_
|
||||
|
||||
'
|
||||
- 'New parameter to set the jgroups host IP address `#281 <https://github.com/ansible-middleware/keycloak/pull/281>`_
|
||||
|
||||
'
|
||||
- 'Session storage / distributed caches `#287 <https://github.com/ansible-middleware/keycloak/pull/287>`_
|
||||
|
||||
'
|
||||
- 'Update keycloak/RHBK to v26.2.4 `#283 <https://github.com/ansible-middleware/keycloak/pull/283>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 280.yaml
|
||||
- 281.yaml
|
||||
- 283.yaml
|
||||
- 285.yaml
|
||||
- 287.yaml
|
||||
- 289.yaml
|
||||
- 296.yaml
|
||||
- 298.yaml
|
||||
- 302.yaml
|
||||
release_date: '2025-07-01'
|
||||
3.0.3:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'keycloak collection CI label is showing no status `#312 <https://github.com/ansible-middleware/keycloak/pull/312>`_
|
||||
|
||||
'
|
||||
- 'keycloak_realm: allow secret in keycloak_clients `#304 <https://github.com/ansible-middleware/keycloak/pull/304>`_
|
||||
|
||||
'
|
||||
major_changes:
|
||||
- 'Update to keycloak 26.3.0 `#293 <https://github.com/ansible-middleware/keycloak/pull/293>`_
|
||||
|
||||
'
|
||||
- 'ansible-core 2.19 compatibility `#310 <https://github.com/ansible-middleware/keycloak/pull/310>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Allow to install provider jars from remote paths `#303 <https://github.com/ansible-middleware/keycloak/pull/303>`_
|
||||
|
||||
'
|
||||
- 'Declared proxy_mode as deprecated, updated quarkus and realm readme `#306
|
||||
<https://github.com/ansible-middleware/keycloak/pull/306>`_
|
||||
|
||||
'
|
||||
- 'Fix config_key_store_file description to match variable name `#308 <https://github.com/ansible-middleware/keycloak/pull/308>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 293.yaml
|
||||
- 303.yaml
|
||||
- 304.yaml
|
||||
- 306.yaml
|
||||
- 308.yaml
|
||||
- 310.yaml
|
||||
- 312.yaml
|
||||
release_date: '2025-12-16'
|
||||
3.0.4:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Removing parseable from lint file as Additional properties are not allowed
|
||||
`#319 <https://github.com/ansible-middleware/keycloak/pull/319>`_
|
||||
|
||||
'
|
||||
major_changes:
|
||||
- 'AMW-467 Download keycloak binary from password protected HTTP location `#321
|
||||
<https://github.com/ansible-middleware/keycloak/pull/321>`_
|
||||
|
||||
'
|
||||
- 'v26.4.x compability `#317 <https://github.com/ansible-middleware/keycloak/pull/317>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'AMW-518 Validating arguments against arg spec ''main'' fails unexpectedly.
|
||||
`#324 <https://github.com/ansible-middleware/keycloak/pull/324>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 317.yaml
|
||||
- 319.yaml
|
||||
- 321.yaml
|
||||
- 324.yaml
|
||||
release_date: '2026-05-20'
|
||||
3.0.5:
|
||||
changes:
|
||||
minor_changes:
|
||||
- 'AMW-528 Deployment fails in keycloak_quarkus due to missing escalation variables
|
||||
`#335 <https://github.com/ansible-middleware/keycloak/pull/335>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 335.yaml
|
||||
release_date: '2026-05-20'
|
||||
3.0.6:
|
||||
changes:
|
||||
major_changes:
|
||||
- 'AMW-540 Fix the upstream collection requirements with common v1.2.4 `#337
|
||||
<https://github.com/ansible-middleware/keycloak/pull/337>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 337.yaml
|
||||
release_date: '2026-05-26'
|
||||
3.0.7:
|
||||
changes:
|
||||
bugfixes:
|
||||
- 'Fix molecule tests `#339 <https://github.com/ansible-middleware/keycloak/pull/339>`_
|
||||
|
||||
'
|
||||
major_changes:
|
||||
- 'Migrate Keycloak modules from the community.general collection to Keycloak
|
||||
collection. `#341 <https://github.com/ansible-middleware/keycloak/pull/341>`_
|
||||
|
||||
'
|
||||
minor_changes:
|
||||
- 'Fixing common module usage `#343 <https://github.com/ansible-middleware/keycloak/pull/343>`_
|
||||
|
||||
'
|
||||
- 'fix #336: https://github.com/ansible-middleware/common/pull/38 `#338 <https://github.com/ansible-middleware/keycloak/pull/338>`_
|
||||
|
||||
'
|
||||
fragments:
|
||||
- 338.yaml
|
||||
- 339.yaml
|
||||
- 341.yaml
|
||||
- 343.yaml
|
||||
release_date: '2026-06-01'
|
||||
32
changelogs/config.yaml
Normal file
32
changelogs/config.yaml
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
changelog_filename_template: ../CHANGELOG.rst
|
||||
changelog_filename_version_depth: 0
|
||||
changes_file: changelog.yaml
|
||||
changes_format: combined
|
||||
ignore_other_fragment_extensions: true
|
||||
keep_fragments: false
|
||||
mention_ancestor: true
|
||||
new_plugins_after_name: removed_features
|
||||
notesdir: fragments
|
||||
prelude_section_name: release_summary
|
||||
prelude_section_title: Release Summary
|
||||
sections:
|
||||
- - major_changes
|
||||
- Major Changes
|
||||
- - minor_changes
|
||||
- Minor Changes
|
||||
- - breaking_changes
|
||||
- Breaking Changes / Porting Guide
|
||||
- - deprecated_features
|
||||
- Deprecated Features
|
||||
- - removed_features
|
||||
- Removed Features
|
||||
- - security_fixes
|
||||
- Security Fixes
|
||||
- - bugfixes
|
||||
- Bugfixes
|
||||
- - known_issues
|
||||
- Known Issues
|
||||
title: middleware_automation.keycloak
|
||||
trivial_section_name: trivial
|
||||
use_fqcn: true
|
||||
2
changelogs/fragments/.gitignore
vendored
Normal file
2
changelogs/fragments/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
1
docs/CHANGELOG.rst
Symbolic link
1
docs/CHANGELOG.rst
Symbolic link
@@ -0,0 +1 @@
|
||||
../CHANGELOG.rst
|
||||
1
docs/README.md
Symbolic link
1
docs/README.md
Symbolic link
@@ -0,0 +1 @@
|
||||
../README.md
|
||||
21
docs/_gh_include/footer.inc
Normal file
21
docs/_gh_include/footer.inc
Normal file
@@ -0,0 +1,21 @@
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||
</div>
|
||||
<hr/>
|
||||
<div role="contentinfo">
|
||||
<p>© Copyright 2024, Red Hat, Inc.</p>
|
||||
</div>
|
||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
57
docs/_gh_include/header.inc
Normal file
57
docs/_gh_include/header.inc
Normal file
@@ -0,0 +1,57 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Keycloak Ansible Collection documentation index</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="stylesheet" href="https://ansible-middleware.github.io/keycloak/main/_static/pygments.css" type="text/css" />
|
||||
<link rel="stylesheet" href="https://ansible-middleware.github.io/keycloak/main/_static/css/theme.css" type="text/css" />
|
||||
<link rel="stylesheet" href="https://ansible-middleware.github.io/keycloak/main/_static/ansible-basic-sphinx-ext.css" type="text/css" />
|
||||
<script data-url_root="./" id="documentation_options" src="https://ansible-middleware.github.io/keycloak/main/_static/documentation_options.js"></script>
|
||||
<script src="https://ansible-middleware.github.io/keycloak/main/_static/jquery.js"></script>
|
||||
<script src="https://ansible-middleware.github.io/keycloak/main/_static/underscore.js"></script>
|
||||
<script src="https://ansible-middleware.github.io/keycloak/main/_static/doctools.js"></script>
|
||||
<script src="https://ansible-middleware.github.io/keycloak/main/_static/js/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav">
|
||||
<div class="wy-grid-for-nav">
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-scroll">
|
||||
<div class="wy-side-nav-search" >
|
||||
<a href="#" class="icon icon-home"> Keycloak Ansible Collection</a>
|
||||
</div>
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||
<p class="caption" role="heading"><span class="caption-text">Middleware Automation</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="https://ansible-middleware.github.io/infinispan/main/">Infinispan / Red Hat Data Grid</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="https://ansible-middleware.github.io/keycloak/main/">Keycloak / Red Hat Single Sign-On</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="https://ansible-middleware.github.io/wildfly/main/">Wildfly / Red Hat JBoss EAP</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="https://ansible-middleware.github.io/jws/main/">Tomcat / Red Hat JWS</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="https://ansible-middleware.github.io/amq/main/">ActiveMQ / Red Hat AMQ Broker</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="https://ansible-middleware.github.io/amq_streams/main/">Kafka / Red Hat AMQ Streams</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="https://ansible-middleware.github.io/common/main/">Ansible Middleware utilities</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="https://ansible-middleware.github.io/redhat-csp-download/main/">Red Hat CSP Download</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="https://ansible-middleware.github.io/ansible_collections_jcliff/main/">JCliff</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
<div role="navigation" aria-label="Page navigation">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="#" class="icon icon-home"></a> »</li>
|
||||
<li>Welcome to Keycloak Collection documentation</li>
|
||||
<li class="wy-breadcrumbs-aside"></li>
|
||||
</ul>
|
||||
<hr/>
|
||||
</div>
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
<div itemprop="articleBody">
|
||||
<section id="welcome-to-keycloak-collection-documentation">
|
||||
<h1>Welcome to Keycloak Collection documentation<a class="headerlink" href="#welcome-to-keycloak-collection-documentation" title="Permalink to this headline"></a></h1>
|
||||
<div class="toctree-wrapper compound">
|
||||
<p class="caption" role="heading"><span class="caption-text">Pick collection version:</span></p>
|
||||
<ul>
|
||||
171
docs/conf.py
Normal file
171
docs/conf.py
Normal file
@@ -0,0 +1,171 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Configuration file for the Sphinx documentation builder.
|
||||
#
|
||||
# This file does only contain a selection of the most common options. For a
|
||||
# full list see the documentation:
|
||||
# http://www.sphinx-doc.org/en/master/config
|
||||
|
||||
# -- Path setup --------------------------------------------------------------
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#
|
||||
import datetime
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('../plugins/module_utils/'))
|
||||
# sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = 'Keycloak Ansible Collection'
|
||||
copyright = '{y}, Red Hat, Inc.'.format(y=datetime.date.today().year)
|
||||
author = 'Red Hat, Inc.'
|
||||
|
||||
# The short X.Y version
|
||||
version = ''
|
||||
# The full version, including alpha/beta/rc tags
|
||||
release = ''
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#
|
||||
# needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'myst_parser',
|
||||
'sphinx.ext.autodoc',
|
||||
'sphinx.ext.intersphinx',
|
||||
'sphinx_antsibull_ext',
|
||||
'ansible_basic_sphinx_ext',
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = ['.rst', '.md']
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = 'en'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This pattern also affects html_static_path and html_extra_path .
|
||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '.tmp']
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'ansible'
|
||||
|
||||
highlight_language = 'YAML+Jinja'
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
html_theme_path = ['_themes']
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
# html_theme = 'alabaster'
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#
|
||||
# html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = []
|
||||
|
||||
# Custom sidebar templates, must be a dictionary that maps document names
|
||||
# to template names.
|
||||
#
|
||||
# The default sidebars (for documents that don't match any pattern) are
|
||||
# defined by theme itself. Builtin themes are using these templates by
|
||||
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
|
||||
# 'searchbox.html']``.
|
||||
#
|
||||
# html_sidebars = {}
|
||||
|
||||
|
||||
# -- Options for HTMLHelp output ---------------------------------------------
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'KeycloakCollectionDoc'
|
||||
|
||||
|
||||
# -- Options for LaTeX output ------------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'KeycloakCollection.tex', 'Red Hat Single Sign-On Ansible Collection Documentation',
|
||||
'Red Hat, Inc.', 'manual'),
|
||||
]
|
||||
|
||||
|
||||
# -- Options for manual page output ------------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'keycloakcollection', 'Red Hat Single Sign-On Ansible Collection Documentation',
|
||||
[author], 1)
|
||||
]
|
||||
|
||||
|
||||
# -- Options for Texinfo output ----------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'KeycloakCollection', 'Red Hat Single Sign-On Ansible Collection Documentation',
|
||||
author, 'KeycloakCollection', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
|
||||
# -- Extension configuration -------------------------------------------------
|
||||
|
||||
# -- Options for intersphinx extension ---------------------------------------
|
||||
|
||||
# Example configuration for intersphinx: refer to the Python standard library.
|
||||
intersphinx_mapping = {'python': ('https://docs.python.org/2', None), 'ansible': ('https://docs.ansible.com/ansible/latest/', None)}
|
||||
1
docs/developing.md
Symbolic link
1
docs/developing.md
Symbolic link
@@ -0,0 +1 @@
|
||||
../CONTRIBUTING.md
|
||||
34
docs/index.rst
Normal file
34
docs/index.rst
Normal file
@@ -0,0 +1,34 @@
|
||||
.. Red Hat middleware_automation Keycloak Ansible Collection documentation main file
|
||||
|
||||
Welcome to Keycloak Collection documentation
|
||||
============================================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: User documentation
|
||||
|
||||
README
|
||||
plugins/index
|
||||
roles/index
|
||||
Changelog <CHANGELOG>
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Developer documentation
|
||||
|
||||
Developing <developing>
|
||||
Testing <testing>
|
||||
Releasing <releasing>
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: Middleware collections
|
||||
|
||||
Keycloak / Red Hat Single Sign-On <https://ansible-middleware.github.io/keycloak/main/>
|
||||
Infinispan / Red Hat Data Grid <https://ansible-middleware.github.io/infinispan/main/>
|
||||
Wildfly / Red Hat JBoss EAP <https://ansible-middleware.github.io/wildfly/main/>
|
||||
Tomcat / Red Hat JWS <https://ansible-middleware.github.io/jws/main/>
|
||||
ActiveMQ / Red Hat AMQ Broker <https://ansible-middleware.github.io/amq/main/>
|
||||
Kafka / Red Hat AMQ Streams <https://ansible-middleware.github.io/amq_streams/main/>
|
||||
Ansible Middleware utilities <https://ansible-middleware.github.io/common/main/>
|
||||
JCliff <https://ansible-middleware.github.io/ansible_collections_jcliff/main/>
|
||||
61
docs/releasing.md
Normal file
61
docs/releasing.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# Collection Versioning Strategy
|
||||
|
||||
Each supported collection maintained by Ansible follows Semantic Versioning 2.0.0 (https://semver.org/), for example:
|
||||
Given a version number MAJOR.MINOR.PATCH, the following is incremented:
|
||||
|
||||
MAJOR version: when making incompatible API changes (see Feature Release scenarios below for examples)
|
||||
|
||||
MINOR version: when adding features or functionality in a backwards compatible manner, or updating testing matrix and/or metadata (deprecation)
|
||||
|
||||
PATCH version: when adding backwards compatible bug fixes or security fixes (strict).
|
||||
|
||||
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
|
||||
|
||||
The first version of a generally available supported collection on Ansible Automation Hub shall be version 1.0.0. NOTE: By default, all newly created collections may begin with a smaller default version of 0.1.0, and therefore a version of 1.0.0 should be explicitly stated by the collection maintainer.
|
||||
|
||||
## New content is added to an existing collection
|
||||
|
||||
Assuming the current release is 1.0.0, and a new module is ready to be added to the collection, the minor version would be incremented to 1.1.0. The change in the MINOR version indicates an additive change was made while maintaining backward compatibility for existing content within the collection.
|
||||
|
||||
|
||||
## New feature to existing plugin or role within a collection (backwards compatible)
|
||||
|
||||
Assuming the current release is 1.0.0, and new features for an existing module are ready for release . We would increment the MINOR version to 1.1.0. The change in the MINOR version indicates an additive change was made while maintaining backward compatibility for existing content within the collection.
|
||||
|
||||
|
||||
## Bug fix or security fix to existing content within a collection
|
||||
|
||||
Assuming the current release is 1.0.0 and a bug is fixed prior to the next minor release, the PATCH version would be incremented to 1.0.1. The patch indicates only a bug was fixed within a current version. The PATCH release does not contain new content, nor was functionality removed. Bug fixes may be included in a MINOR or MAJOR feature release if the timing allows, eliminating the need for a PATCH dedicated to the fix.
|
||||
|
||||
|
||||
## Breaking change to any content within a collection
|
||||
|
||||
Assuming the current release is 1.0.0, and a breaking change (API or module) is introduced for a user or developer. The MAJOR version would be incremented to 2.0.0.
|
||||
|
||||
Examples of breaking changes within a collection may include but are not limited to:
|
||||
|
||||
- Argspec changes for a module that require either inventory structure or playbook changes.
|
||||
- A change in the shape of either the inbound or returned payload of a filter plugin.
|
||||
- Changes to a connection plugin that require additional inventory parameters or ansible.cfg entries.
|
||||
- New functionality added to a module that changes the outcome of that module as released in previous versions.
|
||||
- The removal of plugins from a collection.
|
||||
|
||||
|
||||
## Content removed from a collection
|
||||
|
||||
Deleting a module or API is a breaking change. Please see the 'Breaking change' section for how to version this.
|
||||
|
||||
|
||||
## A typographical error was fixed in the documentation for a collection
|
||||
|
||||
A correction to the README would be considered a bug fix and the PATCH incremented. See 'Bug fix' above.
|
||||
|
||||
|
||||
## Documentation added/removed/modified within a collection
|
||||
|
||||
Only the PATCH version should be increased for a release that contains changes limited to revised documentation.
|
||||
|
||||
|
||||
## Release automation
|
||||
|
||||
New releases are triggered by annotated git tags named after semantic versioning. The automation publishes the built artifacts to ansible-galaxy and github releases page.
|
||||
10
docs/requirements.txt
Normal file
10
docs/requirements.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
# ansible_basic_sphinx_ext still imports pkg_resources (removed in setuptools 82+).
|
||||
setuptools>=70.0.0,<81.0.0
|
||||
antsibull>=0.17.0
|
||||
antsibull-docs
|
||||
antsibull-changelog
|
||||
ansible-core>=2.16.0
|
||||
ansible-pygments
|
||||
sphinx-rtd-theme
|
||||
git+https://github.com/felixfontein/ansible-basic-sphinx-ext
|
||||
myst-parser
|
||||
4
docs/roles.rst.template
Normal file
4
docs/roles.rst.template
Normal file
@@ -0,0 +1,4 @@
|
||||
Role Index
|
||||
==========
|
||||
|
||||
.. toctree::
|
||||
23
docs/testing.md
Normal file
23
docs/testing.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Testing
|
||||
|
||||
## Continuous integration
|
||||
|
||||
The collection is tested with a [molecule](https://github.com/ansible-community/molecule) setup covering the included roles and verifying correct installation and idempotency.
|
||||
In order to run the molecule tests locally with python 3.9 available, after cloning the repository:
|
||||
The test scenarios are available on the source code repository each on his own subdirectory under [molecule/](https://github.com/ansible-middleware/keycloak/molecule).
|
||||
|
||||
|
||||
## Test playbooks
|
||||
|
||||
Sample playbooks are provided in the `playbooks/` directory; to run the playbooks locally (requires a rhel system with python 3.9+, ansible, and systemd) the steps are as follows:
|
||||
|
||||
```
|
||||
# setup environment as in developing
|
||||
# create inventory for localhost
|
||||
cat << EOF > inventory
|
||||
[keycloak]
|
||||
localhost ansible_connection=local
|
||||
EOF
|
||||
# run the playbook
|
||||
ansible-playbook -i inventory playbooks/keycloak.yml
|
||||
```
|
||||
37
galaxy.yml
37
galaxy.yml
@@ -1,22 +1,49 @@
|
||||
---
|
||||
namespace: middleware_automation
|
||||
name: keycloak
|
||||
version: "0.1.8"
|
||||
version: "3.0.8"
|
||||
readme: README.md
|
||||
authors:
|
||||
- Romain Pelisse <rpelisse@redhat.com>
|
||||
- Guido Grazioli <ggraziol@redhat.com>
|
||||
- Pavan Kumar Motaparthi <pmotapar@redhat.com>
|
||||
- Helmut Wolf <hwo@world-direct.at>
|
||||
- Harsha Cherukuri <hcheruku@redhat.com>
|
||||
description: Install and configure a keycloak, or Red Hat Single Sign-on, service.
|
||||
license_file: "LICENSE"
|
||||
tags:
|
||||
- keycloak
|
||||
- redhat
|
||||
- rhel
|
||||
- rhn
|
||||
- sso
|
||||
- openid
|
||||
- application
|
||||
- identity
|
||||
- security
|
||||
- infrastructure
|
||||
- authentication
|
||||
- java
|
||||
- runtimes
|
||||
- middleware
|
||||
- a4mw
|
||||
dependencies:
|
||||
"middleware_automation.redhat_csp_download": ">=1.2.1"
|
||||
"middleware_automation.wildfly": ">=0.0.4"
|
||||
"middleware_automation.common": ">=1.2.1"
|
||||
"ansible.posix": ">=1.4.0"
|
||||
repository: https://github.com/ansible-middleware/keycloak
|
||||
documentation: https://github.com/ansible-middleware/keycloak
|
||||
documentation: https://ansible-middleware.github.io/keycloak
|
||||
homepage: https://github.com/ansible-middleware/keycloak
|
||||
issues: https://github.com/ansible-middleware/keycloak/issues
|
||||
build_ignore:
|
||||
- .gitignore
|
||||
- .github
|
||||
- .ansible-lint
|
||||
- .yamllint
|
||||
- .DS_Store
|
||||
- '*.tar.gz'
|
||||
- '*.zip'
|
||||
- molecule
|
||||
- changelogs
|
||||
- docs/_gh_include
|
||||
- docs/conf.py
|
||||
- docs/roles.rst.template
|
||||
- docs/requirements.yml
|
||||
|
||||
11
meta/execution-environment.yml
Normal file
11
meta/execution-environment.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
version: 1
|
||||
build_arg_defaults:
|
||||
EE_BASE_IMAGE: 'quay.io/ansible/ansible-runner:stable-2.12-devel'
|
||||
dependencies:
|
||||
galaxy: requirements.yml
|
||||
python: requirements.txt
|
||||
system: bindep.txt
|
||||
additional_build_steps:
|
||||
append:
|
||||
- RUN alternatives --set python /usr/bin/python3
|
||||
@@ -1,2 +1,46 @@
|
||||
---
|
||||
requires_ansible: ">=2.9.10"
|
||||
requires_ansible: ">=2.16.0"
|
||||
action_groups:
|
||||
keycloak:
|
||||
- keycloak_authentication
|
||||
- keycloak_authentication_flow
|
||||
- keycloak_authentication_required_actions
|
||||
- keycloak_authentication_v2
|
||||
- keycloak_authz_authorization_scope
|
||||
- keycloak_authz_custom_policy
|
||||
- keycloak_authz_permission
|
||||
- keycloak_authz_permission_info
|
||||
- keycloak_client
|
||||
- keycloak_client_rolemapping
|
||||
- keycloak_client_rolescope
|
||||
- keycloak_client_scope
|
||||
- keycloak_clientscope_type
|
||||
- keycloak_clientscope_rolemappings
|
||||
- keycloak_clientsecret_info
|
||||
- keycloak_clientsecret_regenerate
|
||||
- keycloak_clienttemplate
|
||||
- keycloak_component
|
||||
- keycloak_component_info
|
||||
- keycloak_group
|
||||
- keycloak_identity_provider
|
||||
- keycloak_realm
|
||||
- keycloak_realm_info
|
||||
- keycloak_realm_key
|
||||
- keycloak_realm_keys_metadata_info
|
||||
- keycloak_realm_localization
|
||||
- keycloak_realm_rolemapping
|
||||
- keycloak_role
|
||||
- keycloak_user
|
||||
- keycloak_user_federation
|
||||
- keycloak_user_rolemapping
|
||||
- keycloak_userprofile
|
||||
- keycloak_user_execute_actions_email
|
||||
plugin_routing:
|
||||
modules:
|
||||
keycloak_clientscope:
|
||||
redirect: middleware_automation.keycloak.keycloak_client_scope
|
||||
deprecation:
|
||||
removal_version: 5.0.0
|
||||
warning_text: >-
|
||||
The module has been renamed to keycloak_client_scope for Keycloak 17+ (Quarkus).
|
||||
Update playbooks to use middleware_automation.keycloak.keycloak_client_scope.
|
||||
|
||||
45
molecule/debian/converge.yml
Normal file
45
molecule/debian/converge.yml
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
keycloak_quarkus_show_deprecation_warnings: false
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_quarkus_hostname: http://instance:8080
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_start_dev: true
|
||||
keycloak_quarkus_proxy_mode: none
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
- role: keycloak_realm
|
||||
keycloak_url: "{{ keycloak_quarkus_hostname }}"
|
||||
keycloak_admin_user: "{{ keycloak_quarkus_bootstrap_admin_user }}"
|
||||
keycloak_admin_password: "{{ keycloak_quarkus_bootstrap_admin_password }}"
|
||||
keycloak_client_users:
|
||||
- username: TestUser
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- username: TestAdmin
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- client: TestClient
|
||||
role: TestRoleAdmin
|
||||
realm: "{{ keycloak_realm }}"
|
||||
keycloak_realm: TestRealm
|
||||
keycloak_clients:
|
||||
- name: TestClient
|
||||
realm: "{{ keycloak_realm }}"
|
||||
public_client: "{{ keycloak_client_public }}"
|
||||
web_origins: "{{ keycloak_client_web_origins }}"
|
||||
users: "{{ keycloak_client_users }}"
|
||||
client_id: TestClient
|
||||
attributes:
|
||||
post.logout.redirect.uris: '/public/logout'
|
||||
48
molecule/debian/molecule.yml
Normal file
48
molecule/debian/molecule.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
platforms:
|
||||
- name: instance
|
||||
image: ghcr.io/hspaans/molecule-containers:debian-13
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "8009/tcp"
|
||||
cgroupns_mode: host
|
||||
command: "/lib/systemd/systemd"
|
||||
volumes:
|
||||
- /sys/fs/cgroup:/sys/fs/cgroup:rw
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
interpreter_python: auto_silent
|
||||
ssh_connection:
|
||||
pipelining: false
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: /usr/bin/python3
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
ANSIBLE_REMOTE_TMP: /tmp/.ansible/tmp
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- cleanup
|
||||
- destroy
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
13
molecule/debian/prepare.yml
Normal file
13
molecule/debian/prepare.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
gather_facts: yes
|
||||
tasks:
|
||||
- name: Install sudo
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- sudo
|
||||
- openjdk-21-jdk-headless
|
||||
- iproute2
|
||||
1
molecule/debian/roles
Symbolic link
1
molecule/debian/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
40
molecule/debian/verify.yml
Normal file
40
molecule/debian/verify.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
vars:
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_uri: "http://localhost:{{ 8080 + ( keycloak_jboss_port_offset | default(0) ) }}"
|
||||
keycloak_management_port: "http://localhost:{{ 9990 + ( keycloak_jboss_port_offset | default(0) ) }}"
|
||||
keycloak_jboss_port_offset: 10
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
|
||||
- name: Verify openid config
|
||||
block:
|
||||
- name: Fetch openID config # noqa blocked_modules command-instead-of-module
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
curl http://localhost:8080/realms/master/.well-known/openid-configuration -k | jq .
|
||||
args:
|
||||
executable: /bin/bash
|
||||
delegate_to: localhost
|
||||
register: openid_config
|
||||
changed_when: False
|
||||
- name: Verify endpoint URLs
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- (openid_config.stdout | from_json)["backchannel_authentication_endpoint"] == 'http://localhost:8080/realms/master/protocol/openid-connect/ext/ciba/auth'
|
||||
- (openid_config.stdout | from_json)['issuer'] == 'http://localhost:8080/realms/master'
|
||||
- (openid_config.stdout | from_json)['authorization_endpoint'] == 'http://localhost:8080/realms/master/protocol/openid-connect/auth'
|
||||
- (openid_config.stdout | from_json)['token_endpoint'] == 'http://localhost:8080/realms/master/protocol/openid-connect/token'
|
||||
delegate_to: localhost
|
||||
when:
|
||||
- hera_home is defined
|
||||
- hera_home | length == 0
|
||||
@@ -1,42 +1,48 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
tasks:
|
||||
- name: Include keycloak role
|
||||
include_role:
|
||||
name: ../../roles/keycloak
|
||||
vars:
|
||||
keycloak_admin_password: "changeme"
|
||||
- name: Keycloak Realm Role
|
||||
include_role:
|
||||
name: ../../roles/keycloak_realm
|
||||
vars:
|
||||
keycloak_admin_password: "changeme"
|
||||
keycloak_client_default_roles:
|
||||
- TestRoleAdmin
|
||||
- TestRoleUser
|
||||
keycloak_client_users:
|
||||
- username: TestUser
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- username: TestAdmin
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- client: TestClient
|
||||
role: TestRoleAdmin
|
||||
realm: "{{ keycloak_realm }}"
|
||||
keycloak_realm: TestRealm
|
||||
keycloak_clients:
|
||||
- name: TestClient
|
||||
roles: "{{ keycloak_client_default_roles }}"
|
||||
realm: "{{ keycloak_realm }}"
|
||||
public_client: "{{ keycloak_client_public }}"
|
||||
web_origins: "{{ keycloak_client_web_origins }}"
|
||||
users: "{{ keycloak_client_users }}"
|
||||
keycloak_quarkus_show_deprecation_warnings: false
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_quarkus_hostname: http://instance:8080
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_log_level: debug
|
||||
keycloak_quarkus_log_target: /tmp/keycloak
|
||||
keycloak_quarkus_start_dev: true
|
||||
keycloak_quarkus_proxy_mode: none
|
||||
keycloak_quarkus_offline_install: true
|
||||
keycloak_quarkus_download_path: /tmp/keycloak/
|
||||
keycloak_quarkus_java_heap_opts: "-Xms640m -Xmx640m "
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
- role: keycloak_realm
|
||||
keycloak_url: "{{ keycloak_quarkus_hostname }}"
|
||||
keycloak_admin_user: "{{ keycloak_quarkus_bootstrap_admin_user }}"
|
||||
keycloak_admin_password: "{{ keycloak_quarkus_bootstrap_admin_password }}"
|
||||
keycloak_client_users:
|
||||
- username: TestUser
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- username: TestAdmin
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- client: TestClient
|
||||
role: TestRoleAdmin
|
||||
realm: "{{ keycloak_realm }}"
|
||||
keycloak_realm: TestRealm
|
||||
keycloak_clients:
|
||||
- name: TestClient
|
||||
realm: "{{ keycloak_realm }}"
|
||||
public_client: "{{ keycloak_client_public }}"
|
||||
web_origins: "{{ keycloak_client_web_origins }}"
|
||||
users: "{{ keycloak_client_users }}"
|
||||
client_id: TestClient
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
---
|
||||
dependency:
|
||||
name: shell
|
||||
command: ansible-galaxy collection install -r molecule/default/requirements.yml -p $HOME/.ansible/collections --force-with-deps
|
||||
driver:
|
||||
name: docker
|
||||
name: podman
|
||||
platforms:
|
||||
- name: instance
|
||||
image: registry.access.redhat.com/ubi8/ubi-init:latest
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
@@ -14,6 +11,7 @@ platforms:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "8009/tcp"
|
||||
- "9000/tcp"
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
@@ -26,20 +24,22 @@ provisioner:
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
group_vars:
|
||||
all:
|
||||
keycloak_install_requires_become: true
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
PROXY: "${PROXY}"
|
||||
NO_PROXY: "${NO_PROXY}"
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- dependency
|
||||
- lint
|
||||
- cleanup
|
||||
- destroy
|
||||
- syntax
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
|
||||
@@ -1,12 +1,27 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
gather_facts: yes
|
||||
vars:
|
||||
sudo_pkg_name: sudo
|
||||
tasks:
|
||||
- name: Disable beta repos
|
||||
command: yum config-manager --disable '*beta*'
|
||||
ignore_errors: yes
|
||||
- name: "Run preparation common to all scenario"
|
||||
ansible.builtin.include_tasks: ../prepare.yml
|
||||
|
||||
- name: Install sudo
|
||||
yum:
|
||||
name: sudo
|
||||
state: present
|
||||
- name: Create controller directory for downloads
|
||||
ansible.builtin.file: # noqa risky-file-permissions delegated, uses controller host user
|
||||
path: /tmp/keycloak
|
||||
state: directory
|
||||
mode: '0750'
|
||||
delegate_to: localhost
|
||||
run_once: true
|
||||
|
||||
- name: Download keycloak archive to controller directory
|
||||
ansible.builtin.get_url: # noqa risky-file-permissions delegated, uses controller host user
|
||||
url: https://github.com/keycloak/keycloak/releases/download/26.4.7/keycloak-26.4.7.zip
|
||||
dest: /tmp/keycloak
|
||||
mode: '0640'
|
||||
delegate_to: localhost
|
||||
run_once: true
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
collections:
|
||||
- name: middleware_automation.redhat_csp_download
|
||||
version: ">=1.2.1"
|
||||
- name: middleware_automation.jcliff
|
||||
version: ">=0.0.19"
|
||||
- name: community.general
|
||||
- name: community.docker
|
||||
version: ">=1.9.1"
|
||||
|
||||
1
molecule/default/roles
Symbolic link
1
molecule/default/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
@@ -1,10 +1,25 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
vars:
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_uri: "http://localhost:8080"
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
- name: Check if keycloak service started
|
||||
assert:
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
- name: Verify token api call
|
||||
ansible.builtin.uri:
|
||||
url: "{{ keycloak_uri }}/realms/master/protocol/openid-connect/token"
|
||||
method: POST
|
||||
body: "client_id=admin-cli&username={{ keycloak_quarkus_bootstrap_admin_user }}&password={{ keycloak_quarkus_bootstrap_admin_user }}&grant_type=password"
|
||||
validate_certs: no
|
||||
register: keycloak_auth_response
|
||||
until: keycloak_auth_response.status == 200
|
||||
retries: 2
|
||||
delay: 2
|
||||
|
||||
26
molecule/group_vars/all/vars.yml
Normal file
26
molecule/group_vars/all/vars.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
keycloak_quarkus_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_systemd_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_install_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_firewalld_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_iptables_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_jdbc_driver_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_config_store_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_restart_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_start_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_rebuild_config_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_fastpackages_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_bootstrapped_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_quarkus_invalidate_theme_cache_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_systemd_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_install_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_firewalld_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_iptables_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_jdbc_driver_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_restart_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_start_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_stop_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_fastpackages_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
keycloak_rhsso_patch_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
molecule_prepare_require_privilege_escalation: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
18
molecule/https_revproxy/converge.yml
Normal file
18
molecule/https_revproxy/converge.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
keycloak_quarkus_show_deprecation_warnings: false
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_quarkus_hostname: https://proxy
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_http_enabled: True
|
||||
keycloak_quarkus_http_port: 8080
|
||||
keycloak_quarkus_proxy_mode: edge
|
||||
keycloak_quarkus_http_relative_path: /
|
||||
keycloak_quarkus_health_check_url: http://proxy:8080/realms/master/.well-known/openid-configuration
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
57
molecule/https_revproxy/molecule.yml
Normal file
57
molecule/https_revproxy/molecule.yml
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
platforms:
|
||||
- name: instance
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
networks:
|
||||
- name: keycloak
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
published_ports:
|
||||
- 0.0.0.0:8080:8080/tcp
|
||||
- name: proxy
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
networks:
|
||||
- name: keycloak
|
||||
port_bindings:
|
||||
- "443/tcp"
|
||||
published_ports:
|
||||
- 0.0.0.0:443:443/tcp
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
interpreter_python: auto_silent
|
||||
ssh_connection:
|
||||
pipelining: false
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- cleanup
|
||||
- destroy
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
53
molecule/https_revproxy/prepare.yml
Normal file
53
molecule/https_revproxy/prepare.yml
Normal file
@@ -0,0 +1,53 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
tasks:
|
||||
- name: Install sudo
|
||||
ansible.builtin.dnf:
|
||||
name: sudo
|
||||
state: present
|
||||
|
||||
- name: "Display hera_home if defined."
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: Prepare proxy
|
||||
hosts: proxy
|
||||
vars:
|
||||
nginx_proxy: |
|
||||
location / {
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_pass http://instance:8080;
|
||||
}
|
||||
roles:
|
||||
- elan.simple_nginx_reverse_proxy
|
||||
pre_tasks:
|
||||
- name: Create certificate request
|
||||
ansible.builtin.command: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes -subj '/CN=proxy'
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}"
|
||||
delegate_to: localhost
|
||||
changed_when: false
|
||||
- name: Make certificate directory
|
||||
ansible.builtin.file:
|
||||
path: /etc/nginx/tls
|
||||
state: directory
|
||||
mode: 0755
|
||||
- name: Copy certificates
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item.name }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: 0444
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
loop:
|
||||
- { name: 'cert.pem', dest: '/etc/nginx/tls/certificate.crt' }
|
||||
- { name: 'key.pem', dest: '/etc/nginx/tls/certificate.key' }
|
||||
- name: Update CA trust
|
||||
ansible.builtin.command: update-ca-trust
|
||||
changed_when: false
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
1
molecule/https_revproxy/roles
Symbolic link
1
molecule/https_revproxy/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
28
molecule/https_revproxy/verify.yml
Normal file
28
molecule/https_revproxy/verify.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: instance
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
|
||||
- name: Verify openid config
|
||||
block:
|
||||
- name: Fetch openID config # noqa blocked_modules command-instead-of-module
|
||||
ansible.builtin.uri:
|
||||
url: http://localhost:8080/realms/master/.well-known/openid-configuration
|
||||
validate_certs: false
|
||||
headers:
|
||||
Host: proxy
|
||||
register: openid_config
|
||||
changed_when: False
|
||||
- name: Verify endpoint URLs
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- openid_config.json['issuer'] == 'https://proxy/realms/master'
|
||||
- openid_config.json['authorization_endpoint'] == 'https://proxy/realms/master/protocol/openid-connect/auth'
|
||||
2
molecule/keycloak_modules/converge.yml
Normal file
2
molecule/keycloak_modules/converge.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
---
|
||||
- import_playbook: ../default/converge.yml
|
||||
51
molecule/keycloak_modules/molecule.yml
Normal file
51
molecule/keycloak_modules/molecule.yml
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
driver:
|
||||
name: podman
|
||||
platforms:
|
||||
- name: instance
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "8009/tcp"
|
||||
- "9000/tcp"
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
interpreter_python: auto_silent
|
||||
roles_path: ../../roles
|
||||
ssh_connection:
|
||||
pipelining: false
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
group_vars:
|
||||
all:
|
||||
keycloak_install_requires_become: true
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
PROXY: "${PROXY}"
|
||||
NO_PROXY: "${NO_PROXY}"
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- cleanup
|
||||
- destroy
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
2
molecule/keycloak_modules/prepare.yml
Normal file
2
molecule/keycloak_modules/prepare.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
---
|
||||
- import_playbook: ../default/prepare.yml
|
||||
657
molecule/keycloak_modules/verify.yml
Normal file
657
molecule/keycloak_modules/verify.yml
Normal file
@@ -0,0 +1,657 @@
|
||||
---
|
||||
- name: Verify migrated Keycloak modules
|
||||
hosts: all
|
||||
vars:
|
||||
auth_keycloak_url: http://instance:8080
|
||||
auth_realm: master
|
||||
auth_username: remembertochangeme
|
||||
auth_password: remembertochangeme
|
||||
target_realm: TestRealm
|
||||
role: molecule-role
|
||||
client_role: molecule-client-role
|
||||
client: molecule-client
|
||||
scope: molecule-scope
|
||||
group: molecule-group
|
||||
user: molecule-user
|
||||
flow: molecule-flow
|
||||
flow_v2: molecule-flow-v2
|
||||
auth_copy: molecule-auth-copy
|
||||
idp: molecule-idp
|
||||
ephemeral_realm: molecule-realm
|
||||
template: molecule-template
|
||||
realm_key: molecule-aes-key
|
||||
authz_scope: molecule-authz-scope
|
||||
authz_permission: molecule-authz-perm
|
||||
federation: molecule-federation
|
||||
component: molecule-component
|
||||
migrated_keycloak_modules:
|
||||
- keycloak_authentication
|
||||
- keycloak_authentication_flow
|
||||
- keycloak_authentication_required_actions
|
||||
- keycloak_authentication_v2
|
||||
- keycloak_authz_authorization_scope
|
||||
- keycloak_authz_custom_policy
|
||||
- keycloak_authz_permission
|
||||
- keycloak_authz_permission_info
|
||||
- keycloak_client
|
||||
- keycloak_client_rolemapping
|
||||
- keycloak_client_rolescope
|
||||
- keycloak_client_scope
|
||||
- keycloak_clientscope_type
|
||||
- keycloak_clientscope_rolemappings
|
||||
- keycloak_clientsecret_info
|
||||
- keycloak_clientsecret_regenerate
|
||||
- keycloak_clienttemplate
|
||||
- keycloak_component
|
||||
- keycloak_component_info
|
||||
- keycloak_group
|
||||
- keycloak_identity_provider
|
||||
- keycloak_realm
|
||||
- keycloak_realm_info
|
||||
- keycloak_realm_key
|
||||
- keycloak_realm_keys_metadata_info
|
||||
- keycloak_realm_localization
|
||||
- keycloak_realm_rolemapping
|
||||
- keycloak_role
|
||||
- keycloak_user
|
||||
- keycloak_user_execute_actions_email
|
||||
- keycloak_user_federation
|
||||
- keycloak_user_rolemapping
|
||||
- keycloak_userprofile
|
||||
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
fail_msg: Service not running
|
||||
|
||||
- name: Verify migrated modules are discoverable by ansible-doc # noqa command-instead-of-module
|
||||
ansible.builtin.command:
|
||||
cmd: "ansible-doc -t module middleware_automation.keycloak.{{ item }}"
|
||||
loop: "{{ migrated_keycloak_modules }}"
|
||||
delegate_to: localhost
|
||||
register: docs_check
|
||||
changed_when: false
|
||||
|
||||
- name: Ensure module docs check succeeded
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- docs_check is not failed
|
||||
|
||||
- name: Provision shared test fixtures
|
||||
module_defaults:
|
||||
group/middleware_automation.keycloak.keycloak:
|
||||
auth_keycloak_url: "{{ auth_keycloak_url }}"
|
||||
auth_realm: "{{ auth_realm }}"
|
||||
auth_username: "{{ auth_username }}"
|
||||
auth_password: "{{ auth_password }}"
|
||||
block:
|
||||
- name: Reset fixtures from a previous verify run
|
||||
middleware_automation.keycloak.keycloak_user:
|
||||
realm: "{{ target_realm }}"
|
||||
username: "{{ user }}"
|
||||
state: absent
|
||||
failed_when: false
|
||||
|
||||
- name: keycloak_role — create realm role for module tests
|
||||
middleware_automation.keycloak.keycloak_role:
|
||||
realm: "{{ target_realm }}"
|
||||
name: "{{ role }}"
|
||||
state: present
|
||||
|
||||
- name: keycloak_client — create confidential client for module tests
|
||||
middleware_automation.keycloak.keycloak_client:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: "{{ client }}"
|
||||
enabled: true
|
||||
public_client: false
|
||||
standard_flow_enabled: true
|
||||
client_authenticator_type: client-secret
|
||||
secret: molecule-client-secret
|
||||
state: present
|
||||
|
||||
- name: keycloak_client — enable authorization services on test client
|
||||
middleware_automation.keycloak.keycloak_client:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
service_accounts_enabled: true
|
||||
authorization_services_enabled: true
|
||||
full_scope_allowed: false
|
||||
state: present
|
||||
|
||||
- name: keycloak_role — create client role for rolemapping tests
|
||||
middleware_automation.keycloak.keycloak_role:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: "{{ client_role }}"
|
||||
state: present
|
||||
|
||||
- name: keycloak_client_scope — create client scope
|
||||
middleware_automation.keycloak.keycloak_client_scope:
|
||||
realm: "{{ target_realm }}"
|
||||
name: "{{ scope }}"
|
||||
state: present
|
||||
|
||||
- name: keycloak_group — create group
|
||||
middleware_automation.keycloak.keycloak_group:
|
||||
realm: "{{ target_realm }}"
|
||||
name: "{{ group }}"
|
||||
state: present
|
||||
|
||||
- name: keycloak_user — create user
|
||||
middleware_automation.keycloak.keycloak_user:
|
||||
realm: "{{ target_realm }}"
|
||||
username: "{{ user }}"
|
||||
first_name: Molecule
|
||||
last_name: User
|
||||
email: molecule-user@example.invalid
|
||||
enabled: true
|
||||
state: present
|
||||
|
||||
- name: keycloak_authentication_flow — create browser-style flow
|
||||
middleware_automation.keycloak.keycloak_authentication_flow:
|
||||
realm: "{{ target_realm }}"
|
||||
alias: "{{ flow }}"
|
||||
description: Molecule module test authentication flow
|
||||
executions:
|
||||
- provider_id: auth-cookie
|
||||
requirement: REQUIRED
|
||||
state: present
|
||||
|
||||
- name: keycloak_realm_info — query TestRealm (public endpoint, no admin auth)
|
||||
middleware_automation.keycloak.keycloak_realm_info:
|
||||
auth_keycloak_url: "{{ auth_keycloak_url }}"
|
||||
realm: "{{ target_realm }}"
|
||||
|
||||
- name: Exercise migrated modules against running Keycloak
|
||||
module_defaults:
|
||||
group/middleware_automation.keycloak.keycloak:
|
||||
auth_keycloak_url: "{{ auth_keycloak_url }}"
|
||||
auth_realm: "{{ auth_realm }}"
|
||||
auth_username: "{{ auth_username }}"
|
||||
auth_password: "{{ auth_password }}"
|
||||
block:
|
||||
- name: keycloak_realm_keys_metadata_info — query realm keys
|
||||
middleware_automation.keycloak.keycloak_realm_keys_metadata_info:
|
||||
realm: "{{ target_realm }}"
|
||||
|
||||
- name: keycloak_component_info — list realm components
|
||||
middleware_automation.keycloak.keycloak_component_info:
|
||||
realm: "{{ target_realm }}"
|
||||
|
||||
- name: keycloak_realm — create ephemeral realm
|
||||
middleware_automation.keycloak.keycloak_realm:
|
||||
id: "{{ ephemeral_realm }}"
|
||||
realm: "{{ ephemeral_realm }}"
|
||||
enabled: true
|
||||
state: present
|
||||
|
||||
- name: keycloak_realm_localization — set locale override
|
||||
middleware_automation.keycloak.keycloak_realm_localization:
|
||||
parent_id: "{{ target_realm }}"
|
||||
locale: en
|
||||
state: present
|
||||
overrides:
|
||||
- key: molecule.module.test
|
||||
value: molecule module test
|
||||
|
||||
- name: keycloak_realm_key — create generated AES key component
|
||||
middleware_automation.keycloak.keycloak_realm_key:
|
||||
parent_id: "{{ target_realm }}"
|
||||
name: "{{ realm_key }}"
|
||||
provider_id: aes-generated
|
||||
state: present
|
||||
|
||||
- name: keycloak_authentication — copy browser flow
|
||||
middleware_automation.keycloak.keycloak_authentication:
|
||||
realm: "{{ target_realm }}"
|
||||
alias: "{{ auth_copy }}"
|
||||
copyFrom: browser
|
||||
state: present
|
||||
|
||||
- name: keycloak_authentication_v2 — manage flow with safe-swap semantics
|
||||
middleware_automation.keycloak.keycloak_authentication_v2:
|
||||
realm: "{{ target_realm }}"
|
||||
alias: "{{ flow_v2 }}"
|
||||
description: Molecule module test flow v2
|
||||
authenticationExecutions:
|
||||
- requirement: REQUIRED
|
||||
providerId: auth-cookie
|
||||
state: present
|
||||
|
||||
- name: keycloak_authentication_required_actions — ensure VERIFY_EMAIL is enabled
|
||||
middleware_automation.keycloak.keycloak_authentication_required_actions:
|
||||
realm: "{{ target_realm }}"
|
||||
state: present
|
||||
required_actions:
|
||||
- alias: VERIFY_EMAIL
|
||||
enabled: true
|
||||
|
||||
- name: keycloak_userprofile — set unmanaged attribute policy
|
||||
middleware_automation.keycloak.keycloak_userprofile:
|
||||
parent_id: "{{ target_realm }}"
|
||||
state: present
|
||||
config:
|
||||
kc_user_profile_config:
|
||||
- unmanagedAttributePolicy: ENABLED
|
||||
|
||||
- name: keycloak_identity_provider — create OIDC broker stub
|
||||
middleware_automation.keycloak.keycloak_identity_provider:
|
||||
realm: "{{ target_realm }}"
|
||||
alias: "{{ idp }}"
|
||||
provider_id: oidc
|
||||
enabled: false
|
||||
config:
|
||||
authorizationUrl: http://localhost:8080/realms/master/protocol/openid-connect/auth
|
||||
tokenUrl: http://localhost:8080/realms/master/protocol/openid-connect/token
|
||||
clientId: molecule-idp-client
|
||||
state: present
|
||||
|
||||
- name: keycloak_clienttemplate — create client template
|
||||
middleware_automation.keycloak.keycloak_clienttemplate:
|
||||
realm: "{{ target_realm }}"
|
||||
name: "{{ template }}"
|
||||
protocol: openid-connect
|
||||
state: present
|
||||
register: clienttemplate_result
|
||||
failed_when:
|
||||
- clienttemplate_result is failed
|
||||
- "'404' not in (clienttemplate_result.msg | default(''))"
|
||||
- "'Not Found' not in (clienttemplate_result.msg | default(''))"
|
||||
|
||||
- name: keycloak_clientscope_type — attach scope as optional on realm
|
||||
middleware_automation.keycloak.keycloak_clientscope_type:
|
||||
realm: "{{ target_realm }}"
|
||||
optional_clientscopes:
|
||||
- "{{ scope }}"
|
||||
|
||||
- name: keycloak_user_rolemapping — assign realm role to user
|
||||
middleware_automation.keycloak.keycloak_user_rolemapping:
|
||||
realm: "{{ target_realm }}"
|
||||
target_username: "{{ user }}"
|
||||
state: present
|
||||
roles:
|
||||
- name: "{{ role }}"
|
||||
|
||||
- name: keycloak_realm_rolemapping — assign realm role to group
|
||||
middleware_automation.keycloak.keycloak_realm_rolemapping:
|
||||
realm: "{{ target_realm }}"
|
||||
group_name: "{{ group }}"
|
||||
state: present
|
||||
roles:
|
||||
- name: "{{ role }}"
|
||||
|
||||
- name: keycloak_client_rolemapping — assign client role to group
|
||||
middleware_automation.keycloak.keycloak_client_rolemapping:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
group_name: "{{ group }}"
|
||||
state: present
|
||||
roles:
|
||||
- name: "{{ client_role }}"
|
||||
|
||||
- name: keycloak_client_rolescope — restrict realm role on client
|
||||
middleware_automation.keycloak.keycloak_client_rolescope:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
role_names:
|
||||
- "{{ role }}"
|
||||
state: present
|
||||
|
||||
- name: keycloak_clientscope_rolemappings — map client roles to clientscope
|
||||
middleware_automation.keycloak.keycloak_clientscope_rolemappings:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
clientscope_id: "{{ scope }}"
|
||||
role_names:
|
||||
- "{{ client_role }}"
|
||||
register: clientscope_rolemappings_result
|
||||
|
||||
- name: Assert clientscope role mappings were created
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- clientscope_rolemappings_result is changed
|
||||
- clientscope_rolemappings_result.end_state | length == 1
|
||||
|
||||
- name: keycloak_clientscope_rolemappings — remap client role (idempotency)
|
||||
middleware_automation.keycloak.keycloak_clientscope_rolemappings:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
clientscope_id: "{{ scope }}"
|
||||
role_names:
|
||||
- "{{ client_role }}"
|
||||
register: clientscope_rolemappings_idempotent_result
|
||||
|
||||
- name: Assert clientscope role mappings are idempotent
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- clientscope_rolemappings_idempotent_result is not changed
|
||||
- clientscope_rolemappings_idempotent_result.end_state | length == 1
|
||||
|
||||
- name: keycloak_clientscope_rolemappings — map realm role to clientscope
|
||||
middleware_automation.keycloak.keycloak_clientscope_rolemappings:
|
||||
realm: "{{ target_realm }}"
|
||||
clientscope_id: "{{ scope }}"
|
||||
role_names:
|
||||
- "{{ role }}"
|
||||
register: clientscope_realm_rolemappings_result
|
||||
|
||||
- name: Assert realm role was mapped to clientscope
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- clientscope_realm_rolemappings_result is changed
|
||||
- clientscope_realm_rolemappings_result.end_state | length == 1
|
||||
|
||||
- name: keycloak_user — set email_verified explicitly
|
||||
middleware_automation.keycloak.keycloak_user:
|
||||
realm: "{{ target_realm }}"
|
||||
username: "{{ user }}"
|
||||
email_verified: true
|
||||
state: present
|
||||
register: user_email_verified_result
|
||||
|
||||
- name: Assert email_verified was set
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- user_email_verified_result is changed
|
||||
- user_email_verified_result.end_state.emailVerified == true
|
||||
|
||||
- name: keycloak_user — leave email_verified unchanged with no_defaults
|
||||
middleware_automation.keycloak.keycloak_user:
|
||||
realm: "{{ target_realm }}"
|
||||
username: "{{ user }}"
|
||||
email_verified_behavior: no_defaults
|
||||
state: present
|
||||
register: user_email_verified_idempotent_result
|
||||
|
||||
- name: Assert email_verified is unchanged
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- user_email_verified_idempotent_result is not changed
|
||||
- user_email_verified_idempotent_result.end_state.emailVerified == true
|
||||
|
||||
- name: keycloak_user — set required actions
|
||||
middleware_automation.keycloak.keycloak_user:
|
||||
realm: "{{ target_realm }}"
|
||||
username: "{{ user }}"
|
||||
required_actions:
|
||||
- UPDATE_PASSWORD
|
||||
- VERIFY_EMAIL
|
||||
state: present
|
||||
register: user_required_actions_result
|
||||
|
||||
- name: Assert required actions were set
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- user_required_actions_result is changed
|
||||
- "'UPDATE_PASSWORD' in user_required_actions_result.end_state.requiredActions"
|
||||
- "'VERIFY_EMAIL' in user_required_actions_result.end_state.requiredActions"
|
||||
|
||||
- name: keycloak_user — leave required actions unchanged when omitted
|
||||
middleware_automation.keycloak.keycloak_user:
|
||||
realm: "{{ target_realm }}"
|
||||
username: "{{ user }}"
|
||||
state: present
|
||||
register: user_required_actions_idempotent_result
|
||||
|
||||
- name: Assert required actions are unchanged
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- user_required_actions_idempotent_result is not changed
|
||||
- "'UPDATE_PASSWORD' in user_required_actions_idempotent_result.end_state.requiredActions"
|
||||
- "'VERIFY_EMAIL' in user_required_actions_idempotent_result.end_state.requiredActions"
|
||||
|
||||
- name: keycloak_clientsecret_info — read client secret
|
||||
middleware_automation.keycloak.keycloak_clientsecret_info:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
no_log: true
|
||||
|
||||
- name: keycloak_clientsecret_regenerate — rotate client secret
|
||||
middleware_automation.keycloak.keycloak_clientsecret_regenerate:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
no_log: true
|
||||
|
||||
- name: keycloak_authz_authorization_scope — create authorization scope
|
||||
middleware_automation.keycloak.keycloak_authz_authorization_scope:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: "{{ authz_scope }}"
|
||||
display_name: Molecule module test scope
|
||||
state: present
|
||||
|
||||
- name: keycloak_authz_permission — create scope permission
|
||||
middleware_automation.keycloak.keycloak_authz_permission:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: "{{ authz_permission }}"
|
||||
permission_type: scope
|
||||
scopes:
|
||||
- "{{ authz_scope }}"
|
||||
state: present
|
||||
|
||||
- name: keycloak_authz_permission_info — query scope permission
|
||||
middleware_automation.keycloak.keycloak_authz_permission_info:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: "{{ authz_permission }}"
|
||||
|
||||
- name: keycloak_authz_custom_policy — requires deployed policy provider on server
|
||||
middleware_automation.keycloak.keycloak_authz_custom_policy:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: molecule-script-policy
|
||||
policy_type: script-policy.js
|
||||
state: present
|
||||
register: authz_custom_policy_result
|
||||
failed_when:
|
||||
- authz_custom_policy_result is failed
|
||||
- "'No policy provider' not in (authz_custom_policy_result.msg | default(''))"
|
||||
- "'Policy provider' not in (authz_custom_policy_result.msg | default(''))"
|
||||
- "'405' not in (authz_custom_policy_result.msg | default(''))"
|
||||
- "'Method Not Allowed' not in (authz_custom_policy_result.msg | default(''))"
|
||||
- "'not found' not in (authz_custom_policy_result.msg | default('') | lower)"
|
||||
|
||||
- name: keycloak_user_execute_actions_email — trigger execute-actions email
|
||||
middleware_automation.keycloak.keycloak_user_execute_actions_email:
|
||||
realm: "{{ target_realm }}"
|
||||
username: "{{ user }}"
|
||||
actions:
|
||||
- VERIFY_EMAIL
|
||||
register: execute_actions_email_result
|
||||
failed_when:
|
||||
- execute_actions_email_result is failed
|
||||
- "'Connection refused' in (execute_actions_email_result.msg | default(''))"
|
||||
- "'Failed to send' in (execute_actions_email_result.msg | default(''))"
|
||||
|
||||
- name: keycloak_user_federation — remove non-existent federation (module API test)
|
||||
middleware_automation.keycloak.keycloak_user_federation:
|
||||
realm: "{{ target_realm }}"
|
||||
name: "{{ federation }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_component — remove non-existent component (module API test)
|
||||
middleware_automation.keycloak.keycloak_component:
|
||||
parent_id: "{{ target_realm }}"
|
||||
name: "{{ component }}"
|
||||
provider_id: ldap
|
||||
provider_type: org.keycloak.storage.UserStorageProvider
|
||||
state: absent
|
||||
|
||||
- name: Remove shared test fixtures
|
||||
module_defaults:
|
||||
group/middleware_automation.keycloak.keycloak:
|
||||
auth_keycloak_url: "{{ auth_keycloak_url }}"
|
||||
auth_realm: "{{ auth_realm }}"
|
||||
auth_username: "{{ auth_username }}"
|
||||
auth_password: "{{ auth_password }}"
|
||||
block:
|
||||
- name: keycloak_authz_custom_policy — remove custom policy if created
|
||||
middleware_automation.keycloak.keycloak_authz_custom_policy:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: molecule-script-policy
|
||||
policy_type: script-policy.js
|
||||
state: absent
|
||||
failed_when: false
|
||||
|
||||
- name: keycloak_authz_permission — remove scope permission
|
||||
middleware_automation.keycloak.keycloak_authz_permission:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: "{{ authz_permission }}"
|
||||
permission_type: scope
|
||||
state: absent
|
||||
|
||||
- name: keycloak_authz_authorization_scope — remove authorization scope
|
||||
middleware_automation.keycloak.keycloak_authz_authorization_scope:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: "{{ authz_scope }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_clientscope_rolemappings — remove realm role from clientscope
|
||||
middleware_automation.keycloak.keycloak_clientscope_rolemappings:
|
||||
realm: "{{ target_realm }}"
|
||||
clientscope_id: "{{ scope }}"
|
||||
role_names:
|
||||
- "{{ role }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_clientscope_rolemappings — remove client role from clientscope
|
||||
middleware_automation.keycloak.keycloak_clientscope_rolemappings:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
clientscope_id: "{{ scope }}"
|
||||
role_names:
|
||||
- "{{ client_role }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_client_rolescope — remove role scope mapping
|
||||
middleware_automation.keycloak.keycloak_client_rolescope:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
role_names:
|
||||
- "{{ role }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_client_rolemapping — remove group client role mapping
|
||||
middleware_automation.keycloak.keycloak_client_rolemapping:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
group_name: "{{ group }}"
|
||||
state: absent
|
||||
roles:
|
||||
- name: "{{ client_role }}"
|
||||
|
||||
- name: keycloak_realm_rolemapping — remove group realm role mapping
|
||||
middleware_automation.keycloak.keycloak_realm_rolemapping:
|
||||
realm: "{{ target_realm }}"
|
||||
group_name: "{{ group }}"
|
||||
state: absent
|
||||
roles:
|
||||
- name: "{{ role }}"
|
||||
|
||||
- name: keycloak_user_rolemapping — remove user role mapping
|
||||
middleware_automation.keycloak.keycloak_user_rolemapping:
|
||||
realm: "{{ target_realm }}"
|
||||
target_username: "{{ user }}"
|
||||
state: absent
|
||||
roles:
|
||||
- name: "{{ role }}"
|
||||
|
||||
- name: keycloak_identity_provider — remove OIDC provider
|
||||
middleware_automation.keycloak.keycloak_identity_provider:
|
||||
realm: "{{ target_realm }}"
|
||||
alias: "{{ idp }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_authentication_v2 — remove flow
|
||||
middleware_automation.keycloak.keycloak_authentication_v2:
|
||||
realm: "{{ target_realm }}"
|
||||
alias: "{{ flow_v2 }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_authentication — remove copied flow
|
||||
middleware_automation.keycloak.keycloak_authentication:
|
||||
realm: "{{ target_realm }}"
|
||||
alias: "{{ auth_copy }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_realm_key — remove generated key
|
||||
middleware_automation.keycloak.keycloak_realm_key:
|
||||
parent_id: "{{ target_realm }}"
|
||||
name: "{{ realm_key }}"
|
||||
provider_id: aes-generated
|
||||
state: absent
|
||||
|
||||
- name: keycloak_realm_localization — remove locale override
|
||||
middleware_automation.keycloak.keycloak_realm_localization:
|
||||
parent_id: "{{ target_realm }}"
|
||||
locale: en
|
||||
state: absent
|
||||
overrides:
|
||||
- key: molecule.module.test
|
||||
|
||||
- name: keycloak_realm — remove ephemeral realm
|
||||
middleware_automation.keycloak.keycloak_realm:
|
||||
id: "{{ ephemeral_realm }}"
|
||||
realm: "{{ ephemeral_realm }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_clienttemplate — remove client template
|
||||
middleware_automation.keycloak.keycloak_clienttemplate:
|
||||
realm: "{{ target_realm }}"
|
||||
name: "{{ template }}"
|
||||
state: absent
|
||||
failed_when: false
|
||||
|
||||
- name: keycloak_authentication_flow — remove authentication flow
|
||||
middleware_automation.keycloak.keycloak_authentication_flow:
|
||||
realm: "{{ target_realm }}"
|
||||
alias: "{{ flow }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_user — remove user
|
||||
middleware_automation.keycloak.keycloak_user:
|
||||
realm: "{{ target_realm }}"
|
||||
username: "{{ user }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_group — remove group
|
||||
middleware_automation.keycloak.keycloak_group:
|
||||
realm: "{{ target_realm }}"
|
||||
name: "{{ group }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_role — remove client role
|
||||
middleware_automation.keycloak.keycloak_role:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
name: "{{ client_role }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_client — remove confidential client
|
||||
middleware_automation.keycloak.keycloak_client:
|
||||
realm: "{{ target_realm }}"
|
||||
client_id: "{{ client }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_client_scope — remove client scope
|
||||
middleware_automation.keycloak.keycloak_client_scope:
|
||||
realm: "{{ target_realm }}"
|
||||
name: "{{ scope }}"
|
||||
state: absent
|
||||
|
||||
- name: keycloak_role — remove realm role
|
||||
middleware_automation.keycloak.keycloak_role:
|
||||
realm: "{{ target_realm }}"
|
||||
name: "{{ role }}"
|
||||
state: absent
|
||||
13
molecule/overridexml/converge.yml
Normal file
13
molecule/overridexml/converge.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
keycloak_admin_password: "remembertochangeme"
|
||||
keycloak_config_override_template: custom.xml.j2
|
||||
keycloak_http_port: 8081
|
||||
keycloak_management_http_port: 19990
|
||||
keycloak_service_runas: True
|
||||
roles:
|
||||
- role: keycloak
|
||||
45
molecule/overridexml/molecule.yml
Normal file
45
molecule/overridexml/molecule.yml
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
platforms:
|
||||
- name: instance
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "8009/tcp"
|
||||
- "9000/tcp"
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
interpreter_python: auto_silent
|
||||
ssh_connection:
|
||||
pipelining: false
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- cleanup
|
||||
- destroy
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
14
molecule/overridexml/prepare.yml
Normal file
14
molecule/overridexml/prepare.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
gather_facts: yes
|
||||
vars:
|
||||
sudo_pkg_name: sudo
|
||||
tasks:
|
||||
- name: "Run preparation common to all scenario"
|
||||
ansible.builtin.include_tasks: ../prepare.yml
|
||||
vars:
|
||||
assets:
|
||||
- "{{ assets_server }}/sso/7.6.0/rh-sso-7.6.0-server-dist.zip"
|
||||
1
molecule/overridexml/roles
Symbolic link
1
molecule/overridexml/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
562
molecule/overridexml/templates/custom.xml.j2
Normal file
562
molecule/overridexml/templates/custom.xml.j2
Normal file
@@ -0,0 +1,562 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!-- this is a custom file -->
|
||||
<server xmlns="urn:jboss:domain:16.0">
|
||||
<extensions>
|
||||
<extension module="org.jboss.as.clustering.infinispan"/>
|
||||
<extension module="org.jboss.as.connector"/>
|
||||
<extension module="org.jboss.as.deployment-scanner"/>
|
||||
<extension module="org.jboss.as.ee"/>
|
||||
<extension module="org.jboss.as.ejb3"/>
|
||||
<extension module="org.jboss.as.jaxrs"/>
|
||||
<extension module="org.jboss.as.jmx"/>
|
||||
<extension module="org.jboss.as.jpa"/>
|
||||
<extension module="org.jboss.as.logging"/>
|
||||
<extension module="org.jboss.as.mail"/>
|
||||
<extension module="org.jboss.as.modcluster"/>
|
||||
<extension module="org.jboss.as.naming"/>
|
||||
<extension module="org.jboss.as.remoting"/>
|
||||
<extension module="org.jboss.as.transactions"/>
|
||||
<extension module="org.jboss.as.weld"/>
|
||||
<extension module="org.keycloak.keycloak-server-subsystem"/>
|
||||
<extension module="org.wildfly.extension.bean-validation"/>
|
||||
<extension module="org.wildfly.extension.core-management"/>
|
||||
<extension module="org.wildfly.extension.elytron"/>
|
||||
<extension module="org.wildfly.extension.health"/>
|
||||
<extension module="org.wildfly.extension.io"/>
|
||||
<extension module="org.wildfly.extension.metrics"/>
|
||||
<extension module="org.wildfly.extension.request-controller"/>
|
||||
<extension module="org.wildfly.extension.security.manager"/>
|
||||
<extension module="org.wildfly.extension.undertow"/>
|
||||
</extensions>
|
||||
<management>
|
||||
<audit-log>
|
||||
<formatters>
|
||||
<json-formatter name="json-formatter"/>
|
||||
</formatters>
|
||||
<handlers>
|
||||
<file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
|
||||
</handlers>
|
||||
<logger log-boot="true" log-read-only="false" enabled="false">
|
||||
<handlers>
|
||||
<handler name="file"/>
|
||||
</handlers>
|
||||
</logger>
|
||||
</audit-log>
|
||||
<management-interfaces>
|
||||
<http-interface http-authentication-factory="management-http-authentication">
|
||||
<http-upgrade enabled="true" sasl-authentication-factory="management-sasl-authentication"/>
|
||||
<socket-binding http="management-http"/>
|
||||
</http-interface>
|
||||
</management-interfaces>
|
||||
<access-control provider="simple">
|
||||
<role-mapping>
|
||||
<role name="SuperUser">
|
||||
<include>
|
||||
<user name="$local"/>
|
||||
</include>
|
||||
</role>
|
||||
</role-mapping>
|
||||
</access-control>
|
||||
</management>
|
||||
<profile>
|
||||
<subsystem xmlns="urn:jboss:domain:logging:8.0">
|
||||
<console-handler name="CONSOLE">
|
||||
<level name="INFO"/>
|
||||
<formatter>
|
||||
<named-formatter name="COLOR-PATTERN"/>
|
||||
</formatter>
|
||||
</console-handler>
|
||||
<periodic-rotating-file-handler name="FILE" autoflush="true">
|
||||
<formatter>
|
||||
<named-formatter name="PATTERN"/>
|
||||
</formatter>
|
||||
<file relative-to="jboss.server.log.dir" path="server.log"/>
|
||||
<suffix value=".yyyy-MM-dd"/>
|
||||
<append value="true"/>
|
||||
</periodic-rotating-file-handler>
|
||||
<logger category="com.arjuna">
|
||||
<level name="WARN"/>
|
||||
</logger>
|
||||
<logger category="io.jaegertracing.Configuration">
|
||||
<level name="WARN"/>
|
||||
</logger>
|
||||
<logger category="org.jboss.as.config">
|
||||
<level name="DEBUG"/>
|
||||
</logger>
|
||||
<logger category="sun.rmi">
|
||||
<level name="WARN"/>
|
||||
</logger>
|
||||
<root-logger>
|
||||
<level name="INFO"/>
|
||||
<handlers>
|
||||
<handler name="CONSOLE"/>
|
||||
<handler name="FILE"/>
|
||||
</handlers>
|
||||
</root-logger>
|
||||
<formatter name="PATTERN">
|
||||
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
|
||||
</formatter>
|
||||
<formatter name="COLOR-PATTERN">
|
||||
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
|
||||
</formatter>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:bean-validation:1.0"/>
|
||||
<subsystem xmlns="urn:jboss:domain:core-management:1.0"/>
|
||||
<subsystem xmlns="urn:jboss:domain:datasources:6.0">
|
||||
<datasources>
|
||||
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
|
||||
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
|
||||
<driver>h2</driver>
|
||||
<security>
|
||||
<user-name>sa</user-name>
|
||||
<password>sa</password>
|
||||
</security>
|
||||
</datasource>
|
||||
<drivers>
|
||||
<driver name="h2" module="com.h2database.h2">
|
||||
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
|
||||
</driver>
|
||||
</drivers>
|
||||
</datasources>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">
|
||||
<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:ee:6.0">
|
||||
<spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
|
||||
<concurrent>
|
||||
<context-services>
|
||||
<context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/>
|
||||
</context-services>
|
||||
<managed-thread-factories>
|
||||
<managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/>
|
||||
</managed-thread-factories>
|
||||
<managed-executor-services>
|
||||
<managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-termination-period="0" hung-task-threshold="60000" keepalive-time="5000"/>
|
||||
</managed-executor-services>
|
||||
<managed-scheduled-executor-services>
|
||||
<managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-termination-period="0" hung-task-threshold="60000" keepalive-time="3000"/>
|
||||
</managed-scheduled-executor-services>
|
||||
</concurrent>
|
||||
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/KeycloakDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:ejb3:9.0">
|
||||
<session-bean>
|
||||
<stateless>
|
||||
<bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
|
||||
</stateless>
|
||||
<stateful default-access-timeout="5000" cache-ref="simple" passivation-disabled-cache-ref="simple"/>
|
||||
<singleton default-access-timeout="5000"/>
|
||||
</session-bean>
|
||||
<pools>
|
||||
<bean-instance-pools>
|
||||
<strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
|
||||
<strict-max-pool name="slsb-strict-max-pool" derive-size="from-worker-pools" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
|
||||
</bean-instance-pools>
|
||||
</pools>
|
||||
<caches>
|
||||
<cache name="simple"/>
|
||||
<cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/>
|
||||
</caches>
|
||||
<passivation-stores>
|
||||
<passivation-store name="infinispan" cache-container="ejb" max-size="10000"/>
|
||||
</passivation-stores>
|
||||
<async thread-pool-name="default"/>
|
||||
<timer-service thread-pool-name="default" default-data-store="default-file-store">
|
||||
<data-stores>
|
||||
<file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>
|
||||
</data-stores>
|
||||
</timer-service>
|
||||
<remote cluster="ejb" connectors="http-remoting-connector" thread-pool-name="default">
|
||||
<channel-creation-options>
|
||||
<option name="MAX_OUTBOUND_MESSAGES" value="1234" type="remoting"/>
|
||||
</channel-creation-options>
|
||||
</remote>
|
||||
<thread-pools>
|
||||
<thread-pool name="default">
|
||||
<max-threads count="10"/>
|
||||
<keepalive-time time="60" unit="seconds"/>
|
||||
</thread-pool>
|
||||
</thread-pools>
|
||||
<default-security-domain value="other"/>
|
||||
<application-security-domains>
|
||||
<application-security-domain name="other" security-domain="ApplicationDomain"/>
|
||||
</application-security-domains>
|
||||
<default-missing-method-permissions-deny-access value="true"/>
|
||||
<statistics enabled="${wildfly.ejb3.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
|
||||
<log-system-exceptions value="true"/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:wildfly:elytron:13.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
|
||||
<providers>
|
||||
<aggregate-providers name="combined-providers">
|
||||
<providers name="elytron"/>
|
||||
<providers name="openssl"/>
|
||||
</aggregate-providers>
|
||||
<provider-loader name="elytron" module="org.wildfly.security.elytron"/>
|
||||
<provider-loader name="openssl" module="org.wildfly.openssl"/>
|
||||
</providers>
|
||||
<audit-logging>
|
||||
<file-audit-log name="local-audit" path="audit.log" relative-to="jboss.server.log.dir" format="JSON"/>
|
||||
</audit-logging>
|
||||
<security-domains>
|
||||
<security-domain name="ApplicationDomain" default-realm="ApplicationRealm" permission-mapper="default-permission-mapper">
|
||||
<realm name="ApplicationRealm" role-decoder="groups-to-roles"/>
|
||||
<realm name="local"/>
|
||||
</security-domain>
|
||||
<security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper">
|
||||
<realm name="ManagementRealm" role-decoder="groups-to-roles"/>
|
||||
<realm name="local" role-mapper="super-user-mapper"/>
|
||||
</security-domain>
|
||||
</security-domains>
|
||||
<security-realms>
|
||||
<identity-realm name="local" identity="$local"/>
|
||||
<properties-realm name="ApplicationRealm">
|
||||
<users-properties path="application-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ApplicationRealm"/>
|
||||
<groups-properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
|
||||
</properties-realm>
|
||||
<properties-realm name="ManagementRealm">
|
||||
<users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/>
|
||||
<groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
|
||||
</properties-realm>
|
||||
</security-realms>
|
||||
<mappers>
|
||||
<simple-permission-mapper name="default-permission-mapper" mapping-mode="first">
|
||||
<permission-mapping>
|
||||
<principal name="anonymous"/>
|
||||
<permission-set name="default-permissions"/>
|
||||
</permission-mapping>
|
||||
<permission-mapping match-all="true">
|
||||
<permission-set name="login-permission"/>
|
||||
<permission-set name="default-permissions"/>
|
||||
</permission-mapping>
|
||||
</simple-permission-mapper>
|
||||
<constant-realm-mapper name="local" realm-name="local"/>
|
||||
<simple-role-decoder name="groups-to-roles" attribute="groups"/>
|
||||
<constant-role-mapper name="super-user-mapper">
|
||||
<role name="SuperUser"/>
|
||||
</constant-role-mapper>
|
||||
</mappers>
|
||||
<permission-sets>
|
||||
<permission-set name="login-permission">
|
||||
<permission class-name="org.wildfly.security.auth.permission.LoginPermission"/>
|
||||
</permission-set>
|
||||
<permission-set name="default-permissions">
|
||||
<permission class-name="org.wildfly.extension.batch.jberet.deployment.BatchPermission" module="org.wildfly.extension.batch.jberet" target-name="*"/>
|
||||
<permission class-name="org.wildfly.transaction.client.RemoteTransactionPermission" module="org.wildfly.transaction.client"/>
|
||||
<permission class-name="org.jboss.ejb.client.RemoteEJBPermission" module="org.jboss.ejb-client"/>
|
||||
<permission class-name="org.jboss.ejb.client.RemoteEJBPermission" module="org.jboss.ejb-client"/>
|
||||
</permission-set>
|
||||
</permission-sets>
|
||||
<http>
|
||||
<http-authentication-factory name="management-http-authentication" security-domain="ManagementDomain" http-server-mechanism-factory="global">
|
||||
<mechanism-configuration>
|
||||
<mechanism mechanism-name="DIGEST">
|
||||
<mechanism-realm realm-name="ManagementRealm"/>
|
||||
</mechanism>
|
||||
</mechanism-configuration>
|
||||
</http-authentication-factory>
|
||||
<http-authentication-factory name="application-http-authentication" security-domain="ApplicationDomain" http-server-mechanism-factory="global">
|
||||
<mechanism-configuration>
|
||||
<mechanism mechanism-name="BASIC">
|
||||
<mechanism-realm realm-name="ApplicationRealm"/>
|
||||
</mechanism>
|
||||
</mechanism-configuration>
|
||||
</http-authentication-factory>
|
||||
<provider-http-server-mechanism-factory name="global"/>
|
||||
</http>
|
||||
<sasl>
|
||||
<sasl-authentication-factory name="application-sasl-authentication" sasl-server-factory="configured" security-domain="ApplicationDomain">
|
||||
<mechanism-configuration>
|
||||
<mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
|
||||
<mechanism mechanism-name="DIGEST-MD5">
|
||||
<mechanism-realm realm-name="ApplicationRealm"/>
|
||||
</mechanism>
|
||||
</mechanism-configuration>
|
||||
</sasl-authentication-factory>
|
||||
<sasl-authentication-factory name="management-sasl-authentication" sasl-server-factory="configured" security-domain="ManagementDomain">
|
||||
<mechanism-configuration>
|
||||
<mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
|
||||
<mechanism mechanism-name="DIGEST-MD5">
|
||||
<mechanism-realm realm-name="ManagementRealm"/>
|
||||
</mechanism>
|
||||
</mechanism-configuration>
|
||||
</sasl-authentication-factory>
|
||||
<configurable-sasl-server-factory name="configured" sasl-server-factory="elytron">
|
||||
<properties>
|
||||
<property name="wildfly.sasl.local-user.default-user" value="$local"/>
|
||||
</properties>
|
||||
</configurable-sasl-server-factory>
|
||||
<mechanism-provider-filtering-sasl-server-factory name="elytron" sasl-server-factory="global">
|
||||
<filters>
|
||||
<filter provider-name="WildFlyElytron"/>
|
||||
</filters>
|
||||
</mechanism-provider-filtering-sasl-server-factory>
|
||||
<provider-sasl-server-factory name="global"/>
|
||||
</sasl>
|
||||
<tls>
|
||||
<key-stores>
|
||||
<key-store name="applicationKS">
|
||||
<credential-reference clear-text="password"/>
|
||||
<implementation type="JKS"/>
|
||||
<file path="application.keystore" relative-to="jboss.server.config.dir"/>
|
||||
</key-store>
|
||||
</key-stores>
|
||||
<key-managers>
|
||||
<key-manager name="applicationKM" key-store="applicationKS" generate-self-signed-certificate-host="localhost">
|
||||
<credential-reference clear-text="password"/>
|
||||
</key-manager>
|
||||
</key-managers>
|
||||
<server-ssl-contexts>
|
||||
<server-ssl-context name="applicationSSC" key-manager="applicationKM"/>
|
||||
</server-ssl-contexts>
|
||||
</tls>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:wildfly:health:1.0" security-enabled="false"/>
|
||||
<subsystem xmlns="urn:jboss:domain:infinispan:12.0">
|
||||
<cache-container name="ejb" default-cache="passivation" aliases="sfsb" modules="org.wildfly.clustering.ejb.infinispan">
|
||||
<local-cache name="passivation">
|
||||
<locking isolation="REPEATABLE_READ"/>
|
||||
<transaction mode="BATCH"/>
|
||||
<file-store passivation="true" purge="false"/>
|
||||
</local-cache>
|
||||
</cache-container>
|
||||
<cache-container name="keycloak" modules="org.keycloak.keycloak-model-infinispan">
|
||||
<local-cache name="realms">
|
||||
<heap-memory size="10000"/>
|
||||
</local-cache>
|
||||
<local-cache name="users">
|
||||
<heap-memory size="10000"/>
|
||||
</local-cache>
|
||||
<local-cache name="sessions"/>
|
||||
<local-cache name="authenticationSessions"/>
|
||||
<local-cache name="offlineSessions"/>
|
||||
<local-cache name="clientSessions"/>
|
||||
<local-cache name="offlineClientSessions"/>
|
||||
<local-cache name="loginFailures"/>
|
||||
<local-cache name="work"/>
|
||||
<local-cache name="authorization">
|
||||
<heap-memory size="10000"/>
|
||||
</local-cache>
|
||||
<local-cache name="keys">
|
||||
<heap-memory size="1000"/>
|
||||
<expiration max-idle="3600000"/>
|
||||
</local-cache>
|
||||
<local-cache name="actionTokens">
|
||||
<heap-memory size="-1"/>
|
||||
<expiration interval="300000" max-idle="-1"/>
|
||||
</local-cache>
|
||||
</cache-container>
|
||||
<cache-container name="server" default-cache="default" modules="org.wildfly.clustering.server">
|
||||
<local-cache name="default">
|
||||
<transaction mode="BATCH"/>
|
||||
</local-cache>
|
||||
</cache-container>
|
||||
<cache-container name="web" default-cache="passivation" modules="org.wildfly.clustering.web.infinispan">
|
||||
<local-cache name="passivation">
|
||||
<locking isolation="REPEATABLE_READ"/>
|
||||
<transaction mode="BATCH"/>
|
||||
<file-store passivation="true" purge="false"/>
|
||||
</local-cache>
|
||||
<local-cache name="sso">
|
||||
<locking isolation="REPEATABLE_READ"/>
|
||||
<transaction mode="BATCH"/>
|
||||
</local-cache>
|
||||
<local-cache name="routing"/>
|
||||
</cache-container>
|
||||
<cache-container name="hibernate" modules="org.infinispan.hibernate-cache">
|
||||
<local-cache name="entity">
|
||||
<heap-memory size="10000"/>
|
||||
<expiration max-idle="100000"/>
|
||||
</local-cache>
|
||||
<local-cache name="local-query">
|
||||
<heap-memory size="10000"/>
|
||||
<expiration max-idle="100000"/>
|
||||
</local-cache>
|
||||
<local-cache name="timestamps"/>
|
||||
</cache-container>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:io:3.0">
|
||||
<worker name="default"/>
|
||||
<buffer-pool name="default"/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:jaxrs:2.0"/>
|
||||
<subsystem xmlns="urn:jboss:domain:jca:5.0">
|
||||
<archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
|
||||
<bean-validation enabled="true"/>
|
||||
<default-workmanager>
|
||||
<short-running-threads>
|
||||
<core-threads count="50"/>
|
||||
<queue-length count="50"/>
|
||||
<max-threads count="50"/>
|
||||
<keepalive-time time="10" unit="seconds"/>
|
||||
</short-running-threads>
|
||||
<long-running-threads>
|
||||
<core-threads count="50"/>
|
||||
<queue-length count="50"/>
|
||||
<max-threads count="50"/>
|
||||
<keepalive-time time="10" unit="seconds"/>
|
||||
</long-running-threads>
|
||||
</default-workmanager>
|
||||
<cached-connection-manager/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:jmx:1.3">
|
||||
<expose-resolved-model/>
|
||||
<expose-expression-model/>
|
||||
<remoting-connector/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:jpa:1.1">
|
||||
<jpa default-extended-persistence-inheritance="DEEP"/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
|
||||
<web-context>auth</web-context>
|
||||
<providers>
|
||||
<provider>
|
||||
classpath:${jboss.home.dir}/providers/*
|
||||
</provider>
|
||||
</providers>
|
||||
<master-realm-name>master</master-realm-name>
|
||||
<scheduled-task-interval>900</scheduled-task-interval>
|
||||
<theme>
|
||||
<staticMaxAge>2592000</staticMaxAge>
|
||||
<cacheThemes>true</cacheThemes>
|
||||
<cacheTemplates>true</cacheTemplates>
|
||||
<dir>${jboss.home.dir}/themes</dir>
|
||||
</theme>
|
||||
<spi name="eventsStore">
|
||||
<provider name="jpa" enabled="true">
|
||||
<properties>
|
||||
<property name="exclude-events" value="["REFRESH_TOKEN"]"/>
|
||||
</properties>
|
||||
</provider>
|
||||
</spi>
|
||||
<spi name="userCache">
|
||||
<provider name="default" enabled="true"/>
|
||||
</spi>
|
||||
<spi name="userSessionPersister">
|
||||
<default-provider>jpa</default-provider>
|
||||
</spi>
|
||||
<spi name="timer">
|
||||
<default-provider>basic</default-provider>
|
||||
</spi>
|
||||
<spi name="connectionsHttpClient">
|
||||
<provider name="default" enabled="true"/>
|
||||
</spi>
|
||||
<spi name="connectionsJpa">
|
||||
<provider name="default" enabled="true">
|
||||
<properties>
|
||||
<property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
|
||||
<property name="initializeEmpty" value="true"/>
|
||||
<property name="migrationStrategy" value="update"/>
|
||||
<property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/>
|
||||
</properties>
|
||||
</provider>
|
||||
</spi>
|
||||
<spi name="realmCache">
|
||||
<provider name="default" enabled="true"/>
|
||||
</spi>
|
||||
<spi name="connectionsInfinispan">
|
||||
<default-provider>default</default-provider>
|
||||
<provider name="default" enabled="true">
|
||||
<properties>
|
||||
<property name="cacheContainer" value="java:jboss/infinispan/container/keycloak"/>
|
||||
</properties>
|
||||
</provider>
|
||||
</spi>
|
||||
<spi name="jta-lookup">
|
||||
<default-provider>${keycloak.jta.lookup.provider:jboss}</default-provider>
|
||||
<provider name="jboss" enabled="true"/>
|
||||
</spi>
|
||||
<spi name="publicKeyStorage">
|
||||
<provider name="infinispan" enabled="true">
|
||||
<properties>
|
||||
<property name="minTimeBetweenRequests" value="10"/>
|
||||
</properties>
|
||||
</provider>
|
||||
</spi>
|
||||
<spi name="x509cert-lookup">
|
||||
<default-provider>${keycloak.x509cert.lookup.provider:default}</default-provider>
|
||||
<provider name="default" enabled="true"/>
|
||||
</spi>
|
||||
<spi name="hostname">
|
||||
<default-provider>default</default-provider>
|
||||
<provider name="default" enabled="true">
|
||||
<properties>
|
||||
<property name="frontendUrl" value="${keycloak.frontendUrl:}"/>
|
||||
<property name="forceBackendUrlToFrontendUrl" value="false"/>
|
||||
</properties>
|
||||
</provider>
|
||||
</spi>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:mail:4.0">
|
||||
<mail-session name="default" jndi-name="java:jboss/mail/Default">
|
||||
<smtp-server outbound-socket-binding-ref="mail-smtp"/>
|
||||
</mail-session>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:wildfly:metrics:1.0" security-enabled="false" exposed-subsystems="*" prefix="${wildfly.metrics.prefix:jboss}"/>
|
||||
<subsystem xmlns="urn:jboss:domain:naming:2.0">
|
||||
<remote-naming/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:remoting:4.0">
|
||||
<http-connector name="http-remoting-connector" connector-ref="default" sasl-authentication-factory="application-sasl-authentication"/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:request-controller:1.0"/>
|
||||
<subsystem xmlns="urn:jboss:domain:security-manager:1.0">
|
||||
<deployment-permissions>
|
||||
<maximum-set>
|
||||
<permission class="java.security.AllPermission"/>
|
||||
</maximum-set>
|
||||
</deployment-permissions>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:transactions:6.0">
|
||||
<core-environment node-identifier="${jboss.tx.node.id:1}">
|
||||
<process-id>
|
||||
<uuid/>
|
||||
</process-id>
|
||||
</core-environment>
|
||||
<recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
|
||||
<coordinator-environment statistics-enabled="${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
|
||||
<object-store path="tx-object-store" relative-to="jboss.server.data.dir"/>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:undertow:12.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
|
||||
<buffer-cache name="default"/>
|
||||
<server name="default-server">
|
||||
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
|
||||
<https-listener name="https" socket-binding="https" ssl-context="applicationSSC" enable-http2="true"/>
|
||||
<host name="default-host" alias="localhost">
|
||||
<location name="/" handler="welcome-content"/>
|
||||
<http-invoker http-authentication-factory="application-http-authentication"/>
|
||||
</host>
|
||||
</server>
|
||||
<servlet-container name="default">
|
||||
<jsp-config/>
|
||||
<websockets/>
|
||||
</servlet-container>
|
||||
<handlers>
|
||||
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
|
||||
</handlers>
|
||||
<application-security-domains>
|
||||
<application-security-domain name="other" security-domain="ApplicationDomain"/>
|
||||
</application-security-domains>
|
||||
</subsystem>
|
||||
<subsystem xmlns="urn:jboss:domain:weld:4.0"/>
|
||||
</profile>
|
||||
<interfaces>
|
||||
<interface name="management">
|
||||
<inet-address value="127.0.0.1"/>
|
||||
</interface>
|
||||
<interface name="public">
|
||||
<inet-address value="127.0.0.1"/>
|
||||
</interface>
|
||||
</interfaces>
|
||||
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
|
||||
<socket-binding name="http" port="8081"/>
|
||||
<socket-binding name="https" port="8443"/>
|
||||
<socket-binding name="management-http" interface="management" port="19990"/>
|
||||
<socket-binding name="management-https" interface="management" port="19991"/>
|
||||
<socket-binding name="txn-recovery-environment" port="4712"/>
|
||||
<socket-binding name="txn-status-manager" port="4713"/>
|
||||
<outbound-socket-binding name="mail-smtp">
|
||||
<remote-destination host="${jboss.mail.server.host:localhost}" port="${jboss.mail.server.port:25}"/>
|
||||
</outbound-socket-binding>
|
||||
</socket-binding-group>
|
||||
</server>
|
||||
32
molecule/overridexml/verify.yml
Normal file
32
molecule/overridexml/verify.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
vars:
|
||||
keycloak_uri: "http://localhost:8081"
|
||||
keycloak_management_port: "http://localhost:19990"
|
||||
keycloak_admin_password: "remembertochangeme"
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
- name: Verify we are running on requested jvm # noqa blocked_modules command-instead-of-module
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
ps -ef | grep '/etc/alternatives/jre_1.8.0/' | grep -v grep
|
||||
args:
|
||||
executable: /bin/bash
|
||||
changed_when: no
|
||||
- name: Verify token api call
|
||||
ansible.builtin.uri:
|
||||
url: "{{ keycloak_uri }}/auth/realms/master/protocol/openid-connect/token"
|
||||
method: POST
|
||||
body: "client_id=admin-cli&username=admin&password={{ keycloak_admin_password }}&grant_type=password"
|
||||
validate_certs: no
|
||||
register: keycloak_auth_response
|
||||
until: keycloak_auth_response.status == 200
|
||||
retries: 2
|
||||
delay: 2
|
||||
59
molecule/prepare.yml
Normal file
59
molecule/prepare.yml
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
- name: Display Ansible version
|
||||
ansible.builtin.debug:
|
||||
msg: "Ansible version is {{ ansible_version.full }}"
|
||||
|
||||
- name: "Set package name for sudo"
|
||||
ansible.builtin.set_fact:
|
||||
sudo_pkg_name: sudo
|
||||
|
||||
- name: "Ensure {{ sudo_pkg_name }} is installed (if user is root)."
|
||||
ansible.builtin.yum:
|
||||
name: "{{ sudo_pkg_name }}"
|
||||
state: present
|
||||
when:
|
||||
- ansible_user_id == 'root'
|
||||
|
||||
- name: Gather the package facts
|
||||
ansible.builtin.package_facts:
|
||||
manager: auto
|
||||
|
||||
- name: "Check if sudo is installed."
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- sudo_pkg_name in ansible_facts.packages
|
||||
fail_msg: "sudo is not installed on target system"
|
||||
|
||||
- name: "Install iproute"
|
||||
ansible.builtin.yum:
|
||||
name:
|
||||
- iproute
|
||||
state: present
|
||||
when:
|
||||
- ansible_user_id == 'root'
|
||||
|
||||
- name: "Retrieve assets server from env"
|
||||
ansible.builtin.set_fact:
|
||||
assets_server: "{{ lookup('env', 'MIDDLEWARE_DOWNLOAD_RELEASE_SERVER_URL') }}"
|
||||
|
||||
- name: "Download artefacts only if assets_server is set"
|
||||
when:
|
||||
- assets_server is defined
|
||||
- assets_server | length > 0
|
||||
- assets is defined
|
||||
- assets | length > 0
|
||||
block:
|
||||
- name: "Set offline when assets server from env is defined"
|
||||
ansible.builtin.set_fact:
|
||||
sso_offline_install: True
|
||||
|
||||
- name: "Download and deploy zips from {{ assets_server }}"
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ asset }}"
|
||||
dest: "{{ lookup('env', 'PWD') }}"
|
||||
validate_certs: no
|
||||
mode: '0644'
|
||||
delegate_to: localhost
|
||||
loop: "{{ assets }}"
|
||||
loop_control:
|
||||
loop_var: asset
|
||||
95
molecule/quarkus/converge.yml
Normal file
95
molecule/quarkus/converge.yml
Normal file
@@ -0,0 +1,95 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
keycloak_quarkus_show_deprecation_warnings: false
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_realm: TestRealm
|
||||
keycloak_quarkus_hostname: https://instance:8443
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_log_level: debug # needed for the verify step
|
||||
keycloak_quarkus_https_key_file_enabled: true
|
||||
keycloak_quarkus_key_file_copy_enabled: true
|
||||
keycloak_quarkus_key_content: "{{ lookup('file', 'key.pem') }}"
|
||||
keycloak_quarkus_cert_file_copy_enabled: true
|
||||
keycloak_quarkus_cert_file_src: cert.pem
|
||||
keycloak_quarkus_log_target: /tmp/keycloak
|
||||
keycloak_quarkus_ks_vault_enabled: true
|
||||
keycloak_quarkus_ks_vault_file: "/opt/keycloak/vault/keystore.p12"
|
||||
keycloak_quarkus_ks_vault_pass: keystorepassword
|
||||
keycloak_quarkus_systemd_wait_for_port: true
|
||||
keycloak_quarkus_systemd_wait_for_timeout: 20
|
||||
keycloak_quarkus_systemd_wait_for_delay: 2
|
||||
keycloak_quarkus_systemd_wait_for_log: true
|
||||
keycloak_quarkus_restart_health_check: false # would fail because of self-signed cert
|
||||
keycloak_quarkus_version: 26.6.2
|
||||
keycloak_quarkus_java_heap_opts: "-Xms1024m -Xmx1024m"
|
||||
keycloak_quarkus_additional_env_vars:
|
||||
- key: KC_FEATURES_DISABLED
|
||||
value: impersonation,kerberos
|
||||
keycloak_quarkus_providers:
|
||||
- id: http-client
|
||||
spi: connections
|
||||
default: true
|
||||
restart: true
|
||||
properties:
|
||||
- key: default-connection-pool-size
|
||||
value: 10
|
||||
- id: spid-saml
|
||||
url: https://github.com/italia/spid-keycloak-provider/releases/download/24.0.2/spid-provider.jar
|
||||
- id: spid-saml-w-checksum
|
||||
url: https://github.com/italia/spid-keycloak-provider/releases/download/24.0.2/spid-provider.jar
|
||||
checksum: sha256:fbb50e73739d7a6d35b5bff611b1c01668b29adf6f6259624b95e466a305f377
|
||||
- id: keycloak-kerberos-federation
|
||||
maven:
|
||||
repository_url: https://repo1.maven.org/maven2/ # https://mvnrepository.com/artifact/org.keycloak/keycloak-kerberos-federation/24.0.4
|
||||
group_id: org.keycloak
|
||||
artifact_id: keycloak-kerberos-federation
|
||||
version: 26.6.2 # optional
|
||||
# username: myUser # optional
|
||||
# password: myPAT # optional
|
||||
# - id: my-static-theme
|
||||
# local_path: /tmp/my-static-theme.jar
|
||||
keycloak_quarkus_policies:
|
||||
- name: "cain-and-abel.txt"
|
||||
url: "https://github.com/danielmiessler/SecLists/raw/master/Passwords/Software/cain-and-abel.txt"
|
||||
- name: "john-the-ripper.txt"
|
||||
url: "https://github.com/danielmiessler/SecLists/raw/master/Passwords/Software/john-the-ripper.txt"
|
||||
type: password-blacklists
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
- role: keycloak_realm
|
||||
keycloak_url: http://instance:8080
|
||||
keycloak_admin_user: "{{ keycloak_quarkus_bootstrap_admin_user }}"
|
||||
keycloak_admin_password: "{{ keycloak_quarkus_bootstrap_admin_password }}"
|
||||
keycloak_client_default_roles:
|
||||
- TestRoleAdmin
|
||||
- TestRoleUser
|
||||
keycloak_client_users:
|
||||
- username: TestUser
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- username: TestAdmin
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- client: TestClient
|
||||
role: TestRoleAdmin
|
||||
realm: "{{ keycloak_realm }}"
|
||||
keycloak_realm: TestRealm
|
||||
keycloak_clients:
|
||||
- name: TestClient
|
||||
roles: "{{ keycloak_client_default_roles }}"
|
||||
realm: "{{ keycloak_realm }}"
|
||||
public_client: "{{ keycloak_client_public }}"
|
||||
web_origins: "{{ keycloak_client_web_origins }}"
|
||||
users: "{{ keycloak_client_users }}"
|
||||
client_id: TestClient
|
||||
50
molecule/quarkus/molecule.yml
Normal file
50
molecule/quarkus/molecule.yml
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
platforms:
|
||||
- name: instance
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "8009/tcp"
|
||||
- "9000/tcp"
|
||||
published_ports:
|
||||
- 0.0.0.0:8443:8443/tcp
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
interpreter_python: auto_silent
|
||||
ssh_connection:
|
||||
pipelining: false
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
PYTHONHTTPSVERIFY: 0
|
||||
PROXY: "${PROXY}"
|
||||
NO_PROXY: "${NO_PROXY}"
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- cleanup
|
||||
- destroy
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
50
molecule/quarkus/prepare.yml
Normal file
50
molecule/quarkus/prepare.yml
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
tasks:
|
||||
- name: "Display hera_home if defined."
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: "Ensure common prepare phase are set."
|
||||
ansible.builtin.include_tasks: ../prepare.yml
|
||||
|
||||
- name: Create certificate request
|
||||
ansible.builtin.command: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes -subj '/CN=instance'
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}"
|
||||
delegate_to: localhost
|
||||
changed_when: false
|
||||
|
||||
- name: Create vault directory
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.file:
|
||||
state: directory
|
||||
path: "/opt/keycloak/vault"
|
||||
mode: '0755'
|
||||
|
||||
- name: Make sure a jre is available (for keytool to prepare keystore)
|
||||
delegate_to: localhost
|
||||
ansible.builtin.package:
|
||||
name: java-21-openjdk-headless
|
||||
state: present
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
failed_when: false
|
||||
|
||||
- name: Create vault keystore
|
||||
ansible.builtin.command: keytool -importpass -alias TestRealm_testalias -keystore keystore.p12 -storepass keystorepassword
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}"
|
||||
delegate_to: localhost
|
||||
register: keytool_cmd
|
||||
changed_when: False
|
||||
failed_when: not 'already exists' in keytool_cmd.stdout and keytool_cmd.rc != 0
|
||||
|
||||
- name: Copy certificates and vault
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.copy:
|
||||
src: keystore.p12
|
||||
dest: /opt/keycloak/vault/keystore.p12
|
||||
mode: '0444'
|
||||
1
molecule/quarkus/roles
Symbolic link
1
molecule/quarkus/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
130
molecule/quarkus/verify.yml
Normal file
130
molecule/quarkus/verify.yml
Normal file
@@ -0,0 +1,130 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
fail_msg: "Service not running"
|
||||
|
||||
- name: Set internal envvar
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: Verify openid config
|
||||
when:
|
||||
- hera_home is defined
|
||||
- hera_home | length == 0
|
||||
block:
|
||||
- name: Fetch openID config # noqa blocked_modules command-instead-of-module
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
curl -H 'Host: instance' https://localhost:8443/realms/master/.well-known/openid-configuration -k | jq .
|
||||
args:
|
||||
executable: /bin/bash
|
||||
delegate_to: localhost
|
||||
register: openid_config
|
||||
changed_when: False
|
||||
- name: Verify endpoint URLs
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- (openid_config.stdout | from_json)["backchannel_authentication_endpoint"] == 'https://instance:8443/realms/master/protocol/openid-connect/ext/ciba/auth'
|
||||
- (openid_config.stdout | from_json)['issuer'] == 'https://instance:8443/realms/master'
|
||||
- (openid_config.stdout | from_json)['authorization_endpoint'] == 'https://instance:8443/realms/master/protocol/openid-connect/auth'
|
||||
- (openid_config.stdout | from_json)['token_endpoint'] == 'https://instance:8443/realms/master/protocol/openid-connect/token'
|
||||
delegate_to: localhost
|
||||
|
||||
- name: Check log folder
|
||||
ansible.builtin.stat:
|
||||
path: /tmp/keycloak
|
||||
register: keycloak_log_folder
|
||||
|
||||
- name: Check that keycloak log folder exists and is a link
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- keycloak_log_folder.stat.exists
|
||||
- not keycloak_log_folder.stat.isdir
|
||||
- keycloak_log_folder.stat.islnk
|
||||
fail_msg: "Service log symlink not correctly created"
|
||||
|
||||
- name: Check log file
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.stat:
|
||||
path: /tmp/keycloak/keycloak.log
|
||||
register: keycloak_log_file
|
||||
|
||||
- name: Check if keycloak file exists
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- keycloak_log_file.stat.exists
|
||||
- not keycloak_log_file.stat.isdir
|
||||
|
||||
- name: Check default log folder
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.stat:
|
||||
path: /var/log/keycloak
|
||||
register: keycloak_default_log_folder
|
||||
failed_when: false
|
||||
|
||||
- name: Check that default keycloak log folder doesn't exist
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- not keycloak_default_log_folder.stat.exists
|
||||
|
||||
- name: Verify vault SPI in logfile
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
zgrep 'Configured KeystoreVaultProviderFactory with the keystore file' /opt/keycloak/keycloak-*/data/log/keycloak.log*zip
|
||||
changed_when: false
|
||||
failed_when: slurped_log.rc != 0
|
||||
register: slurped_log
|
||||
|
||||
- name: Verify token api call
|
||||
ansible.builtin.uri:
|
||||
url: "https://instance:8443/realms/master/protocol/openid-connect/token"
|
||||
method: POST
|
||||
body: "client_id=admin-cli&username={{ keycloak_quarkus_bootstrap_admin_user }}&password={{ keycloak_quarkus_bootstrap_admin_password}}&grant_type=password"
|
||||
validate_certs: no
|
||||
register: keycloak_auth_response
|
||||
until: keycloak_auth_response.status == 200
|
||||
retries: 2
|
||||
delay: 2
|
||||
|
||||
- name: "Get Clients"
|
||||
ansible.builtin.uri:
|
||||
url: "https://instance:8443/admin/realms/TestRealm/clients"
|
||||
validate_certs: false
|
||||
headers:
|
||||
Authorization: "Bearer {{ keycloak_auth_response.json.access_token }}"
|
||||
register: keycloak_clients
|
||||
|
||||
- name: Get client uuid
|
||||
ansible.builtin.set_fact:
|
||||
keycloak_client_uuid: "{{ ((keycloak_clients.json | selectattr('clientId', '==', 'TestClient')) | first).id }}"
|
||||
|
||||
- name: "Get Client {{ keycloak_client_uuid }}"
|
||||
ansible.builtin.uri:
|
||||
url: "https://instance:8443/admin/realms/TestRealm/clients/{{ keycloak_client_uuid }}"
|
||||
validate_certs: false
|
||||
headers:
|
||||
Authorization: "Bearer {{ keycloak_auth_response.json.access_token }}"
|
||||
register: keycloak_test_client
|
||||
|
||||
- name: "Get Client roles"
|
||||
ansible.builtin.uri:
|
||||
url: "https://instance:8443/admin/realms/TestRealm/clients/{{ keycloak_client_uuid }}/roles"
|
||||
validate_certs: false
|
||||
headers:
|
||||
Authorization: "Bearer {{ keycloak_auth_response.json.access_token }}"
|
||||
register: keycloak_test_client_roles
|
||||
51
molecule/quarkus_devmode/converge.yml
Normal file
51
molecule/quarkus_devmode/converge.yml
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
keycloak_quarkus_show_deprecation_warnings: false
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_realm: TestRealm
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_hostname: 'http://localhost:8080'
|
||||
keycloak_quarkus_start_dev: True
|
||||
keycloak_quarkus_proxy_mode: none
|
||||
keycloak_quarkus_java_home: /opt/openjdk/
|
||||
keycloak_quarkus_java_heap_opts: "-Xms640m -Xmx640m"
|
||||
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
- role: keycloak_realm
|
||||
keycloak_url: "{{ keycloak_quarkus_hostname }}"
|
||||
keycloak_admin_user: "{{ keycloak_quarkus_bootstrap_admin_user }}"
|
||||
keycloak_admin_password: "{{ keycloak_quarkus_bootstrap_admin_password }}"
|
||||
keycloak_client_default_roles:
|
||||
- TestRoleAdmin
|
||||
- TestRoleUser
|
||||
keycloak_client_users:
|
||||
- username: TestUser
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- username: TestAdmin
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient
|
||||
role: TestRoleUser
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- client: TestClient
|
||||
role: TestRoleAdmin
|
||||
realm: "{{ keycloak_realm }}"
|
||||
keycloak_realm: TestRealm
|
||||
keycloak_clients:
|
||||
- name: TestClient
|
||||
roles: "{{ keycloak_client_default_roles }}"
|
||||
realm: "{{ keycloak_realm }}"
|
||||
public_client: "{{ keycloak_client_public }}"
|
||||
web_origins: "{{ keycloak_client_web_origins }}"
|
||||
users: "{{ keycloak_client_users }}"
|
||||
client_id: TestClient
|
||||
49
molecule/quarkus_devmode/molecule.yml
Normal file
49
molecule/quarkus_devmode/molecule.yml
Normal file
@@ -0,0 +1,49 @@
|
||||
---
|
||||
driver:
|
||||
name: podman
|
||||
platforms:
|
||||
- name: instance
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8009/tcp"
|
||||
- "9000/tcp"
|
||||
published_ports:
|
||||
- 0.0.0.0:8080:8080/tcp
|
||||
- 0.0.0.0:9000:9000/TCP
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
interpreter_python: auto_silent
|
||||
ssh_connection:
|
||||
pipelining: false
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
PROXY: "${PROXY}"
|
||||
NO_PROXY: "${NO_PROXY}"
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- cleanup
|
||||
- destroy
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
51
molecule/quarkus_devmode/prepare.yml
Normal file
51
molecule/quarkus_devmode/prepare.yml
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
tasks:
|
||||
- name: Install sudo
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- sudo
|
||||
- openjdk-17-jdk-headless
|
||||
state: present
|
||||
when:
|
||||
- ansible_facts.os_family == 'Debian'
|
||||
|
||||
- name: "Ensure common prepare phase are set."
|
||||
ansible.builtin.include_tasks: ../prepare.yml
|
||||
|
||||
- name: Install JDK17
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.yum:
|
||||
name:
|
||||
- java-17-openjdk-headless
|
||||
state: present
|
||||
when:
|
||||
- ansible_facts.os_family == 'RedHat'
|
||||
|
||||
- name: Link default logs directory
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.file:
|
||||
state: link
|
||||
src: "{{ item }}"
|
||||
dest: /opt/openjdk
|
||||
force: true
|
||||
with_fileglob:
|
||||
- /usr/lib/jvm/java-17-openjdk*
|
||||
when:
|
||||
- ansible_facts.os_family == "Debian"
|
||||
|
||||
- name: Link default logs directory
|
||||
ansible.builtin.file:
|
||||
state: link
|
||||
src: /usr/lib/jvm/jre-17-openjdk
|
||||
dest: /opt/openjdk
|
||||
force: true
|
||||
when:
|
||||
- ansible_facts.os_family == "RedHat"
|
||||
|
||||
- name: "Display hera_home if defined."
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
1
molecule/quarkus_devmode/roles
Symbolic link
1
molecule/quarkus_devmode/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
47
molecule/quarkus_devmode/verify.yml
Normal file
47
molecule/quarkus_devmode/verify.yml
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
|
||||
- name: Verify we are running on requested JAVA_HOME # noqa blocked_modules command-instead-of-module
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
ps -ef | grep '/opt/openjdk' | grep -v grep
|
||||
args:
|
||||
executable: /bin/bash
|
||||
changed_when: False
|
||||
|
||||
- name: Set internal envvar
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: Verify openid config
|
||||
block:
|
||||
- name: Fetch openID config # noqa blocked_modules command-instead-of-module
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
curl http://localhost:8080/realms/master/.well-known/openid-configuration -k | jq .
|
||||
args:
|
||||
executable: /bin/bash
|
||||
delegate_to: localhost
|
||||
register: openid_config
|
||||
changed_when: False
|
||||
- name: Verify endpoint URLs
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- (openid_config.stdout | from_json)["backchannel_authentication_endpoint"] == 'http://localhost:8080/realms/master/protocol/openid-connect/ext/ciba/auth'
|
||||
- (openid_config.stdout | from_json)['issuer'] == 'http://localhost:8080/realms/master'
|
||||
- (openid_config.stdout | from_json)['authorization_endpoint'] == 'http://localhost:8080/realms/master/protocol/openid-connect/auth'
|
||||
- (openid_config.stdout | from_json)['token_endpoint'] == 'http://localhost:8080/realms/master/protocol/openid-connect/token'
|
||||
delegate_to: localhost
|
||||
when:
|
||||
- hera_home is defined
|
||||
- hera_home | length == 0
|
||||
31
molecule/quarkus_ha/converge.yml
Normal file
31
molecule/quarkus_ha/converge.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: keycloak
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
keycloak_quarkus_show_deprecation_warnings: false
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_quarkus_hostname: "http://{{ inventory_hostname }}:8080"
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_log_level: info
|
||||
keycloak_quarkus_https_key_file_enabled: true
|
||||
keycloak_quarkus_key_file_copy_enabled: true
|
||||
keycloak_quarkus_key_content: "{{ lookup('file', inventory_hostname + '.key') }}"
|
||||
keycloak_quarkus_cert_file_copy_enabled: true
|
||||
keycloak_quarkus_cert_file_src: "{{ inventory_hostname }}.pem"
|
||||
keycloak_quarkus_ks_vault_enabled: true
|
||||
keycloak_quarkus_ks_vault_file: "/opt/keycloak/vault/keystore.p12"
|
||||
keycloak_quarkus_ks_vault_pass: keystorepassword
|
||||
keycloak_quarkus_systemd_wait_for_port: true
|
||||
keycloak_quarkus_systemd_wait_for_timeout: 20
|
||||
keycloak_quarkus_systemd_wait_for_delay: 2
|
||||
keycloak_quarkus_systemd_wait_for_log: true
|
||||
keycloak_quarkus_ha_enabled: true
|
||||
keycloak_quarkus_restart_strategy: restart/serial.yml
|
||||
keycloak_quarkus_db_user: keycloak
|
||||
keycloak_quarkus_db_pass: mysecretpass
|
||||
keycloak_quarkus_db_url: jdbc:postgresql://postgres:5432/keycloak
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
82
molecule/quarkus_ha/molecule.yml
Normal file
82
molecule/quarkus_ha/molecule.yml
Normal file
@@ -0,0 +1,82 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
platforms:
|
||||
- name: instance1
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
groups:
|
||||
- keycloak
|
||||
networks:
|
||||
- name: rhbk
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "9000/tcp"
|
||||
- name: instance2
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
groups:
|
||||
- keycloak
|
||||
networks:
|
||||
- name: rhbk
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "9000/tcp"
|
||||
- name: postgres
|
||||
image: ubuntu/postgres:14-22.04_beta
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: postgres
|
||||
groups:
|
||||
- database
|
||||
networks:
|
||||
- name: rhbk
|
||||
port_bindings:
|
||||
- "5432/tcp"
|
||||
mounts:
|
||||
- type: bind
|
||||
target: /etc/postgresql/postgresql.conf
|
||||
source: ${MOLECULE_PROJECT_DIRECTORY}/molecule/quarkus_ha/postgresql/postgresql.conf
|
||||
env:
|
||||
POSTGRES_USER: keycloak
|
||||
POSTGRES_PASSWORD: mysecretpass
|
||||
POSTGRES_DB: keycloak
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
interpreter_python: auto_silent
|
||||
ssh_connection:
|
||||
pipelining: false
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
PYTHONHTTPSVERIFY: 0
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- cleanup
|
||||
- destroy
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
750
molecule/quarkus_ha/postgresql/postgresql.conf
Normal file
750
molecule/quarkus_ha/postgresql/postgresql.conf
Normal file
@@ -0,0 +1,750 @@
|
||||
# -----------------------------
|
||||
# PostgreSQL configuration file
|
||||
# -----------------------------
|
||||
#
|
||||
# This file consists of lines of the form:
|
||||
#
|
||||
# name = value
|
||||
#
|
||||
# (The "=" is optional.) Whitespace may be used. Comments are introduced with
|
||||
# "#" anywhere on a line. The complete list of parameter names and allowed
|
||||
# values can be found in the PostgreSQL documentation.
|
||||
#
|
||||
# The commented-out settings shown in this file represent the default values.
|
||||
# Re-commenting a setting is NOT sufficient to revert it to the default value;
|
||||
# you need to reload the server.
|
||||
#
|
||||
# This file is read on server startup and when the server receives a SIGHUP
|
||||
# signal. If you edit the file on a running system, you have to SIGHUP the
|
||||
# server for the changes to take effect, run "pg_ctl reload", or execute
|
||||
# "SELECT pg_reload_conf()". Some parameters, which are marked below,
|
||||
# require a server shutdown and restart to take effect.
|
||||
#
|
||||
# Any parameter can also be given as a command-line option to the server, e.g.,
|
||||
# "postgres -c log_connections=on". Some parameters can be changed at run time
|
||||
# with the "SET" SQL command.
|
||||
#
|
||||
# Memory units: kB = kilobytes Time units: ms = milliseconds
|
||||
# MB = megabytes s = seconds
|
||||
# GB = gigabytes min = minutes
|
||||
# TB = terabytes h = hours
|
||||
# d = days
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# FILE LOCATIONS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# The default values of these variables are driven from the -D command-line
|
||||
# option or PGDATA environment variable, represented here as ConfigDir.
|
||||
|
||||
#data_directory = 'ConfigDir' # use data in another directory
|
||||
# (change requires restart)
|
||||
#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file
|
||||
# (change requires restart)
|
||||
#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
|
||||
# (change requires restart)
|
||||
|
||||
# If external_pid_file is not explicitly set, no extra PID file is written.
|
||||
#external_pid_file = '' # write an extra PID file
|
||||
# (change requires restart)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CONNECTIONS AND AUTHENTICATION
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Connection Settings -
|
||||
|
||||
listen_addresses = '*' # what IP address(es) to listen on;
|
||||
# comma-separated list of addresses;
|
||||
# defaults to 'localhost'; use '*' for all
|
||||
# (change requires restart)
|
||||
#port = 5432 # (change requires restart)
|
||||
#max_connections = 100 # (change requires restart)
|
||||
#superuser_reserved_connections = 3 # (change requires restart)
|
||||
#unix_socket_directories = '/tmp' # comma-separated list of directories
|
||||
# (change requires restart)
|
||||
#unix_socket_group = '' # (change requires restart)
|
||||
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
|
||||
# (change requires restart)
|
||||
#bonjour = off # advertise server via Bonjour
|
||||
# (change requires restart)
|
||||
#bonjour_name = '' # defaults to the computer name
|
||||
# (change requires restart)
|
||||
|
||||
# - TCP settings -
|
||||
# see "man 7 tcp" for details
|
||||
|
||||
#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds;
|
||||
# 0 selects the system default
|
||||
#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds;
|
||||
# 0 selects the system default
|
||||
#tcp_keepalives_count = 0 # TCP_KEEPCNT;
|
||||
# 0 selects the system default
|
||||
#tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds;
|
||||
# 0 selects the system default
|
||||
|
||||
# - Authentication -
|
||||
|
||||
#authentication_timeout = 1min # 1s-600s
|
||||
#password_encryption = md5 # md5 or scram-sha-256
|
||||
#db_user_namespace = off
|
||||
|
||||
# GSSAPI using Kerberos
|
||||
#krb_server_keyfile = ''
|
||||
#krb_caseins_users = off
|
||||
|
||||
# - SSL -
|
||||
|
||||
#ssl = off
|
||||
#ssl_ca_file = ''
|
||||
#ssl_cert_file = 'server.crt'
|
||||
#ssl_crl_file = ''
|
||||
#ssl_key_file = 'server.key'
|
||||
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
|
||||
#ssl_prefer_server_ciphers = on
|
||||
#ssl_ecdh_curve = 'prime256v1'
|
||||
#ssl_min_protocol_version = 'TLSv1'
|
||||
#ssl_max_protocol_version = ''
|
||||
#ssl_dh_params_file = ''
|
||||
#ssl_passphrase_command = ''
|
||||
#ssl_passphrase_command_supports_reload = off
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# RESOURCE USAGE (except WAL)
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Memory -
|
||||
|
||||
#shared_buffers = 32MB # min 128kB
|
||||
# (change requires restart)
|
||||
#huge_pages = try # on, off, or try
|
||||
# (change requires restart)
|
||||
#temp_buffers = 8MB # min 800kB
|
||||
#max_prepared_transactions = 0 # zero disables the feature
|
||||
# (change requires restart)
|
||||
# Caution: it is not advisable to set max_prepared_transactions nonzero unless
|
||||
# you actively intend to use prepared transactions.
|
||||
#work_mem = 4MB # min 64kB
|
||||
#maintenance_work_mem = 64MB # min 1MB
|
||||
#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
|
||||
#max_stack_depth = 2MB # min 100kB
|
||||
#shared_memory_type = mmap # the default is the first option
|
||||
# supported by the operating system:
|
||||
# mmap
|
||||
# sysv
|
||||
# windows
|
||||
# (change requires restart)
|
||||
#dynamic_shared_memory_type = posix # the default is the first option
|
||||
# supported by the operating system:
|
||||
# posix
|
||||
# sysv
|
||||
# windows
|
||||
# mmap
|
||||
# (change requires restart)
|
||||
|
||||
# - Disk -
|
||||
|
||||
#temp_file_limit = -1 # limits per-process temp file space
|
||||
# in kB, or -1 for no limit
|
||||
|
||||
# - Kernel Resources -
|
||||
|
||||
#max_files_per_process = 1000 # min 25
|
||||
# (change requires restart)
|
||||
|
||||
# - Cost-Based Vacuum Delay -
|
||||
|
||||
#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables)
|
||||
#vacuum_cost_page_hit = 1 # 0-10000 credits
|
||||
#vacuum_cost_page_miss = 10 # 0-10000 credits
|
||||
#vacuum_cost_page_dirty = 20 # 0-10000 credits
|
||||
#vacuum_cost_limit = 200 # 1-10000 credits
|
||||
|
||||
# - Background Writer -
|
||||
|
||||
#bgwriter_delay = 200ms # 10-10000ms between rounds
|
||||
#bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables
|
||||
#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round
|
||||
#bgwriter_flush_after = 0 # measured in pages, 0 disables
|
||||
|
||||
# - Asynchronous Behavior -
|
||||
|
||||
#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching
|
||||
#max_worker_processes = 8 # (change requires restart)
|
||||
#max_parallel_maintenance_workers = 2 # taken from max_parallel_workers
|
||||
#max_parallel_workers_per_gather = 2 # taken from max_parallel_workers
|
||||
#parallel_leader_participation = on
|
||||
#max_parallel_workers = 8 # maximum number of max_worker_processes that
|
||||
# can be used in parallel operations
|
||||
#old_snapshot_threshold = -1 # 1min-60d; -1 disables; 0 is immediate
|
||||
# (change requires restart)
|
||||
#backend_flush_after = 0 # measured in pages, 0 disables
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# WRITE-AHEAD LOG
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Settings -
|
||||
|
||||
#wal_level = replica # minimal, replica, or logical
|
||||
# (change requires restart)
|
||||
#fsync = on # flush data to disk for crash safety
|
||||
# (turning this off can cause
|
||||
# unrecoverable data corruption)
|
||||
#synchronous_commit = on # synchronization level;
|
||||
# off, local, remote_write, remote_apply, or on
|
||||
#wal_sync_method = fsync # the default is the first option
|
||||
# supported by the operating system:
|
||||
# open_datasync
|
||||
# fdatasync (default on Linux)
|
||||
# fsync
|
||||
# fsync_writethrough
|
||||
# open_sync
|
||||
#full_page_writes = on # recover from partial page writes
|
||||
#wal_compression = off # enable compression of full-page writes
|
||||
#wal_log_hints = off # also do full page writes of non-critical updates
|
||||
# (change requires restart)
|
||||
#wal_init_zero = on # zero-fill new WAL files
|
||||
#wal_recycle = on # recycle WAL files
|
||||
#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers
|
||||
# (change requires restart)
|
||||
#wal_writer_delay = 200ms # 1-10000 milliseconds
|
||||
#wal_writer_flush_after = 1MB # measured in pages, 0 disables
|
||||
|
||||
#commit_delay = 0 # range 0-100000, in microseconds
|
||||
#commit_siblings = 5 # range 1-1000
|
||||
|
||||
# - Checkpoints -
|
||||
|
||||
#checkpoint_timeout = 5min # range 30s-1d
|
||||
#max_wal_size = 1GB
|
||||
#min_wal_size = 80MB
|
||||
#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0
|
||||
#checkpoint_flush_after = 0 # measured in pages, 0 disables
|
||||
#checkpoint_warning = 30s # 0 disables
|
||||
|
||||
# - Archiving -
|
||||
|
||||
#archive_mode = off # enables archiving; off, on, or always
|
||||
# (change requires restart)
|
||||
#archive_command = '' # command to use to archive a logfile segment
|
||||
# placeholders: %p = path of file to archive
|
||||
# %f = file name only
|
||||
# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
|
||||
#archive_timeout = 0 # force a logfile segment switch after this
|
||||
# number of seconds; 0 disables
|
||||
|
||||
# - Archive Recovery -
|
||||
|
||||
# These are only used in recovery mode.
|
||||
|
||||
#restore_command = '' # command to use to restore an archived logfile segment
|
||||
# placeholders: %p = path of file to restore
|
||||
# %f = file name only
|
||||
# e.g. 'cp /mnt/server/archivedir/%f %p'
|
||||
# (change requires restart)
|
||||
#archive_cleanup_command = '' # command to execute at every restartpoint
|
||||
#recovery_end_command = '' # command to execute at completion of recovery
|
||||
|
||||
# - Recovery Target -
|
||||
|
||||
# Set these only when performing a targeted recovery.
|
||||
|
||||
#recovery_target = '' # 'immediate' to end recovery as soon as a
|
||||
# consistent state is reached
|
||||
# (change requires restart)
|
||||
#recovery_target_name = '' # the named restore point to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_time = '' # the time stamp up to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_xid = '' # the transaction ID up to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_lsn = '' # the WAL LSN up to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_inclusive = on # Specifies whether to stop:
|
||||
# just after the specified recovery target (on)
|
||||
# just before the recovery target (off)
|
||||
# (change requires restart)
|
||||
#recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID
|
||||
# (change requires restart)
|
||||
#recovery_target_action = 'pause' # 'pause', 'promote', 'shutdown'
|
||||
# (change requires restart)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# REPLICATION
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Sending Servers -
|
||||
|
||||
# Set these on the master and on any standby that will send replication data.
|
||||
|
||||
#max_wal_senders = 10 # max number of walsender processes
|
||||
# (change requires restart)
|
||||
#wal_keep_segments = 0 # in logfile segments; 0 disables
|
||||
#wal_sender_timeout = 60s # in milliseconds; 0 disables
|
||||
|
||||
#max_replication_slots = 10 # max number of replication slots
|
||||
# (change requires restart)
|
||||
#track_commit_timestamp = off # collect timestamp of transaction commit
|
||||
# (change requires restart)
|
||||
|
||||
# - Master Server -
|
||||
|
||||
# These settings are ignored on a standby server.
|
||||
|
||||
#synchronous_standby_names = '' # standby servers that provide sync rep
|
||||
# method to choose sync standbys, number of sync standbys,
|
||||
# and comma-separated list of application_name
|
||||
# from standby(s); '*' = all
|
||||
#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed
|
||||
|
||||
# - Standby Servers -
|
||||
|
||||
# These settings are ignored on a master server.
|
||||
|
||||
#primary_conninfo = '' # connection string to sending server
|
||||
# (change requires restart)
|
||||
#primary_slot_name = '' # replication slot on sending server
|
||||
# (change requires restart)
|
||||
#promote_trigger_file = '' # file name whose presence ends recovery
|
||||
#hot_standby = on # "off" disallows queries during recovery
|
||||
# (change requires restart)
|
||||
#max_standby_archive_delay = 30s # max delay before canceling queries
|
||||
# when reading WAL from archive;
|
||||
# -1 allows indefinite delay
|
||||
#max_standby_streaming_delay = 30s # max delay before canceling queries
|
||||
# when reading streaming WAL;
|
||||
# -1 allows indefinite delay
|
||||
#wal_receiver_status_interval = 10s # send replies at least this often
|
||||
# 0 disables
|
||||
#hot_standby_feedback = off # send info from standby to prevent
|
||||
# query conflicts
|
||||
#wal_receiver_timeout = 60s # time that receiver waits for
|
||||
# communication from master
|
||||
# in milliseconds; 0 disables
|
||||
#wal_retrieve_retry_interval = 5s # time to wait before retrying to
|
||||
# retrieve WAL after a failed attempt
|
||||
#recovery_min_apply_delay = 0 # minimum delay for applying changes during recovery
|
||||
|
||||
# - Subscribers -
|
||||
|
||||
# These settings are ignored on a publisher.
|
||||
|
||||
#max_logical_replication_workers = 4 # taken from max_worker_processes
|
||||
# (change requires restart)
|
||||
#max_sync_workers_per_subscription = 2 # taken from max_logical_replication_workers
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# QUERY TUNING
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Planner Method Configuration -
|
||||
|
||||
#enable_bitmapscan = on
|
||||
#enable_hashagg = on
|
||||
#enable_hashjoin = on
|
||||
#enable_indexscan = on
|
||||
#enable_indexonlyscan = on
|
||||
#enable_material = on
|
||||
#enable_mergejoin = on
|
||||
#enable_nestloop = on
|
||||
#enable_parallel_append = on
|
||||
#enable_seqscan = on
|
||||
#enable_sort = on
|
||||
#enable_tidscan = on
|
||||
#enable_partitionwise_join = off
|
||||
#enable_partitionwise_aggregate = off
|
||||
#enable_parallel_hash = on
|
||||
#enable_partition_pruning = on
|
||||
|
||||
# - Planner Cost Constants -
|
||||
|
||||
#seq_page_cost = 1.0 # measured on an arbitrary scale
|
||||
#random_page_cost = 4.0 # same scale as above
|
||||
#cpu_tuple_cost = 0.01 # same scale as above
|
||||
#cpu_index_tuple_cost = 0.005 # same scale as above
|
||||
#cpu_operator_cost = 0.0025 # same scale as above
|
||||
#parallel_tuple_cost = 0.1 # same scale as above
|
||||
#parallel_setup_cost = 1000.0 # same scale as above
|
||||
|
||||
#jit_above_cost = 100000 # perform JIT compilation if available
|
||||
# and query more expensive than this;
|
||||
# -1 disables
|
||||
#jit_inline_above_cost = 500000 # inline small functions if query is
|
||||
# more expensive than this; -1 disables
|
||||
#jit_optimize_above_cost = 500000 # use expensive JIT optimizations if
|
||||
# query is more expensive than this;
|
||||
# -1 disables
|
||||
|
||||
#min_parallel_table_scan_size = 8MB
|
||||
#min_parallel_index_scan_size = 512kB
|
||||
#effective_cache_size = 4GB
|
||||
|
||||
# - Genetic Query Optimizer -
|
||||
|
||||
#geqo = on
|
||||
#geqo_threshold = 12
|
||||
#geqo_effort = 5 # range 1-10
|
||||
#geqo_pool_size = 0 # selects default based on effort
|
||||
#geqo_generations = 0 # selects default based on effort
|
||||
#geqo_selection_bias = 2.0 # range 1.5-2.0
|
||||
#geqo_seed = 0.0 # range 0.0-1.0
|
||||
|
||||
# - Other Planner Options -
|
||||
|
||||
#default_statistics_target = 100 # range 1-10000
|
||||
#constraint_exclusion = partition # on, off, or partition
|
||||
#cursor_tuple_fraction = 0.1 # range 0.0-1.0
|
||||
#from_collapse_limit = 8
|
||||
#join_collapse_limit = 8 # 1 disables collapsing of explicit
|
||||
# JOIN clauses
|
||||
#force_parallel_mode = off
|
||||
#jit = on # allow JIT compilation
|
||||
#plan_cache_mode = auto # auto, force_generic_plan or
|
||||
# force_custom_plan
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# REPORTING AND LOGGING
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Where to Log -
|
||||
|
||||
#log_destination = 'stderr' # Valid values are combinations of
|
||||
# stderr, csvlog, syslog, and eventlog,
|
||||
# depending on platform. csvlog
|
||||
# requires logging_collector to be on.
|
||||
|
||||
# This is used when logging to stderr:
|
||||
#logging_collector = off # Enable capturing of stderr and csvlog
|
||||
# into log files. Required to be on for
|
||||
# csvlogs.
|
||||
# (change requires restart)
|
||||
|
||||
# These are only used if logging_collector is on:
|
||||
#log_directory = 'log' # directory where log files are written,
|
||||
# can be absolute or relative to PGDATA
|
||||
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
|
||||
# can include strftime() escapes
|
||||
#log_file_mode = 0600 # creation mode for log files,
|
||||
# begin with 0 to use octal notation
|
||||
#log_truncate_on_rotation = off # If on, an existing log file with the
|
||||
# same name as the new log file will be
|
||||
# truncated rather than appended to.
|
||||
# But such truncation only occurs on
|
||||
# time-driven rotation, not on restarts
|
||||
# or size-driven rotation. Default is
|
||||
# off, meaning append to existing files
|
||||
# in all cases.
|
||||
#log_rotation_age = 1d # Automatic rotation of logfiles will
|
||||
# happen after that time. 0 disables.
|
||||
#log_rotation_size = 10MB # Automatic rotation of logfiles will
|
||||
# happen after that much log output.
|
||||
# 0 disables.
|
||||
|
||||
# These are relevant when logging to syslog:
|
||||
#syslog_facility = 'LOCAL0'
|
||||
#syslog_ident = 'postgres'
|
||||
#syslog_sequence_numbers = on
|
||||
#syslog_split_messages = on
|
||||
|
||||
# This is only relevant when logging to eventlog (win32):
|
||||
# (change requires restart)
|
||||
#event_source = 'PostgreSQL'
|
||||
|
||||
# - When to Log -
|
||||
|
||||
#log_min_messages = warning # values in order of decreasing detail:
|
||||
# debug5
|
||||
# debug4
|
||||
# debug3
|
||||
# debug2
|
||||
# debug1
|
||||
# info
|
||||
# notice
|
||||
# warning
|
||||
# error
|
||||
# log
|
||||
# fatal
|
||||
# panic
|
||||
|
||||
#log_min_error_statement = error # values in order of decreasing detail:
|
||||
# debug5
|
||||
# debug4
|
||||
# debug3
|
||||
# debug2
|
||||
# debug1
|
||||
# info
|
||||
# notice
|
||||
# warning
|
||||
# error
|
||||
# log
|
||||
# fatal
|
||||
# panic (effectively off)
|
||||
|
||||
#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements
|
||||
# and their durations, > 0 logs only
|
||||
# statements running at least this number
|
||||
# of milliseconds
|
||||
|
||||
#log_transaction_sample_rate = 0.0 # Fraction of transactions whose statements
|
||||
# are logged regardless of their duration. 1.0 logs all
|
||||
# statements from all transactions, 0.0 never logs.
|
||||
|
||||
# - What to Log -
|
||||
|
||||
#debug_print_parse = off
|
||||
#debug_print_rewritten = off
|
||||
#debug_print_plan = off
|
||||
#debug_pretty_print = on
|
||||
#log_checkpoints = off
|
||||
#log_connections = off
|
||||
#log_disconnections = off
|
||||
#log_duration = off
|
||||
#log_error_verbosity = default # terse, default, or verbose messages
|
||||
#log_hostname = off
|
||||
#log_line_prefix = '%m [%p] ' # special values:
|
||||
# %a = application name
|
||||
# %u = user name
|
||||
# %d = database name
|
||||
# %r = remote host and port
|
||||
# %h = remote host
|
||||
# %p = process ID
|
||||
# %t = timestamp without milliseconds
|
||||
# %m = timestamp with milliseconds
|
||||
# %n = timestamp with milliseconds (as a Unix epoch)
|
||||
# %i = command tag
|
||||
# %e = SQL state
|
||||
# %c = session ID
|
||||
# %l = session line number
|
||||
# %s = session start timestamp
|
||||
# %v = virtual transaction ID
|
||||
# %x = transaction ID (0 if none)
|
||||
# %q = stop here in non-session
|
||||
# processes
|
||||
# %% = '%'
|
||||
# e.g. '<%u%%%d> '
|
||||
#log_lock_waits = off # log lock waits >= deadlock_timeout
|
||||
#log_statement = 'none' # none, ddl, mod, all
|
||||
#log_replication_commands = off
|
||||
#log_temp_files = -1 # log temporary files equal or larger
|
||||
# than the specified size in kilobytes;
|
||||
# -1 disables, 0 logs all temp files
|
||||
#log_timezone = 'GMT'
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# PROCESS TITLE
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#cluster_name = '' # added to process titles if nonempty
|
||||
# (change requires restart)
|
||||
#update_process_title = on
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# STATISTICS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Query and Index Statistics Collector -
|
||||
|
||||
#track_activities = on
|
||||
#track_counts = on
|
||||
#track_io_timing = off
|
||||
#track_functions = none # none, pl, all
|
||||
#track_activity_query_size = 1024 # (change requires restart)
|
||||
#stats_temp_directory = 'pg_stat_tmp'
|
||||
|
||||
|
||||
# - Monitoring -
|
||||
|
||||
#log_parser_stats = off
|
||||
#log_planner_stats = off
|
||||
#log_executor_stats = off
|
||||
#log_statement_stats = off
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# AUTOVACUUM
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#autovacuum = on # Enable autovacuum subprocess? 'on'
|
||||
# requires track_counts to also be on.
|
||||
#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and
|
||||
# their durations, > 0 logs only
|
||||
# actions running at least this number
|
||||
# of milliseconds.
|
||||
#autovacuum_max_workers = 3 # max number of autovacuum subprocesses
|
||||
# (change requires restart)
|
||||
#autovacuum_naptime = 1min # time between autovacuum runs
|
||||
#autovacuum_vacuum_threshold = 50 # min number of row updates before
|
||||
# vacuum
|
||||
#autovacuum_analyze_threshold = 50 # min number of row updates before
|
||||
# analyze
|
||||
#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum
|
||||
#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze
|
||||
#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
|
||||
# (change requires restart)
|
||||
#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age
|
||||
# before forced vacuum
|
||||
# (change requires restart)
|
||||
#autovacuum_vacuum_cost_delay = 2ms # default vacuum cost delay for
|
||||
# autovacuum, in milliseconds;
|
||||
# -1 means use vacuum_cost_delay
|
||||
#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for
|
||||
# autovacuum, -1 means use
|
||||
# vacuum_cost_limit
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CLIENT CONNECTION DEFAULTS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Statement Behavior -
|
||||
|
||||
#client_min_messages = notice # values in order of decreasing detail:
|
||||
# debug5
|
||||
# debug4
|
||||
# debug3
|
||||
# debug2
|
||||
# debug1
|
||||
# log
|
||||
# notice
|
||||
# warning
|
||||
# error
|
||||
#search_path = '"$user", public' # schema names
|
||||
#row_security = on
|
||||
#default_tablespace = '' # a tablespace name, '' uses the default
|
||||
#temp_tablespaces = '' # a list of tablespace names, '' uses
|
||||
# only default tablespace
|
||||
#default_table_access_method = 'heap'
|
||||
#check_function_bodies = on
|
||||
#default_transaction_isolation = 'read committed'
|
||||
#default_transaction_read_only = off
|
||||
#default_transaction_deferrable = off
|
||||
#session_replication_role = 'origin'
|
||||
#statement_timeout = 0 # in milliseconds, 0 is disabled
|
||||
#lock_timeout = 0 # in milliseconds, 0 is disabled
|
||||
#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled
|
||||
#vacuum_freeze_min_age = 50000000
|
||||
#vacuum_freeze_table_age = 150000000
|
||||
#vacuum_multixact_freeze_min_age = 5000000
|
||||
#vacuum_multixact_freeze_table_age = 150000000
|
||||
#vacuum_cleanup_index_scale_factor = 0.1 # fraction of total number of tuples
|
||||
# before index cleanup, 0 always performs
|
||||
# index cleanup
|
||||
#bytea_output = 'hex' # hex, escape
|
||||
#xmlbinary = 'base64'
|
||||
#xmloption = 'content'
|
||||
#gin_fuzzy_search_limit = 0
|
||||
#gin_pending_list_limit = 4MB
|
||||
|
||||
# - Locale and Formatting -
|
||||
|
||||
#datestyle = 'iso, mdy'
|
||||
#intervalstyle = 'postgres'
|
||||
#timezone = 'GMT'
|
||||
#timezone_abbreviations = 'Default' # Select the set of available time zone
|
||||
# abbreviations. Currently, there are
|
||||
# Default
|
||||
# Australia (historical usage)
|
||||
# India
|
||||
# You can create your own file in
|
||||
# share/timezonesets/.
|
||||
#extra_float_digits = 1 # min -15, max 3; any value >0 actually
|
||||
# selects precise output mode
|
||||
#client_encoding = sql_ascii # actually, defaults to database
|
||||
# encoding
|
||||
|
||||
# These settings are initialized by initdb, but they can be changed.
|
||||
#lc_messages = 'C' # locale for system error message
|
||||
# strings
|
||||
#lc_monetary = 'C' # locale for monetary formatting
|
||||
#lc_numeric = 'C' # locale for number formatting
|
||||
#lc_time = 'C' # locale for time formatting
|
||||
|
||||
# default configuration for text search
|
||||
#default_text_search_config = 'pg_catalog.simple'
|
||||
|
||||
# - Shared Library Preloading -
|
||||
|
||||
#shared_preload_libraries = '' # (change requires restart)
|
||||
#local_preload_libraries = ''
|
||||
#session_preload_libraries = ''
|
||||
#jit_provider = 'llvmjit' # JIT library to use
|
||||
|
||||
# - Other Defaults -
|
||||
|
||||
#dynamic_library_path = '$libdir'
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# LOCK MANAGEMENT
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#deadlock_timeout = 1s
|
||||
#max_locks_per_transaction = 64 # min 10
|
||||
# (change requires restart)
|
||||
#max_pred_locks_per_transaction = 64 # min 10
|
||||
# (change requires restart)
|
||||
#max_pred_locks_per_relation = -2 # negative values mean
|
||||
# (max_pred_locks_per_transaction
|
||||
# / -max_pred_locks_per_relation) - 1
|
||||
#max_pred_locks_per_page = 2 # min 0
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VERSION AND PLATFORM COMPATIBILITY
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Previous PostgreSQL Versions -
|
||||
|
||||
#array_nulls = on
|
||||
#backslash_quote = safe_encoding # on, off, or safe_encoding
|
||||
#escape_string_warning = on
|
||||
#lo_compat_privileges = off
|
||||
#operator_precedence_warning = off
|
||||
#quote_all_identifiers = off
|
||||
#standard_conforming_strings = on
|
||||
#synchronize_seqscans = on
|
||||
|
||||
# - Other Platforms and Clients -
|
||||
|
||||
#transform_null_equals = off
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# ERROR HANDLING
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#exit_on_error = off # terminate session on any error?
|
||||
#restart_after_crash = on # reinitialize after backend crash?
|
||||
#data_sync_retry = off # retry or panic on failure to fsync
|
||||
# data?
|
||||
# (change requires restart)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CONFIG FILE INCLUDES
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# These options allow settings to be loaded from files other than the
|
||||
# default postgresql.conf. Note that these are directives, not variable
|
||||
# assignments, so they can usefully be given more than once.
|
||||
|
||||
#include_dir = '...' # include files ending in '.conf' from
|
||||
# a directory, e.g., 'conf.d'
|
||||
#include_if_exists = '...' # include file only if it exists
|
||||
#include = '...' # include file
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CUSTOMIZED OPTIONS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Add settings for extensions here
|
||||
48
molecule/quarkus_ha/prepare.yml
Normal file
48
molecule/quarkus_ha/prepare.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: keycloak
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
tasks:
|
||||
- name: "Display hera_home if defined."
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: "Ensure common prepare phase are set."
|
||||
ansible.builtin.include_tasks: ../prepare.yml
|
||||
|
||||
- name: Create certificate request
|
||||
ansible.builtin.command: "openssl req -x509 -newkey rsa:4096 -keyout {{ inventory_hostname }}.key -out {{ inventory_hostname }}.pem -sha256 -days 365 -nodes -subj '/CN={{ inventory_hostname }}'"
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}"
|
||||
delegate_to: localhost
|
||||
changed_when: False
|
||||
|
||||
- name: Create vault directory
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.file:
|
||||
state: directory
|
||||
path: "/opt/keycloak/vault"
|
||||
mode: 0755
|
||||
|
||||
- name: Make sure a jre is available (for keytool to prepare keystore)
|
||||
delegate_to: localhost
|
||||
ansible.builtin.package:
|
||||
name: "{{ 'java-17-openjdk-headless' if hera_home | length > 0 else 'openjdk-17-jdk-headless' }}"
|
||||
state: present
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
failed_when: false
|
||||
|
||||
- name: Create vault keystore
|
||||
ansible.builtin.command: keytool -importpass -alias TestRealm_testalias -keystore keystore.p12 -storepass keystorepassword
|
||||
delegate_to: localhost
|
||||
register: keytool_cmd
|
||||
changed_when: False
|
||||
failed_when: not 'already exists' in keytool_cmd.stdout and keytool_cmd.rc != 0
|
||||
|
||||
- name: Copy certificates and vault
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.copy:
|
||||
src: keystore.p12
|
||||
dest: /opt/keycloak/vault/keystore.p12
|
||||
mode: 0444
|
||||
1
molecule/quarkus_ha/roles
Symbolic link
1
molecule/quarkus_ha/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
31
molecule/quarkus_ha/verify.yml
Normal file
31
molecule/quarkus_ha/verify.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: keycloak
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
fail_msg: "Service not running"
|
||||
|
||||
- name: Set internal envvar
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: Check log file
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.stat:
|
||||
path: /var/log/keycloak/keycloak.log
|
||||
register: keycloak_log_file
|
||||
|
||||
- name: Check if keycloak file exists
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- keycloak_log_file.stat.exists
|
||||
- not keycloak_log_file.stat.isdir
|
||||
32
molecule/quarkus_ha_26.4_below/converge.yml
Normal file
32
molecule/quarkus_ha_26.4_below/converge.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: keycloak
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
keycloak_quarkus_show_deprecation_warnings: false
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_quarkus_hostname: "http://{{ inventory_hostname }}:8080"
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_log_level: info
|
||||
keycloak_quarkus_https_key_file_enabled: true
|
||||
keycloak_quarkus_key_file_copy_enabled: true
|
||||
keycloak_quarkus_key_content: "{{ lookup('file', inventory_hostname + '.key') }}"
|
||||
keycloak_quarkus_cert_file_copy_enabled: true
|
||||
keycloak_quarkus_cert_file_src: "{{ inventory_hostname }}.pem"
|
||||
keycloak_quarkus_ks_vault_enabled: true
|
||||
keycloak_quarkus_ks_vault_file: "/opt/keycloak/vault/keystore.p12"
|
||||
keycloak_quarkus_ks_vault_pass: keystorepassword
|
||||
keycloak_quarkus_systemd_wait_for_port: true
|
||||
keycloak_quarkus_systemd_wait_for_timeout: 20
|
||||
keycloak_quarkus_systemd_wait_for_delay: 2
|
||||
keycloak_quarkus_systemd_wait_for_log: true
|
||||
keycloak_quarkus_ha_enabled: true
|
||||
keycloak_quarkus_restart_strategy: restart/serial.yml
|
||||
keycloak_quarkus_db_user: keycloak
|
||||
keycloak_quarkus_db_pass: mysecretpass
|
||||
keycloak_quarkus_db_url: jdbc:postgresql://postgres:5432/keycloak
|
||||
keycloak_quarkus_version: 26.3.5
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
82
molecule/quarkus_ha_26.4_below/molecule.yml
Normal file
82
molecule/quarkus_ha_26.4_below/molecule.yml
Normal file
@@ -0,0 +1,82 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
platforms:
|
||||
- name: instance1
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
groups:
|
||||
- keycloak
|
||||
networks:
|
||||
- name: rhbk
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "9000/tcp"
|
||||
- name: instance2
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
groups:
|
||||
- keycloak
|
||||
networks:
|
||||
- name: rhbk
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "9000/tcp"
|
||||
- name: postgres
|
||||
image: ubuntu/postgres:14-22.04_beta
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: postgres
|
||||
groups:
|
||||
- database
|
||||
networks:
|
||||
- name: rhbk
|
||||
port_bindings:
|
||||
- "5432/tcp"
|
||||
mounts:
|
||||
- type: bind
|
||||
target: /etc/postgresql/postgresql.conf
|
||||
source: ${MOLECULE_PROJECT_DIRECTORY}/molecule/quarkus_ha/postgresql/postgresql.conf
|
||||
env:
|
||||
POSTGRES_USER: keycloak
|
||||
POSTGRES_PASSWORD: mysecretpass
|
||||
POSTGRES_DB: keycloak
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
interpreter_python: auto_silent
|
||||
ssh_connection:
|
||||
pipelining: false
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
PYTHONHTTPSVERIFY: 0
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- cleanup
|
||||
- destroy
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
750
molecule/quarkus_ha_26.4_below/postgresql/postgresql.conf
Normal file
750
molecule/quarkus_ha_26.4_below/postgresql/postgresql.conf
Normal file
@@ -0,0 +1,750 @@
|
||||
# -----------------------------
|
||||
# PostgreSQL configuration file
|
||||
# -----------------------------
|
||||
#
|
||||
# This file consists of lines of the form:
|
||||
#
|
||||
# name = value
|
||||
#
|
||||
# (The "=" is optional.) Whitespace may be used. Comments are introduced with
|
||||
# "#" anywhere on a line. The complete list of parameter names and allowed
|
||||
# values can be found in the PostgreSQL documentation.
|
||||
#
|
||||
# The commented-out settings shown in this file represent the default values.
|
||||
# Re-commenting a setting is NOT sufficient to revert it to the default value;
|
||||
# you need to reload the server.
|
||||
#
|
||||
# This file is read on server startup and when the server receives a SIGHUP
|
||||
# signal. If you edit the file on a running system, you have to SIGHUP the
|
||||
# server for the changes to take effect, run "pg_ctl reload", or execute
|
||||
# "SELECT pg_reload_conf()". Some parameters, which are marked below,
|
||||
# require a server shutdown and restart to take effect.
|
||||
#
|
||||
# Any parameter can also be given as a command-line option to the server, e.g.,
|
||||
# "postgres -c log_connections=on". Some parameters can be changed at run time
|
||||
# with the "SET" SQL command.
|
||||
#
|
||||
# Memory units: kB = kilobytes Time units: ms = milliseconds
|
||||
# MB = megabytes s = seconds
|
||||
# GB = gigabytes min = minutes
|
||||
# TB = terabytes h = hours
|
||||
# d = days
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# FILE LOCATIONS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# The default values of these variables are driven from the -D command-line
|
||||
# option or PGDATA environment variable, represented here as ConfigDir.
|
||||
|
||||
#data_directory = 'ConfigDir' # use data in another directory
|
||||
# (change requires restart)
|
||||
#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file
|
||||
# (change requires restart)
|
||||
#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
|
||||
# (change requires restart)
|
||||
|
||||
# If external_pid_file is not explicitly set, no extra PID file is written.
|
||||
#external_pid_file = '' # write an extra PID file
|
||||
# (change requires restart)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CONNECTIONS AND AUTHENTICATION
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Connection Settings -
|
||||
|
||||
listen_addresses = '*' # what IP address(es) to listen on;
|
||||
# comma-separated list of addresses;
|
||||
# defaults to 'localhost'; use '*' for all
|
||||
# (change requires restart)
|
||||
#port = 5432 # (change requires restart)
|
||||
#max_connections = 100 # (change requires restart)
|
||||
#superuser_reserved_connections = 3 # (change requires restart)
|
||||
#unix_socket_directories = '/tmp' # comma-separated list of directories
|
||||
# (change requires restart)
|
||||
#unix_socket_group = '' # (change requires restart)
|
||||
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
|
||||
# (change requires restart)
|
||||
#bonjour = off # advertise server via Bonjour
|
||||
# (change requires restart)
|
||||
#bonjour_name = '' # defaults to the computer name
|
||||
# (change requires restart)
|
||||
|
||||
# - TCP settings -
|
||||
# see "man 7 tcp" for details
|
||||
|
||||
#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds;
|
||||
# 0 selects the system default
|
||||
#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds;
|
||||
# 0 selects the system default
|
||||
#tcp_keepalives_count = 0 # TCP_KEEPCNT;
|
||||
# 0 selects the system default
|
||||
#tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds;
|
||||
# 0 selects the system default
|
||||
|
||||
# - Authentication -
|
||||
|
||||
#authentication_timeout = 1min # 1s-600s
|
||||
#password_encryption = md5 # md5 or scram-sha-256
|
||||
#db_user_namespace = off
|
||||
|
||||
# GSSAPI using Kerberos
|
||||
#krb_server_keyfile = ''
|
||||
#krb_caseins_users = off
|
||||
|
||||
# - SSL -
|
||||
|
||||
#ssl = off
|
||||
#ssl_ca_file = ''
|
||||
#ssl_cert_file = 'server.crt'
|
||||
#ssl_crl_file = ''
|
||||
#ssl_key_file = 'server.key'
|
||||
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
|
||||
#ssl_prefer_server_ciphers = on
|
||||
#ssl_ecdh_curve = 'prime256v1'
|
||||
#ssl_min_protocol_version = 'TLSv1'
|
||||
#ssl_max_protocol_version = ''
|
||||
#ssl_dh_params_file = ''
|
||||
#ssl_passphrase_command = ''
|
||||
#ssl_passphrase_command_supports_reload = off
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# RESOURCE USAGE (except WAL)
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Memory -
|
||||
|
||||
#shared_buffers = 32MB # min 128kB
|
||||
# (change requires restart)
|
||||
#huge_pages = try # on, off, or try
|
||||
# (change requires restart)
|
||||
#temp_buffers = 8MB # min 800kB
|
||||
#max_prepared_transactions = 0 # zero disables the feature
|
||||
# (change requires restart)
|
||||
# Caution: it is not advisable to set max_prepared_transactions nonzero unless
|
||||
# you actively intend to use prepared transactions.
|
||||
#work_mem = 4MB # min 64kB
|
||||
#maintenance_work_mem = 64MB # min 1MB
|
||||
#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
|
||||
#max_stack_depth = 2MB # min 100kB
|
||||
#shared_memory_type = mmap # the default is the first option
|
||||
# supported by the operating system:
|
||||
# mmap
|
||||
# sysv
|
||||
# windows
|
||||
# (change requires restart)
|
||||
#dynamic_shared_memory_type = posix # the default is the first option
|
||||
# supported by the operating system:
|
||||
# posix
|
||||
# sysv
|
||||
# windows
|
||||
# mmap
|
||||
# (change requires restart)
|
||||
|
||||
# - Disk -
|
||||
|
||||
#temp_file_limit = -1 # limits per-process temp file space
|
||||
# in kB, or -1 for no limit
|
||||
|
||||
# - Kernel Resources -
|
||||
|
||||
#max_files_per_process = 1000 # min 25
|
||||
# (change requires restart)
|
||||
|
||||
# - Cost-Based Vacuum Delay -
|
||||
|
||||
#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables)
|
||||
#vacuum_cost_page_hit = 1 # 0-10000 credits
|
||||
#vacuum_cost_page_miss = 10 # 0-10000 credits
|
||||
#vacuum_cost_page_dirty = 20 # 0-10000 credits
|
||||
#vacuum_cost_limit = 200 # 1-10000 credits
|
||||
|
||||
# - Background Writer -
|
||||
|
||||
#bgwriter_delay = 200ms # 10-10000ms between rounds
|
||||
#bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables
|
||||
#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round
|
||||
#bgwriter_flush_after = 0 # measured in pages, 0 disables
|
||||
|
||||
# - Asynchronous Behavior -
|
||||
|
||||
#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching
|
||||
#max_worker_processes = 8 # (change requires restart)
|
||||
#max_parallel_maintenance_workers = 2 # taken from max_parallel_workers
|
||||
#max_parallel_workers_per_gather = 2 # taken from max_parallel_workers
|
||||
#parallel_leader_participation = on
|
||||
#max_parallel_workers = 8 # maximum number of max_worker_processes that
|
||||
# can be used in parallel operations
|
||||
#old_snapshot_threshold = -1 # 1min-60d; -1 disables; 0 is immediate
|
||||
# (change requires restart)
|
||||
#backend_flush_after = 0 # measured in pages, 0 disables
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# WRITE-AHEAD LOG
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Settings -
|
||||
|
||||
#wal_level = replica # minimal, replica, or logical
|
||||
# (change requires restart)
|
||||
#fsync = on # flush data to disk for crash safety
|
||||
# (turning this off can cause
|
||||
# unrecoverable data corruption)
|
||||
#synchronous_commit = on # synchronization level;
|
||||
# off, local, remote_write, remote_apply, or on
|
||||
#wal_sync_method = fsync # the default is the first option
|
||||
# supported by the operating system:
|
||||
# open_datasync
|
||||
# fdatasync (default on Linux)
|
||||
# fsync
|
||||
# fsync_writethrough
|
||||
# open_sync
|
||||
#full_page_writes = on # recover from partial page writes
|
||||
#wal_compression = off # enable compression of full-page writes
|
||||
#wal_log_hints = off # also do full page writes of non-critical updates
|
||||
# (change requires restart)
|
||||
#wal_init_zero = on # zero-fill new WAL files
|
||||
#wal_recycle = on # recycle WAL files
|
||||
#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers
|
||||
# (change requires restart)
|
||||
#wal_writer_delay = 200ms # 1-10000 milliseconds
|
||||
#wal_writer_flush_after = 1MB # measured in pages, 0 disables
|
||||
|
||||
#commit_delay = 0 # range 0-100000, in microseconds
|
||||
#commit_siblings = 5 # range 1-1000
|
||||
|
||||
# - Checkpoints -
|
||||
|
||||
#checkpoint_timeout = 5min # range 30s-1d
|
||||
#max_wal_size = 1GB
|
||||
#min_wal_size = 80MB
|
||||
#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0
|
||||
#checkpoint_flush_after = 0 # measured in pages, 0 disables
|
||||
#checkpoint_warning = 30s # 0 disables
|
||||
|
||||
# - Archiving -
|
||||
|
||||
#archive_mode = off # enables archiving; off, on, or always
|
||||
# (change requires restart)
|
||||
#archive_command = '' # command to use to archive a logfile segment
|
||||
# placeholders: %p = path of file to archive
|
||||
# %f = file name only
|
||||
# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
|
||||
#archive_timeout = 0 # force a logfile segment switch after this
|
||||
# number of seconds; 0 disables
|
||||
|
||||
# - Archive Recovery -
|
||||
|
||||
# These are only used in recovery mode.
|
||||
|
||||
#restore_command = '' # command to use to restore an archived logfile segment
|
||||
# placeholders: %p = path of file to restore
|
||||
# %f = file name only
|
||||
# e.g. 'cp /mnt/server/archivedir/%f %p'
|
||||
# (change requires restart)
|
||||
#archive_cleanup_command = '' # command to execute at every restartpoint
|
||||
#recovery_end_command = '' # command to execute at completion of recovery
|
||||
|
||||
# - Recovery Target -
|
||||
|
||||
# Set these only when performing a targeted recovery.
|
||||
|
||||
#recovery_target = '' # 'immediate' to end recovery as soon as a
|
||||
# consistent state is reached
|
||||
# (change requires restart)
|
||||
#recovery_target_name = '' # the named restore point to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_time = '' # the time stamp up to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_xid = '' # the transaction ID up to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_lsn = '' # the WAL LSN up to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_inclusive = on # Specifies whether to stop:
|
||||
# just after the specified recovery target (on)
|
||||
# just before the recovery target (off)
|
||||
# (change requires restart)
|
||||
#recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID
|
||||
# (change requires restart)
|
||||
#recovery_target_action = 'pause' # 'pause', 'promote', 'shutdown'
|
||||
# (change requires restart)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# REPLICATION
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Sending Servers -
|
||||
|
||||
# Set these on the master and on any standby that will send replication data.
|
||||
|
||||
#max_wal_senders = 10 # max number of walsender processes
|
||||
# (change requires restart)
|
||||
#wal_keep_segments = 0 # in logfile segments; 0 disables
|
||||
#wal_sender_timeout = 60s # in milliseconds; 0 disables
|
||||
|
||||
#max_replication_slots = 10 # max number of replication slots
|
||||
# (change requires restart)
|
||||
#track_commit_timestamp = off # collect timestamp of transaction commit
|
||||
# (change requires restart)
|
||||
|
||||
# - Master Server -
|
||||
|
||||
# These settings are ignored on a standby server.
|
||||
|
||||
#synchronous_standby_names = '' # standby servers that provide sync rep
|
||||
# method to choose sync standbys, number of sync standbys,
|
||||
# and comma-separated list of application_name
|
||||
# from standby(s); '*' = all
|
||||
#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed
|
||||
|
||||
# - Standby Servers -
|
||||
|
||||
# These settings are ignored on a master server.
|
||||
|
||||
#primary_conninfo = '' # connection string to sending server
|
||||
# (change requires restart)
|
||||
#primary_slot_name = '' # replication slot on sending server
|
||||
# (change requires restart)
|
||||
#promote_trigger_file = '' # file name whose presence ends recovery
|
||||
#hot_standby = on # "off" disallows queries during recovery
|
||||
# (change requires restart)
|
||||
#max_standby_archive_delay = 30s # max delay before canceling queries
|
||||
# when reading WAL from archive;
|
||||
# -1 allows indefinite delay
|
||||
#max_standby_streaming_delay = 30s # max delay before canceling queries
|
||||
# when reading streaming WAL;
|
||||
# -1 allows indefinite delay
|
||||
#wal_receiver_status_interval = 10s # send replies at least this often
|
||||
# 0 disables
|
||||
#hot_standby_feedback = off # send info from standby to prevent
|
||||
# query conflicts
|
||||
#wal_receiver_timeout = 60s # time that receiver waits for
|
||||
# communication from master
|
||||
# in milliseconds; 0 disables
|
||||
#wal_retrieve_retry_interval = 5s # time to wait before retrying to
|
||||
# retrieve WAL after a failed attempt
|
||||
#recovery_min_apply_delay = 0 # minimum delay for applying changes during recovery
|
||||
|
||||
# - Subscribers -
|
||||
|
||||
# These settings are ignored on a publisher.
|
||||
|
||||
#max_logical_replication_workers = 4 # taken from max_worker_processes
|
||||
# (change requires restart)
|
||||
#max_sync_workers_per_subscription = 2 # taken from max_logical_replication_workers
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# QUERY TUNING
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Planner Method Configuration -
|
||||
|
||||
#enable_bitmapscan = on
|
||||
#enable_hashagg = on
|
||||
#enable_hashjoin = on
|
||||
#enable_indexscan = on
|
||||
#enable_indexonlyscan = on
|
||||
#enable_material = on
|
||||
#enable_mergejoin = on
|
||||
#enable_nestloop = on
|
||||
#enable_parallel_append = on
|
||||
#enable_seqscan = on
|
||||
#enable_sort = on
|
||||
#enable_tidscan = on
|
||||
#enable_partitionwise_join = off
|
||||
#enable_partitionwise_aggregate = off
|
||||
#enable_parallel_hash = on
|
||||
#enable_partition_pruning = on
|
||||
|
||||
# - Planner Cost Constants -
|
||||
|
||||
#seq_page_cost = 1.0 # measured on an arbitrary scale
|
||||
#random_page_cost = 4.0 # same scale as above
|
||||
#cpu_tuple_cost = 0.01 # same scale as above
|
||||
#cpu_index_tuple_cost = 0.005 # same scale as above
|
||||
#cpu_operator_cost = 0.0025 # same scale as above
|
||||
#parallel_tuple_cost = 0.1 # same scale as above
|
||||
#parallel_setup_cost = 1000.0 # same scale as above
|
||||
|
||||
#jit_above_cost = 100000 # perform JIT compilation if available
|
||||
# and query more expensive than this;
|
||||
# -1 disables
|
||||
#jit_inline_above_cost = 500000 # inline small functions if query is
|
||||
# more expensive than this; -1 disables
|
||||
#jit_optimize_above_cost = 500000 # use expensive JIT optimizations if
|
||||
# query is more expensive than this;
|
||||
# -1 disables
|
||||
|
||||
#min_parallel_table_scan_size = 8MB
|
||||
#min_parallel_index_scan_size = 512kB
|
||||
#effective_cache_size = 4GB
|
||||
|
||||
# - Genetic Query Optimizer -
|
||||
|
||||
#geqo = on
|
||||
#geqo_threshold = 12
|
||||
#geqo_effort = 5 # range 1-10
|
||||
#geqo_pool_size = 0 # selects default based on effort
|
||||
#geqo_generations = 0 # selects default based on effort
|
||||
#geqo_selection_bias = 2.0 # range 1.5-2.0
|
||||
#geqo_seed = 0.0 # range 0.0-1.0
|
||||
|
||||
# - Other Planner Options -
|
||||
|
||||
#default_statistics_target = 100 # range 1-10000
|
||||
#constraint_exclusion = partition # on, off, or partition
|
||||
#cursor_tuple_fraction = 0.1 # range 0.0-1.0
|
||||
#from_collapse_limit = 8
|
||||
#join_collapse_limit = 8 # 1 disables collapsing of explicit
|
||||
# JOIN clauses
|
||||
#force_parallel_mode = off
|
||||
#jit = on # allow JIT compilation
|
||||
#plan_cache_mode = auto # auto, force_generic_plan or
|
||||
# force_custom_plan
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# REPORTING AND LOGGING
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Where to Log -
|
||||
|
||||
#log_destination = 'stderr' # Valid values are combinations of
|
||||
# stderr, csvlog, syslog, and eventlog,
|
||||
# depending on platform. csvlog
|
||||
# requires logging_collector to be on.
|
||||
|
||||
# This is used when logging to stderr:
|
||||
#logging_collector = off # Enable capturing of stderr and csvlog
|
||||
# into log files. Required to be on for
|
||||
# csvlogs.
|
||||
# (change requires restart)
|
||||
|
||||
# These are only used if logging_collector is on:
|
||||
#log_directory = 'log' # directory where log files are written,
|
||||
# can be absolute or relative to PGDATA
|
||||
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
|
||||
# can include strftime() escapes
|
||||
#log_file_mode = 0600 # creation mode for log files,
|
||||
# begin with 0 to use octal notation
|
||||
#log_truncate_on_rotation = off # If on, an existing log file with the
|
||||
# same name as the new log file will be
|
||||
# truncated rather than appended to.
|
||||
# But such truncation only occurs on
|
||||
# time-driven rotation, not on restarts
|
||||
# or size-driven rotation. Default is
|
||||
# off, meaning append to existing files
|
||||
# in all cases.
|
||||
#log_rotation_age = 1d # Automatic rotation of logfiles will
|
||||
# happen after that time. 0 disables.
|
||||
#log_rotation_size = 10MB # Automatic rotation of logfiles will
|
||||
# happen after that much log output.
|
||||
# 0 disables.
|
||||
|
||||
# These are relevant when logging to syslog:
|
||||
#syslog_facility = 'LOCAL0'
|
||||
#syslog_ident = 'postgres'
|
||||
#syslog_sequence_numbers = on
|
||||
#syslog_split_messages = on
|
||||
|
||||
# This is only relevant when logging to eventlog (win32):
|
||||
# (change requires restart)
|
||||
#event_source = 'PostgreSQL'
|
||||
|
||||
# - When to Log -
|
||||
|
||||
#log_min_messages = warning # values in order of decreasing detail:
|
||||
# debug5
|
||||
# debug4
|
||||
# debug3
|
||||
# debug2
|
||||
# debug1
|
||||
# info
|
||||
# notice
|
||||
# warning
|
||||
# error
|
||||
# log
|
||||
# fatal
|
||||
# panic
|
||||
|
||||
#log_min_error_statement = error # values in order of decreasing detail:
|
||||
# debug5
|
||||
# debug4
|
||||
# debug3
|
||||
# debug2
|
||||
# debug1
|
||||
# info
|
||||
# notice
|
||||
# warning
|
||||
# error
|
||||
# log
|
||||
# fatal
|
||||
# panic (effectively off)
|
||||
|
||||
#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements
|
||||
# and their durations, > 0 logs only
|
||||
# statements running at least this number
|
||||
# of milliseconds
|
||||
|
||||
#log_transaction_sample_rate = 0.0 # Fraction of transactions whose statements
|
||||
# are logged regardless of their duration. 1.0 logs all
|
||||
# statements from all transactions, 0.0 never logs.
|
||||
|
||||
# - What to Log -
|
||||
|
||||
#debug_print_parse = off
|
||||
#debug_print_rewritten = off
|
||||
#debug_print_plan = off
|
||||
#debug_pretty_print = on
|
||||
#log_checkpoints = off
|
||||
#log_connections = off
|
||||
#log_disconnections = off
|
||||
#log_duration = off
|
||||
#log_error_verbosity = default # terse, default, or verbose messages
|
||||
#log_hostname = off
|
||||
#log_line_prefix = '%m [%p] ' # special values:
|
||||
# %a = application name
|
||||
# %u = user name
|
||||
# %d = database name
|
||||
# %r = remote host and port
|
||||
# %h = remote host
|
||||
# %p = process ID
|
||||
# %t = timestamp without milliseconds
|
||||
# %m = timestamp with milliseconds
|
||||
# %n = timestamp with milliseconds (as a Unix epoch)
|
||||
# %i = command tag
|
||||
# %e = SQL state
|
||||
# %c = session ID
|
||||
# %l = session line number
|
||||
# %s = session start timestamp
|
||||
# %v = virtual transaction ID
|
||||
# %x = transaction ID (0 if none)
|
||||
# %q = stop here in non-session
|
||||
# processes
|
||||
# %% = '%'
|
||||
# e.g. '<%u%%%d> '
|
||||
#log_lock_waits = off # log lock waits >= deadlock_timeout
|
||||
#log_statement = 'none' # none, ddl, mod, all
|
||||
#log_replication_commands = off
|
||||
#log_temp_files = -1 # log temporary files equal or larger
|
||||
# than the specified size in kilobytes;
|
||||
# -1 disables, 0 logs all temp files
|
||||
#log_timezone = 'GMT'
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# PROCESS TITLE
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#cluster_name = '' # added to process titles if nonempty
|
||||
# (change requires restart)
|
||||
#update_process_title = on
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# STATISTICS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Query and Index Statistics Collector -
|
||||
|
||||
#track_activities = on
|
||||
#track_counts = on
|
||||
#track_io_timing = off
|
||||
#track_functions = none # none, pl, all
|
||||
#track_activity_query_size = 1024 # (change requires restart)
|
||||
#stats_temp_directory = 'pg_stat_tmp'
|
||||
|
||||
|
||||
# - Monitoring -
|
||||
|
||||
#log_parser_stats = off
|
||||
#log_planner_stats = off
|
||||
#log_executor_stats = off
|
||||
#log_statement_stats = off
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# AUTOVACUUM
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#autovacuum = on # Enable autovacuum subprocess? 'on'
|
||||
# requires track_counts to also be on.
|
||||
#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and
|
||||
# their durations, > 0 logs only
|
||||
# actions running at least this number
|
||||
# of milliseconds.
|
||||
#autovacuum_max_workers = 3 # max number of autovacuum subprocesses
|
||||
# (change requires restart)
|
||||
#autovacuum_naptime = 1min # time between autovacuum runs
|
||||
#autovacuum_vacuum_threshold = 50 # min number of row updates before
|
||||
# vacuum
|
||||
#autovacuum_analyze_threshold = 50 # min number of row updates before
|
||||
# analyze
|
||||
#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum
|
||||
#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze
|
||||
#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
|
||||
# (change requires restart)
|
||||
#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age
|
||||
# before forced vacuum
|
||||
# (change requires restart)
|
||||
#autovacuum_vacuum_cost_delay = 2ms # default vacuum cost delay for
|
||||
# autovacuum, in milliseconds;
|
||||
# -1 means use vacuum_cost_delay
|
||||
#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for
|
||||
# autovacuum, -1 means use
|
||||
# vacuum_cost_limit
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CLIENT CONNECTION DEFAULTS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Statement Behavior -
|
||||
|
||||
#client_min_messages = notice # values in order of decreasing detail:
|
||||
# debug5
|
||||
# debug4
|
||||
# debug3
|
||||
# debug2
|
||||
# debug1
|
||||
# log
|
||||
# notice
|
||||
# warning
|
||||
# error
|
||||
#search_path = '"$user", public' # schema names
|
||||
#row_security = on
|
||||
#default_tablespace = '' # a tablespace name, '' uses the default
|
||||
#temp_tablespaces = '' # a list of tablespace names, '' uses
|
||||
# only default tablespace
|
||||
#default_table_access_method = 'heap'
|
||||
#check_function_bodies = on
|
||||
#default_transaction_isolation = 'read committed'
|
||||
#default_transaction_read_only = off
|
||||
#default_transaction_deferrable = off
|
||||
#session_replication_role = 'origin'
|
||||
#statement_timeout = 0 # in milliseconds, 0 is disabled
|
||||
#lock_timeout = 0 # in milliseconds, 0 is disabled
|
||||
#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled
|
||||
#vacuum_freeze_min_age = 50000000
|
||||
#vacuum_freeze_table_age = 150000000
|
||||
#vacuum_multixact_freeze_min_age = 5000000
|
||||
#vacuum_multixact_freeze_table_age = 150000000
|
||||
#vacuum_cleanup_index_scale_factor = 0.1 # fraction of total number of tuples
|
||||
# before index cleanup, 0 always performs
|
||||
# index cleanup
|
||||
#bytea_output = 'hex' # hex, escape
|
||||
#xmlbinary = 'base64'
|
||||
#xmloption = 'content'
|
||||
#gin_fuzzy_search_limit = 0
|
||||
#gin_pending_list_limit = 4MB
|
||||
|
||||
# - Locale and Formatting -
|
||||
|
||||
#datestyle = 'iso, mdy'
|
||||
#intervalstyle = 'postgres'
|
||||
#timezone = 'GMT'
|
||||
#timezone_abbreviations = 'Default' # Select the set of available time zone
|
||||
# abbreviations. Currently, there are
|
||||
# Default
|
||||
# Australia (historical usage)
|
||||
# India
|
||||
# You can create your own file in
|
||||
# share/timezonesets/.
|
||||
#extra_float_digits = 1 # min -15, max 3; any value >0 actually
|
||||
# selects precise output mode
|
||||
#client_encoding = sql_ascii # actually, defaults to database
|
||||
# encoding
|
||||
|
||||
# These settings are initialized by initdb, but they can be changed.
|
||||
#lc_messages = 'C' # locale for system error message
|
||||
# strings
|
||||
#lc_monetary = 'C' # locale for monetary formatting
|
||||
#lc_numeric = 'C' # locale for number formatting
|
||||
#lc_time = 'C' # locale for time formatting
|
||||
|
||||
# default configuration for text search
|
||||
#default_text_search_config = 'pg_catalog.simple'
|
||||
|
||||
# - Shared Library Preloading -
|
||||
|
||||
#shared_preload_libraries = '' # (change requires restart)
|
||||
#local_preload_libraries = ''
|
||||
#session_preload_libraries = ''
|
||||
#jit_provider = 'llvmjit' # JIT library to use
|
||||
|
||||
# - Other Defaults -
|
||||
|
||||
#dynamic_library_path = '$libdir'
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# LOCK MANAGEMENT
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#deadlock_timeout = 1s
|
||||
#max_locks_per_transaction = 64 # min 10
|
||||
# (change requires restart)
|
||||
#max_pred_locks_per_transaction = 64 # min 10
|
||||
# (change requires restart)
|
||||
#max_pred_locks_per_relation = -2 # negative values mean
|
||||
# (max_pred_locks_per_transaction
|
||||
# / -max_pred_locks_per_relation) - 1
|
||||
#max_pred_locks_per_page = 2 # min 0
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VERSION AND PLATFORM COMPATIBILITY
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Previous PostgreSQL Versions -
|
||||
|
||||
#array_nulls = on
|
||||
#backslash_quote = safe_encoding # on, off, or safe_encoding
|
||||
#escape_string_warning = on
|
||||
#lo_compat_privileges = off
|
||||
#operator_precedence_warning = off
|
||||
#quote_all_identifiers = off
|
||||
#standard_conforming_strings = on
|
||||
#synchronize_seqscans = on
|
||||
|
||||
# - Other Platforms and Clients -
|
||||
|
||||
#transform_null_equals = off
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# ERROR HANDLING
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#exit_on_error = off # terminate session on any error?
|
||||
#restart_after_crash = on # reinitialize after backend crash?
|
||||
#data_sync_retry = off # retry or panic on failure to fsync
|
||||
# data?
|
||||
# (change requires restart)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CONFIG FILE INCLUDES
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# These options allow settings to be loaded from files other than the
|
||||
# default postgresql.conf. Note that these are directives, not variable
|
||||
# assignments, so they can usefully be given more than once.
|
||||
|
||||
#include_dir = '...' # include files ending in '.conf' from
|
||||
# a directory, e.g., 'conf.d'
|
||||
#include_if_exists = '...' # include file only if it exists
|
||||
#include = '...' # include file
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CUSTOMIZED OPTIONS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Add settings for extensions here
|
||||
48
molecule/quarkus_ha_26.4_below/prepare.yml
Normal file
48
molecule/quarkus_ha_26.4_below/prepare.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: keycloak
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
tasks:
|
||||
- name: "Display hera_home if defined."
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: "Ensure common prepare phase are set."
|
||||
ansible.builtin.include_tasks: ../prepare.yml
|
||||
|
||||
- name: Create certificate request
|
||||
ansible.builtin.command: "openssl req -x509 -newkey rsa:4096 -keyout {{ inventory_hostname }}.key -out {{ inventory_hostname }}.pem -sha256 -days 365 -nodes -subj '/CN={{ inventory_hostname }}'"
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}"
|
||||
delegate_to: localhost
|
||||
changed_when: False
|
||||
|
||||
- name: Create vault directory
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.file:
|
||||
state: directory
|
||||
path: "/opt/keycloak/vault"
|
||||
mode: 0755
|
||||
|
||||
- name: Make sure a jre is available (for keytool to prepare keystore)
|
||||
delegate_to: localhost
|
||||
ansible.builtin.package:
|
||||
name: "{{ 'java-17-openjdk-headless' if hera_home | length > 0 else 'openjdk-17-jdk-headless' }}"
|
||||
state: present
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
failed_when: false
|
||||
|
||||
- name: Create vault keystore
|
||||
ansible.builtin.command: keytool -importpass -alias TestRealm_testalias -keystore keystore.p12 -storepass keystorepassword
|
||||
delegate_to: localhost
|
||||
register: keytool_cmd
|
||||
changed_when: False
|
||||
failed_when: not 'already exists' in keytool_cmd.stdout and keytool_cmd.rc != 0
|
||||
|
||||
- name: Copy certificates and vault
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.copy:
|
||||
src: keystore.p12
|
||||
dest: /opt/keycloak/vault/keystore.p12
|
||||
mode: 0444
|
||||
1
molecule/quarkus_ha_26.4_below/roles
Symbolic link
1
molecule/quarkus_ha_26.4_below/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
31
molecule/quarkus_ha_26.4_below/verify.yml
Normal file
31
molecule/quarkus_ha_26.4_below/verify.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: keycloak
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
fail_msg: "Service not running"
|
||||
|
||||
- name: Set internal envvar
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: Check log file
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.stat:
|
||||
path: /var/log/keycloak/keycloak.log
|
||||
register: keycloak_log_file
|
||||
|
||||
- name: Check if keycloak file exists
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- keycloak_log_file.stat.exists
|
||||
- not keycloak_log_file.stat.isdir
|
||||
70
molecule/quarkus_ha_remote/converge.yml
Normal file
70
molecule/quarkus_ha_remote/converge.yml
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: infinispan
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
vars:
|
||||
ansible_become: "{{ keycloak_install_requires_become | default(true) }}"
|
||||
roles:
|
||||
- role: middleware_automation.infinispan.infinispan
|
||||
infinispan_service_name: infinispan
|
||||
infinispan_supervisor_password: remembertochangeme
|
||||
infinispan_keycloak_caches: true
|
||||
infinispan_keycloak_persistence: False
|
||||
infinispan_jgroups_discovery: TCPPING
|
||||
infinispan_jdbc_engine: postgres
|
||||
infinispan_jdbc_url: jdbc:postgresql://postgres:5432/keycloak
|
||||
infinispan_jdbc_driver_version: 9.4.1212
|
||||
infinispan_jdbc_user: keycloak
|
||||
infinispan_jdbc_pass: mysecretpass
|
||||
infinispan_bind_address: 0.0.0.0
|
||||
infinispan_users:
|
||||
- { name: 'testuser', password: 'test', roles: 'observer' }
|
||||
|
||||
- name: Converge
|
||||
hosts: keycloak
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
pre_tasks:
|
||||
- name: Wait for Infinispan Hot Rod port before starting Keycloak
|
||||
ansible.builtin.wait_for:
|
||||
host: infinispan1
|
||||
port: 11222
|
||||
timeout: 120
|
||||
vars:
|
||||
keycloak_quarkus_show_deprecation_warnings: false
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_bootstrap_admin_user: "remembertochangeme"
|
||||
keycloak_quarkus_hostname: "http://{{ inventory_hostname }}:8080"
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_log_level: info
|
||||
keycloak_quarkus_https_key_file_enabled: true
|
||||
keycloak_quarkus_key_file_copy_enabled: true
|
||||
keycloak_quarkus_key_content: "{{ lookup('file', inventory_hostname + '.key') }}"
|
||||
keycloak_quarkus_cert_file_copy_enabled: true
|
||||
keycloak_quarkus_cert_file_src: "{{ inventory_hostname }}.pem"
|
||||
keycloak_quarkus_ks_vault_enabled: true
|
||||
keycloak_quarkus_ks_vault_file: "/opt/keycloak/vault/keystore.p12"
|
||||
keycloak_quarkus_ks_vault_pass: keystorepassword
|
||||
keycloak_quarkus_systemd_wait_for_port: true
|
||||
keycloak_quarkus_systemd_wait_for_timeout: 120
|
||||
keycloak_quarkus_systemd_wait_for_delay: 2
|
||||
keycloak_quarkus_systemd_wait_for_log: true
|
||||
keycloak_quarkus_ha_enabled: true
|
||||
keycloak_quarkus_restart_strategy: restart/serial.yml
|
||||
keycloak_quarkus_db_user: keycloak
|
||||
keycloak_quarkus_db_pass: mysecretpass
|
||||
keycloak_quarkus_db_url: jdbc:postgresql://postgres:5432/keycloak
|
||||
keycloak_quarkus_cache_remote: true
|
||||
keycloak_quarkus_cache_remote_username: supervisor
|
||||
keycloak_quarkus_cache_remote_password: remembertochangeme
|
||||
keycloak_quarkus_cache_remote_host: "infinispan1"
|
||||
keycloak_quarkus_cache_remote_port: 11222
|
||||
keycloak_quarkus_cache_remote_tls_enabled: false
|
||||
keycloak_quarkus_additional_env_vars:
|
||||
- key: KC_FEATURES
|
||||
value: clusterless
|
||||
- key: KC_FEATURES_DISABLED
|
||||
value: persistent-user-sessions
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
80
molecule/quarkus_ha_remote/molecule.yml
Normal file
80
molecule/quarkus_ha_remote/molecule.yml
Normal file
@@ -0,0 +1,80 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
platforms:
|
||||
- name: keycloak1
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
groups:
|
||||
- keycloak
|
||||
networks:
|
||||
- name: rhbk
|
||||
port_bindings:
|
||||
- "8080/tcp"
|
||||
- "8443/tcp"
|
||||
- "9000/tcp"
|
||||
- name: infinispan1
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: "/usr/sbin/init"
|
||||
groups:
|
||||
- infinispan
|
||||
networks:
|
||||
- name: rhbk
|
||||
port_bindings:
|
||||
- "11222/tcp"
|
||||
- name: postgres
|
||||
image: ubuntu/postgres:14-22.04_beta
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
command: postgres
|
||||
groups:
|
||||
- database
|
||||
networks:
|
||||
- name: rhbk
|
||||
port_bindings:
|
||||
- "5432/tcp"
|
||||
mounts:
|
||||
- type: bind
|
||||
target: /etc/postgresql/postgresql.conf
|
||||
source: ${MOLECULE_PROJECT_DIRECTORY}/molecule/quarkus_ha_remote/postgresql/postgresql.conf
|
||||
env:
|
||||
POSTGRES_USER: keycloak
|
||||
POSTGRES_PASSWORD: mysecretpass
|
||||
POSTGRES_DB: keycloak
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
provisioner:
|
||||
name: ansible
|
||||
config_options:
|
||||
defaults:
|
||||
interpreter_python: auto_silent
|
||||
ssh_connection:
|
||||
pipelining: false
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
PYTHONHTTPSVERIFY: 0
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- cleanup
|
||||
- destroy
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
750
molecule/quarkus_ha_remote/postgresql/postgresql.conf
Normal file
750
molecule/quarkus_ha_remote/postgresql/postgresql.conf
Normal file
@@ -0,0 +1,750 @@
|
||||
# -----------------------------
|
||||
# PostgreSQL configuration file
|
||||
# -----------------------------
|
||||
#
|
||||
# This file consists of lines of the form:
|
||||
#
|
||||
# name = value
|
||||
#
|
||||
# (The "=" is optional.) Whitespace may be used. Comments are introduced with
|
||||
# "#" anywhere on a line. The complete list of parameter names and allowed
|
||||
# values can be found in the PostgreSQL documentation.
|
||||
#
|
||||
# The commented-out settings shown in this file represent the default values.
|
||||
# Re-commenting a setting is NOT sufficient to revert it to the default value;
|
||||
# you need to reload the server.
|
||||
#
|
||||
# This file is read on server startup and when the server receives a SIGHUP
|
||||
# signal. If you edit the file on a running system, you have to SIGHUP the
|
||||
# server for the changes to take effect, run "pg_ctl reload", or execute
|
||||
# "SELECT pg_reload_conf()". Some parameters, which are marked below,
|
||||
# require a server shutdown and restart to take effect.
|
||||
#
|
||||
# Any parameter can also be given as a command-line option to the server, e.g.,
|
||||
# "postgres -c log_connections=on". Some parameters can be changed at run time
|
||||
# with the "SET" SQL command.
|
||||
#
|
||||
# Memory units: kB = kilobytes Time units: ms = milliseconds
|
||||
# MB = megabytes s = seconds
|
||||
# GB = gigabytes min = minutes
|
||||
# TB = terabytes h = hours
|
||||
# d = days
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# FILE LOCATIONS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# The default values of these variables are driven from the -D command-line
|
||||
# option or PGDATA environment variable, represented here as ConfigDir.
|
||||
|
||||
#data_directory = 'ConfigDir' # use data in another directory
|
||||
# (change requires restart)
|
||||
#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file
|
||||
# (change requires restart)
|
||||
#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
|
||||
# (change requires restart)
|
||||
|
||||
# If external_pid_file is not explicitly set, no extra PID file is written.
|
||||
#external_pid_file = '' # write an extra PID file
|
||||
# (change requires restart)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CONNECTIONS AND AUTHENTICATION
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Connection Settings -
|
||||
|
||||
listen_addresses = '*' # what IP address(es) to listen on;
|
||||
# comma-separated list of addresses;
|
||||
# defaults to 'localhost'; use '*' for all
|
||||
# (change requires restart)
|
||||
#port = 5432 # (change requires restart)
|
||||
#max_connections = 100 # (change requires restart)
|
||||
#superuser_reserved_connections = 3 # (change requires restart)
|
||||
#unix_socket_directories = '/tmp' # comma-separated list of directories
|
||||
# (change requires restart)
|
||||
#unix_socket_group = '' # (change requires restart)
|
||||
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
|
||||
# (change requires restart)
|
||||
#bonjour = off # advertise server via Bonjour
|
||||
# (change requires restart)
|
||||
#bonjour_name = '' # defaults to the computer name
|
||||
# (change requires restart)
|
||||
|
||||
# - TCP settings -
|
||||
# see "man 7 tcp" for details
|
||||
|
||||
#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds;
|
||||
# 0 selects the system default
|
||||
#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds;
|
||||
# 0 selects the system default
|
||||
#tcp_keepalives_count = 0 # TCP_KEEPCNT;
|
||||
# 0 selects the system default
|
||||
#tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds;
|
||||
# 0 selects the system default
|
||||
|
||||
# - Authentication -
|
||||
|
||||
#authentication_timeout = 1min # 1s-600s
|
||||
#password_encryption = md5 # md5 or scram-sha-256
|
||||
#db_user_namespace = off
|
||||
|
||||
# GSSAPI using Kerberos
|
||||
#krb_server_keyfile = ''
|
||||
#krb_caseins_users = off
|
||||
|
||||
# - SSL -
|
||||
|
||||
#ssl = off
|
||||
#ssl_ca_file = ''
|
||||
#ssl_cert_file = 'server.crt'
|
||||
#ssl_crl_file = ''
|
||||
#ssl_key_file = 'server.key'
|
||||
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
|
||||
#ssl_prefer_server_ciphers = on
|
||||
#ssl_ecdh_curve = 'prime256v1'
|
||||
#ssl_min_protocol_version = 'TLSv1'
|
||||
#ssl_max_protocol_version = ''
|
||||
#ssl_dh_params_file = ''
|
||||
#ssl_passphrase_command = ''
|
||||
#ssl_passphrase_command_supports_reload = off
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# RESOURCE USAGE (except WAL)
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Memory -
|
||||
|
||||
#shared_buffers = 32MB # min 128kB
|
||||
# (change requires restart)
|
||||
#huge_pages = try # on, off, or try
|
||||
# (change requires restart)
|
||||
#temp_buffers = 8MB # min 800kB
|
||||
#max_prepared_transactions = 0 # zero disables the feature
|
||||
# (change requires restart)
|
||||
# Caution: it is not advisable to set max_prepared_transactions nonzero unless
|
||||
# you actively intend to use prepared transactions.
|
||||
#work_mem = 4MB # min 64kB
|
||||
#maintenance_work_mem = 64MB # min 1MB
|
||||
#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
|
||||
#max_stack_depth = 2MB # min 100kB
|
||||
#shared_memory_type = mmap # the default is the first option
|
||||
# supported by the operating system:
|
||||
# mmap
|
||||
# sysv
|
||||
# windows
|
||||
# (change requires restart)
|
||||
#dynamic_shared_memory_type = posix # the default is the first option
|
||||
# supported by the operating system:
|
||||
# posix
|
||||
# sysv
|
||||
# windows
|
||||
# mmap
|
||||
# (change requires restart)
|
||||
|
||||
# - Disk -
|
||||
|
||||
#temp_file_limit = -1 # limits per-process temp file space
|
||||
# in kB, or -1 for no limit
|
||||
|
||||
# - Kernel Resources -
|
||||
|
||||
#max_files_per_process = 1000 # min 25
|
||||
# (change requires restart)
|
||||
|
||||
# - Cost-Based Vacuum Delay -
|
||||
|
||||
#vacuum_cost_delay = 0 # 0-100 milliseconds (0 disables)
|
||||
#vacuum_cost_page_hit = 1 # 0-10000 credits
|
||||
#vacuum_cost_page_miss = 10 # 0-10000 credits
|
||||
#vacuum_cost_page_dirty = 20 # 0-10000 credits
|
||||
#vacuum_cost_limit = 200 # 1-10000 credits
|
||||
|
||||
# - Background Writer -
|
||||
|
||||
#bgwriter_delay = 200ms # 10-10000ms between rounds
|
||||
#bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables
|
||||
#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round
|
||||
#bgwriter_flush_after = 0 # measured in pages, 0 disables
|
||||
|
||||
# - Asynchronous Behavior -
|
||||
|
||||
#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching
|
||||
#max_worker_processes = 8 # (change requires restart)
|
||||
#max_parallel_maintenance_workers = 2 # taken from max_parallel_workers
|
||||
#max_parallel_workers_per_gather = 2 # taken from max_parallel_workers
|
||||
#parallel_leader_participation = on
|
||||
#max_parallel_workers = 8 # maximum number of max_worker_processes that
|
||||
# can be used in parallel operations
|
||||
#old_snapshot_threshold = -1 # 1min-60d; -1 disables; 0 is immediate
|
||||
# (change requires restart)
|
||||
#backend_flush_after = 0 # measured in pages, 0 disables
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# WRITE-AHEAD LOG
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Settings -
|
||||
|
||||
#wal_level = replica # minimal, replica, or logical
|
||||
# (change requires restart)
|
||||
#fsync = on # flush data to disk for crash safety
|
||||
# (turning this off can cause
|
||||
# unrecoverable data corruption)
|
||||
#synchronous_commit = on # synchronization level;
|
||||
# off, local, remote_write, remote_apply, or on
|
||||
#wal_sync_method = fsync # the default is the first option
|
||||
# supported by the operating system:
|
||||
# open_datasync
|
||||
# fdatasync (default on Linux)
|
||||
# fsync
|
||||
# fsync_writethrough
|
||||
# open_sync
|
||||
#full_page_writes = on # recover from partial page writes
|
||||
#wal_compression = off # enable compression of full-page writes
|
||||
#wal_log_hints = off # also do full page writes of non-critical updates
|
||||
# (change requires restart)
|
||||
#wal_init_zero = on # zero-fill new WAL files
|
||||
#wal_recycle = on # recycle WAL files
|
||||
#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers
|
||||
# (change requires restart)
|
||||
#wal_writer_delay = 200ms # 1-10000 milliseconds
|
||||
#wal_writer_flush_after = 1MB # measured in pages, 0 disables
|
||||
|
||||
#commit_delay = 0 # range 0-100000, in microseconds
|
||||
#commit_siblings = 5 # range 1-1000
|
||||
|
||||
# - Checkpoints -
|
||||
|
||||
#checkpoint_timeout = 5min # range 30s-1d
|
||||
#max_wal_size = 1GB
|
||||
#min_wal_size = 80MB
|
||||
#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0
|
||||
#checkpoint_flush_after = 0 # measured in pages, 0 disables
|
||||
#checkpoint_warning = 30s # 0 disables
|
||||
|
||||
# - Archiving -
|
||||
|
||||
#archive_mode = off # enables archiving; off, on, or always
|
||||
# (change requires restart)
|
||||
#archive_command = '' # command to use to archive a logfile segment
|
||||
# placeholders: %p = path of file to archive
|
||||
# %f = file name only
|
||||
# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
|
||||
#archive_timeout = 0 # force a logfile segment switch after this
|
||||
# number of seconds; 0 disables
|
||||
|
||||
# - Archive Recovery -
|
||||
|
||||
# These are only used in recovery mode.
|
||||
|
||||
#restore_command = '' # command to use to restore an archived logfile segment
|
||||
# placeholders: %p = path of file to restore
|
||||
# %f = file name only
|
||||
# e.g. 'cp /mnt/server/archivedir/%f %p'
|
||||
# (change requires restart)
|
||||
#archive_cleanup_command = '' # command to execute at every restartpoint
|
||||
#recovery_end_command = '' # command to execute at completion of recovery
|
||||
|
||||
# - Recovery Target -
|
||||
|
||||
# Set these only when performing a targeted recovery.
|
||||
|
||||
#recovery_target = '' # 'immediate' to end recovery as soon as a
|
||||
# consistent state is reached
|
||||
# (change requires restart)
|
||||
#recovery_target_name = '' # the named restore point to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_time = '' # the time stamp up to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_xid = '' # the transaction ID up to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_lsn = '' # the WAL LSN up to which recovery will proceed
|
||||
# (change requires restart)
|
||||
#recovery_target_inclusive = on # Specifies whether to stop:
|
||||
# just after the specified recovery target (on)
|
||||
# just before the recovery target (off)
|
||||
# (change requires restart)
|
||||
#recovery_target_timeline = 'latest' # 'current', 'latest', or timeline ID
|
||||
# (change requires restart)
|
||||
#recovery_target_action = 'pause' # 'pause', 'promote', 'shutdown'
|
||||
# (change requires restart)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# REPLICATION
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Sending Servers -
|
||||
|
||||
# Set these on the master and on any standby that will send replication data.
|
||||
|
||||
#max_wal_senders = 10 # max number of walsender processes
|
||||
# (change requires restart)
|
||||
#wal_keep_segments = 0 # in logfile segments; 0 disables
|
||||
#wal_sender_timeout = 60s # in milliseconds; 0 disables
|
||||
|
||||
#max_replication_slots = 10 # max number of replication slots
|
||||
# (change requires restart)
|
||||
#track_commit_timestamp = off # collect timestamp of transaction commit
|
||||
# (change requires restart)
|
||||
|
||||
# - Master Server -
|
||||
|
||||
# These settings are ignored on a standby server.
|
||||
|
||||
#synchronous_standby_names = '' # standby servers that provide sync rep
|
||||
# method to choose sync standbys, number of sync standbys,
|
||||
# and comma-separated list of application_name
|
||||
# from standby(s); '*' = all
|
||||
#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed
|
||||
|
||||
# - Standby Servers -
|
||||
|
||||
# These settings are ignored on a master server.
|
||||
|
||||
#primary_conninfo = '' # connection string to sending server
|
||||
# (change requires restart)
|
||||
#primary_slot_name = '' # replication slot on sending server
|
||||
# (change requires restart)
|
||||
#promote_trigger_file = '' # file name whose presence ends recovery
|
||||
#hot_standby = on # "off" disallows queries during recovery
|
||||
# (change requires restart)
|
||||
#max_standby_archive_delay = 30s # max delay before canceling queries
|
||||
# when reading WAL from archive;
|
||||
# -1 allows indefinite delay
|
||||
#max_standby_streaming_delay = 30s # max delay before canceling queries
|
||||
# when reading streaming WAL;
|
||||
# -1 allows indefinite delay
|
||||
#wal_receiver_status_interval = 10s # send replies at least this often
|
||||
# 0 disables
|
||||
#hot_standby_feedback = off # send info from standby to prevent
|
||||
# query conflicts
|
||||
#wal_receiver_timeout = 60s # time that receiver waits for
|
||||
# communication from master
|
||||
# in milliseconds; 0 disables
|
||||
#wal_retrieve_retry_interval = 5s # time to wait before retrying to
|
||||
# retrieve WAL after a failed attempt
|
||||
#recovery_min_apply_delay = 0 # minimum delay for applying changes during recovery
|
||||
|
||||
# - Subscribers -
|
||||
|
||||
# These settings are ignored on a publisher.
|
||||
|
||||
#max_logical_replication_workers = 4 # taken from max_worker_processes
|
||||
# (change requires restart)
|
||||
#max_sync_workers_per_subscription = 2 # taken from max_logical_replication_workers
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# QUERY TUNING
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Planner Method Configuration -
|
||||
|
||||
#enable_bitmapscan = on
|
||||
#enable_hashagg = on
|
||||
#enable_hashjoin = on
|
||||
#enable_indexscan = on
|
||||
#enable_indexonlyscan = on
|
||||
#enable_material = on
|
||||
#enable_mergejoin = on
|
||||
#enable_nestloop = on
|
||||
#enable_parallel_append = on
|
||||
#enable_seqscan = on
|
||||
#enable_sort = on
|
||||
#enable_tidscan = on
|
||||
#enable_partitionwise_join = off
|
||||
#enable_partitionwise_aggregate = off
|
||||
#enable_parallel_hash = on
|
||||
#enable_partition_pruning = on
|
||||
|
||||
# - Planner Cost Constants -
|
||||
|
||||
#seq_page_cost = 1.0 # measured on an arbitrary scale
|
||||
#random_page_cost = 4.0 # same scale as above
|
||||
#cpu_tuple_cost = 0.01 # same scale as above
|
||||
#cpu_index_tuple_cost = 0.005 # same scale as above
|
||||
#cpu_operator_cost = 0.0025 # same scale as above
|
||||
#parallel_tuple_cost = 0.1 # same scale as above
|
||||
#parallel_setup_cost = 1000.0 # same scale as above
|
||||
|
||||
#jit_above_cost = 100000 # perform JIT compilation if available
|
||||
# and query more expensive than this;
|
||||
# -1 disables
|
||||
#jit_inline_above_cost = 500000 # inline small functions if query is
|
||||
# more expensive than this; -1 disables
|
||||
#jit_optimize_above_cost = 500000 # use expensive JIT optimizations if
|
||||
# query is more expensive than this;
|
||||
# -1 disables
|
||||
|
||||
#min_parallel_table_scan_size = 8MB
|
||||
#min_parallel_index_scan_size = 512kB
|
||||
#effective_cache_size = 4GB
|
||||
|
||||
# - Genetic Query Optimizer -
|
||||
|
||||
#geqo = on
|
||||
#geqo_threshold = 12
|
||||
#geqo_effort = 5 # range 1-10
|
||||
#geqo_pool_size = 0 # selects default based on effort
|
||||
#geqo_generations = 0 # selects default based on effort
|
||||
#geqo_selection_bias = 2.0 # range 1.5-2.0
|
||||
#geqo_seed = 0.0 # range 0.0-1.0
|
||||
|
||||
# - Other Planner Options -
|
||||
|
||||
#default_statistics_target = 100 # range 1-10000
|
||||
#constraint_exclusion = partition # on, off, or partition
|
||||
#cursor_tuple_fraction = 0.1 # range 0.0-1.0
|
||||
#from_collapse_limit = 8
|
||||
#join_collapse_limit = 8 # 1 disables collapsing of explicit
|
||||
# JOIN clauses
|
||||
#force_parallel_mode = off
|
||||
#jit = on # allow JIT compilation
|
||||
#plan_cache_mode = auto # auto, force_generic_plan or
|
||||
# force_custom_plan
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# REPORTING AND LOGGING
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Where to Log -
|
||||
|
||||
#log_destination = 'stderr' # Valid values are combinations of
|
||||
# stderr, csvlog, syslog, and eventlog,
|
||||
# depending on platform. csvlog
|
||||
# requires logging_collector to be on.
|
||||
|
||||
# This is used when logging to stderr:
|
||||
#logging_collector = off # Enable capturing of stderr and csvlog
|
||||
# into log files. Required to be on for
|
||||
# csvlogs.
|
||||
# (change requires restart)
|
||||
|
||||
# These are only used if logging_collector is on:
|
||||
#log_directory = 'log' # directory where log files are written,
|
||||
# can be absolute or relative to PGDATA
|
||||
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
|
||||
# can include strftime() escapes
|
||||
#log_file_mode = 0600 # creation mode for log files,
|
||||
# begin with 0 to use octal notation
|
||||
#log_truncate_on_rotation = off # If on, an existing log file with the
|
||||
# same name as the new log file will be
|
||||
# truncated rather than appended to.
|
||||
# But such truncation only occurs on
|
||||
# time-driven rotation, not on restarts
|
||||
# or size-driven rotation. Default is
|
||||
# off, meaning append to existing files
|
||||
# in all cases.
|
||||
#log_rotation_age = 1d # Automatic rotation of logfiles will
|
||||
# happen after that time. 0 disables.
|
||||
#log_rotation_size = 10MB # Automatic rotation of logfiles will
|
||||
# happen after that much log output.
|
||||
# 0 disables.
|
||||
|
||||
# These are relevant when logging to syslog:
|
||||
#syslog_facility = 'LOCAL0'
|
||||
#syslog_ident = 'postgres'
|
||||
#syslog_sequence_numbers = on
|
||||
#syslog_split_messages = on
|
||||
|
||||
# This is only relevant when logging to eventlog (win32):
|
||||
# (change requires restart)
|
||||
#event_source = 'PostgreSQL'
|
||||
|
||||
# - When to Log -
|
||||
|
||||
#log_min_messages = warning # values in order of decreasing detail:
|
||||
# debug5
|
||||
# debug4
|
||||
# debug3
|
||||
# debug2
|
||||
# debug1
|
||||
# info
|
||||
# notice
|
||||
# warning
|
||||
# error
|
||||
# log
|
||||
# fatal
|
||||
# panic
|
||||
|
||||
#log_min_error_statement = error # values in order of decreasing detail:
|
||||
# debug5
|
||||
# debug4
|
||||
# debug3
|
||||
# debug2
|
||||
# debug1
|
||||
# info
|
||||
# notice
|
||||
# warning
|
||||
# error
|
||||
# log
|
||||
# fatal
|
||||
# panic (effectively off)
|
||||
|
||||
#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements
|
||||
# and their durations, > 0 logs only
|
||||
# statements running at least this number
|
||||
# of milliseconds
|
||||
|
||||
#log_transaction_sample_rate = 0.0 # Fraction of transactions whose statements
|
||||
# are logged regardless of their duration. 1.0 logs all
|
||||
# statements from all transactions, 0.0 never logs.
|
||||
|
||||
# - What to Log -
|
||||
|
||||
#debug_print_parse = off
|
||||
#debug_print_rewritten = off
|
||||
#debug_print_plan = off
|
||||
#debug_pretty_print = on
|
||||
#log_checkpoints = off
|
||||
#log_connections = off
|
||||
#log_disconnections = off
|
||||
#log_duration = off
|
||||
#log_error_verbosity = default # terse, default, or verbose messages
|
||||
#log_hostname = off
|
||||
#log_line_prefix = '%m [%p] ' # special values:
|
||||
# %a = application name
|
||||
# %u = user name
|
||||
# %d = database name
|
||||
# %r = remote host and port
|
||||
# %h = remote host
|
||||
# %p = process ID
|
||||
# %t = timestamp without milliseconds
|
||||
# %m = timestamp with milliseconds
|
||||
# %n = timestamp with milliseconds (as a Unix epoch)
|
||||
# %i = command tag
|
||||
# %e = SQL state
|
||||
# %c = session ID
|
||||
# %l = session line number
|
||||
# %s = session start timestamp
|
||||
# %v = virtual transaction ID
|
||||
# %x = transaction ID (0 if none)
|
||||
# %q = stop here in non-session
|
||||
# processes
|
||||
# %% = '%'
|
||||
# e.g. '<%u%%%d> '
|
||||
#log_lock_waits = off # log lock waits >= deadlock_timeout
|
||||
#log_statement = 'none' # none, ddl, mod, all
|
||||
#log_replication_commands = off
|
||||
#log_temp_files = -1 # log temporary files equal or larger
|
||||
# than the specified size in kilobytes;
|
||||
# -1 disables, 0 logs all temp files
|
||||
#log_timezone = 'GMT'
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# PROCESS TITLE
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#cluster_name = '' # added to process titles if nonempty
|
||||
# (change requires restart)
|
||||
#update_process_title = on
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# STATISTICS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Query and Index Statistics Collector -
|
||||
|
||||
#track_activities = on
|
||||
#track_counts = on
|
||||
#track_io_timing = off
|
||||
#track_functions = none # none, pl, all
|
||||
#track_activity_query_size = 1024 # (change requires restart)
|
||||
#stats_temp_directory = 'pg_stat_tmp'
|
||||
|
||||
|
||||
# - Monitoring -
|
||||
|
||||
#log_parser_stats = off
|
||||
#log_planner_stats = off
|
||||
#log_executor_stats = off
|
||||
#log_statement_stats = off
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# AUTOVACUUM
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#autovacuum = on # Enable autovacuum subprocess? 'on'
|
||||
# requires track_counts to also be on.
|
||||
#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and
|
||||
# their durations, > 0 logs only
|
||||
# actions running at least this number
|
||||
# of milliseconds.
|
||||
#autovacuum_max_workers = 3 # max number of autovacuum subprocesses
|
||||
# (change requires restart)
|
||||
#autovacuum_naptime = 1min # time between autovacuum runs
|
||||
#autovacuum_vacuum_threshold = 50 # min number of row updates before
|
||||
# vacuum
|
||||
#autovacuum_analyze_threshold = 50 # min number of row updates before
|
||||
# analyze
|
||||
#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum
|
||||
#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze
|
||||
#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
|
||||
# (change requires restart)
|
||||
#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age
|
||||
# before forced vacuum
|
||||
# (change requires restart)
|
||||
#autovacuum_vacuum_cost_delay = 2ms # default vacuum cost delay for
|
||||
# autovacuum, in milliseconds;
|
||||
# -1 means use vacuum_cost_delay
|
||||
#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for
|
||||
# autovacuum, -1 means use
|
||||
# vacuum_cost_limit
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CLIENT CONNECTION DEFAULTS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Statement Behavior -
|
||||
|
||||
#client_min_messages = notice # values in order of decreasing detail:
|
||||
# debug5
|
||||
# debug4
|
||||
# debug3
|
||||
# debug2
|
||||
# debug1
|
||||
# log
|
||||
# notice
|
||||
# warning
|
||||
# error
|
||||
#search_path = '"$user", public' # schema names
|
||||
#row_security = on
|
||||
#default_tablespace = '' # a tablespace name, '' uses the default
|
||||
#temp_tablespaces = '' # a list of tablespace names, '' uses
|
||||
# only default tablespace
|
||||
#default_table_access_method = 'heap'
|
||||
#check_function_bodies = on
|
||||
#default_transaction_isolation = 'read committed'
|
||||
#default_transaction_read_only = off
|
||||
#default_transaction_deferrable = off
|
||||
#session_replication_role = 'origin'
|
||||
#statement_timeout = 0 # in milliseconds, 0 is disabled
|
||||
#lock_timeout = 0 # in milliseconds, 0 is disabled
|
||||
#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled
|
||||
#vacuum_freeze_min_age = 50000000
|
||||
#vacuum_freeze_table_age = 150000000
|
||||
#vacuum_multixact_freeze_min_age = 5000000
|
||||
#vacuum_multixact_freeze_table_age = 150000000
|
||||
#vacuum_cleanup_index_scale_factor = 0.1 # fraction of total number of tuples
|
||||
# before index cleanup, 0 always performs
|
||||
# index cleanup
|
||||
#bytea_output = 'hex' # hex, escape
|
||||
#xmlbinary = 'base64'
|
||||
#xmloption = 'content'
|
||||
#gin_fuzzy_search_limit = 0
|
||||
#gin_pending_list_limit = 4MB
|
||||
|
||||
# - Locale and Formatting -
|
||||
|
||||
#datestyle = 'iso, mdy'
|
||||
#intervalstyle = 'postgres'
|
||||
#timezone = 'GMT'
|
||||
#timezone_abbreviations = 'Default' # Select the set of available time zone
|
||||
# abbreviations. Currently, there are
|
||||
# Default
|
||||
# Australia (historical usage)
|
||||
# India
|
||||
# You can create your own file in
|
||||
# share/timezonesets/.
|
||||
#extra_float_digits = 1 # min -15, max 3; any value >0 actually
|
||||
# selects precise output mode
|
||||
#client_encoding = sql_ascii # actually, defaults to database
|
||||
# encoding
|
||||
|
||||
# These settings are initialized by initdb, but they can be changed.
|
||||
#lc_messages = 'C' # locale for system error message
|
||||
# strings
|
||||
#lc_monetary = 'C' # locale for monetary formatting
|
||||
#lc_numeric = 'C' # locale for number formatting
|
||||
#lc_time = 'C' # locale for time formatting
|
||||
|
||||
# default configuration for text search
|
||||
#default_text_search_config = 'pg_catalog.simple'
|
||||
|
||||
# - Shared Library Preloading -
|
||||
|
||||
#shared_preload_libraries = '' # (change requires restart)
|
||||
#local_preload_libraries = ''
|
||||
#session_preload_libraries = ''
|
||||
#jit_provider = 'llvmjit' # JIT library to use
|
||||
|
||||
# - Other Defaults -
|
||||
|
||||
#dynamic_library_path = '$libdir'
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# LOCK MANAGEMENT
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#deadlock_timeout = 1s
|
||||
#max_locks_per_transaction = 64 # min 10
|
||||
# (change requires restart)
|
||||
#max_pred_locks_per_transaction = 64 # min 10
|
||||
# (change requires restart)
|
||||
#max_pred_locks_per_relation = -2 # negative values mean
|
||||
# (max_pred_locks_per_transaction
|
||||
# / -max_pred_locks_per_relation) - 1
|
||||
#max_pred_locks_per_page = 2 # min 0
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VERSION AND PLATFORM COMPATIBILITY
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# - Previous PostgreSQL Versions -
|
||||
|
||||
#array_nulls = on
|
||||
#backslash_quote = safe_encoding # on, off, or safe_encoding
|
||||
#escape_string_warning = on
|
||||
#lo_compat_privileges = off
|
||||
#operator_precedence_warning = off
|
||||
#quote_all_identifiers = off
|
||||
#standard_conforming_strings = on
|
||||
#synchronize_seqscans = on
|
||||
|
||||
# - Other Platforms and Clients -
|
||||
|
||||
#transform_null_equals = off
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# ERROR HANDLING
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
#exit_on_error = off # terminate session on any error?
|
||||
#restart_after_crash = on # reinitialize after backend crash?
|
||||
#data_sync_retry = off # retry or panic on failure to fsync
|
||||
# data?
|
||||
# (change requires restart)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CONFIG FILE INCLUDES
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# These options allow settings to be loaded from files other than the
|
||||
# default postgresql.conf. Note that these are directives, not variable
|
||||
# assignments, so they can usefully be given more than once.
|
||||
|
||||
#include_dir = '...' # include files ending in '.conf' from
|
||||
# a directory, e.g., 'conf.d'
|
||||
#include_if_exists = '...' # include file only if it exists
|
||||
#include = '...' # include file
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# CUSTOMIZED OPTIONS
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Add settings for extensions here
|
||||
50
molecule/quarkus_ha_remote/prepare.yml
Normal file
50
molecule/quarkus_ha_remote/prepare.yml
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: 'keycloak:infinispan'
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
tasks:
|
||||
- name: "Display hera_home if defined."
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: "Ensure common prepare phase are set."
|
||||
ansible.builtin.include_tasks: ../prepare.yml
|
||||
|
||||
- name: Create certificate request
|
||||
ansible.builtin.command: "openssl req -x509 -newkey rsa:4096 -keyout {{ inventory_hostname }}.key -out {{ inventory_hostname }}.pem -sha256 -days 365 -nodes -subj '/CN={{ inventory_hostname }}'"
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}"
|
||||
delegate_to: localhost
|
||||
changed_when: False
|
||||
|
||||
- name: Create vault directory
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.file:
|
||||
state: directory
|
||||
path: "/opt/keycloak/vault"
|
||||
mode: 0755
|
||||
|
||||
- name: Make sure a jre is available (for keytool to prepare keystore)
|
||||
delegate_to: localhost
|
||||
ansible.builtin.package:
|
||||
name: "{{ 'java-17-openjdk-headless' if hera_home | length > 0 else 'openjdk-17-jdk-headless' }}"
|
||||
state: present
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
failed_when: false
|
||||
|
||||
- name: Create vault keystore
|
||||
ansible.builtin.command: keytool -importpass -alias TestRealm_testalias -keystore keystore.p12 -storepass keystorepassword
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}"
|
||||
delegate_to: localhost
|
||||
register: keytool_cmd
|
||||
changed_when: False
|
||||
failed_when: not 'already exists' in keytool_cmd.stdout and keytool_cmd.rc != 0
|
||||
|
||||
- name: Copy certificates and vault
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.copy:
|
||||
src: keystore.p12
|
||||
dest: /opt/keycloak/vault/keystore.p12
|
||||
mode: 0444
|
||||
1
molecule/quarkus_ha_remote/roles
Symbolic link
1
molecule/quarkus_ha_remote/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
31
molecule/quarkus_ha_remote/verify.yml
Normal file
31
molecule/quarkus_ha_remote/verify.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: keycloak
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
fail_msg: "Service not running"
|
||||
|
||||
- name: Set internal envvar
|
||||
ansible.builtin.set_fact:
|
||||
hera_home: "{{ lookup('env', 'HERA_HOME') }}"
|
||||
|
||||
- name: Check log file
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
ansible.builtin.stat:
|
||||
path: /var/log/keycloak/keycloak.log
|
||||
register: keycloak_log_file
|
||||
|
||||
- name: Check if keycloak file exists
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- keycloak_log_file.stat.exists
|
||||
- not keycloak_log_file.stat.isdir
|
||||
14
molecule/quarkus_upgrade/converge.yml
Normal file
14
molecule/quarkus_upgrade/converge.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
- vars.yml
|
||||
vars:
|
||||
keycloak_quarkus_show_deprecation_warnings: false
|
||||
keycloak_quarkus_additional_env_vars:
|
||||
- key: KC_FEATURES_DISABLED
|
||||
value: ciba,device-flow,impersonation,kerberos,docker
|
||||
keycloak_quarkus_version: 26.6.2
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
49
molecule/quarkus_upgrade/molecule.yml
Normal file
49
molecule/quarkus_upgrade/molecule.yml
Normal file
@@ -0,0 +1,49 @@
|
||||
---
|
||||
dependency:
|
||||
name: galaxy
|
||||
options:
|
||||
requirements-file: molecule/requirements.yml
|
||||
driver:
|
||||
name: podman
|
||||
platforms:
|
||||
- name: instance
|
||||
image: registry.access.redhat.com/ubi9/ubi-init:latest
|
||||
command: "/usr/sbin/init"
|
||||
pre_build_image: true
|
||||
privileged: true
|
||||
port_bindings:
|
||||
- 8080:8080
|
||||
- "9000/tcp"
|
||||
published_ports:
|
||||
- 0.0.0.0:8080:8080/TCP
|
||||
- 0.0.0.0:9000:9000/TCP
|
||||
provisioner:
|
||||
name: ansible
|
||||
playbooks:
|
||||
prepare: prepare.yml
|
||||
converge: converge.yml
|
||||
verify: verify.yml
|
||||
inventory:
|
||||
host_vars:
|
||||
localhost:
|
||||
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
||||
env:
|
||||
ANSIBLE_FORCE_COLOR: "true"
|
||||
PROXY: "${PROXY}"
|
||||
NO_PROXY: "${NO_PROXY}"
|
||||
verifier:
|
||||
name: ansible
|
||||
scenario:
|
||||
test_sequence:
|
||||
- dependency
|
||||
- cleanup
|
||||
- destroy
|
||||
- syntax
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- side_effect
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
59
molecule/quarkus_upgrade/prepare.yml
Normal file
59
molecule/quarkus_upgrade/prepare.yml
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
- name: Prepare
|
||||
hosts: all
|
||||
vars_files:
|
||||
- ../group_vars/all/vars.yml
|
||||
- vars.yml
|
||||
vars:
|
||||
sudo_pkg_name: sudo
|
||||
keycloak_quarkus_version: 26.6.1
|
||||
keycloak_quarkus_additional_env_vars:
|
||||
- key: KC_FEATURES_DISABLED
|
||||
value: impersonation,kerberos
|
||||
pre_tasks:
|
||||
- name: Install sudo
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- sudo
|
||||
- openjdk-17-jdk-headless
|
||||
state: present
|
||||
when:
|
||||
- ansible_facts.os_family == 'Debian'
|
||||
|
||||
- name: "Ensure common prepare phase are set."
|
||||
ansible.builtin.include_tasks: ../prepare.yml
|
||||
|
||||
- name: Display Ansible version
|
||||
ansible.builtin.debug:
|
||||
msg: "Ansible version is {{ ansible_version.full }}"
|
||||
|
||||
- name: "Ensure {{ sudo_pkg_name }} is installed (if user is root)."
|
||||
ansible.builtin.dnf:
|
||||
name: "{{ sudo_pkg_name }}"
|
||||
when:
|
||||
- ansible_user_id == 'root'
|
||||
|
||||
- name: Gather the package facts
|
||||
ansible.builtin.package_facts:
|
||||
manager: auto
|
||||
|
||||
- name: "Check if {{ sudo_pkg_name }} is installed."
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- sudo_pkg_name in ansible_facts.packages
|
||||
|
||||
- name: Create certificate request
|
||||
ansible.builtin.command: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes -subj '/CN=instance'
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}"
|
||||
delegate_to: localhost
|
||||
changed_when: false
|
||||
roles:
|
||||
- role: keycloak_quarkus
|
||||
|
||||
post_tasks:
|
||||
- name: "Delete custom fact"
|
||||
ansible.builtin.file:
|
||||
path: /etc/ansible/facts.d/keycloak.fact
|
||||
state: absent
|
||||
become: "{{ molecule_prepare_require_privilege_escalation | default(true) }}"
|
||||
1
molecule/quarkus_upgrade/roles
Symbolic link
1
molecule/quarkus_upgrade/roles
Symbolic link
@@ -0,0 +1 @@
|
||||
../../roles
|
||||
13
molecule/quarkus_upgrade/vars.yml
Normal file
13
molecule/quarkus_upgrade/vars.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
keycloak_quarkus_offline_install: false
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_realm: TestRealm
|
||||
keycloak_quarkus_hostname: http://instance:8080
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_https_key_file_enabled: true
|
||||
keycloak_quarkus_log_target: /tmp/keycloak
|
||||
keycloak_quarkus_hostname_strict: false
|
||||
keycloak_quarkus_cert_file_copy_enabled: true
|
||||
keycloak_quarkus_key_file_copy_enabled: true
|
||||
keycloak_quarkus_key_content: "{{ lookup('file', 'key.pem') }}"
|
||||
keycloak_quarkus_cert_file_src: cert.pem
|
||||
31
molecule/quarkus_upgrade/verify.yml
Normal file
31
molecule/quarkus_upgrade/verify.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: instance
|
||||
vars:
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_port: http://localhost:8080
|
||||
tasks:
|
||||
- name: Populate service facts
|
||||
ansible.builtin.service_facts:
|
||||
|
||||
- name: Check if keycloak service started
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.services["keycloak.service"]["state"] == "running"
|
||||
- ansible_facts.services["keycloak.service"]["status"] == "enabled"
|
||||
|
||||
- name: Verify Java 21 runtime is installed (UBI/RHEL)
|
||||
ansible.builtin.command:
|
||||
cmd: rpm -q java-21-openjdk-headless
|
||||
changed_when: false
|
||||
|
||||
- name: Verify token api call
|
||||
ansible.builtin.uri:
|
||||
url: "{{ keycloak_quarkus_port }}/realms/master/protocol/openid-connect/token"
|
||||
method: POST
|
||||
body: "client_id=admin-cli&username=admin&password={{ keycloak_quarkus_bootstrap_admin_password }}&grant_type=password"
|
||||
validate_certs: no
|
||||
register: keycloak_auth_response
|
||||
until: keycloak_auth_response.status == 200
|
||||
retries: 45
|
||||
delay: 5
|
||||
14
molecule/requirements.yml
Normal file
14
molecule/requirements.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
collections:
|
||||
- name: middleware_automation.common
|
||||
- name: middleware_automation.jbcs
|
||||
- name: middleware_automation.infinispan
|
||||
- name: community.general
|
||||
- name: ansible.posix
|
||||
- name: community.docker
|
||||
version: ">=3.8.0"
|
||||
- name: containers.podman
|
||||
version: ">=1.8.1"
|
||||
|
||||
roles:
|
||||
- name: elan.simple_nginx_reverse_proxy
|
||||
@@ -1,11 +1,7 @@
|
||||
---
|
||||
- name: Playbook for Keycloak Hosts
|
||||
hosts: keycloak
|
||||
collections:
|
||||
- middleware_automation.keycloak
|
||||
tasks:
|
||||
- name: Include keycloak role
|
||||
include_role:
|
||||
name: keycloak
|
||||
vars:
|
||||
keycloak_admin_password: "changeme"
|
||||
hosts: all
|
||||
vars:
|
||||
keycloak_admin_password: "remembertochangeme"
|
||||
roles:
|
||||
- middleware_automation.keycloak.keycloak
|
||||
|
||||
27
playbooks/keycloak_authentication_flow.yml
Normal file
27
playbooks/keycloak_authentication_flow.yml
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
- name: Playbook for Keycloak Authentication Flow Configuration
|
||||
hosts: all
|
||||
vars:
|
||||
keycloak_admin_user: admin
|
||||
keycloak_admin_password: "remembertochangeme"
|
||||
keycloak_url: "http://localhost:8080"
|
||||
keycloak_realm: TestRealm
|
||||
tasks:
|
||||
- name: Create authentication flow with executions
|
||||
middleware_automation.keycloak.keycloak_authentication_flow:
|
||||
auth_keycloak_url: "{{ keycloak_url }}"
|
||||
auth_realm: master
|
||||
auth_username: "{{ keycloak_admin_user }}"
|
||||
auth_password: "{{ keycloak_admin_password }}"
|
||||
realm: "{{ keycloak_realm }}"
|
||||
alias: my-browser-flow
|
||||
description: "Custom browser authentication flow"
|
||||
provider_id: basic-flow
|
||||
executions:
|
||||
- provider_id: auth-cookie
|
||||
requirement: ALTERNATIVE
|
||||
- provider_id: auth-password
|
||||
requirement: REQUIRED
|
||||
- provider_id: auth-otp-form
|
||||
requirement: ALTERNATIVE
|
||||
state: present
|
||||
48
playbooks/keycloak_client_scope.yml
Normal file
48
playbooks/keycloak_client_scope.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
- name: Playbook for Keycloak Client Scope Configuration
|
||||
hosts: all
|
||||
vars:
|
||||
keycloak_admin_user: admin
|
||||
keycloak_admin_password: "remembertochangeme"
|
||||
keycloak_url: "http://localhost:8080"
|
||||
keycloak_realm: TestRealm
|
||||
tasks:
|
||||
- name: Create client scope with protocol mappers
|
||||
middleware_automation.keycloak.keycloak_client_scope:
|
||||
auth_keycloak_url: "{{ keycloak_url }}"
|
||||
auth_realm: master
|
||||
auth_username: "{{ keycloak_admin_user }}"
|
||||
auth_password: "{{ keycloak_admin_password }}"
|
||||
realm: "{{ keycloak_realm }}"
|
||||
name: TestClientScope
|
||||
description: "Client scope created via Ansible"
|
||||
protocol: openid-connect
|
||||
protocol_mappers:
|
||||
- name: email
|
||||
protocolMapper: oidc-usermodel-attribute-mapper
|
||||
config:
|
||||
user.attribute: email
|
||||
claim.name: email
|
||||
jsonType.label: String
|
||||
id.token.claim: "true"
|
||||
access.token.claim: "true"
|
||||
userinfo.token.claim: "true"
|
||||
- name: firstName
|
||||
protocolMapper: oidc-usermodel-attribute-mapper
|
||||
config:
|
||||
user.attribute: firstName
|
||||
claim.name: given_name
|
||||
jsonType.label: String
|
||||
id.token.claim: "true"
|
||||
access.token.claim: "true"
|
||||
userinfo.token.claim: "true"
|
||||
- name: username
|
||||
protocolMapper: oidc-usermodel-attribute-mapper
|
||||
config:
|
||||
user.attribute: username
|
||||
claim.name: preferred_username
|
||||
jsonType.label: String
|
||||
id.token.claim: "true"
|
||||
access.token.claim: "true"
|
||||
userinfo.token.claim: "true"
|
||||
state: present
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
- name: Playbook for Keycloak Hosts
|
||||
hosts: keycloak
|
||||
hosts: all
|
||||
tasks:
|
||||
- name: Keycloak Realm Role
|
||||
include_role:
|
||||
ansible.builtin.include_role:
|
||||
name: keycloak_realm
|
||||
vars:
|
||||
keycloak_admin_password: "changeme"
|
||||
keycloak_admin_password: "remembertochangeme"
|
||||
keycloak_realm: TestRealm
|
||||
keycloak_user_federation:
|
||||
- realm: TestRealm
|
||||
@@ -50,18 +50,19 @@
|
||||
write.only: false
|
||||
keycloak_clients:
|
||||
- name: TestClient1
|
||||
client_id: TestClient1
|
||||
roles:
|
||||
- TestClient1Admin
|
||||
- TestClient1User
|
||||
realm: "{{ keycloak_realm }}"
|
||||
public_client: True
|
||||
public_client: true
|
||||
web_origins:
|
||||
- http://testclient1origin/application
|
||||
- http://testclient1origin/other
|
||||
users:
|
||||
- username: TestUser
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient1
|
||||
role: TestClient1User
|
||||
realm: "{{ keycloak_realm }}"
|
||||
- username: TestUser
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient1
|
||||
role: TestClient1User
|
||||
realm: "{{ keycloak_realm }}"
|
||||
11
playbooks/keycloak_quarkus.yml
Normal file
11
playbooks/keycloak_quarkus.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Playbook for Keycloak X Hosts with HTTPS enabled
|
||||
hosts: all
|
||||
vars:
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_hostname: http://localhost
|
||||
keycloak_quarkus_port: 8443
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_proxy_mode: none
|
||||
roles:
|
||||
- middleware_automation.keycloak.keycloak_quarkus
|
||||
12
playbooks/keycloak_quarkus_dev.yml
Normal file
12
playbooks/keycloak_quarkus_dev.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
- name: Playbook for Keycloak X Hosts in develop mode
|
||||
hosts: all
|
||||
vars:
|
||||
keycloak_quarkus_bootstrap_admin_password: "remembertochangeme"
|
||||
keycloak_quarkus_hostname: http://localhost
|
||||
keycloak_quarkus_port: 8080
|
||||
keycloak_quarkus_log: file
|
||||
keycloak_quarkus_start_dev: true
|
||||
keycloak_quarkus_proxy_mode: none
|
||||
roles:
|
||||
- middleware_automation.keycloak.keycloak_quarkus
|
||||
26
playbooks/keycloak_realm.yml
Normal file
26
playbooks/keycloak_realm.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
- name: Playbook for Keycloak Hosts
|
||||
hosts: all
|
||||
vars:
|
||||
keycloak_admin_password: "remembertochangeme"
|
||||
keycloak_clients:
|
||||
- name: TestClient1
|
||||
client_id: TestClient1
|
||||
roles:
|
||||
- TestClient1Admin
|
||||
- TestClient1User
|
||||
realm: TestRealm
|
||||
public_client: true
|
||||
web_origins:
|
||||
- http://testclient1origin/application
|
||||
- http://testclient1origin/other
|
||||
users:
|
||||
- username: TestUser
|
||||
password: password
|
||||
client_roles:
|
||||
- client: TestClient1
|
||||
role: TestClient1User
|
||||
realm: TestRealm
|
||||
roles:
|
||||
- role: middleware_automation.keycloak.keycloak_realm
|
||||
keycloak_realm: TestRealm
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user