diff --git a/.github/workflows/alloy-molecule.yml b/.github/workflows/alloy-molecule.yml new file mode 100644 index 00000000..199972e5 --- /dev/null +++ b/.github/workflows/alloy-molecule.yml @@ -0,0 +1,44 @@ +--- +name: Alloy Molecule + +on: + push: + branches: + - main + pull_request: + branches: + - main + +defaults: + run: + working-directory: roles/alloy + +jobs: + molecule: + name: Molecule + runs-on: ubuntu-latest + strategy: + matrix: + distro: + - rockylinux9 + - ubuntu2204 + - debian12 + + steps: + - name: Check out the codebase. + uses: actions/checkout@v4 + + - name: Set up Python 3. + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Install test dependencies. + run: pip3 install ansible molecule molecule-plugins[docker] docker + + - name: Run Molecule tests. + run: molecule test + env: + PY_COLORS: '1' + ANSIBLE_FORCE_COLOR: '1' + MOLECULE_DISTRO: ${{ matrix.distro }} diff --git a/.github/workflows/mimir-molecule.yml b/.github/workflows/mimir-molecule.yml index b9d1a083..41c2b0d6 100644 --- a/.github/workflows/mimir-molecule.yml +++ b/.github/workflows/mimir-molecule.yml @@ -35,7 +35,7 @@ jobs: python-version: '3.x' - name: Install test dependencies. - run: pip3 install molecule molecule-plugins[docker] docker pytest-testinfra jmespath selinux passlib + run: pip3 install ansible-core==2.16 'molecule-plugins[docker]' pytest-testinfra jmespath selinux passlib - name: create docker network run: docker network create molecule diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5d36543b..a48ee713 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,39 @@ Grafana.Grafana Release Notes .. contents:: Topics +v5.5.1 +====== + +Bugfixes +------------- + +- Add check_mode: false to Loki "Scrape GitHub" Task by @winsmith in https://github.com/grafana/grafana-ansible-collection/pull/262 + +v5.4.2 +====== + +Major Changes +------------- + +- fix:mimir molecule should use ansible core 2.16 by @GVengelen in https://github.com/grafana/grafana-ansible-collection/pull/254 +- promtail: add support for extra args by @harryfinbow in https://github.com/grafana/grafana-ansible-collection/pull/259 + +v5.4.1 +====== + +Major Changes +------------- + +- fix: Updated promtail arch map for aarch64 matching by @gianmarco-mameli in https://github.com/grafana/grafana-ansible-collection/pull/257 + +v5.4.0 +====== + +Major Changes +------------- + +- fix: Use a variable to control uninstall behavior instead of tags by @dobbi84 in https://github.com/grafana/grafana-ansible-collection/pull/253 + v5.3.0 ====== diff --git a/CODEOWNERS b/CODEOWNERS index 9be7737a..9074ce2c 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,7 +1,7 @@ ./ @ishanjainn /roles/grafana @gardar @ishanjainn /roles/grafana_agent @ishanjainn @v-zhuravlev @gardar -/roles/alloy @ishanjainn @v-zhuravlev @gardar +/roles/alloy @ishanjainn @v-zhuravlev @gardar @voidquark /roles/opentelemetry_collector @ishanjainn /roles/loki @voidquark @ishanjainn /roles/mimir @GVengelen @gardar @ishanjainn diff --git a/Pipfile.lock b/Pipfile.lock index 14df3221..8b5f7e5a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -18,138 +18,153 @@ "default": { "ansible-compat": { "hashes": [ - "sha256:1e1695454ea759b24beab7dfbeac18964553edca4a4ad0584567aa3eef491f0e", - "sha256:f93d4c347d8e1903c292449441c09a987d70366f9cadf9afe5e32dc8a0193cac" + "sha256:71e0791a912ad816059d463132270c97e29244fb0433b142beae718c1957a227", + "sha256:9ff20245e1bd9de9b23a367902524ab0e11fbcfb741831996da5da5b60ab95df" ], "markers": "python_version >= '3.9'", - "version": "==24.6.1" + "version": "==24.9.1" }, "ansible-core": { "hashes": [ - "sha256:a5de008985cd51eb01599cf1a14d3b45f917095ac6cdab867b0d11c3f922c343", - "sha256:bd16e30ecac405dac594de3e1b1b4d9cc6fa1a9f7a01a6a8d4c471b20660716d" + "sha256:44a1f30076796536ba2455cad18d36e62870f04e632e3ca2ebe970d7beacf24d", + "sha256:a36c9ab8e84d5d51f9fffe389d6ac7e81c8d0df6af8c12429ddbb71e8d69b21e" ], "markers": "python_version >= '3.10'", - "version": "==2.17.0" + "version": "==2.17.4" }, "ansible-lint": { "hashes": [ - "sha256:68ddde5b19ba717b6b311d970a327c4b155e80dfa4a9291673235ee26df4db1a", - "sha256:770dc5ac700bfc778b9effdc6d9bb20bac6c126579c2cbd5e0339fcc041f0af5" + "sha256:7cff6c5af10ef996b7c6010cbd48c91592764ae098f2b05408726899a1066a7f", + "sha256:8c3ad2aaf857390af803959a96c650c35ea921fba6b32d92d11b2d248761bfea" ], "index": "pypi", "markers": "python_version >= '3.10'", - "version": "==24.6.0" + "version": "==24.9.2" }, "astroid": { "hashes": [ - "sha256:8ead48e31b92b2e217b6c9733a21afafe479d52d6e164dd25fb1a770c7c3cf94", - "sha256:e8a0083b4bb28fcffb6207a3bfc9e5d0a68be951dd7e336d5dcf639c682388c0" + "sha256:5eba185467253501b62a9f113c263524b4f5d55e1b30456370eed4cdbd6438fd", + "sha256:e73d0b62dd680a7c07cb2cd0ce3c22570b044dd01bd994bc3a2dd16c6cbba162" ], - "markers": "python_full_version >= '3.8.0'", - "version": "==3.2.2" + "markers": "python_full_version >= '3.9.0'", + "version": "==3.3.4" }, "attrs": { "hashes": [ - "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", - "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1" + "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346", + "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2" ], "markers": "python_version >= '3.7'", - "version": "==23.2.0" + "version": "==24.2.0" }, "black": { "hashes": [ - "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474", - "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1", - "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0", - "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8", - "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96", - "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1", - "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04", - "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021", - "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94", - "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d", - "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c", - "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7", - "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c", - "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc", - "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7", - "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d", - "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c", - "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741", - "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce", - "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb", - "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063", - "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e" + "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6", + "sha256:1f13f7f386f86f8121d76599114bb8c17b69d962137fc70efe56137727c7047e", + "sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f", + "sha256:2b59b250fdba5f9a9cd9d0ece6e6d993d91ce877d121d161e4698af3eb9c1018", + "sha256:3c4285573d4897a7610054af5a890bde7c65cb466040c5f0c8b732812d7f0e5e", + "sha256:505289f17ceda596658ae81b61ebbe2d9b25aa78067035184ed0a9d855d18afd", + "sha256:62e8730977f0b77998029da7971fa896ceefa2c4c4933fcd593fa599ecbf97a4", + "sha256:649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed", + "sha256:6e55d30d44bed36593c3163b9bc63bf58b3b30e4611e4d88a0c3c239930ed5b2", + "sha256:707a1ca89221bc8a1a64fb5e15ef39cd755633daa672a9db7498d1c19de66a42", + "sha256:72901b4913cbac8972ad911dc4098d5753704d1f3c56e44ae8dce99eecb0e3af", + "sha256:73bbf84ed136e45d451a260c6b73ed674652f90a2b3211d6a35e78054563a9bb", + "sha256:7c046c1d1eeb7aea9335da62472481d3bbf3fd986e093cffd35f4385c94ae368", + "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb", + "sha256:837fd281f1908d0076844bc2b801ad2d369c78c45cf800cad7b61686051041af", + "sha256:972085c618ee94f402da1af548a4f218c754ea7e5dc70acb168bfaca4c2542ed", + "sha256:9e84e33b37be070ba135176c123ae52a51f82306def9f7d063ee302ecab2cf47", + "sha256:b19c9ad992c7883ad84c9b22aaa73562a16b819c1d8db7a1a1a49fb7ec13c7d2", + "sha256:d6417535d99c37cee4091a2f24eb2b6d5ec42b144d50f1f2e436d9fe1916fe1a", + "sha256:eab4dd44ce80dea27dc69db40dab62d4ca96112f87996bca68cd75639aeb2e4c", + "sha256:f490dbd59680d809ca31efdae20e634f3fae27fba3ce0ba3208333b713bc3920", + "sha256:fb6e2c0b86bbd43dee042e48059c9ad7830abd5c94b0bc518c0eeec57c3eddc1" ], "markers": "python_version >= '3.8'", - "version": "==24.4.2" + "version": "==24.8.0" }, "bracex": { "hashes": [ - "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb", - "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418" + "sha256:0725da5045e8d37ea9592ab3614d8b561e22c3c5fde3964699be672e072ab611", + "sha256:d2fcf4b606a82ac325471affe1706dd9bbaa3536c91ef86a31f6b766f3dad1d0" ], "markers": "python_version >= '3.8'", - "version": "==2.4" + "version": "==2.5" }, "cffi": { "hashes": [ - "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc", - "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a", - "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417", - "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab", - "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520", - "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36", - "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743", - "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8", - "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed", - "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684", - "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56", - "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324", - "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d", - "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235", - "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e", - "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088", - "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000", - "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7", - "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e", - "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673", - "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c", - "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe", - "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2", - "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098", - "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8", - "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a", - "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0", - "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b", - "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896", - "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e", - "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9", - "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2", - "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b", - "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6", - "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404", - "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f", - "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0", - "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4", - "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc", - "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936", - "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba", - "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872", - "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb", - "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614", - "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1", - "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d", - "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969", - "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b", - "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4", - "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627", - "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", - "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" + "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", + "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", + "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1", + "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", + "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", + "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", + "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", + "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", + "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", + "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", + "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc", + "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", + "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", + "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", + "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", + "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", + "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", + "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", + "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b", + "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", + "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", + "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c", + "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", + "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", + "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", + "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8", + "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1", + "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", + "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", + "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", + "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", + "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", + "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", + "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", + "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", + "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", + "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", + "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", + "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", + "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", + "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", + "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", + "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964", + "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", + "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", + "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", + "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", + "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", + "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", + "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", + "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", + "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", + "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", + "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", + "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", + "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", + "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9", + "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", + "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", + "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", + "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", + "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", + "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", + "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", + "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", + "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], "markers": "platform_python_implementation != 'PyPy'", - "version": "==1.16.0" + "version": "==1.17.1" }, "click": { "hashes": [ @@ -161,65 +176,60 @@ }, "cryptography": { "hashes": [ - "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad", - "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583", - "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b", - "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c", - "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1", - "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648", - "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949", - "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba", - "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c", - "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9", - "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d", - "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c", - "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e", - "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2", - "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d", - "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7", - "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70", - "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2", - "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7", - "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14", - "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe", - "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e", - "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71", - "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961", - "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7", - "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c", - "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28", - "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842", - "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902", - "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801", - "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a", - "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e" + "sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494", + "sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806", + "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d", + "sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062", + "sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2", + "sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4", + "sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1", + "sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85", + "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84", + "sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042", + "sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d", + "sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962", + "sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2", + "sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa", + "sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d", + "sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365", + "sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96", + "sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47", + "sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d", + "sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d", + "sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c", + "sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb", + "sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277", + "sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172", + "sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034", + "sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a", + "sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289" ], "markers": "python_version >= '3.7'", - "version": "==42.0.8" + "version": "==43.0.1" }, "dill": { "hashes": [ - "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca", - "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7" + "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", + "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c" ], "markers": "python_version < '3.11'", - "version": "==0.3.8" + "version": "==0.3.9" }, "filelock": { "hashes": [ - "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f", - "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a" + "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0", + "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435" ], "markers": "python_version >= '3.8'", - "version": "==3.14.0" + "version": "==3.16.1" }, "importlib-metadata": { "hashes": [ - "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", - "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2" + "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", + "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7" ], "markers": "python_version >= '3.8'", - "version": "==7.1.0" + "version": "==8.5.0" }, "isort": { "hashes": [ @@ -239,11 +249,11 @@ }, "jsonschema": { "hashes": [ - "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7", - "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802" + "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", + "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566" ], "markers": "python_version >= '3.8'", - "version": "==4.22.0" + "version": "==4.23.0" }, "jsonschema-specifications": { "hashes": [ @@ -411,11 +421,11 @@ }, "platformdirs": { "hashes": [ - "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee", - "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3" + "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", + "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb" ], "markers": "python_version >= '3.8'", - "version": "==4.2.2" + "version": "==4.3.6" }, "pycparser": { "hashes": [ @@ -435,69 +445,71 @@ }, "pylint": { "hashes": [ - "sha256:32cd6c042b5004b8e857d727708720c54a676d1e22917cf1a2df9b4d4868abd6", - "sha256:e9b7171e242dcc6ebd0aaa7540481d1a72860748a0a7816b8fe6cf6c80a6fe7e" + "sha256:2f846a466dd023513240bc140ad2dd73bfc080a5d85a710afdb728c420a5a2b9", + "sha256:9f3dcc87b1203e612b78d91a896407787e708b3f189b5fa0b307712d49ff0c6e" ], "index": "pypi", - "markers": "python_full_version >= '3.8.0'", - "version": "==3.2.5" + "markers": "python_full_version >= '3.9.0'", + "version": "==3.3.1" }, "pyyaml": { "hashes": [ - "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", - "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", - "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", - "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", - "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", - "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", - "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", - "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", - "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", - "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", - "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", - "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", - "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", - "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", - "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", - "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", - "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", - "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", - "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", - "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", - "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", - "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", - "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", - "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", - "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", - "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", - "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", - "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", - "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", - "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef", - "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", - "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", - "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", - "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", - "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", - "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", - "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", - "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", - "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", - "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", - "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", - "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", - "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", - "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", - "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", - "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", - "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", - "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", - "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", - "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", - "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" + "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", + "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", + "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", + "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", + "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", + "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", + "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", + "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", + "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", + "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", + "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a", + "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", + "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", + "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", + "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", + "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", + "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", + "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a", + "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", + "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", + "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", + "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", + "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", + "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", + "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", + "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", + "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", + "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", + "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", + "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706", + "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", + "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", + "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", + "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083", + "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", + "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", + "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", + "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", + "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", + "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", + "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", + "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", + "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", + "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", + "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5", + "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d", + "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", + "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", + "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", + "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", + "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", + "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", + "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" ], - "markers": "python_version >= '3.6'", - "version": "==6.0.1" + "markers": "python_version >= '3.8'", + "version": "==6.0.2" }, "referencing": { "hashes": [ @@ -516,116 +528,120 @@ }, "rich": { "hashes": [ - "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222", - "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432" + "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06", + "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a" ], "markers": "python_full_version >= '3.7.0'", - "version": "==13.7.1" + "version": "==13.8.1" }, "rpds-py": { "hashes": [ - "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee", - "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc", - "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc", - "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944", - "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20", - "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7", - "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4", - "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6", - "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6", - "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93", - "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633", - "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0", - "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360", - "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8", - "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139", - "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7", - "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a", - "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9", - "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26", - "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724", - "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72", - "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b", - "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09", - "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100", - "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3", - "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261", - "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3", - "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9", - "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b", - "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3", - "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de", - "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d", - "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e", - "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8", - "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff", - "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5", - "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c", - "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e", - "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e", - "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4", - "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8", - "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922", - "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338", - "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d", - "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8", - "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2", - "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72", - "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80", - "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644", - "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae", - "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163", - "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104", - "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d", - "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60", - "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a", - "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d", - "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07", - "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49", - "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10", - "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f", - "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2", - "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8", - "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7", - "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88", - "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65", - "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0", - "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909", - "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8", - "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c", - "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184", - "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397", - "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a", - "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346", - "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590", - "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333", - "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb", - "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74", - "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e", - "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d", - "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa", - "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f", - "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53", - "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1", - "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac", - "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0", - "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd", - "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611", - "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f", - "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c", - "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5", - "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab", - "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc", - "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43", - "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da", - "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac", - "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843", - "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e", - "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89", - "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64" + "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c", + "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585", + "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5", + "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6", + "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef", + "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2", + "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29", + "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318", + "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b", + "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399", + "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739", + "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee", + "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174", + "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a", + "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344", + "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2", + "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03", + "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5", + "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22", + "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e", + "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96", + "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91", + "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752", + "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075", + "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253", + "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee", + "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad", + "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5", + "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce", + "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7", + "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b", + "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8", + "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57", + "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3", + "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec", + "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209", + "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921", + "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045", + "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074", + "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580", + "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7", + "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5", + "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3", + "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0", + "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24", + "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139", + "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db", + "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc", + "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789", + "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f", + "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2", + "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c", + "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232", + "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6", + "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c", + "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29", + "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489", + "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94", + "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751", + "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2", + "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda", + "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9", + "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51", + "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c", + "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8", + "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989", + "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511", + "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1", + "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2", + "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150", + "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c", + "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965", + "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f", + "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58", + "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b", + "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f", + "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d", + "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821", + "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de", + "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121", + "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855", + "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272", + "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60", + "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02", + "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1", + "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140", + "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879", + "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940", + "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364", + "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4", + "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e", + "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420", + "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5", + "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24", + "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c", + "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf", + "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f", + "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e", + "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab", + "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08", + "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92", + "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a", + "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8" ], "markers": "python_version >= '3.8'", - "version": "==0.18.1" + "version": "==0.20.0" }, "ruamel.yaml": { "hashes": [ @@ -701,11 +717,11 @@ }, "subprocess-tee": { "hashes": [ - "sha256:b3c124993f8b88d1eb1c2fde0bc2069787eac720ba88771cba17e8c93324825d", - "sha256:eca56973a1c1237093c2055b2731bcaab784683b83f22c76f26e4c5763402e28" + "sha256:21942e976715af4a19a526918adb03a8a27a8edab959f2d075b777e3d78f532d", + "sha256:91b2b4da3aae9a7088d84acaf2ea0abee3f4fd9c0d2eae69a9b9122a71476590" ], "markers": "python_version >= '3.8'", - "version": "==0.4.1" + "version": "==0.4.2" }, "tomli": { "hashes": [ @@ -717,11 +733,11 @@ }, "tomlkit": { "hashes": [ - "sha256:af914f5a9c59ed9d0762c7b64d3b5d5df007448eb9cd2edc8a46b1eafead172f", - "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c" + "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", + "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79" ], - "markers": "python_version >= '3.7'", - "version": "==0.12.5" + "markers": "python_version >= '3.8'", + "version": "==0.13.2" }, "typing-extensions": { "hashes": [ @@ -733,11 +749,11 @@ }, "wcmatch": { "hashes": [ - "sha256:17d3ad3758f9d0b5b4dedc770b65420d4dac62e680229c287bf24c9db856a478", - "sha256:a70222b86dea82fb382dd87b73278c10756c138bd6f8f714e2183128887b9eb2" + "sha256:567d66b11ad74384954c8af86f607857c3bdf93682349ad32066231abd556c92", + "sha256:af25922e2b6dbd1550fa37a4c8de7dd558d6c1bb330c641de9b907b9776cb3c4" ], "markers": "python_version < '3.12'", - "version": "==8.5.2" + "version": "==9.0" }, "wrapt": { "hashes": [ @@ -831,11 +847,11 @@ }, "zipp": { "hashes": [ - "sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19", - "sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c" + "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", + "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29" ], "markers": "python_version >= '3.8'", - "version": "==3.19.2" + "version": "==3.20.2" } }, "develop": {} diff --git a/README.md b/README.md index ceef02c7..121bad54 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![GitHub Last Commit](https://img.shields.io/github/last-commit/grafana/grafana-ansible-collection)](https://github.com/grafana/grafana-ansible-collection/tags) [![GitHub Contributors](https://img.shields.io/github/contributors/grafana/grafana-ansible-collection)](https://github.com/grafana/grafana-ansible-collection/tags) -This collection (`grafana.grafana`) contains modules and roles to assist in automating the management of resources in **Grafana**, **Grafana Agent**, **OpenTelemetry Collector**, **Loki**, **Mimir**, and **Promtail** with Ansible. +This collection (`grafana.grafana`) contains modules and roles to assist in automating the management of resources in **Grafana**, **Grafana Agent**, **OpenTelemetry Collector**, **Loki**, **Mimir**, **Alloy**, and **Promtail** with Ansible. - [Ansible collection Documentation](https://docs.ansible.com/ansible/latest/collections/grafana/grafana/) - [Grafana](https://grafana.com) @@ -43,10 +43,11 @@ collections: ## Roles included in the collection -This collection includes the following roles to help set up and manage Grafana, Grafana Agent, OpenTelemetry Collector, Loki, Mimir and Promtail: +This collection includes the following roles to help set up and manage Grafana, Grafana Agent, Alloy, OpenTelemetry Collector, Loki, Mimir and Promtail: - **Grafana**: Installs and configures Grafana on your target hosts. - **Grafana Agent**: Deploys and configures Grafana Agent, allowing for efficient metrics, logs, and trace data shipping to Grafana Cloud or other endpoints. +- **Alloy**: The replacement for Grafana Agent and Promtail. Alloy can be used to collect traces, metrics, and logs. - **OpenTelemetry Collector**: Sets up and configures the OpenTelemetry Collector, enabling advanced observability features through data collection and transmission. - **Loki**: Deploy and manage Loki, the log aggregation system. - **Mimir**: Deploy and manage Mimir, the scalable long-term storage for Prometheus. diff --git a/changelogs/changelog.yaml b/changelogs/changelog.yaml index e3a34000..8100cfdc 100644 --- a/changelogs/changelog.yaml +++ b/changelogs/changelog.yaml @@ -303,3 +303,23 @@ releases: - Bump pylint from 3.2.3 to 3.2.5 by @dependabot in https://github.com/grafana/grafana-ansible-collection/pull/234 - Fix Grafana Configuration for Unified and Legacy Alerting Based on Version by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/215 release_date: '2024-07-12' + 5.4.0: + changes: + major_changes: + - fix: Use a variable to control uninstall behavior instead of tags by @dobbi84 in https://github.com/grafana/grafana-ansible-collection/pull/253 + release_date: '2024-08-09' + 5.4.1: + changes: + major_changes: + - fix: Updated promtail arch map for aarch64 matching by @gianmarco-mameli in https://github.com/grafana/grafana-ansible-collection/pull/257 + release_date: '2024-08-13' + 5.5.0: + changes: + major_changes: + - fix:mimir molecule should use ansible core 2.16 by @GVengelen in https://github.com/grafana/grafana-ansible-collection/pull/254 + - promtail: add support for extra args by @harryfinbow in https://github.com/grafana/grafana-ansible-collection/pull/259 + release_date: '2024-08-16' + 5.5.1: + changes: + bugfixes: + - Add check_mode: false to Loki "Scrape GitHub" Task by @winsmith in https://github.com/grafana/grafana-ansible-collection/pull/262 diff --git a/examples/alloy.yaml b/examples/alloy.yaml index 29084cbf..83fe939f 100644 --- a/examples/alloy.yaml +++ b/examples/alloy.yaml @@ -1,24 +1,21 @@ -- name: Install alloy +--- +- name: Deploy alloy hosts: all become: true - + roles: + - role: grafana.grafana.alloy tasks: - - name: Install alloy + - name: Deploy alloy ansible.builtin.include_role: name: grafana.grafana.alloy vars: - config: | + alloy_config: | prometheus.scrape "default" { - targets = [{"__address__" = "localhost:12345"}] - forward_to = [prometheus.remote_write.prom.receiver] + targets = [{"__address__" = "127.0.0.1:12345"}] + forward_to = [prometheus.remote_write.prom.receiver] } prometheus.remote_write "prom" { endpoint { - url = "https://prometheus-prod-13-prod-us-east-0.grafana.net/api/prom/push" - - basic_auth { - username = "1493467" - password = "glc_eyJvIjoiNjUyOTkyIiwibiI6InN0YWNrLTg5MDA0My1obS13cml0ZS1hc2FzIiwiayI6IjIwME9NeThmWlFpMGlmQzBGMTlJNDdqSiIsIm0iOnsiciI6InByb2QtdXMtZWFzdC0wIn19" - } + url = "http://mimir:9009/api/v1/push" } } diff --git a/galaxy.yml b/galaxy.yml index a3b780fd..4c6fae18 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -1,7 +1,7 @@ --- namespace: grafana name: grafana -version: 5.3.0 +version: 5.5.1 readme: README.md authors: - Grafana Labs diff --git a/roles/alloy/README.md b/roles/alloy/README.md index 31129fd1..3cf2e101 100644 --- a/roles/alloy/README.md +++ b/roles/alloy/README.md @@ -1,67 +1,59 @@ -# Ansible Role for Alloy +# Ansible role - Alloy + +[![License](https://img.shields.io/github/license/grafana/grafana-ansible-collection)](LICENSE) This Ansible role to install and configure [Alloy](https://grafana.com/docs/alloy/latest/), which can be used to collect traces, metrics, and logs. +This role is tailored for operating systems such as **RedHat**, **Rocky Linux**, **AlmaLinux**, **Ubuntu**, and **Debian**. -## Requirements +## Table of Content -Please ensure that `curl` is intalled on Ansible controller. +- [Requirements](#requirements) +- [Role Variables](#role-variables) +- [Playbook](#playbook) -## Role Variables +## Requirements -Available variables with their default values are listed below (`defaults/main.yml`): +- Ansible 2.13+ +- `ansible.utils` collection is required. Additionally, you must install the `netaddr` Python library on the host where you are running Ansible (not on the target remote host) if is not present. ## Role Variables | Variable Name | Description | Default Value | |-----------------------|----------------------------------------------------------------------|---------------------------------------------------------------------| -| `version` | The version of Grafana Alloy to be installed. | "1.0.0" | -| `arch_mapping` | A mapping of common architecture names to Grafana Alloy binaries. | `{'x86_64': 'amd64', 'aarch64': 'arm64', 'armv7l': 'armhf', 'i386': 'i386', 'ppc64le': 'ppc64le'}` | -| `arch` | The architecture of the current machine. | Based on `ansible_architecture` lookup, defaults to 'amd64'. | -| `binary_url` | URL to Grafana Alloy binary for the specific version and architecture. | Constructed URL based on `version` and `arch` variables. | -| `service_name` | The name to be used for the Grafana Alloy service. | "alloy" | -| `installation_dir` | Directory where Grafana Alloy binary is to be installed. Must be present. | "/usr/local/bin" | -| `environment_file` | Name of the environment file for the Grafana Alloy service. | "service.env" | -| `config_dir` | Directory for Grafana Alloy configuration. | "/etc/alloy" | -| `config_file` | Configuration file name for Grafana Alloy. | "config.alloy" | -| `service_user` | User under which the Grafana Alloy service will run. | "alloy" | -| `service_group` | Group under which the Grafana Alloy service will run. | "alloy" | -| `working_dir` | Working directory for the Grafana Alloy service. | "/var/lib/alloy" | -| `env_file_vars` | Additional environment variables to be set in the service environment file. | {} (Empty dictionary) | -| `alloy_flags_extra` | Extra flags to pass to the Alloy service. | {} (Empty dictionary) | -| `start_after_service` | Specify an optional dependency service Alloy should start after. | '' (Empty string) | -| `config` | Configuration template for Grafana Alloy. | Configuration script with Prometheus scrape and remote_write setup | -| `alloy_user_groups`. | Configurable user groups that the Grafana Alloy can be put in so that it can access logs. | `[]` | - - - -## Example Playbook - -Including an example of how to use your role: +| `alloy_version` | The version of Alloy to download and deploy. Supported standard version "1.4.2" format or "latest". | `latest` | +| `alloy_uninstall` | If set to `true` will perfom uninstall instead of deployment. | `false` | +| `alloy_expose_port` | By default, this is set to false. It supports only simple firewalld configurations. If set to true, a firewalld rule is added to expose the TCP alloy port. The Port is automatically extracted from the environment variable `alloy_env_file_vars` in CUSTOM_ARGS when --server.http.listen-addr=0.0.0.0:12345 is defined. If set to false, configuration is skipped. If the firewalld.service is not active, all firewalld tasks are skipped. | `false` | +| `alloy_user_groups` | Appends the alloy user to specific groups. | `[]` | +| `alloy_download_url_rpm` | The default download URL for the Alloy rpm package from GitHub. | `"https://github.com/grafana/alloy/releases/download/v{{ aloy_version }}/alloy-{{ aloy_version }}-1.{{ __alloy_arch }}.rpm"` | +| `alloy_download_url_deb` | The default download URL for the Alloy deb package from GitHub. | `"https://github.com/grafana/alloy/releases/download/v{{ aloy_version }}/alloy-{{ aloy_version }}-1.{{ __alloy_arch }}.deb"` | +| `alloy_env_file_vars` | You can use environment variables to control the run-time behavior of Grafana Alloy. | `{}` | +| `alloy_systemd_override` | Systemd unit drop-in file used to override or extend the default configuration of a systemd unit. | `{}` | +| `alloy_config` | This is the configuration that sets up Alloy. Refer to the [configuration blocks](https://grafana.com/docs/alloy/latest/reference/config-blocks/) and [components](https://grafana.com/docs/alloy/latest/reference/components/) documentation for more details. By default, there is no configuration provided, and it is required for successful deployment. Without it, the deployment will fail. Since the purpose of using Alloy varies, no default configuration is provided. โš ๏ธ **This configuration is mandatory.** | `{}` | + +## Dependencies + +No Dependencies + +## Playbook + ```yaml -- name: Install alloy +- name: Manage alloy service hosts: all become: true + vars: + # alloy_config: | + # Your Config Content + roles: + - role: grafana.grafana.alloy +``` + +- Playbook execution example +```shell +# Deploy Alloy +ansible-playbook function_alloy_play.yml - tasks: - - name: Install alloy - ansible.builtin.include_role: - name: grafana.grafana.alloy - vars: - config: | - prometheus.scrape "default" { - targets = [{"__address__" = "localhost:12345"}] - forward_to = [prometheus.remote_write.prom.receiver] - } - prometheus.remote_write "prom" { - endpoint { - url = "https://prometheus-prod-13-prod-us-east-0.grafana.net/api/prom/push" - - basic_auth { - username = "149xxx" - password = "glc_xxx" - } - } - } +# Uninstall Alloy +ansible-playbook function_alloy_play.yml -e "alloy_uninstall=true" ``` ## License @@ -71,3 +63,4 @@ See [LICENSE](https://github.com/grafana/grafana-ansible-collection/blob/main/LI ## Author Information - [Ishan Jain](https://github.com/ishanjainn) +- [VoidQuark](https://github.com/voidquark) diff --git a/roles/alloy/defaults/main.yml b/roles/alloy/defaults/main.yml index fefc2555..0266a4a4 100644 --- a/roles/alloy/defaults/main.yml +++ b/roles/alloy/defaults/main.yml @@ -1,48 +1,32 @@ -version: "1.0.0" +--- +# defaults file for alloy +alloy_version: "latest" +alloy_uninstall: false +alloy_expose_port: false +alloy_download_url_rpm: "https://github.com/grafana/alloy/releases/download/v{{ alloy_version }}/alloy-{{ alloy_version }}-1.{{ __alloy_arch }}.rpm" +alloy_download_url_deb: "https://github.com/grafana/alloy/releases/download/v{{ alloy_version }}/alloy-{{ alloy_version }}-1.{{ __alloy_arch }}.deb" -arch_mapping: - x86_64: amd64 - aarch64: arm64 - armv7l: armhf - i386: i386 - ppc64le: ppc64le - -arch: "{{ arch_mapping[ansible_architecture] | default('amd64') }}" - -binary_url: "https://github.com/grafana/alloy/releases/download/v{{ version }}/alloy-linux-{{ arch }}.zip" - -service_name: "alloy" - -installation_dir: "/usr/local/bin" - -environment_file: "service.env" - -config_dir: "/etc/alloy" - -config_file: "config.alloy" - -service_user: "alloy" - -service_group: "alloy" - -working_dir: "/var/lib/alloy" - -env_file_vars: {} - -alloy_flags_extra: {} - -start_after_service: '' - -config: | - prometheus.scrape "default" { - targets = [{"__address__" = "localhost:12345"}] - forward_to = [prometheus.remote_write.prom.receiver] - } - prometheus.remote_write "prom" { - endpoint { - url = "http://mimir:9009/api/v1/push" - } - } - -# Configurable user groups that the Grafana Alloy can be put in so that it can access logs. alloy_user_groups: [] +# alloy_user_groups: +# - "systemd-journal" + +alloy_env_file_vars: {} +# alloy_env_file_vars: +# CUSTOM_ARGS: "--server.http.listen-addr=0.0.0.0:12345 --stability.level=public-preview --feature.community-components.enabled=true" + +alloy_systemd_override: {} +# alloy_systemd_override: | +# [Service] +# User=root + +alloy_config: {} +# alloy_config: | +# prometheus.scrape "default" { +# targets = [{"__address__" = "127.0.0.1:12345"}] +# forward_to = [prometheus.remote_write.prom.receiver] +# } +# prometheus.remote_write "prom" { +# endpoint { +# url = "http://mimir:9009/api/v1/push" +# } +# } diff --git a/roles/alloy/handlers/main.yml b/roles/alloy/handlers/main.yml index 2c30728c..8933146a 100644 --- a/roles/alloy/handlers/main.yml +++ b/roles/alloy/handlers/main.yml @@ -1,10 +1,10 @@ +--- +# handlers file for alloy - name: Restart alloy + listen: "restart alloy" ansible.builtin.systemd: - name: "{{ service_name }}" + daemon_reload: true + name: alloy.service state: restarted - become: true - listen: "Restart alloy" - -- name: Check alloy is started properly - ansible.builtin.include_tasks: ga-started.yml - listen: "Restart alloy" + enabled: true + when: not ansible_check_mode diff --git a/roles/alloy/meta/main.yml b/roles/alloy/meta/main.yml index 589eb2fb..9bda6e7b 100644 --- a/roles/alloy/meta/main.yml +++ b/roles/alloy/meta/main.yml @@ -1,21 +1,24 @@ +--- galaxy_info: - author: Ishan Jain + role_name: alloy + author: Ishan Jain, voidquark description: Role to Install and Configure Grafana Alloy license: "GPL-3.0-or-later" - min_ansible_version: "2.11" + min_ansible_version: "2.13" platforms: + - name: EL + versions: + - "8" + - "9" - name: Fedora versions: - - "all" + - all - name: Debian versions: - - "all" + - all - name: Ubuntu versions: - - "all" - - name: EL - versions: - - "all" + - all galaxy_tags: - grafana - observability diff --git a/roles/alloy/molecule/default/converge.yml b/roles/alloy/molecule/default/converge.yml new file mode 100644 index 00000000..e14f0e92 --- /dev/null +++ b/roles/alloy/molecule/default/converge.yml @@ -0,0 +1,17 @@ +--- +- name: Converge + hosts: all + vars: + alloy_version: "1.4.2" + alloy_config: | + prometheus.scrape "default" { + targets = [{"__address__" = "127.0.0.1:12345"}] + forward_to = [prometheus.remote_write.prom.receiver] + } + prometheus.remote_write "prom" { + endpoint { + url = "http://mimir:9009/api/v1/push" + } + } + roles: + - role: grafana.grafana.alloy diff --git a/roles/alloy/molecule/default/molecule.yml b/roles/alloy/molecule/default/molecule.yml new file mode 100644 index 00000000..339965a5 --- /dev/null +++ b/roles/alloy/molecule/default/molecule.yml @@ -0,0 +1,20 @@ +--- +dependency: + name: galaxy + options: + ignore-errors: true +driver: + name: docker +platforms: + - name: instance + image: "geerlingguy/docker-${MOLECULE_DISTRO:-rockylinux8}-ansible:latest" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:rw + cgroupns_mode: host + privileged: true + pre_build_image: true +provisioner: + name: ansible + playbooks: + converge: converge.yml diff --git a/roles/alloy/tasks/configure.yml b/roles/alloy/tasks/configure.yml deleted file mode 100644 index 595f1839..00000000 --- a/roles/alloy/tasks/configure.yml +++ /dev/null @@ -1,37 +0,0 @@ -- name: Create alloy working directory - ansible.builtin.file: - path: "{{ working_dir }}" - state: directory - owner: "{{ service_user }}" - group: "{{ service_group }}" - mode: "0755" - become: true - -- name: Create alloy config directory - ansible.builtin.file: - path: "{{ config_dir }}" - state: directory - owner: "{{ service_user }}" - group: "{{ service_group }}" - mode: '0755' - become: true - -- name: Deploy alloy configuration file - ansible.builtin.template: - src: config.alloy.j2 - dest: "{{ config_dir }}/{{ config_file }}" - owner: "{{ service_user }}" - group: "{{ service_group }}" - mode: '0644' - notify: Restart alloy - become: true - -- name: Deploy alloy environment file - ansible.builtin.template: - src: environment.j2 - dest: "{{ config_dir }}/{{ environment_file }}" - owner: "{{ service_user }}" - group: "{{ service_group }}" - mode: '0644' - notify: Restart alloy - become: true diff --git a/roles/alloy/tasks/deploy.yml b/roles/alloy/tasks/deploy.yml new file mode 100644 index 00000000..bfa3247c --- /dev/null +++ b/roles/alloy/tasks/deploy.yml @@ -0,0 +1,128 @@ +--- +- name: Obtain the latest version from the GitHub repo + when: alloy_version == "latest" + block: + - name: Scrape Github API endpoint to obtain latest Alloy version + ansible.builtin.uri: + url: "https://api.github.com/repos/grafana/alloy/releases/latest" + method: GET + body_format: json + become: false + delegate_to: localhost + run_once: true + check_mode: false + register: __github_latest_version + + - name: Latest available Alloy version + ansible.builtin.set_fact: + alloy_version: "{{ __github_latest_version.json.tag_name | regex_replace('^v?(\\d+\\.\\d+\\.\\d+)$', '\\1') }}" + +- name: Verify current deployed version + block: + - name: Check if Alloy binary is present + ansible.builtin.stat: + path: "/usr/bin/alloy" + register: __already_deployed + + - name: Obtain current deployed Alloy version + ansible.builtin.command: + cmd: "/usr/bin/alloy --version" + changed_when: false + register: __current_deployed_version + when: __already_deployed.stat.exists | bool + +- name: Include RedHat/Rocky setup + ansible.builtin.include_tasks: + file: setup-RedHat.yml + when: ansible_os_family in ['RedHat', 'Rocky'] + +- name: Include Debian/Ubuntu setup + ansible.builtin.include_tasks: + file: setup-Debian.yml + when: ansible_os_family == 'Debian' + +- name: Alloy systemd override + when: alloy_systemd_override | length > 0 + block: + - name: Ensure that Alloy systemd override path exist + ansible.builtin.file: + path: "/etc/systemd/system/alloy.service.d" + state: directory + owner: "root" + group: "root" + mode: "0750" + notify: restart alloy + + - name: Template Alloy systemd override.conf - /etc/systemd/system/alloy.service.d/override.conf + ansible.builtin.template: + src: "override.conf.j2" + dest: "/etc/systemd/system/alloy.service.d/override.conf" + owner: "root" + group: "root" + mode: "0644" + notify: restart alloy + +- name: Template Alloy env file - {{ __alloy_env_file }} + ansible.builtin.template: + src: "alloy.j2" + dest: "{{ __alloy_env_file }}" + owner: "root" + group: "root" + mode: "0644" + notify: restart alloy + +- name: Template Alloy config - /etc/alloy/config.alloy + ansible.builtin.template: + src: "config.alloy.j2" + dest: "/etc/alloy/config.alloy" + owner: "root" + group: "root" + mode: "0644" + notify: restart alloy + +- name: Add the Alloy system user to additional group + ansible.builtin.user: + name: "alloy" + groups: "{{ item }}" + system: true + append: true + create_home: false + state: present + loop: "{{ alloy_user_groups }}" + when: + - alloy_user_groups | length > 0 + +- name: Get firewalld state + ansible.builtin.systemd: + name: "firewalld" + register: __firewalld_service_state + +- name: Enable firewalld rule to expose Alloy tcp port {{ __alloy_server_http_listen_port }} + ansible.posix.firewalld: + immediate: true + permanent: true + port: "{{ __alloy_server_http_listen_port }}/tcp" + state: enabled + when: + - __firewalld_service_state.status.ActiveState == "active" + - alloy_expose_port | bool + +- name: Flush handlers after deployment + ansible.builtin.meta: flush_handlers + +- name: Ensure that Alloy is started + ansible.builtin.systemd: + name: alloy.service + state: started + when: not ansible_check_mode + +- name: Verify that Alloy URL is responding + ansible.builtin.uri: + url: "http://{{ __alloy_server_http_listen_address }}:{{ __alloy_server_http_listen_port }}/-/ready" + method: GET + register: __alloy_verify_url_status_code + retries: 5 + delay: 8 + until: __alloy_verify_url_status_code.status == 200 + when: + - not ansible_check_mode diff --git a/roles/alloy/tasks/ga-started.yml b/roles/alloy/tasks/ga-started.yml deleted file mode 100644 index d535d816..00000000 --- a/roles/alloy/tasks/ga-started.yml +++ /dev/null @@ -1,29 +0,0 @@ ---- -- name: Health check Grafana Alloy - ansible.builtin.uri: - url: "{{ _alloy_healthcheck_endpoint }}" - follow_redirects: none - method: GET - register: _result - failed_when: false - until: _result.status == 200 - retries: 3 - delay: 5 - changed_when: false - when: not ansible_check_mode - -- name: Check system logs if Grafana Alloy is not started - when: not ansible_check_mode and _result.status != 200 - block: - - name: Run journalctl - ansible.builtin.shell: - cmd: "journalctl -u {{ service_name }} -b -n20 --no-pager" - register: journal_ret - changed_when: false - - name: Output Grafana Alloy logs - ansible.builtin.debug: - var: journal_ret.stdout_lines - - name: Raise alerts - ansible.builtin.assert: - that: false - fail_msg: "Service {{ service_name }} hasn't started." diff --git a/roles/alloy/tasks/install.yml b/roles/alloy/tasks/install.yml deleted file mode 100644 index b78a9532..00000000 --- a/roles/alloy/tasks/install.yml +++ /dev/null @@ -1,42 +0,0 @@ -- name: Install unzip - ansible.builtin.package: - name: unzip - state: present - become: true - -- name: Create alloy group - ansible.builtin.group: - name: "{{ service_group }}" - system: true - become: true - -- name: Create alloy user - ansible.builtin.user: - name: "{{ service_user }}" - groups: "{{ [ service_group ] + alloy_user_groups }}" - system: true - create_home: false # Appropriate for a system user, usually doesn't need a home directory - become: true - -- name: Download alloy binary - ansible.builtin.get_url: - url: "{{ binary_url }}" - dest: "/tmp/alloy-{{ version }}.zip" - mode: '0755' - become: true - register: download_result - -- name: Remove existing alloy binary - ansible.builtin.file: - path: "{{ installation_dir }}/alloy-linux-{{ arch }}" - state: absent - become: true - when: download_result.changed - -- name: Extract alloy binary - ansible.builtin.unarchive: - src: "/tmp/alloy-{{ version }}.zip" - dest: "{{ installation_dir }}" - remote_src: yes - become: true - register: extract_result diff --git a/roles/alloy/tasks/main.yml b/roles/alloy/tasks/main.yml index 49a6dd69..55b5bdab 100644 --- a/roles/alloy/tasks/main.yml +++ b/roles/alloy/tasks/main.yml @@ -1,11 +1,19 @@ -- name: Install alloy - include_tasks: install.yml - tags: [install] +--- +# tasks file for alloy +- name: Include OS specific variables + ansible.builtin.include_vars: + file: "{{ ansible_os_family }}.yml" -- name: Configure alloy - include_tasks: configure.yml - tags: [configure] +- name: Preflight + ansible.builtin.include_tasks: + file: "preflight.yml" -- name: Manage alloy service - include_tasks: service.yml - tags: [service] +- name: Deploy Alloy service + ansible.builtin.include_tasks: + file: "deploy.yml" + when: not alloy_uninstall + +- name: Uninstall Alloy service + ansible.builtin.include_tasks: + file: "uninstall.yml" + when: alloy_uninstall diff --git a/roles/alloy/tasks/preflight.yml b/roles/alloy/tasks/preflight.yml new file mode 100644 index 00000000..64e7c987 --- /dev/null +++ b/roles/alloy/tasks/preflight.yml @@ -0,0 +1,23 @@ +--- +- name: Fail when alloy_config is empty + ansible.builtin.fail: + msg: Variable alloy_config is required! + when: alloy_config | length < 1 + +- name: Extract IP address and PORT from alloy_env_file_vars + when: alloy_env_file_vars.CUSTOM_ARGS is defined and alloy_env_file_vars.CUSTOM_ARGS | length > 0 + block: + - name: Search for server.http.listen-addr string + ansible.builtin.set_fact: + __alloy_server_http_listen_addr_regex: "{{ alloy_env_file_vars.CUSTOM_ARGS | regex_search('--server.http.listen-addr=([\\d\\.]+):(\\d+)', '\\1', '\\2') }}" + + - name: Extract IP address and port + ansible.builtin.set_fact: + __alloy_server_http_listen_address: "{{ __alloy_server_http_listen_addr_regex[0] }}" + __alloy_server_http_listen_port: "{{ __alloy_server_http_listen_addr_regex[1] }}" + when: __alloy_server_http_listen_addr_regex | length > 0 + + - name: Assert that extracted IP address is valid + ansible.builtin.assert: + that: __alloy_server_http_listen_address | ansible.utils.ipaddr + when: __alloy_server_http_listen_addr_regex | length > 0 diff --git a/roles/alloy/tasks/service.yml b/roles/alloy/tasks/service.yml deleted file mode 100644 index e4e87f12..00000000 --- a/roles/alloy/tasks/service.yml +++ /dev/null @@ -1,22 +0,0 @@ -- name: Copy alloy systemd unit file - ansible.builtin.template: - src: alloy.service.j2 - dest: /etc/systemd/system/{{ service_name }}.service - mode: "0644" - become: true - notify: Restart alloy - -- name: Reload systemd daemon to pick up changes - ansible.builtin.systemd: - daemon_reload: yes - become: true - -- name: Flush handlers - ansible.builtin.meta: flush_handlers - -- name: Ensure alloy service is enabled and running - ansible.builtin.service: - name: "{{ service_name }}" - enabled: yes - state: started - become: true diff --git a/roles/alloy/tasks/setup-Debian.yml b/roles/alloy/tasks/setup-Debian.yml new file mode 100644 index 00000000..7e380c0f --- /dev/null +++ b/roles/alloy/tasks/setup-Debian.yml @@ -0,0 +1,7 @@ +--- +- name: APT - Install Alloy + ansible.builtin.apt: + deb: "{{ alloy_download_url_deb }}" + state: present + notify: restart alloy + when: __current_deployed_version.stdout is not defined or alloy_version not in __current_deployed_version.stdout diff --git a/roles/alloy/tasks/setup-RedHat.yml b/roles/alloy/tasks/setup-RedHat.yml new file mode 100644 index 00000000..5facc241 --- /dev/null +++ b/roles/alloy/tasks/setup-RedHat.yml @@ -0,0 +1,8 @@ +--- +- name: DNF - Install Alloy from remote URL + ansible.builtin.dnf: + name: "{{ alloy_download_url_rpm }}" + state: present + disable_gpg_check: true + notify: restart alloy + when: __current_deployed_version.stdout is not defined or alloy_version not in __current_deployed_version.stdout diff --git a/roles/alloy/tasks/uninstall.yml b/roles/alloy/tasks/uninstall.yml new file mode 100644 index 00000000..8a7f6799 --- /dev/null +++ b/roles/alloy/tasks/uninstall.yml @@ -0,0 +1,52 @@ +--- +- name: Stop Alloy service + ansible.builtin.systemd: # noqa ignore-errors + name: alloy + state: stopped + ignore_errors: true + +- name: Uninstall Alloy rpm package + ansible.builtin.dnf: + name: "alloy" + state: absent + autoremove: true + when: ansible_os_family in ['RedHat', 'Rocky'] + +- name: Uninstall Alloy deb package + ansible.builtin.apt: + name: "alloy" + state: absent + purge: true + when: ansible_os_family == 'Debian' + +- name: Ensure that Alloy firewalld rule is not present - tcp port {{ __alloy_server_http_listen_port }} + ansible.posix.firewalld: # noqa ignore-errors + immediate: true + permanent: true + port: "{{ __alloy_server_http_listen_port }}/tcp" + state: disabled + ignore_errors: true + +- name: Remove Alloy directories + ansible.builtin.file: + path: "{{ remove_me }}" + state: absent + loop: + - "/etc/alloy" + - "/etc/systemd/system/alloy.service.d" + - "/var/lib/alloy" + - "/etc/sysconfig/alloy" + - "/etc/default/alloy" + loop_control: + loop_var: remove_me + +- name: Remove the Alloy system user + ansible.builtin.user: + name: "alloy" + force: true + state: absent + +- name: Remove Alloy system group + ansible.builtin.group: + name: "alloy" + state: absent diff --git a/roles/alloy/templates/alloy.j2 b/roles/alloy/templates/alloy.j2 new file mode 100644 index 00000000..09b1eb7f --- /dev/null +++ b/roles/alloy/templates/alloy.j2 @@ -0,0 +1,8 @@ +# Ansible Managed + +CONFIG_FILE="/etc/alloy/config.alloy" +RESTART_ON_UPGRADE=true + +{% for key, value in alloy_env_file_vars.items() %} +{{ key}}={{value}} +{% endfor %} diff --git a/roles/alloy/templates/alloy.service.j2 b/roles/alloy/templates/alloy.service.j2 deleted file mode 100644 index 78626e3e..00000000 --- a/roles/alloy/templates/alloy.service.j2 +++ /dev/null @@ -1,32 +0,0 @@ -[Unit] -Description=Vendor-neutral programmable observability pipelines. -Documentation=https://grafana.com/docs/alloy/ -Wants=network-online.target -After=network-online.target{{ ' ' + start_after_service if start_after_service is defined else '' }} - -[Service] -Restart=always -User={{ service_user }} -Group={{ service_group }} -Environment=HOSTNAME=%H -EnvironmentFile={{ config_dir }}/{{ environment_file }} -WorkingDirectory={{ working_dir }} -ExecStart={{ installation_dir }}/alloy-linux-{{ arch }} run \ -{% for flag, flag_value in alloy_flags_extra.items() %} -{% if not flag_value %} - --{{ flag }} \ -{% elif flag_value is string %} - --{{ flag }}={{ flag_value }} \ -{% elif flag_value is sequence %} -{% for flag_value_item in flag_value %} - --{{ flag }}={{ flag_value_item }} \ -{% endfor %} -{% endif %} -{% endfor %} - $CUSTOM_ARGS --storage.path={{ working_dir }} $CONFIG_FILE -ExecReload=/usr/bin/env kill -HUP $MAINPID -TimeoutStopSec=20s -SendSIGKILL=no - -[Install] -WantedBy=multi-user.target diff --git a/roles/alloy/templates/config.alloy.j2 b/roles/alloy/templates/config.alloy.j2 index 26278f36..8a6b406f 100644 --- a/roles/alloy/templates/config.alloy.j2 +++ b/roles/alloy/templates/config.alloy.j2 @@ -1 +1,3 @@ -{{ config }} +// Ansible Managed + +{{ alloy_config }} diff --git a/roles/alloy/templates/environment.j2 b/roles/alloy/templates/environment.j2 deleted file mode 100644 index 5d6de6a6..00000000 --- a/roles/alloy/templates/environment.j2 +++ /dev/null @@ -1,10 +0,0 @@ -{{ ansible_managed | comment }} -# Grafana Alloy Environment File -CONFIG_FILE="{{ config_dir }}/{{ config_file }}" - -GOMAXPROCS={{ ansible_processor_vcpus|default(ansible_processor_count) }} -RESTART_ON_UPGRADE=true - -{% for key, value in env_file_vars.items() %} -{{key}}={{value}} -{% endfor %} diff --git a/roles/alloy/templates/override.conf.j2 b/roles/alloy/templates/override.conf.j2 new file mode 100644 index 00000000..77f52b32 --- /dev/null +++ b/roles/alloy/templates/override.conf.j2 @@ -0,0 +1,3 @@ +# Ansible Managed + +{{ alloy_systemd_override }} diff --git a/roles/alloy/vars/Debian.yml b/roles/alloy/vars/Debian.yml new file mode 100644 index 00000000..67a544cc --- /dev/null +++ b/roles/alloy/vars/Debian.yml @@ -0,0 +1,2 @@ +--- +__alloy_env_file: "/etc/default/alloy" diff --git a/roles/alloy/vars/RedHat.yml b/roles/alloy/vars/RedHat.yml new file mode 100644 index 00000000..4bf22251 --- /dev/null +++ b/roles/alloy/vars/RedHat.yml @@ -0,0 +1,2 @@ +--- +__alloy_env_file: "/etc/sysconfig/alloy" diff --git a/roles/alloy/vars/main.yml b/roles/alloy/vars/main.yml index ab47eb2c..1f6e3685 100644 --- a/roles/alloy/vars/main.yml +++ b/roles/alloy/vars/main.yml @@ -1,2 +1,9 @@ -# Server http address, used in self health check after start -_alloy_healthcheck_endpoint: "http://{{ alloy_flags_extra['server.http.listen-addr'] if alloy_flags_extra['server.http.listen-addr'] is defined else '127.0.0.1:12345' }}/-/ready" +--- +__alloy_server_http_listen_address: 127.0.0.1 +__alloy_server_http_listen_port: 12345 +__alloy_arch_map: + x86_64: 'amd64' + armv6l: 'arm' + armv7l: 'arm' + aarch64: 'arm64' +__alloy_arch: "{{ __alloy_arch_map[ansible_architecture] | default(ansible_architecture) }}" diff --git a/roles/grafana/README.md b/roles/grafana/README.md index 4b49f6a4..c4a37311 100644 --- a/roles/grafana/README.md +++ b/roles/grafana/README.md @@ -64,6 +64,7 @@ All variables which can be overridden are stored in [defaults/main.yml](defaults | `grafana_datasources` | [] | List of datasources which should be configured | | `grafana_environment` | {} | Optional Environment param for Grafana installation, useful ie for setting http_proxy | | `grafana_plugins` | [] | List of Grafana plugins which should be installed | +| `grafana_plugins_ops` | {} | [plugins](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#plugins-1) configuration section | | `grafana_alert_notifications` | [] | List of alert notification channels to be created, updated, or deleted | Data source example: diff --git a/roles/grafana/defaults/main.yml b/roles/grafana/defaults/main.yml index 958fc4c0..7fadbd7b 100644 --- a/roles/grafana/defaults/main.yml +++ b/roles/grafana/defaults/main.yml @@ -239,10 +239,15 @@ grafana_feature_toggles: {} # regressionTransformation: true ####### -# Plugins from https://grafana.com/plugins +# Plugins to install from https://grafana.com/plugins grafana_plugins: [] # - raintank-worldping-app +####### +# Configuration of plugins ([plugin] section of grafana.ini] +grafana_plugins_ops: {} +# allow_loading_unsigned_plugins: alexanderzobnin-zabbix-datasource + # Dashboards from https://grafana.com/dashboards grafana_dashboards: [] # - dashboard_id: '4271' diff --git a/roles/grafana/tasks/dashboards.yml b/roles/grafana/tasks/dashboards.yml index 3fedb1f4..9f92fa68 100644 --- a/roles/grafana/tasks/dashboards.yml +++ b/roles/grafana/tasks/dashboards.yml @@ -72,7 +72,7 @@ grafana_user: "{{ grafana_security.admin_user }}" grafana_password: "{{ grafana_security.admin_password }}" path: "{{ item }}" - message: "Updated by ansible role {{ ansible_role_name }}" + commit_message: "Updated by ansible role {{ ansible_role_name }}" state: present overwrite: true no_log: "{{ 'false' if lookup('env', 'CI') else 'true' }}" diff --git a/roles/grafana/tasks/notifications.yml b/roles/grafana/tasks/notifications.yml index f08487b4..a09c6094 100644 --- a/roles/grafana/tasks/notifications.yml +++ b/roles/grafana/tasks/notifications.yml @@ -8,7 +8,7 @@ dest: /etc/grafana/provisioning/notification/ansible.yml owner: root group: grafana - mode: 0640 + mode: "0640" become: true notify: restart_grafana when: grafana_use_provisioning and grafana_alert_notifications | length > 0 @@ -22,7 +22,7 @@ dest: /etc/grafana/provisioning/alerting/ansible.yml owner: root group: grafana - mode: 0640 + mode: "0640" become: true notify: restart_grafana when: grafana_use_provisioning and grafana_alert_resources | length > 0 diff --git a/roles/grafana/templates/grafana.ini.j2 b/roles/grafana/templates/grafana.ini.j2 index 0abcbdf3..9a39b7e8 100644 --- a/roles/grafana/templates/grafana.ini.j2 +++ b/roles/grafana/templates/grafana.ini.j2 @@ -38,7 +38,7 @@ root_url = {{ grafana_url }} {% endfor %} # Plugins -{% if grafana_plugins_ops is defined %} +{% if grafana_plugins_ops != {} %} [plugins] {% for k,v in grafana_plugins_ops.items() %} {{ k }} = {{ v }} @@ -105,6 +105,10 @@ reporting_enabled = "{{ grafana_analytics.reporting_enabled | default(True) }}" google_analytics_ua_id = "{{ grafana_analytics.google_analytics_ua_id }}" {% endif %} +{% if grafana_analytics.google_analytics_4_id is defined and grafana_analytics.google_analytics_4_id != '' %} +google_analytics_4_id = "{{ grafana_analytics.google_analytics_4_id }}" +{% endif %} + # Dashboards [dashboards] versions_to_keep = 20 diff --git a/roles/loki/README.md b/roles/loki/README.md index 73ee9955..32b69488 100644 --- a/roles/loki/README.md +++ b/roles/loki/README.md @@ -6,7 +6,7 @@ The Ansible Loki Role allows you to effortlessly deploy and manage [Loki](https: **๐Ÿ”‘ Key Features** - **๐Ÿ“ฆ Out-of-the-box Deployment**: Get Loki up and running quickly with default configurations. -- **๐Ÿงน Effortless Uninstall**: Easily remove Loki from your system using the "loki_uninstall" tag. +- **๐Ÿงน Effortless Uninstall**: Easily remove Loki from your system setting the "loki_uninstall" variable. - **๐Ÿ”” Example Alerting Rules**: Benefit from the included sample Ruler configuration. Utilize the provided example alerting rules as a reference guide for structuring your own rules effectively. ## Table of Content @@ -32,8 +32,15 @@ The Ansible Loki Role allows you to effortlessly deploy and manage [Loki](https: ```yaml loki_version: "latest" ``` + The version of Loki to download and deploy. Supported standard version "3.0.0" format or "latest". +```yaml +loki_uninstall: "false" +``` + +If set to `true` will perfom uninstall instead of deployment. + ```yaml loki_http_listen_port: 3100 ``` @@ -226,7 +233,7 @@ Below variables allow you to extend Loki configuration to fit your needs. Always ansible-playbook -i inventory/hosts playbook/function_loki_play.yml # Uninstall -ansible-playbook -i inventory/hosts playbook/function_loki_play.yml -t loki_uninstall +ansible-playbook -i inventory/hosts playbook/function_loki_play.yml -e "loki_uninstall=true" ``` ## License diff --git a/roles/loki/defaults/main.yml b/roles/loki/defaults/main.yml index ee712bb2..27072242 100644 --- a/roles/loki/defaults/main.yml +++ b/roles/loki/defaults/main.yml @@ -1,6 +1,7 @@ --- # defaults file for loki loki_version: "latest" +loki_uninstall: false loki_http_listen_port: 3100 loki_http_listen_address: "0.0.0.0" loki_expose_port: false diff --git a/roles/loki/handlers/main.yml b/roles/loki/handlers/main.yml index b2326ec6..76104495 100644 --- a/roles/loki/handlers/main.yml +++ b/roles/loki/handlers/main.yml @@ -7,3 +7,4 @@ name: loki.service state: restarted enabled: true + when: not ansible_check_mode diff --git a/roles/loki/tasks/deploy.yml b/roles/loki/tasks/deploy.yml index 65ecaf6f..697cd5d3 100644 --- a/roles/loki/tasks/deploy.yml +++ b/roles/loki/tasks/deploy.yml @@ -12,6 +12,7 @@ become: false delegate_to: localhost run_once: true + check_mode: false register: __github_latest_version - name: Latest available Loki version @@ -134,6 +135,7 @@ ansible.builtin.systemd: name: loki.service state: started + when: not ansible_check_mode - name: Verify that Loki URL is responding ansible.builtin.uri: @@ -143,4 +145,6 @@ retries: 5 delay: 8 until: loki_verify_url_status_code.status == 200 - when: loki_expose_port | bool + when: + - loki_expose_port | bool + - not ansible_check_mode diff --git a/roles/loki/tasks/main.yml b/roles/loki/tasks/main.yml index 4e0bb741..bb87e157 100644 --- a/roles/loki/tasks/main.yml +++ b/roles/loki/tasks/main.yml @@ -7,17 +7,9 @@ - name: Deploy Loki service ansible.builtin.include_tasks: file: "deploy.yml" - apply: - tags: loki_deploy - tags: loki_deploy + when: not loki_uninstall - name: Uninstall Loki service ansible.builtin.include_tasks: file: "uninstall.yml" - apply: - tags: - - loki_uninstall - - never - tags: - - loki_uninstall - - never + when: loki_uninstall diff --git a/roles/loki/vars/Debian.yml b/roles/loki/vars/Debian.yml index b211affe..7aa0ed1f 100644 --- a/roles/loki/vars/Debian.yml +++ b/roles/loki/vars/Debian.yml @@ -1,5 +1,8 @@ --- __loki_arch_map: x86_64: 'amd64' + armv6l: 'arm' + armv7l: 'arm' + aarch64: 'arm64' __loki_arch: "{{ __loki_arch_map[ansible_architecture] | default(ansible_architecture) }}" diff --git a/roles/mimir/README.md b/roles/mimir/README.md index aac0c1e4..a1006a8f 100644 --- a/roles/mimir/README.md +++ b/roles/mimir/README.md @@ -25,7 +25,7 @@ source .venv/bin/activate .\.venv\Scripts\activate # Install dependencies -pip3 install molecule molecule-plugins[docker] docker pytest-testinfra jmespath selinux passlib +pip3 install ansible-core==2.16 'molecule-plugins[docker]' pytest-testinfra jmespath selinux passlib # Create molecule network docker network create molecule @@ -49,12 +49,12 @@ docker run -d \ ### Testing the changes To test the changes in a role run: ```sh -molecule converge -## example: molecule converge +molecule converge +## example: molecule converge ``` When Ansible has succesfully ran, you can run assertions against your infrastructure using. ```sh -molecule verify +molecule verify ## example: `molecule verify` ``` @@ -65,6 +65,7 @@ You can also run commands like `molecule destroy`, `molecule prepare`, and `mole | Name | Type | Default | Description | |---|---|---|---| mimir_working_path|str|/usr/share/mimir|Used to specify the directory path where Mimir, a component of the Grafana Agent, stores its working files and temporary data.| +mimir_uninstall|bool|false|If set to `true` will perfom uninstall instead of deployment.| mimir_ruler_alert_path|str|/data/ruler|Used to specify the directory path where the Mimir ruler component of the Grafana Agent stores its alert files.| mimir_http_listen_port|str|8080|Used to specify the port number on which the Mimir component of the Grafana Agent listens for incoming HTTP requests.| mimir_http_listen_address|str|0.0.0.0|Used to specify the network address on which the Mimir component of the Grafana Agent listens for incoming HTTP requests.| diff --git a/roles/mimir/defaults/main.yml b/roles/mimir/defaults/main.yml index 40ab730e..afd6dbdc 100644 --- a/roles/mimir/defaults/main.yml +++ b/roles/mimir/defaults/main.yml @@ -1,6 +1,7 @@ --- # defaults file for mimir mimir_version: "latest" +mimir_uninstall: false __mimir_arch: "{{ arch_mapping[ansible_architecture] | default('amd64') }}" mimir_download_url_rpm: "https://github.com/grafana/mimir/releases/download/{{ mimir_version }}/{{ mimir_version }}_{{ __mimir_arch }}.rpm" mimir_download_url_deb: "https://github.com/grafana/mimir/releases/download/{{ mimir_version }}/{{ mimir_version }}_{{ __mimir_arch }}.deb" diff --git a/roles/mimir/molecule/test-requirements.txt b/roles/mimir/molecule/test-requirements.txt deleted file mode 100644 index af58c110..00000000 --- a/roles/mimir/molecule/test-requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -molecule -docker -pytest-testinfra -jmespath -selinux -passlib diff --git a/roles/mimir/tasks/main.yml b/roles/mimir/tasks/main.yml index 880c6e5a..4e4e8c7a 100644 --- a/roles/mimir/tasks/main.yml +++ b/roles/mimir/tasks/main.yml @@ -1,17 +1,9 @@ - name: Deploy Mimir service ansible.builtin.include_tasks: file: "deploy.yml" - apply: - tags: mimir_deploy - tags: mimir_deploy + when: not mimir_uninstall - name: Uninstall Mimir service ansible.builtin.include_tasks: file: "uninstall.yml" - apply: - tags: - - mimir_uninstall - - never - tags: - - mimir_uninstall - - never + when: mimir_uninstall diff --git a/roles/opentelemetry_collector/handlers/main.yml b/roles/opentelemetry_collector/handlers/main.yml index b5bbf355..ac8fa586 100644 --- a/roles/opentelemetry_collector/handlers/main.yml +++ b/roles/opentelemetry_collector/handlers/main.yml @@ -3,3 +3,4 @@ name: "{{ otel_collector_service_name }}" state: restarted become: true + ignore_errors: '{{ ansible_check_mode | bool }}' diff --git a/roles/opentelemetry_collector/tasks/install.yml b/roles/opentelemetry_collector/tasks/install.yml index 0e4e87b9..8a814dd2 100644 --- a/roles/opentelemetry_collector/tasks/install.yml +++ b/roles/opentelemetry_collector/tasks/install.yml @@ -54,3 +54,4 @@ remote_src: yes become: true register: extract_result + when: not ansible_check_mode diff --git a/roles/opentelemetry_collector/tasks/service.yml b/roles/opentelemetry_collector/tasks/service.yml index 6de6e8fe..a0d180b7 100644 --- a/roles/opentelemetry_collector/tasks/service.yml +++ b/roles/opentelemetry_collector/tasks/service.yml @@ -17,3 +17,4 @@ enabled: yes state: started become: true + ignore_errors: '{{ ansible_check_mode | bool }}' diff --git a/roles/promtail/README.md b/roles/promtail/README.md index 1fbcb550..3efb5a6a 100644 --- a/roles/promtail/README.md +++ b/roles/promtail/README.md @@ -7,7 +7,7 @@ This role is tailored for operating systems such as **RedHat**, **Rocky Linux**, **๐Ÿ”‘ Key Features** - **โšก Root-less/Root runtime**: By default, Promtail operates in root-less mode, utilizing ACL (Access Control List) to securely access logs without requiring root permissions. You have the option to configure root mode if necessary. -- **๐Ÿงน Effortless Uninstall**: Easily remove Promtail from your system using the "promtail_uninstall" tag. +- **๐Ÿงน Effortless Uninstall**: Easily remove Promtail from your system setting the "promtail_uninstall" variable. ๐Ÿ“ข **[Check the blog post](https://voidquark.com/blog/rootless-promtail-with-ansible/)** ๐Ÿ“ **Learn more about root-less mode.** @@ -28,6 +28,12 @@ promtail_version: "latest" ``` The version of Promtail to download and deploy. Supported standard version "3.0.0" format or "latest". +```yaml +promtail_uninstall: "false" +``` + +If set to `true` will perfom uninstall instead of deployment. + ```yaml promtail_http_listen_port: 9080 ``` @@ -55,6 +61,11 @@ By default, Promtail runs in root-less mode. It supports two modes: - `acl`: Root-less mode, utilizing ACL permission model to read target log files. - `root`: Root mode, where Promtail runs as root and ACL configuration is skipped. +```yaml +promtail_extra_flags: [] +``` +Additional flags to be passed to the Promtail systemd unit. + ```yaml promtail_user_append_groups: - "systemd-journal" @@ -152,7 +163,7 @@ No Dependencies ansible-playbook function_promtail_play.yml # Uninstall Promtail -ansible-playbook function_promtail_play.yml -t promtail_uninstall +ansible-playbook function_promtail_play.yml -e "promtail_uninstall=true" ``` ## License diff --git a/roles/promtail/defaults/main.yml b/roles/promtail/defaults/main.yml index 277037bf..e6fa82ef 100644 --- a/roles/promtail/defaults/main.yml +++ b/roles/promtail/defaults/main.yml @@ -1,11 +1,16 @@ --- # defaults file for promtail promtail_version: "latest" +promtail_uninstall: false promtail_http_listen_port: 9080 promtail_http_listen_address: "0.0.0.0" promtail_expose_port: false promtail_positions_path: "/var/lib/promtail" promtail_runtime_mode: "acl" # Supported "root" or "acl" +promtail_extra_flags: [] +# promtail_extra_flags: +# - "-server.enable-runtime-reload" +# - "-config.expand-env=true" promtail_user_append_groups: - "systemd-journal" diff --git a/roles/promtail/handlers/main.yml b/roles/promtail/handlers/main.yml index d9f17243..27134f33 100644 --- a/roles/promtail/handlers/main.yml +++ b/roles/promtail/handlers/main.yml @@ -7,3 +7,4 @@ name: promtail.service state: restarted enabled: true + when: not ansible_check_mode diff --git a/roles/promtail/tasks/deploy.yml b/roles/promtail/tasks/deploy.yml index 483a9b1b..4ae94e9e 100644 --- a/roles/promtail/tasks/deploy.yml +++ b/roles/promtail/tasks/deploy.yml @@ -12,6 +12,7 @@ become: false delegate_to: localhost run_once: true + check_mode: false register: __github_latest_version - name: Latest available Promtail version @@ -58,7 +59,7 @@ owner: "promtail" group: "root" mode: "0644" - validate: "/usr/bin/promtail -check-syntax -config.file %s" + validate: "/usr/bin/promtail -config.expand-env=true -check-syntax -config.file %s" notify: restart promtail - name: Template Promtail systemd - /etc/systemd/system/promtail.service @@ -89,6 +90,7 @@ when: - promtail_scrape_configs | length > 0 - promtail_runtime_mode == "acl" + - not ansible_check_mode - name: Get firewalld state ansible.builtin.systemd: @@ -112,6 +114,7 @@ ansible.builtin.systemd: name: promtail.service state: started + when: not ansible_check_mode - name: Stat position file ansible.builtin.stat: @@ -136,4 +139,6 @@ retries: 5 delay: 8 until: promtail_verify_url_status_code.status == 200 - when: promtail_expose_port | bool + when: + - promtail_expose_port | bool + - not ansible_check_mode diff --git a/roles/promtail/tasks/main.yml b/roles/promtail/tasks/main.yml index 11bfdbf1..145db0c1 100644 --- a/roles/promtail/tasks/main.yml +++ b/roles/promtail/tasks/main.yml @@ -7,17 +7,9 @@ - name: Deploy Promtail service ansible.builtin.include_tasks: file: "deploy.yml" - apply: - tags: promtail_deploy - tags: promtail_deploy + when: not promtail_uninstall - name: Uninstall Promtail service ansible.builtin.include_tasks: file: "uninstall.yml" - apply: - tags: - - promtail_uninstall - - never - tags: - - promtail_uninstall - - never + when: promtail_uninstall diff --git a/roles/promtail/templates/promtail.service.j2 b/roles/promtail/templates/promtail.service.j2 index 6dc8384d..3d614499 100644 --- a/roles/promtail/templates/promtail.service.j2 +++ b/roles/promtail/templates/promtail.service.j2 @@ -9,7 +9,13 @@ User=promtail {% elif promtail_runtime_mode == "root" %} User=root {% endif %} -ExecStart=/usr/bin/promtail -config.file /etc/promtail/config.yml +ExecStart=/usr/bin/promtail \ +{% if promtail_extra_flags | length > 0 %} +{% for flag in promtail_extra_flags %} + {{ flag }} \ +{% endfor %} +{% endif %} + -config.file /etc/promtail/config.yml TimeoutSec = 60 Restart = on-failure diff --git a/roles/promtail/vars/Debian.yml b/roles/promtail/vars/Debian.yml index f9d41b28..f7471e1e 100644 --- a/roles/promtail/vars/Debian.yml +++ b/roles/promtail/vars/Debian.yml @@ -1,5 +1,8 @@ --- __promtail_arch_map: x86_64: 'amd64' + armv6l: 'arm' + armv7l: 'arm' + aarch64: 'arm64' __promtail_arch: "{{ __promtail_arch_map[ansible_architecture] | default(ansible_architecture) }}"