diff --git a/.ansible-lint b/.ansible-lint new file mode 100644 index 0000000..8a1f80b --- /dev/null +++ b/.ansible-lint @@ -0,0 +1,11 @@ +--- +kinds: + - playbook: "./aws_*.yml" +offline: true +skip_list: + - ignore-errors + - meta-no-info + - name[casing] # so many of our task names aren't capitalized + - name[missing] # some tasks have no name + - risky-file-permissions + - yaml # many, many warnings diff --git a/.config/molecule/config.yml b/.config/molecule/config.yml new file mode 100644 index 0000000..b732dc8 --- /dev/null +++ b/.config/molecule/config.yml @@ -0,0 +1,4 @@ +--- +dependency: + enabled: false +prerun: false diff --git a/.gitignore b/.gitignore index 453a538..b1c3798 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ __pycache__ .envrc .idea .vscode +ansible_collections \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..ed53cba --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,36 @@ +--- +default_install_hook_types: [pre-commit, prepare-commit-msg] +default_stages: [pre-commit] +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: check-executables-have-shebangs + - id: check-merge-conflict + - id: check-yaml + - id: detect-private-key + exclude: '(vault.yml.template|filter_catalina.yaml.j2)' + - id: trailing-whitespace + - repo: https://github.com/avilaton/add-msg-issue-prefix-hook + rev: v0.0.11 + hooks: + - id: add-msg-issue-prefix + args: + - --template={} + - --pattern=[a-zA-Z0-9]{1,10}-[0-9]{1,6} + - repo: https://github.com/ansible/ansible-lint.git + rev: v24.2.2 + hooks: + - id: ansible-lint + additional_dependencies: + - . + - ansible-core==2.16.6 + - jmespath + language_version: python3.11 + - repo: https://github.com/IamTheFij/ansible-pre-commit.git + rev: v0.1.2 + hooks: + - id: encryption-check + always_run: true + files: vault.ya?ml$ + diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 2f75c73..14e3b9a 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1,8 +1,7 @@ ## Prerequisites You should have the following software installed: -* Python; 3.x by preference, but 2.7 works. - * You may also need the Python development packages depending on how it’s installed. +* Python; 3.10 or newer (you may also need the Python development packages depending on how it’s installed) * Python Virtualenv * Docker * Cloudtoken @@ -17,23 +16,24 @@ All other requirements will be installed under Virtualenv. ### Step 1.2: Install development environment dependencies -To ensure compatibility we specify a specific Ansible version; currently 2.7.11 -(some older versions had issues with RDS). We do this with -[Pipenv](https://docs.pipenv.org/) to lock the dependency tree. There are 2 main -ways to do this; either directly if packaged, or via pip... +To ensure compatibility we specify a specific Ansible version; currently +ansible-core 2.16.x. We do this with [Pipenv](https://docs.pipenv.org/) to lock +the dependency tree. There are 2 main ways to do this; either directly if +packaged, or via pip... - # Ubuntu 19.04+, Debian 10+ - sudo apt-get install pipenv python-dev + # Ubuntu 22.04+, Debian 12+ + sudo apt-get install python3-dev python3-pip pipenv - # Older versions & RHEL/Amazon Linux, etc. - sudo apt-get install -y python-pip python-dev - # Or... - sudo yum install -y python-pip python-dev - - pip install pipenv + # Amazon Linux 2023 + sudo dnf install python3.11 python3.11-pip python3.11-devel + pip3.11 install pipenv # Mac via Homebrew - brew install pipenv + brew install libpq openssl@3 python@X.x # (where "X.x") is 3.1 or newer + export PATH="/opt/homebrew/opt/libpq/bin:$PATH" + export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib" + export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include" + pip3 install pipenv ### Step 1.3: Enter the development environment @@ -44,11 +44,21 @@ development environment: pipenv sync --dev pipenv shell --dev -### Step 1.4: Run some tests against a role +### Step 1.4: Install Ansible collections -[Molecule](https://molecule.readthedocs.io/en/stable/) is a testing framework for Ansible. We use this to test the -functionality of individual and groups of roles, and to ensure cross-platform -compatibility (currently Amazon Linux 2 and Ubuntu LTS). +To save a little time during deployment, we rely directly on ansible-core and a +custom set of collections as opposed to installing the community edition. To that +end, when testing locally, you'll need these collections installed where Ansible +expects them to be; that path is configured ansible.cfg and used automatically +when collections are installed via `ansible-galaxy`: + + ansible-galaxy collection install --upgrade --verbose --requirements-file requirements.yml + +### Step 1.5: Run some tests against a role + +[Molecule](https://molecule.readthedocs.io/en/stable/) is a testing framework for +Ansible. We use this to test the functionality of individual and groups of roles, +and to ensure cross-platform compatibility (currently Amazon Linux 2023 and Ubuntu LTS). We’re going to check that the role that downloads the products works for both Jira Core and Confluence, on boths supported Linux distributions. So run the diff --git a/Pipfile b/Pipfile index 723d5d3..9399d78 100644 --- a/Pipfile +++ b/Pipfile @@ -4,17 +4,21 @@ verify_ssl = true name = "pypi" [packages] -ansible = "==2.10.7" -boto3 = "==1.17.49" -botocore = "==1.20.49" +ansible-core = "==2.16.6" +cryptography = "==42.0.5" +boto3 = "==1.34.92" +botocore = "==1.34.92" +lxml = "==5.2.1" +psycopg2-binary = "==2.9.9" [dev-packages] -molecule = "==3.2.2" -molecule-docker = "==0.2.4" -docker = "==4.4.1" -taskcat = "*" +molecule = "==24.2.1" +molecule-docker = "==2.1.0" +molecule-plugins = {extras = ["docker"], version = "==23.5.3"} +ansible-compat = "==4.1.11" +docker = "==7.0.0" pytest = "*" -testinfra = "*" +pytest-testinfra = "*" [requires] -python_version = "3.7" +python_version = "3" diff --git a/Pipfile.lock b/Pipfile.lock index 5d77427..4077ac3 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "4cc5161ca039ac884905a5453c2aee0c4686c0ece78f1edffd4d8ebad812bcce" + "sha256": "eca49b0029b37de0c36edcec235eb7b64711c75fc21c84f9ee9f5a601579f5fc" }, "pipfile-spec": 6, "requires": { - "python_version": "3.7" + "python_version": "3" }, "sources": [ { @@ -16,1009 +16,1251 @@ ] }, "default": { - "ansible": { + "ansible-core": { "hashes": [ - "sha256:9ff024500116d53c460cb09ea92e3c9404119f100d1d1ff0de69a9dafca561d5" + "sha256:111e55d358c2297ec0ce03ba98e6c5ce95947fdf50d878215eb8c183d0c275e4", + "sha256:f9dea5044a86fd95cc27099f4f5c3ae9beb23acf7c3b6331455726c47825922b" ], "index": "pypi", - "version": "==2.10.7" - }, - "ansible-base": { - "hashes": [ - "sha256:f45df824051339d8bec32d7ab4e9e676498c05e2d9cfce6d54c9698a577e15e2" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.10.8" + "markers": "python_version >= '3.10'", + "version": "==2.16.6" }, "boto3": { "hashes": [ - "sha256:a482135c30fa07eaf4370314dd0fb49117222a266d0423b2075aed3835ed1f04", - "sha256:d5ef160442925f5944e4cde88589f0f195f6c284f05613114fc6bbc35e342fa7" + "sha256:684cba753d64978a486e8ea9645d53de0d4e3b4a3ab1495b26bd04b9541cea2d", + "sha256:db7bbb1c6059e99b74dcf634e497b04addcac4c527ae2b2696e47c39eccc6c50" ], "index": "pypi", - "version": "==1.17.49" + "markers": "python_version >= '3.8'", + "version": "==1.34.92" }, "botocore": { "hashes": [ - "sha256:6a672ba41dd00e5c1c1824ca8143d180d88de8736d78c0b1f96b8d3cb0466561", - "sha256:f7f103fa0651c69dd360c7d0ecd874854303de5cc0869e0cbc2818a52baacc69" + "sha256:4211a22a1f6c6935e70cbb84c2cd93b29f9723eaf5036d59748dd104f389a681", + "sha256:d1ca4886271f184445ec737cd2e752498648cca383887c5a37b2e01c8ab94039" ], "index": "pypi", - "version": "==1.20.49" + "markers": "python_version >= '3.8'", + "version": "==1.34.92" }, "cffi": { "hashes": [ - "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813", - "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06", - "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea", - "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee", - "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396", - "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73", - "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315", - "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1", - "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49", - "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892", - "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482", - "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058", - "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5", - "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53", - "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045", - "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3", - "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5", - "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e", - "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c", - "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369", - "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827", - "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053", - "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa", - "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4", - "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322", - "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132", - "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62", - "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa", - "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0", - "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396", - "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e", - "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991", - "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6", - "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1", - "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406", - "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d", - "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c" + "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" ], - "version": "==1.14.5" + "markers": "platform_python_implementation != 'PyPy'", + "version": "==1.16.0" }, "cryptography": { "hashes": [ - "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d", - "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959", - "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6", - "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873", - "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2", - "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713", - "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1", - "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177", - "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250", - "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca", - "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d", - "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9" + "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee", + "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576", + "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d", + "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30", + "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413", + "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb", + "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da", + "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4", + "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd", + "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc", + "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8", + "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1", + "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc", + "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e", + "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8", + "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940", + "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400", + "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7", + "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16", + "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278", + "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74", + "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec", + "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1", + "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2", + "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c", + "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922", + "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a", + "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6", + "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1", + "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e", + "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac", + "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7" ], - "markers": "python_version >= '3.6'", - "version": "==3.4.7" + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==42.0.5" }, "jinja2": { "hashes": [ - "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", - "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" + "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa", + "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.11.3" + "markers": "python_version >= '3.7'", + "version": "==3.1.3" }, "jmespath": { "hashes": [ - "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9", - "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f" + "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", + "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe" ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.0" + "markers": "python_version >= '3.7'", + "version": "==1.0.1" + }, + "lxml": { + "hashes": [ + "sha256:04ab5415bf6c86e0518d57240a96c4d1fcfc3cb370bb2ac2a732b67f579e5a04", + "sha256:057cdc6b86ab732cf361f8b4d8af87cf195a1f6dc5b0ff3de2dced242c2015e0", + "sha256:058a1308914f20784c9f4674036527e7c04f7be6fb60f5d61353545aa7fcb739", + "sha256:08802f0c56ed150cc6885ae0788a321b73505d2263ee56dad84d200cab11c07a", + "sha256:0a15438253b34e6362b2dc41475e7f80de76320f335e70c5528b7148cac253a1", + "sha256:0c3f67e2aeda739d1cc0b1102c9a9129f7dc83901226cc24dd72ba275ced4218", + "sha256:0e7259016bc4345a31af861fdce942b77c99049d6c2107ca07dc2bba2435c1d9", + "sha256:0ed777c1e8c99b63037b91f9d73a6aad20fd035d77ac84afcc205225f8f41188", + "sha256:0f5d65c39f16717a47c36c756af0fb36144069c4718824b7533f803ecdf91138", + "sha256:0f8c09ed18ecb4ebf23e02b8e7a22a05d6411911e6fabef3a36e4f371f4f2585", + "sha256:11a04306fcba10cd9637e669fd73aa274c1c09ca64af79c041aa820ea992b637", + "sha256:1ae67b4e737cddc96c99461d2f75d218bdf7a0c3d3ad5604d1f5e7464a2f9ffe", + "sha256:1c5bb205e9212d0ebddf946bc07e73fa245c864a5f90f341d11ce7b0b854475d", + "sha256:1f7785f4f789fdb522729ae465adcaa099e2a3441519df750ebdccc481d961a1", + "sha256:200e63525948e325d6a13a76ba2911f927ad399ef64f57898cf7c74e69b71095", + "sha256:21c2e6b09565ba5b45ae161b438e033a86ad1736b8c838c766146eff8ceffff9", + "sha256:2213afee476546a7f37c7a9b4ad4d74b1e112a6fafffc9185d6d21f043128c81", + "sha256:27aa20d45c2e0b8cd05da6d4759649170e8dfc4f4e5ef33a34d06f2d79075d57", + "sha256:2a66bf12fbd4666dd023b6f51223aed3d9f3b40fef06ce404cb75bafd3d89536", + "sha256:2c9d147f754b1b0e723e6afb7ba1566ecb162fe4ea657f53d2139bbf894d050a", + "sha256:2ddfe41ddc81f29a4c44c8ce239eda5ade4e7fc305fb7311759dd6229a080052", + "sha256:31e9a882013c2f6bd2f2c974241bf4ba68c85eba943648ce88936d23209a2e01", + "sha256:3249cc2989d9090eeac5467e50e9ec2d40704fea9ab72f36b034ea34ee65ca98", + "sha256:3545039fa4779be2df51d6395e91a810f57122290864918b172d5dc7ca5bb433", + "sha256:394ed3924d7a01b5bd9a0d9d946136e1c2f7b3dc337196d99e61740ed4bc6fe1", + "sha256:3a6b45da02336895da82b9d472cd274b22dc27a5cea1d4b793874eead23dd14f", + "sha256:3a74c4f27167cb95c1d4af1c0b59e88b7f3e0182138db2501c353555f7ec57f4", + "sha256:3d0c3dd24bb4605439bf91068598d00c6370684f8de4a67c2992683f6c309d6b", + "sha256:3dbe858ee582cbb2c6294dc85f55b5f19c918c2597855e950f34b660f1a5ede6", + "sha256:3dc773b2861b37b41a6136e0b72a1a44689a9c4c101e0cddb6b854016acc0aa8", + "sha256:3e183c6e3298a2ed5af9d7a356ea823bccaab4ec2349dc9ed83999fd289d14d5", + "sha256:3f7765e69bbce0906a7c74d5fe46d2c7a7596147318dbc08e4a2431f3060e306", + "sha256:417d14450f06d51f363e41cace6488519038f940676ce9664b34ebf5653433a5", + "sha256:44f6c7caff88d988db017b9b0e4ab04934f11e3e72d478031efc7edcac6c622f", + "sha256:491755202eb21a5e350dae00c6d9a17247769c64dcf62d8c788b5c135e179dc4", + "sha256:4951e4f7a5680a2db62f7f4ab2f84617674d36d2d76a729b9a8be4b59b3659be", + "sha256:52421b41ac99e9d91934e4d0d0fe7da9f02bfa7536bb4431b4c05c906c8c6919", + "sha256:530e7c04f72002d2f334d5257c8a51bf409db0316feee7c87e4385043be136af", + "sha256:533658f8fbf056b70e434dff7e7aa611bcacb33e01f75de7f821810e48d1bb66", + "sha256:5670fb70a828663cc37552a2a85bf2ac38475572b0e9b91283dc09efb52c41d1", + "sha256:56c22432809085b3f3ae04e6e7bdd36883d7258fcd90e53ba7b2e463efc7a6af", + "sha256:58278b29cb89f3e43ff3e0c756abbd1518f3ee6adad9e35b51fb101c1c1daaec", + "sha256:588008b8497667f1ddca7c99f2f85ce8511f8f7871b4a06ceede68ab62dff64b", + "sha256:59565f10607c244bc4c05c0c5fa0c190c990996e0c719d05deec7030c2aa8289", + "sha256:59689a75ba8d7ffca577aefd017d08d659d86ad4585ccc73e43edbfc7476781a", + "sha256:5aea8212fb823e006b995c4dda533edcf98a893d941f173f6c9506126188860d", + "sha256:5c670c0406bdc845b474b680b9a5456c561c65cf366f8db5a60154088c92d102", + "sha256:5ca1e8188b26a819387b29c3895c47a5e618708fe6f787f3b1a471de2c4a94d9", + "sha256:5d077bc40a1fe984e1a9931e801e42959a1e6598edc8a3223b061d30fbd26bbc", + "sha256:5d5792e9b3fb8d16a19f46aa8208987cfeafe082363ee2745ea8b643d9cc5b45", + "sha256:5dd1537e7cc06efd81371f5d1a992bd5ab156b2b4f88834ca852de4a8ea523fa", + "sha256:5ea7b6766ac2dfe4bcac8b8595107665a18ef01f8c8343f00710b85096d1b53a", + "sha256:622020d4521e22fb371e15f580d153134bfb68d6a429d1342a25f051ec72df1c", + "sha256:627402ad8dea044dde2eccde4370560a2b750ef894c9578e1d4f8ffd54000461", + "sha256:644df54d729ef810dcd0f7732e50e5ad1bd0a135278ed8d6bcb06f33b6b6f708", + "sha256:64641a6068a16201366476731301441ce93457eb8452056f570133a6ceb15fca", + "sha256:64c2baa7774bc22dd4474248ba16fe1a7f611c13ac6123408694d4cc93d66dbd", + "sha256:6588c459c5627fefa30139be4d2e28a2c2a1d0d1c265aad2ba1935a7863a4913", + "sha256:66bc5eb8a323ed9894f8fa0ee6cb3e3fb2403d99aee635078fd19a8bc7a5a5da", + "sha256:68a2610dbe138fa8c5826b3f6d98a7cfc29707b850ddcc3e21910a6fe51f6ca0", + "sha256:6935bbf153f9a965f1e07c2649c0849d29832487c52bb4a5c5066031d8b44fd5", + "sha256:6992030d43b916407c9aa52e9673612ff39a575523c5f4cf72cdef75365709a5", + "sha256:6a014510830df1475176466b6087fc0c08b47a36714823e58d8b8d7709132a96", + "sha256:6ab833e4735a7e5533711a6ea2df26459b96f9eec36d23f74cafe03631647c41", + "sha256:6cc6ee342fb7fa2471bd9b6d6fdfc78925a697bf5c2bcd0a302e98b0d35bfad3", + "sha256:6cf58416653c5901e12624e4013708b6e11142956e7f35e7a83f1ab02f3fe456", + "sha256:70a9768e1b9d79edca17890175ba915654ee1725975d69ab64813dd785a2bd5c", + "sha256:70ac664a48aa64e5e635ae5566f5227f2ab7f66a3990d67566d9907edcbbf867", + "sha256:71e97313406ccf55d32cc98a533ee05c61e15d11b99215b237346171c179c0b0", + "sha256:7221d49259aa1e5a8f00d3d28b1e0b76031655ca74bb287123ef56c3db92f213", + "sha256:74b28c6334cca4dd704e8004cba1955af0b778cf449142e581e404bd211fb619", + "sha256:764b521b75701f60683500d8621841bec41a65eb739b8466000c6fdbc256c240", + "sha256:78bfa756eab503673991bdcf464917ef7845a964903d3302c5f68417ecdc948c", + "sha256:794f04eec78f1d0e35d9e0c36cbbb22e42d370dda1609fb03bcd7aeb458c6377", + "sha256:79bd05260359170f78b181b59ce871673ed01ba048deef4bf49a36ab3e72e80b", + "sha256:7a7efd5b6d3e30d81ec68ab8a88252d7c7c6f13aaa875009fe3097eb4e30b84c", + "sha256:7c17b64b0a6ef4e5affae6a3724010a7a66bda48a62cfe0674dabd46642e8b54", + "sha256:804f74efe22b6a227306dd890eecc4f8c59ff25ca35f1f14e7482bbce96ef10b", + "sha256:853e074d4931dbcba7480d4dcab23d5c56bd9607f92825ab80ee2bd916edea53", + "sha256:857500f88b17a6479202ff5fe5f580fc3404922cd02ab3716197adf1ef628029", + "sha256:865bad62df277c04beed9478fe665b9ef63eb28fe026d5dedcb89b537d2e2ea6", + "sha256:88e22fc0a6684337d25c994381ed8a1580a6f5ebebd5ad41f89f663ff4ec2885", + "sha256:8b9c07e7a45bb64e21df4b6aa623cb8ba214dfb47d2027d90eac197329bb5e94", + "sha256:8de8f9d6caa7f25b204fc861718815d41cbcf27ee8f028c89c882a0cf4ae4134", + "sha256:8e77c69d5892cb5ba71703c4057091e31ccf534bd7f129307a4d084d90d014b8", + "sha256:9123716666e25b7b71c4e1789ec829ed18663152008b58544d95b008ed9e21e9", + "sha256:958244ad566c3ffc385f47dddde4145088a0ab893504b54b52c041987a8c1863", + "sha256:96323338e6c14e958d775700ec8a88346014a85e5de73ac7967db0367582049b", + "sha256:9676bfc686fa6a3fa10cd4ae6b76cae8be26eb5ec6811d2a325636c460da1806", + "sha256:9b0ff53900566bc6325ecde9181d89afadc59c5ffa39bddf084aaedfe3b06a11", + "sha256:9b9ec9c9978b708d488bec36b9e4c94d88fd12ccac3e62134a9d17ddba910ea9", + "sha256:9c6ad0fbf105f6bcc9300c00010a2ffa44ea6f555df1a2ad95c88f5656104817", + "sha256:9ca66b8e90daca431b7ca1408cae085d025326570e57749695d6a01454790e95", + "sha256:9e2addd2d1866fe112bc6f80117bcc6bc25191c5ed1bfbcf9f1386a884252ae8", + "sha256:a0af35bd8ebf84888373630f73f24e86bf016642fb8576fba49d3d6b560b7cbc", + "sha256:a2b44bec7adf3e9305ce6cbfa47a4395667e744097faed97abb4728748ba7d47", + "sha256:a2dfe7e2473f9b59496247aad6e23b405ddf2e12ef0765677b0081c02d6c2c0b", + "sha256:a55ee573116ba208932e2d1a037cc4b10d2c1cb264ced2184d00b18ce585b2c0", + "sha256:a7baf9ffc238e4bf401299f50e971a45bfcc10a785522541a6e3179c83eabf0a", + "sha256:a8d5c70e04aac1eda5c829a26d1f75c6e5286c74743133d9f742cda8e53b9c2f", + "sha256:a91481dbcddf1736c98a80b122afa0f7296eeb80b72344d7f45dc9f781551f56", + "sha256:ab31a88a651039a07a3ae327d68ebdd8bc589b16938c09ef3f32a4b809dc96ef", + "sha256:abc25c3cab9ec7fcd299b9bcb3b8d4a1231877e425c650fa1c7576c5107ab851", + "sha256:adfb84ca6b87e06bc6b146dc7da7623395db1e31621c4785ad0658c5028b37d7", + "sha256:afbbdb120d1e78d2ba8064a68058001b871154cc57787031b645c9142b937a62", + "sha256:afd5562927cdef7c4f5550374acbc117fd4ecc05b5007bdfa57cc5355864e0a4", + "sha256:b070bbe8d3f0f6147689bed981d19bbb33070225373338df755a46893528104a", + "sha256:b0b58fbfa1bf7367dde8a557994e3b1637294be6cf2169810375caf8571a085c", + "sha256:b560e3aa4b1d49e0e6c847d72665384db35b2f5d45f8e6a5c0072e0283430533", + "sha256:b6241d4eee5f89453307c2f2bfa03b50362052ca0af1efecf9fef9a41a22bb4f", + "sha256:b6787b643356111dfd4032b5bffe26d2f8331556ecb79e15dacb9275da02866e", + "sha256:bcbf4af004f98793a95355980764b3d80d47117678118a44a80b721c9913436a", + "sha256:beb72935a941965c52990f3a32d7f07ce869fe21c6af8b34bf6a277b33a345d3", + "sha256:bf2e2458345d9bffb0d9ec16557d8858c9c88d2d11fed53998512504cd9df49b", + "sha256:c2d35a1d047efd68027817b32ab1586c1169e60ca02c65d428ae815b593e65d4", + "sha256:c38d7b9a690b090de999835f0443d8aa93ce5f2064035dfc48f27f02b4afc3d0", + "sha256:c6f2c8372b98208ce609c9e1d707f6918cc118fea4e2c754c9f0812c04ca116d", + "sha256:c817d420c60a5183953c783b0547d9eb43b7b344a2c46f69513d5952a78cddf3", + "sha256:c8ba129e6d3b0136a0f50345b2cb3db53f6bda5dd8c7f5d83fbccba97fb5dcb5", + "sha256:c94e75445b00319c1fad60f3c98b09cd63fe1134a8a953dcd48989ef42318534", + "sha256:cc4691d60512798304acb9207987e7b2b7c44627ea88b9d77489bbe3e6cc3bd4", + "sha256:cc518cea79fd1e2f6c90baafa28906d4309d24f3a63e801d855e7424c5b34144", + "sha256:cd53553ddad4a9c2f1f022756ae64abe16da1feb497edf4d9f87f99ec7cf86bd", + "sha256:cf22b41fdae514ee2f1691b6c3cdeae666d8b7fa9434de445f12bbeee0cf48dd", + "sha256:d38c8f50ecf57f0463399569aa388b232cf1a2ffb8f0a9a5412d0db57e054860", + "sha256:d3be9b2076112e51b323bdf6d5a7f8a798de55fb8d95fcb64bd179460cdc0704", + "sha256:d4f2cc7060dc3646632d7f15fe68e2fa98f58e35dd5666cd525f3b35d3fed7f8", + "sha256:d7520db34088c96cc0e0a3ad51a4fd5b401f279ee112aa2b7f8f976d8582606d", + "sha256:d793bebb202a6000390a5390078e945bbb49855c29c7e4d56a85901326c3b5d9", + "sha256:da052e7962ea2d5e5ef5bc0355d55007407087392cf465b7ad84ce5f3e25fe0f", + "sha256:dae0ed02f6b075426accbf6b2863c3d0a7eacc1b41fb40f2251d931e50188dad", + "sha256:ddc678fb4c7e30cf830a2b5a8d869538bc55b28d6c68544d09c7d0d8f17694dc", + "sha256:df2e6f546c4df14bc81f9498bbc007fbb87669f1bb707c6138878c46b06f6510", + "sha256:e02c5175f63effbd7c5e590399c118d5db6183bbfe8e0d118bdb5c2d1b48d937", + "sha256:e196a4ff48310ba62e53a8e0f97ca2bca83cdd2fe2934d8b5cb0df0a841b193a", + "sha256:e233db59c8f76630c512ab4a4daf5a5986da5c3d5b44b8e9fc742f2a24dbd460", + "sha256:e32be23d538753a8adb6c85bd539f5fd3b15cb987404327c569dfc5fd8366e85", + "sha256:e3d30321949861404323c50aebeb1943461a67cd51d4200ab02babc58bd06a86", + "sha256:e89580a581bf478d8dcb97d9cd011d567768e8bc4095f8557b21c4d4c5fea7d0", + "sha256:e998e304036198b4f6914e6a1e2b6f925208a20e2042563d9734881150c6c246", + "sha256:ec42088248c596dbd61d4ae8a5b004f97a4d91a9fd286f632e42e60b706718d7", + "sha256:efa7b51824aa0ee957ccd5a741c73e6851de55f40d807f08069eb4c5a26b2baa", + "sha256:f0a1bc63a465b6d72569a9bba9f2ef0334c4e03958e043da1920299100bc7c08", + "sha256:f18a5a84e16886898e51ab4b1d43acb3083c39b14c8caeb3589aabff0ee0b270", + "sha256:f2a9efc53d5b714b8df2b4b3e992accf8ce5bbdfe544d74d5c6766c9e1146a3a", + "sha256:f3bbbc998d42f8e561f347e798b85513ba4da324c2b3f9b7969e9c45b10f6169", + "sha256:f42038016852ae51b4088b2862126535cc4fc85802bfe30dea3500fdfaf1864e", + "sha256:f443cdef978430887ed55112b491f670bba6462cea7a7742ff8f14b7abb98d75", + "sha256:f51969bac61441fd31f028d7b3b45962f3ecebf691a510495e5d2cd8c8092dbd", + "sha256:f8aca2e3a72f37bfc7b14ba96d4056244001ddcc18382bd0daa087fd2e68a354", + "sha256:f9737bf36262046213a28e789cc82d82c6ef19c85a0cf05e75c670a33342ac2c", + "sha256:fd6037392f2d57793ab98d9e26798f44b8b4da2f2464388588f48ac52c489ea1", + "sha256:feaa45c0eae424d3e90d78823f3828e7dc42a42f21ed420db98da2c4ecf0a2cb", + "sha256:ff097ae562e637409b429a7ac958a20aab237a0378c42dabaa1e3abf2f896e5f", + "sha256:ff46d772d5f6f73564979cd77a4fffe55c916a05f3cb70e7c9c0590059fb29ef" + ], + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==5.2.1" }, "markupsafe": { "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", - "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f", - "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014", - "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85", - "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850", - "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1", - "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", - "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5", - "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c", - "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", - "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be", - "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621" + "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", + "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", + "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", + "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", + "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", + "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", + "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", + "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", + "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", + "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", + "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", + "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", + "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", + "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", + "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", + "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", + "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", + "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", + "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", + "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", + "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", + "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", + "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", + "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", + "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", + "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", + "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", + "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", + "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", + "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", + "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", + "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", + "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", + "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", + "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", + "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", + "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", + "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", + "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", + "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", + "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", + "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", + "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", + "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", + "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", + "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", + "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", + "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", + "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", + "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", + "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", + "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", + "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", + "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", + "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", + "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", + "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", + "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", + "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", + "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.1.1" + "markers": "python_version >= '3.7'", + "version": "==2.1.5" }, "packaging": { "hashes": [ - "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", - "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a" + "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", + "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.9" + "markers": "python_version >= '3.7'", + "version": "==24.0" + }, + "psycopg2-binary": { + "hashes": [ + "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9", + "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77", + "sha256:0c009475ee389757e6e34611d75f6e4f05f0cf5ebb76c6037508318e1a1e0d7e", + "sha256:0ef4854e82c09e84cc63084a9e4ccd6d9b154f1dbdd283efb92ecd0b5e2b8c84", + "sha256:1236ed0952fbd919c100bc839eaa4a39ebc397ed1c08a97fc45fee2a595aa1b3", + "sha256:143072318f793f53819048fdfe30c321890af0c3ec7cb1dfc9cc87aa88241de2", + "sha256:15208be1c50b99203fe88d15695f22a5bed95ab3f84354c494bcb1d08557df67", + "sha256:1873aade94b74715be2246321c8650cabf5a0d098a95bab81145ffffa4c13876", + "sha256:18d0ef97766055fec15b5de2c06dd8e7654705ce3e5e5eed3b6651a1d2a9a152", + "sha256:1ea665f8ce695bcc37a90ee52de7a7980be5161375d42a0b6c6abedbf0d81f0f", + "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a", + "sha256:246b123cc54bb5361588acc54218c8c9fb73068bf227a4a531d8ed56fa3ca7d6", + "sha256:275ff571376626195ab95a746e6a04c7df8ea34638b99fc11160de91f2fef503", + "sha256:281309265596e388ef483250db3640e5f414168c5a67e9c665cafce9492eda2f", + "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493", + "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996", + "sha256:30dcc86377618a4c8f3b72418df92e77be4254d8f89f14b8e8f57d6d43603c0f", + "sha256:31a34c508c003a4347d389a9e6fcc2307cc2150eb516462a7a17512130de109e", + "sha256:323ba25b92454adb36fa425dc5cf6f8f19f78948cbad2e7bc6cdf7b0d7982e59", + "sha256:34eccd14566f8fe14b2b95bb13b11572f7c7d5c36da61caf414d23b91fcc5d94", + "sha256:3a58c98a7e9c021f357348867f537017057c2ed7f77337fd914d0bedb35dace7", + "sha256:3f78fd71c4f43a13d342be74ebbc0666fe1f555b8837eb113cb7416856c79682", + "sha256:4154ad09dac630a0f13f37b583eae260c6aa885d67dfbccb5b02c33f31a6d420", + "sha256:420f9bbf47a02616e8554e825208cb947969451978dceb77f95ad09c37791dae", + "sha256:4686818798f9194d03c9129a4d9a702d9e113a89cb03bffe08c6cf799e053291", + "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe", + "sha256:60989127da422b74a04345096c10d416c2b41bd7bf2a380eb541059e4e999980", + "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93", + "sha256:68fc1f1ba168724771e38bee37d940d2865cb0f562380a1fb1ffb428b75cb692", + "sha256:6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119", + "sha256:729177eaf0aefca0994ce4cffe96ad3c75e377c7b6f4efa59ebf003b6d398716", + "sha256:72dffbd8b4194858d0941062a9766f8297e8868e1dd07a7b36212aaa90f49472", + "sha256:75723c3c0fbbf34350b46a3199eb50638ab22a0228f93fb472ef4d9becc2382b", + "sha256:77853062a2c45be16fd6b8d6de2a99278ee1d985a7bd8b103e97e41c034006d2", + "sha256:78151aa3ec21dccd5cdef6c74c3e73386dcdfaf19bced944169697d7ac7482fc", + "sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c", + "sha256:804d99b24ad523a1fe18cc707bf741670332f7c7412e9d49cb5eab67e886b9b5", + "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab", + "sha256:8359bf4791968c5a78c56103702000105501adb557f3cf772b2c207284273984", + "sha256:83791a65b51ad6ee6cf0845634859d69a038ea9b03d7b26e703f94c7e93dbcf9", + "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf", + "sha256:876801744b0dee379e4e3c38b76fc89f88834bb15bf92ee07d94acd06ec890a0", + "sha256:8dbf6d1bc73f1d04ec1734bae3b4fb0ee3cb2a493d35ede9badbeb901fb40f6f", + "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212", + "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb", + "sha256:977646e05232579d2e7b9c59e21dbe5261f403a88417f6a6512e70d3f8a046be", + "sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90", + "sha256:a148c5d507bb9b4f2030a2025c545fccb0e1ef317393eaba42e7eabd28eb6041", + "sha256:a6cdcc3ede532f4a4b96000b6362099591ab4a3e913d70bcbac2b56c872446f7", + "sha256:ac05fb791acf5e1a3e39402641827780fe44d27e72567a000412c648a85ba860", + "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d", + "sha256:b58b4710c7f4161b5e9dcbe73bb7c62d65670a87df7bcce9e1faaad43e715245", + "sha256:b6356793b84728d9d50ead16ab43c187673831e9d4019013f1402c41b1db9b27", + "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417", + "sha256:bc7bb56d04601d443f24094e9e31ae6deec9ccb23581f75343feebaf30423359", + "sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202", + "sha256:c332c8d69fb64979ebf76613c66b985414927a40f8defa16cf1bc028b7b0a7b0", + "sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7", + "sha256:c77e3d1862452565875eb31bdb45ac62502feabbd53429fdc39a1cc341d681ba", + "sha256:ca08decd2697fdea0aea364b370b1249d47336aec935f87b8bbfd7da5b2ee9c1", + "sha256:ca49a8119c6cbd77375ae303b0cfd8c11f011abbbd64601167ecca18a87e7cdd", + "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07", + "sha256:d2997c458c690ec2bc6b0b7ecbafd02b029b7b4283078d3b32a852a7ce3ddd98", + "sha256:d3f82c171b4ccd83bbaf35aa05e44e690113bd4f3b7b6cc54d2219b132f3ae55", + "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d", + "sha256:ead20f7913a9c1e894aebe47cccf9dc834e1618b7aa96155d2091a626e59c972", + "sha256:ebdc36bea43063116f0486869652cb2ed7032dbc59fbcb4445c4862b5c1ecf7f", + "sha256:ed1184ab8f113e8d660ce49a56390ca181f2981066acc27cf637d5c1e10ce46e", + "sha256:ee825e70b1a209475622f7f7b776785bd68f34af6e7a46e2e42f27b659b5bc26", + "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957", + "sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53", + "sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==2.9.9" }, "pycparser": { "hashes": [ - "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", - "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.20" - }, - "pyparsing": { - "hashes": [ - "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", - "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.4.7" + "markers": "python_version >= '3.8'", + "version": "==2.22" }, "python-dateutil": { "hashes": [ - "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", - "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.1" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.9.0.post0" }, "pyyaml": { "hashes": [ - "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", - "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", - "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", - "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", - "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", - "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", - "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", - "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", - "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", - "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", - "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", - "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", - "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347", - "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", - "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", - "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", - "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", - "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc", - "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", - "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa", - "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", - "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122", - "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", - "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", - "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", - "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc", - "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247", - "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6", - "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0" + "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" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==5.4.1" + "markers": "python_version >= '3.6'", + "version": "==6.0.1" + }, + "resolvelib": { + "hashes": [ + "sha256:04ce76cbd63fded2078ce224785da6ecd42b9564b1390793f64ddecbe997b309", + "sha256:d2da45d1a8dfee81bdd591647783e340ef3bcb104b54c383f70d422ef5cc7dbf" + ], + "version": "==1.0.1" }, "s3transfer": { "hashes": [ - "sha256:35627b86af8ff97e7ac27975fe0a98a312814b46c6333d8a6b889627bcd80994", - "sha256:efa5bd92a897b6a8d5c1383828dca3d52d0790e0756d49740563a3fb6ed03246" + "sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19", + "sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d" ], - "version": "==0.3.7" + "markers": "python_version >= '3.8'", + "version": "==0.10.1" }, "six": { "hashes": [ - "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", - "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.15.0" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.16.0" }, "urllib3": { "hashes": [ - "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", - "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" + "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", + "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.4" + "markers": "python_version >= '3.10'", + "version": "==2.2.1" } }, "develop": { - "arrow": { + "ansible-compat": { "hashes": [ - "sha256:3515630f11a15c61dcb4cdd245883270dd334c83f3e639824e65a4b79cc48543", - "sha256:399c9c8ae732270e1aa58ead835a79a40d7be8aa109c579898eb41029b5a231d" + "sha256:74a91807808a39af48ab6595811b9340d1458db26b138362f48bf39292190705", + "sha256:b3e9f9d7c3a1ce6222de444e9dc6fece7eba70ac64f2a0befdc4e2d542018b4a" ], - "markers": "python_version >= '3.6'", - "version": "==1.0.3" + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==4.1.11" + }, + "ansible-core": { + "hashes": [ + "sha256:111e55d358c2297ec0ce03ba98e6c5ce95947fdf50d878215eb8c183d0c275e4", + "sha256:f9dea5044a86fd95cc27099f4f5c3ae9beb23acf7c3b6331455726c47825922b" + ], + "index": "pypi", + "markers": "python_version >= '3.10'", + "version": "==2.16.6" }, "attrs": { "hashes": [ - "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", - "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", + "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.3.0" + "markers": "python_version >= '3.7'", + "version": "==23.2.0" }, - "aws-sam-translator": { + "bracex": { "hashes": [ - "sha256:2f8904fd4a631752bc441a8fd928c444ed98ceb86b94d25ed7b84982e2eff1cd", - "sha256:5cf7faab3566843f3b44ef1a42a9c106ffb50809da4002faab818076dcc7bff8", - "sha256:c35075e7e804490d6025598ed4878ad3ab8668e37cafb7ae75120b1c37a6d212" + "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb", + "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418" ], - "version": "==1.35.0" - }, - "backports.shutil-get-terminal-size": { - "hashes": [ - "sha256:0975ba55054c15e346944b38956a4c9cbee9009391e41b86c68990effb8c1f64", - "sha256:713e7a8228ae80341c70586d1cc0a8caa5207346927e23d09dcbcaf18eadec80" - ], - "version": "==1.0.0" - }, - "bcrypt": { - "hashes": [ - "sha256:5b93c1726e50a93a033c36e5ca7fdcd29a5c7395af50a6892f5d9e7c6cfbfb29", - "sha256:63d4e3ff96188e5898779b6057878fecf3f11cfe6ec3b313ea09955d587ec7a7", - "sha256:81fec756feff5b6818ea7ab031205e1d323d8943d237303baca2c5f9c7846f34", - "sha256:a67fb841b35c28a59cebed05fbd3e80eea26e6d75851f0574a9273c80f3e9b55", - "sha256:c95d4cbebffafcdd28bd28bb4e25b31c50f6da605c81ffd9ad8a3d1b2ab7b1b6", - "sha256:cd1ea2ff3038509ea95f687256c46b79f5fc382ad0aa3664d200047546d511d1", - "sha256:cdcdcb3972027f83fe24a48b1e90ea4b584d35f1cc279d76de6fc4b13376239d" - ], - "markers": "python_version >= '3.6'", - "version": "==3.2.0" - }, - "binaryornot": { - "hashes": [ - "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", - "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4" - ], - "version": "==0.4.4" - }, - "boto3": { - "hashes": [ - "sha256:a482135c30fa07eaf4370314dd0fb49117222a266d0423b2075aed3835ed1f04", - "sha256:d5ef160442925f5944e4cde88589f0f195f6c284f05613114fc6bbc35e342fa7" - ], - "index": "pypi", - "version": "==1.17.49" - }, - "botocore": { - "hashes": [ - "sha256:6a672ba41dd00e5c1c1824ca8143d180d88de8736d78c0b1f96b8d3cb0466561", - "sha256:f7f103fa0651c69dd360c7d0ecd874854303de5cc0869e0cbc2818a52baacc69" - ], - "index": "pypi", - "version": "==1.20.49" - }, - "cerberus": { - "hashes": [ - "sha256:7aff49bc793e58a88ac14bffc3eca0f67e077881d3c62c621679a621294dd174", - "sha256:eec10585c33044fb7c69650bc5b68018dac0443753337e2b07684ee0f3c83329" - ], - "markers": "python_version >= '2.7'", - "version": "==1.3.3" + "markers": "python_version >= '3.8'", + "version": "==2.4" }, "certifi": { "hashes": [ - "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", - "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" + "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", + "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" ], - "version": "==2020.12.5" + "markers": "python_version >= '3.6'", + "version": "==2024.2.2" }, "cffi": { "hashes": [ - "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813", - "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06", - "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea", - "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee", - "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396", - "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73", - "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315", - "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1", - "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49", - "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892", - "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482", - "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058", - "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5", - "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53", - "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045", - "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3", - "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5", - "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e", - "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c", - "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369", - "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827", - "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053", - "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa", - "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4", - "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322", - "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132", - "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62", - "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa", - "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0", - "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396", - "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e", - "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991", - "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6", - "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1", - "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406", - "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d", - "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c" + "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" ], - "version": "==1.14.5" + "markers": "platform_python_implementation != 'PyPy'", + "version": "==1.16.0" }, - "cfn-lint": { + "charset-normalizer": { "hashes": [ - "sha256:5bf30bb468491717046e4b1212ce0378f53cd4b9b4461387fd9b549c21c97f2e", - "sha256:67dc1687ccb68f76341a75f1a35f3074e6ac21169208d1ee1f658ed06134b213" + "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", + "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", + "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", + "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", + "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", + "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", + "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", + "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", + "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", + "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", + "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", + "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", + "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", + "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", + "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", + "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", + "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", + "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", + "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", + "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", + "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", + "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", + "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", + "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", + "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", + "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", + "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", + "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", + "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", + "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", + "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", + "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", + "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", + "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", + "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", + "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", + "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", + "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", + "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", + "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", + "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", + "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", + "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", + "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", + "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", + "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", + "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", + "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", + "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", + "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", + "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", + "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", + "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", + "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", + "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", + "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", + "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", + "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", + "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", + "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", + "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", + "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", + "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", + "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", + "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", + "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", + "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", + "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", + "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", + "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", + "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", + "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", + "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", + "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", + "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", + "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", + "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", + "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", + "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", + "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", + "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", + "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", + "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", + "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", + "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", + "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", + "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", + "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", + "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", + "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.48.2" - }, - "chardet": { - "hashes": [ - "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa", - "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==4.0.0" + "markers": "python_full_version >= '3.7.0'", + "version": "==3.3.2" }, "click": { "hashes": [ - "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", - "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==7.1.2" - }, - "click-completion": { - "hashes": [ - "sha256:5bf816b81367e638a190b6e91b50779007d14301b3f9f3145d68e3cade7bce86" - ], - "version": "==0.5.2" + "markers": "python_version >= '3.7'", + "version": "==8.1.7" }, "click-help-colors": { "hashes": [ - "sha256:eb037a2dd95a9e20b3897c2b3ca57e7f6797f76a8d93f7eeedda7fcdcbc9b635", - "sha256:f6c3d1fe86b07790e6ef0339f458196a8814de90946d876774ea4b4f30a5a539" + "sha256:b33c5803eeaeb084393b1ab5899dc5476c7196b87a18713045afe76f840b42db", + "sha256:f4cabe52cf550299b8888f4f2ee4c5f359ac27e33bcfe4d61db47785a5cc936c" ], - "version": "==0.9" - }, - "colorama": { - "hashes": [ - "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b", - "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==0.4.4" - }, - "commonmark": { - "hashes": [ - "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60", - "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9" - ], - "version": "==0.9.1" - }, - "cookiecutter": { - "hashes": [ - "sha256:430eb882d028afb6102c084bab6cf41f6559a77ce9b18dc6802e3bc0cc5f4a30", - "sha256:efb6b2d4780feda8908a873e38f0e61778c23f6a2ea58215723bcceb5b515dac" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.7.2" + "version": "==0.9.4" }, "cryptography": { "hashes": [ - "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d", - "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959", - "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6", - "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873", - "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2", - "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713", - "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1", - "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177", - "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250", - "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca", - "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d", - "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9" + "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee", + "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576", + "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d", + "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30", + "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413", + "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb", + "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da", + "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4", + "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd", + "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc", + "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8", + "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1", + "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc", + "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e", + "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8", + "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940", + "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400", + "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7", + "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16", + "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278", + "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74", + "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec", + "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1", + "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2", + "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c", + "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922", + "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a", + "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6", + "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1", + "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e", + "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac", + "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7" ], - "markers": "python_version >= '3.6'", - "version": "==3.4.7" - }, - "dataclasses-jsonschema": { - "hashes": [ - "sha256:4f0ba1ee882f2a79afa7e36d98e063fd7c71f15b54affeebf9116238e73e7b94", - "sha256:a51fcb9523ce7aaa6daec2b42ce05f512f795192321c0ca5918b69125023dbc3" - ], - "version": "==2.14.1" - }, - "decorator": { - "hashes": [ - "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760", - "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7" - ], - "version": "==4.4.2" - }, - "distro": { - "hashes": [ - "sha256:0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92", - "sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799" - ], - "version": "==1.5.0" + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==42.0.5" }, "docker": { "hashes": [ - "sha256:0604a74719d5d2de438753934b755bfcda6f62f49b8e4b30969a4b0a2a8a1220", - "sha256:e455fa49aabd4f22da9f4e1c1f9d16308286adc60abaf64bf3e1feafaed81d06" + "sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b", + "sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3" ], "index": "pypi", - "version": "==4.4.1" - }, - "dulwich": { - "hashes": [ - "sha256:18f52e801921665986c51ddd2efe62d961efb97bdcfaf844a5b636997c0777ae", - "sha256:1cfba9ccccd9e513afeb0bedca2de34ab674814764102eb430c75a86fba37aaa", - "sha256:2fca59c6a0b119942be9796cdb706bd1f7e9509924c63166d437afedc6950ece", - "sha256:4331ea9d27e8b722c178fa603760c9ba904336b41b513e092ad94c79e99c995a", - "sha256:45dd6a82416f076b639449bbee84b39b32b5eab7b90540badf4d8b2b0ecee84f", - "sha256:6c287ad8978b698038cdd071bbd68e838bdba935b1d7d011c1f8cc00b8edca13", - "sha256:71511bc5038efa27614e9112acbda49d26aaec58300166c6979e220257282069", - "sha256:7a748afb97fb0a0cd93bb5c10a4c41ca0c080f1d9473e30e1db045004a1aa585", - "sha256:7f96647fda9a7b0cf0ab905e14403012cfaff9d459f1e57fafc92ed4870f1c65", - "sha256:81bc2bbdc6dcd6f7c7dc43e6875914e4816f0c798bb9f89b6934e610ad30746c", - "sha256:8fdcf2e796a978e62753eab13c919abf57337e1c464b9d518d3a30572bbbe8ee", - "sha256:91f69ce2ed5ca99441339bb41338692b9b48ee67fd9c82b1837a5c0ce1c04f96", - "sha256:ac764c9a9b80fa61afe3404d5270c5060aa57f7f087b11a95395d3b76f3b71fd", - "sha256:aef6be3233b1100394b8b94a94277a8292042ab4f9ec2a0d62fa68a41edb1535", - "sha256:b34a20eab578f36408ccfcd83c470f08cdc548081a87fbfa0bc869927eccb411", - "sha256:b8c24d3874a5162343aaaad5fe29dd3cbe1870b670ca639ed825ca14859d56e4", - "sha256:be63dc78424f6af8bb27cb62bbf06f6d1d54feb06a432c642e1af6dc90d1a9e9", - "sha256:be6a954cec473dccc23086d8c5be668ccaedd90c5c7b3939c0fab4fdd8f124cd", - "sha256:df49c6b761d222ca56d5c971736ce88a74485c75674a5d0de8b9b4a3c1869174", - "sha256:e14fae058964846d1c4e51b4a56a709075edd308ea7bd946d65dee91b1f323c9", - "sha256:e52520fc5e4381f3de5f06f7f6d21bd5cb0029523b4b61b97e40538a1152d49a" - ], - "markers": "python_version >= '3.5'", - "version": "==0.20.21" + "markers": "python_version >= '3.8'", + "version": "==7.0.0" }, "enrich": { "hashes": [ - "sha256:0e99ff57d87f7b5def0ca79917e88fb9351aa0d52e228ee38bff7cd858315fe4", - "sha256:ed0b3ac33495cc95f1ccafaf6c7ec0a0fcabb20f7f7a90121f37eb83a85bf82b" + "sha256:0a2ab0d2931dff8947012602d1234d2a3ee002d9a355b5d70be6bf5466008893", + "sha256:f29b2c8c124b4dbd7c975ab5c3568f6c7a47938ea3b7d2106c8a3bd346545e4f" ], "markers": "python_version >= '3.6'", - "version": "==1.2.6" + "version": "==1.2.7" }, "idna": { "hashes": [ - "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", - "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" + "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", + "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.10" - }, - "importlib-metadata": { - "hashes": [ - "sha256:2ec0faae539743ae6aaa84b49a169670a465f7f5d64e6add98388cc29fd1f2f6", - "sha256:c9356b657de65c53744046fa8f7358afe0714a1af7d570c00c3835c2d724a7c1" - ], - "markers": "python_version < '3.8'", - "version": "==3.10.1" + "markers": "python_version >= '3.5'", + "version": "==3.7" }, "iniconfig": { "hashes": [ - "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", - "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32" + "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", + "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" ], - "version": "==1.1.1" + "markers": "python_version >= '3.7'", + "version": "==2.0.0" }, "jinja2": { "hashes": [ - "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419", - "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6" + "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa", + "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.11.3" - }, - "jinja2-time": { - "hashes": [ - "sha256:d14eaa4d315e7688daa4969f616f226614350c48730bfa1692d2caebd8c90d40", - "sha256:d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa" - ], - "version": "==0.2.0" - }, - "jmespath": { - "hashes": [ - "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9", - "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.0" - }, - "jsonpatch": { - "hashes": [ - "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397", - "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2" - ], - "markers": "python_version != '3.4'", - "version": "==1.32" - }, - "jsonpointer": { - "hashes": [ - "sha256:150f80c5badd02c757da6644852f612f88e8b4bc2f9852dcbf557c8738919686", - "sha256:5a34b698db1eb79ceac454159d3f7c12a451a91f6334a4f638454327b7a89962" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.1" + "markers": "python_version >= '3.7'", + "version": "==3.1.3" }, "jsonschema": { "hashes": [ - "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163", - "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a" + "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f", + "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5" ], - "version": "==3.2.0" + "markers": "python_version >= '3.8'", + "version": "==4.21.1" }, - "junit-xml": { + "jsonschema-specifications": { "hashes": [ - "sha256:ec5ca1a55aefdd76d28fcc0b135251d156c7106fa979686a4b48d62b761b4732" + "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc", + "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c" ], - "version": "==1.9" + "markers": "python_version >= '3.8'", + "version": "==2023.12.1" + }, + "markdown-it-py": { + "hashes": [ + "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", + "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb" + ], + "markers": "python_version >= '3.8'", + "version": "==3.0.0" }, "markupsafe": { "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", - "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f", - "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014", - "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85", - "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850", - "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1", - "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", - "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5", - "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c", - "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", - "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be", - "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621" + "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", + "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", + "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", + "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", + "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", + "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", + "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", + "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", + "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", + "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", + "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", + "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", + "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", + "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", + "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", + "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", + "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", + "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", + "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", + "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", + "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", + "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", + "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", + "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", + "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", + "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", + "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", + "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", + "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", + "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", + "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", + "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", + "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", + "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", + "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", + "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", + "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", + "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", + "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", + "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", + "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", + "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", + "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", + "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", + "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", + "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", + "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", + "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", + "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", + "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", + "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", + "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", + "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", + "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", + "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", + "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", + "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", + "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", + "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", + "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.1.1" + "markers": "python_version >= '3.7'", + "version": "==2.1.5" }, - "mock": { + "mdurl": { "hashes": [ - "sha256:5ce3c71c5545b472da17b72268978914d0252980348636840bd34a00b5cc96c1", - "sha256:b158b6df76edd239b8208d481dc46b6afd45a846b7812ff0ce58971cf5bc8bba" + "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", + "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" ], - "version": "==2.0.0" + "markers": "python_version >= '3.7'", + "version": "==0.1.2" }, "molecule": { "hashes": [ - "sha256:9e360073598d45ec86036d84084fc6493dfc4270fd7600ee9ebe0ce03a0af6e5", - "sha256:d96ef3f895250f16142ed51591558d54a67a1546e05ccff386be0320de44973c" + "sha256:484764c8ae40c7918eb5e43b0bec0315e71f7ed82c36cc9b274f17e42ba00cc8", + "sha256:83522baa9b91560ea986273cab149c39156976e9d61245717226320935ad56e4" ], "index": "pypi", - "version": "==3.2.2" + "markers": "python_version >= '3.10'", + "version": "==24.2.1" }, "molecule-docker": { "hashes": [ - "sha256:251832979dcb590da4cd46df60f2240c1e88f66f4015223efe350b6afe68c342", - "sha256:715a16d6fb90c6a260f280c8e5c559b3bd4a3e75752eb208f6ab055df5afe04a" + "sha256:195b97673cbc2335cfa6810816de5cbf807507bf350a9d16ca98b224b1647145", + "sha256:d439b075789be700b6594ed73f3254e2a25ed61dcf312d80ab6e718d13bf150e" ], "index": "pypi", - "version": "==0.2.4" + "markers": "python_version >= '3.8'", + "version": "==2.1.0" }, - "networkx": { - "hashes": [ - "sha256:0635858ed7e989f4c574c2328380b452df892ae85084144c73d8cd819f0c4e06", - "sha256:109cd585cac41297f71103c3c42ac6ef7379f29788eb54cb751be5a663bb235a" + "molecule-plugins": { + "extras": [ + "docker" ], - "markers": "python_version >= '3.5'", - "version": "==2.5.1" + "hashes": [ + "sha256:87f8ac8d5e9fe1cbdfb784d92b1fd08e7cb11bf02a9391bb34dcb93fadf7a3fc", + "sha256:a2b1437d532d736e3fbc6db7a69ec533e2334b2115ff9245a0b2772ed9738d23" + ], + "markers": "python_version >= '3.9'", + "version": "==23.5.3" }, "packaging": { "hashes": [ - "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", - "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a" + "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", + "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==20.9" - }, - "paramiko": { - "hashes": [ - "sha256:4f3e316fef2ac628b05097a637af35685183111d4bc1b5979bd397c2ab7b5898", - "sha256:7f36f4ba2c0d81d219f4595e35f70d56cc94f9ac40a6acdf51d6ca210ce65035" - ], - "version": "==2.7.2" - }, - "pathspec": { - "hashes": [ - "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd", - "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d" - ], - "version": "==0.8.1" - }, - "pbr": { - "hashes": [ - "sha256:5fad80b613c402d5b7df7bd84812548b2a61e9977387a80a5fc5c396492b13c9", - "sha256:b236cde0ac9a6aedd5e3c34517b423cd4fd97ef723849da6b0d2231142d89c00" - ], - "markers": "python_version >= '2.6'", - "version": "==5.5.1" + "markers": "python_version >= '3.7'", + "version": "==24.0" }, "pluggy": { "hashes": [ - "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", - "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" + "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", + "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.13.1" - }, - "poyo": { - "hashes": [ - "sha256:3e2ca8e33fdc3c411cd101ca395668395dd5dc7ac775b8e809e3def9f9fe041a", - "sha256:e26956aa780c45f011ca9886f044590e2d8fd8b61db7b1c1cf4e0869f48ed4dd" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.5.0" - }, - "py": { - "hashes": [ - "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3", - "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.10.0" + "markers": "python_version >= '3.8'", + "version": "==1.5.0" }, "pycparser": { "hashes": [ - "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", - "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.20" + "markers": "python_version >= '3.8'", + "version": "==2.22" }, "pygments": { "hashes": [ - "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94", - "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8" + "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", + "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" ], - "markers": "python_version >= '3.5'", - "version": "==2.8.1" - }, - "pynacl": { - "hashes": [ - "sha256:06cbb4d9b2c4bd3c8dc0d267416aaed79906e7b33f114ddbf0911969794b1cc4", - "sha256:11335f09060af52c97137d4ac54285bcb7df0cef29014a1a4efe64ac065434c4", - "sha256:2fe0fc5a2480361dcaf4e6e7cea00e078fcda07ba45f811b167e3f99e8cff574", - "sha256:30f9b96db44e09b3304f9ea95079b1b7316b2b4f3744fe3aaecccd95d547063d", - "sha256:4e10569f8cbed81cb7526ae137049759d2a8d57726d52c1a000a3ce366779634", - "sha256:511d269ee845037b95c9781aa702f90ccc36036f95d0f31373a6a79bd8242e25", - "sha256:537a7ccbea22905a0ab36ea58577b39d1fa9b1884869d173b5cf111f006f689f", - "sha256:54e9a2c849c742006516ad56a88f5c74bf2ce92c9f67435187c3c5953b346505", - "sha256:757250ddb3bff1eecd7e41e65f7f833a8405fede0194319f87899690624f2122", - "sha256:7757ae33dae81c300487591c68790dfb5145c7d03324000433d9a2c141f82af7", - "sha256:7c6092102219f59ff29788860ccb021e80fffd953920c4a8653889c029b2d420", - "sha256:8122ba5f2a2169ca5da936b2e5a511740ffb73979381b4229d9188f6dcb22f1f", - "sha256:9c4a7ea4fb81536c1b1f5cc44d54a296f96ae78c1ebd2311bd0b60be45a48d96", - "sha256:c914f78da4953b33d4685e3cdc7ce63401247a21425c16a39760e282075ac4a6", - "sha256:cd401ccbc2a249a47a3a1724c2918fcd04be1f7b54eb2a5a71ff915db0ac51c6", - "sha256:d452a6746f0a7e11121e64625109bc4468fc3100452817001dbe018bb8b08514", - "sha256:ea6841bc3a76fa4942ce00f3bda7d436fda21e2d91602b9e21b7ca9ecab8f3ff", - "sha256:f8851ab9041756003119368c1e6cd0b9c631f46d686b3904b18c0139f4419f80" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.4.0" - }, - "pyparsing": { - "hashes": [ - "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", - "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.4.7" - }, - "pyrsistent": { - "hashes": [ - "sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e" - ], - "markers": "python_version >= '3.5'", - "version": "==0.17.3" + "markers": "python_version >= '3.7'", + "version": "==2.17.2" }, "pytest": { "hashes": [ - "sha256:671238a46e4df0f3498d1c3270e5deb9b32d25134c99b7d75370a68cfbe9b634", - "sha256:6ad9c7bdf517a808242b998ac20063c41532a570d088d77eec1ee12b0b5574bc" + "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7", + "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044" ], "index": "pypi", - "version": "==6.2.3" + "markers": "python_version >= '3.8'", + "version": "==8.1.1" }, "pytest-testinfra": { "hashes": [ - "sha256:f24f41c6453e0e70f361672cabc8358b4ade1f72a1d52870e621f12bf74015e1", - "sha256:fbaec729a39c90917895381bee903461be1aa8dcd2f5fff6bc5600c9fe12c795" + "sha256:0a03b7f21c863396adba9578880e5a1a6764e9d20bb603e25317883fdeda024b", + "sha256:f774339b94775acdf3a8c4a3793a8ead2e8dfc70ff34b778be15aaba140fa19e" ], - "markers": "python_version >= '3.6'", - "version": "==6.2.0" - }, - "python-dateutil": { - "hashes": [ - "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", - "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.1" - }, - "python-slugify": { - "hashes": [ - "sha256:69a517766e00c1268e5bbfc0d010a0a8508de0b18d30ad5a1ff357f8ae724270" - ], - "version": "==4.0.1" + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==10.1.0" }, "pyyaml": { "hashes": [ - "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf", - "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696", - "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393", - "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77", - "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922", - "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5", - "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8", - "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10", - "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc", - "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018", - "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e", - "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253", - "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347", - "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183", - "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541", - "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb", - "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185", - "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc", - "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db", - "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa", - "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46", - "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122", - "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b", - "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63", - "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df", - "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc", - "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247", - "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6", - "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0" + "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" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==5.4.1" + "markers": "python_version >= '3.6'", + "version": "==6.0.1" }, - "reprint": { + "referencing": { "hashes": [ - "sha256:0ebc4dc21aefc810205f3fcc21783ea91bb96292a8500663482e864989bff54d" + "sha256:191e936b0c696d0af17ad7430a3dc68e88bc11be6514f4757dc890f04ab05889", + "sha256:8080727b30e364e5783152903672df9b6b091c926a146a759080b62ca3126cd6" ], - "version": "==0.6.0" + "markers": "python_version >= '3.8'", + "version": "==0.35.0" }, "requests": { "hashes": [ - "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", - "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.25.1" + "markers": "python_version >= '3.7'", + "version": "==2.31.0" + }, + "resolvelib": { + "hashes": [ + "sha256:04ce76cbd63fded2078ce224785da6ecd42b9564b1390793f64ddecbe997b309", + "sha256:d2da45d1a8dfee81bdd591647783e340ef3bcb104b54c383f70d422ef5cc7dbf" + ], + "version": "==1.0.1" }, "rich": { "hashes": [ - "sha256:60cd6d6ea697a1704f2057e791e3062b506b5c74a6e2ad2ced71eccb37557259", - "sha256:8f05431091601888c50341697cfc421dc398ce37b12bca0237388ef9c7e2c9e9" + "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222", + "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432" ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==10.1.0" + "markers": "python_full_version >= '3.7.0'", + "version": "==13.7.1" }, - "s3transfer": { + "rpds-py": { "hashes": [ - "sha256:35627b86af8ff97e7ac27975fe0a98a312814b46c6333d8a6b889627bcd80994", - "sha256:efa5bd92a897b6a8d5c1383828dca3d52d0790e0756d49740563a3fb6ed03246" + "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f", + "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c", + "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76", + "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e", + "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157", + "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f", + "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5", + "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05", + "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24", + "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1", + "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8", + "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b", + "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb", + "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07", + "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1", + "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6", + "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e", + "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e", + "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1", + "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab", + "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4", + "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17", + "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594", + "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d", + "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d", + "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3", + "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c", + "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66", + "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f", + "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80", + "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33", + "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f", + "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c", + "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022", + "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e", + "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f", + "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da", + "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1", + "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688", + "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795", + "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c", + "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98", + "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1", + "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20", + "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307", + "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4", + "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18", + "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294", + "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66", + "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467", + "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948", + "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e", + "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1", + "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0", + "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7", + "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd", + "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641", + "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d", + "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9", + "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1", + "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da", + "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3", + "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa", + "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7", + "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40", + "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496", + "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124", + "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836", + "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434", + "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984", + "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f", + "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6", + "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e", + "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461", + "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c", + "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432", + "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73", + "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58", + "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88", + "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337", + "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7", + "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863", + "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475", + "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3", + "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51", + "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf", + "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024", + "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40", + "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9", + "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec", + "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb", + "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7", + "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861", + "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880", + "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f", + "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd", + "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca", + "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58", + "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e" ], - "version": "==0.3.7" - }, - "selinux": { - "hashes": [ - "sha256:820adcf1b4451c9cc7759848797703263ba0eb6a4cad76d73548a9e0d57b7926", - "sha256:d435f514e834e3fdc0941f6a29d086b80b2ea51b28112aee6254bd104ee42a74" - ], - "markers": "sys_platform == 'linux' and sys_platform == 'linux'", - "version": "==0.2.1" - }, - "shellingham": { - "hashes": [ - "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e", - "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.4.0" - }, - "six": { - "hashes": [ - "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", - "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.15.0" + "markers": "python_version >= '3.8'", + "version": "==0.18.0" }, "subprocess-tee": { "hashes": [ - "sha256:518b59a4cd51573749c8f063a675ff9b4ee3370742ee1d7078c2a8b73bad2567", - "sha256:c7cbee649ad272ed13cb1f701e70ef17612b4df99bc809f1eae571d6565595d2" + "sha256:b3c124993f8b88d1eb1c2fde0bc2069787eac720ba88771cba17e8c93324825d", + "sha256:eca56973a1c1237093c2055b2731bcaab784683b83f22c76f26e4c5763402e28" ], - "markers": "python_version >= '3.6'", - "version": "==0.3.1" - }, - "tabulate": { - "hashes": [ - "sha256:d7c013fe7abbc5e491394e10fa845f8f32fe54f8dc60c6622c6cf482d25d47e4", - "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7" - ], - "version": "==0.8.9" - }, - "taskcat": { - "hashes": [ - "sha256:bcada35b33c70050529238d1d92c280f1fe24e597f7a81f385256e2cb4932d18" - ], - "index": "pypi", - "version": "==0.9.23" - }, - "testinfra": { - "hashes": [ - "sha256:1a75b5025dbe82ffedec50afeaf9a7f96a8cd1e294f0d40de3a089a369ceae0e", - "sha256:4225d36e4bb02eb1618429325280c4b62a18cea8a90c91564ee0cc1d31ca331a" - ], - "index": "pypi", - "version": "==6.0.0" - }, - "text-unidecode": { - "hashes": [ - "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", - "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93" - ], - "version": "==1.3" - }, - "toml": { - "hashes": [ - "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", - "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.10.2" - }, - "typing-extensions": { - "hashes": [ - "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918", - "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c", - "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f" - ], - "markers": "python_version < '3.8'", - "version": "==3.7.4.3" + "markers": "python_version >= '3.8'", + "version": "==0.4.1" }, "urllib3": { "hashes": [ - "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", - "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" + "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", + "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.4" + "markers": "python_version >= '3.10'", + "version": "==2.2.1" }, - "websocket-client": { + "wcmatch": { "hashes": [ - "sha256:44b5df8f08c74c3d82d28100fdc81f4536809ce98a17f0757557813275fbb663", - "sha256:63509b41d158ae5b7f67eb4ad20fecbb4eee99434e73e140354dc3ff8e09716f" + "sha256:24c19cedc92bc9c9e27f39db4e1824d72f95bd2cea32b254a47a45b1a1b227ed", + "sha256:c0088c7f6426cf6bf27e530e2b7b734031905f7e490475fd83c7c5008ab581b3" ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.58.0" - }, - "yamllint": { - "hashes": [ - "sha256:87d9462b3ed7e9dfa19caa177f7a77cd9888b3dc4044447d6ae0ab233bcd1324" - ], - "markers": "python_version >= '3.5'", - "version": "==1.26.1" - }, - "yattag": { - "hashes": [ - "sha256:5731a31cb7452c0c6930dd1a284e0170b39eee959851a2aceb8d6af4134a5fa8" - ], - "version": "==1.14.0" - }, - "zipp": { - "hashes": [ - "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76", - "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098" - ], - "markers": "python_version >= '3.6'", - "version": "==3.4.1" + "markers": "python_version >= '3.8'", + "version": "==8.5.1" } } } diff --git a/README.md b/README.md index 2738c58..8e71ab3 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,20 @@ them in the `Custom command-line parameters for Ansible` field: -e atl_product_download_url=http://s3.amazon.com/atlassian/jira-9.0.0-PRE-TEST.tar.gz -e atl_use_system_jdk=true -e atl_download_format=tarball +## Operating system/environment requirements + +The roles in this repository currently target: + +* Ansible-core 2.16 +* Python >= 3.10 (as required by ansible-core 2.16) +* Amazon Linux 2023 and Debian 12+ (including derivatives, i.e., Ubuntu 22.04+) where the system-installable Python meets the above requirement + +To use a previous version of this repository and the roles/playbooks within, your application nodes must clone/checkout +a previous commit that supports the desired OS and/or Ansible version. For instance, to continue using Ansible 2.13 on +Amazon Linux 2, use branch "ansible-core-2.13" and/or commit ID `e5af2cf649f72bb5c9d50d0057ddae4a5c99b6f9`. If using one +of the previously-provided AWS CloudFormation templates, you must set set the **Deployment Automation Branch** parameter +to "ansible-core-2.13" and/or manually set the stack's "pinned-ansible-sha" SSM Parameter to the referenced commit ID. + ### Other customizable parameters For more deployment customization options, consult the following files for parameters you can diff --git a/ansible.cfg b/ansible.cfg index 226c188..811f47c 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -1,5 +1,4 @@ [defaults] retry_files_enabled = False -callback_whitelist = profile_tasks -conditional_bare_variables = True -collections_paths = ./ +callbacks_enabled = profile_tasks +collections_path = ./ diff --git a/aws_bitbucket_dc_node.yml b/aws_bitbucket_dc_node.yml index e06f3dd..1f2931c 100644 --- a/aws_bitbucket_dc_node.yml +++ b/aws_bitbucket_dc_node.yml @@ -9,16 +9,16 @@ atl_product_edition: "bitbucket" atl_product_user: "bitbucket" - atl_product_home: "{{ atl_shared_mountpoint }}/{{ atl_product_edition }}" - atl_use_system_jdk: true - java_major_version: "11" # BB 8 will drop JDK 8 support + java_major_version: "17" atl_download_format: "tarball" + atl_product_home: "/var/atlassian/application-data/bitbucket" atl_nfs_mountpoint: "{{ atl_shared_mountpoint }}/bitbucket/shared" atl_nfs_target: "{{ atl_shared_mountpoint }}/bitbucket/shared" atl_nfs_version: "3" + atl_startup_systemd_params: - "UMask=0027" - "LimitNOFILE=4096" @@ -35,11 +35,11 @@ - role: aws_common # For Bitbucket DC clusters that store repos on Bitbucket Mesh(https://confluence.atlassian.com/bitbucketserver/bitbucket-data-center-and-server-8-0-release-notes-1115659343.html#BitbucketDataCenterandServer8.0releasenotes-mesh), # nodes may be setup to use EFS instead of NFS for shared_home by not defining 'atl_fileserver_host' - - { role: aws_shared_fs_config, when: (atl_fileserver_host is not defined or atl_fileserver_host |length == 0) and (atl_efs_id|length > 0) } + - { role: aws_shared_fs_config, when: (atl_fileserver_host is not defined or atl_fileserver_host | length == 0) and (atl_efs_id | length > 0) } - { role: nfs_mount, when : (atl_fileserver_host is defined) and (atl_fileserver_host|length > 0) } - role: product_common - role: product_install - - role: database_init + - { role: database_init, tags: [database] } - role: bitbucket_config - role: product_startup - role: bitbucket_dataset_restore diff --git a/aws_bitbucket_mesh_node.yml b/aws_bitbucket_mesh_node.yml new file mode 100644 index 0000000..9af397f --- /dev/null +++ b/aws_bitbucket_mesh_node.yml @@ -0,0 +1,34 @@ +--- +- hosts: aws_node_local + become: true + + vars: + # See group_vars/aws_node_local.yml, which pull vars from the environment. + atl_product_family: "stash" + atl_product_edition: "mesh" + atl_product_user: "bitbucket" + atl_product_home: "{{ atl_home_base }}/{{ atl_product_edition }}" + atl_systemd_service_name: "mesh.service" + atl_startup_systemd_params: + - 'UMask=0027' + - 'Environment=MESH_HOME={{ atl_home_base }}/{{ atl_product_edition }}' + - 'Environment=JAVA_HOME=/usr/lib/jvm/java' + - 'Environment=JRE_HOME=/usr/lib/jvm/java' + - 'Environment=JMX_REMOTE_AUTH=password' + - 'Environment=JMX_PASSWORD_FILE={{ atl_home_base }}/{{ atl_product_edition }}/jmx.access' + - 'Environment="JVM_SUPPORT_RECOMMENDED_ARGS=-Dmesh.enabled=true -Dplugin.bitbucket-git.mesh.sidecar.child-process=false -Dcom.sun.management.jmxremote.port=4444 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath={{ atl_home_base }}/{{ atl_product_edition }}/log"' + - 'Environment=JVM_MAXIMUM_MEMORY={{ atl_jvm_heap }}' + - 'PassEnvironment=JMX_REMOTE_AUTH JMX_PASSWORD_FILE JAVA_HOME' + + atl_startup_exec_path: "{{ mesh_install_dir }}/current/bin/start-mesh.sh" + atl_stop_exec_path: "{{ mesh_install_dir }}/current/bin/stop-mesh.sh" + atl_systemd_service_target: "multi-user.target" + atl_startup_exec_options: [] + + roles: + - role: linux_common + - role: aws_common + - role: aws_shared_fs_config + - role: product_common + - role: bitbucket_mesh + - role: product_startup diff --git a/bin/ansible-with-atl-env b/bin/ansible-with-atl-env index 948d926..e9e6e75 100755 --- a/bin/ansible-with-atl-env +++ b/bin/ansible-with-atl-env @@ -20,6 +20,7 @@ set +a pipenv run \ ansible-playbook -v \ $ATL_DEPLOYMENT_REPOSITORY_CUSTOM_PARAMS \ + -e "ansible_python_interpreter=$(pipenv --venv)/bin/python" \ -e "${PLAYBOOK_INVOCATION_EXTRA_PARAMS}" \ -i $INV \ $PLAYBOOK \ diff --git a/bin/install-ansible b/bin/install-ansible index 9c3e06f..20cd9df 100755 --- a/bin/install-ansible +++ b/bin/install-ansible @@ -2,34 +2,41 @@ set -e -source /etc/os-release -if [[ $ID = "amzn" ]]; then - yum install -y \ - python3-devel \ - python3-pip \ - python2-boto3 \ - python2-botocore \ - python-lxml +PIPENV_PYTHON="3" +source /etc/os-release +if [[ $ID = "amzn" ]] && [[ $VERSION = "2" ]]; then + echo "Amazon Linux 2 is no longer supported; see README.md for supported operating systems/environments." + exit 1 +elif [[ $ID = "amzn" ]] && [[ $VERSION = "2023" ]]; then + dnf install -y \ + python3.11 \ + python3.11-pip \ + python3.11-devel + echo "Installing pipenv..." + pip3.11 install pipenv + PIPENV_PYTHON="3.11" else # FIXME: Currently assumes Debian-based apt-get update && \ apt-get install -y \ python3-dev \ - python3-pip + python3-pip \ + pipenv fi export PATH=/usr/local/bin:$PATH export PIP_DEFAULT_TIMEOUT=60 -echo "Installing pipenv..." -pip3 install pipenv - echo "Installing ansible and dependencies..." -PIPENV_NOSPIN=1 PIPENV_HIDE_EMOJIS=1 pipenv sync 2>&1 | iconv -c -f utf-8 -t ascii +PIPENV_NOSPIN=1 PIPENV_HIDE_EMOJIS=1 pipenv --python $PIPENV_PYTHON sync 2>&1 | iconv -c -f utf-8 -t ascii if [[ $1 == "--dev" ]]; then pipenv sync --dev fi echo "Installing collections from galaxy..." -pipenv run ansible-galaxy collection install -v -r requirements.yml +galaxy_retry_count=0 +until [[ $galaxy_retry_count -gt 2 ]]; do + pipenv run ansible-galaxy collection install --upgrade --verbose --requirements-file requirements.yml && break + galaxy_retry_count=$((galaxy_retry_count + 1)) +done diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index 75ec588..cd9ffc9 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -4,11 +4,13 @@ # # make > ../bitbucket-pipelines.yml -image: debian:buster +image: debian:bookworm options: size: 2x definitions: + caches: + ansible-collections: ansible_collections services: docker: memory: 4096 @@ -34,355 +36,550 @@ pipelines: - parallel: - step: - name: aws_common/cw-disabled - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/aws_common - - pipenv run molecule test -s cw-disabled - - step: - name: aws_common/default - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/aws_common - - pipenv run molecule test -s default - - step: - name: aws_common/logs-disabled - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/aws_common - - pipenv run molecule test -s logs-disabled - - step: - name: bitbucket_config/default - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/bitbucket_config - - pipenv run molecule test -s default - - step: - name: bitbucket_config/iam_elasticsearch - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/bitbucket_config - - pipenv run molecule test -s iam_elasticsearch - - step: - name: confluence_config/aurora - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/confluence_config - - pipenv run molecule test -s aurora - - step: - name: confluence_config/default - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/confluence_config - - pipenv run molecule test -s default - - step: - name: confluence_config/password_char_escaping - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/confluence_config - - pipenv run molecule test -s password_char_escaping - - step: - name: confluence_config/system_jdk - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/confluence_config - - pipenv run molecule test -s system_jdk - - step: - name: diy_backup/default - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/diy_backup - - pipenv run molecule test -s default - - step: - name: jira_config/aurora - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/jira_config - - pipenv run molecule test -s aurora - - step: - name: jira_config/default - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/jira_config - - pipenv run molecule test -s default - - step: - name: jira_config/jira_config_props - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/jira_config - - pipenv run molecule test -s jira_config_props - - step: - name: jira_config/password_char_escaping - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/jira_config - - pipenv run molecule test -s password_char_escaping - - step: - name: linux_common/default - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/linux_common - - pipenv run molecule test -s default - - step: - name: product_common/default - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_common - - pipenv run molecule test -s default - - step: - name: product_common/system_jdk - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_common - - pipenv run molecule test -s system_jdk - - step: - name: product_install/bitbucket_latest - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s bitbucket_latest - - step: - name: product_install/confluence_latest - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s confluence_latest - - step: - name: product_install/confluence_version_with_uppercase + name: aws_common/cw-disabled + caches: + - ansible-collections + - docker + - pip services: - docker script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/aws_common + - pipenv run molecule test -s cw-disabled + - step: + name: aws_common/default + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/aws_common + - pipenv run molecule test -s default + - step: + name: aws_common/logs-disabled + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/aws_common + - pipenv run molecule test -s logs-disabled + - step: + name: bitbucket_config/default + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/bitbucket_config + - pipenv run molecule test -s default + - step: + name: bitbucket_config/iam_elasticsearch + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/bitbucket_config + - pipenv run molecule test -s iam_elasticsearch + - step: + name: confluence_config/aurora + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/confluence_config + - pipenv run molecule test -s aurora + - step: + name: confluence_config/default + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/confluence_config + - pipenv run molecule test -s default + - step: + name: confluence_config/password_char_escaping + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/confluence_config + - pipenv run molecule test -s password_char_escaping + - step: + name: confluence_config/system_jdk + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/confluence_config + - pipenv run molecule test -s system_jdk + - step: + name: diy_backup/default + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/diy_backup + - pipenv run molecule test -s default + - step: + name: jira_config/aurora + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/jira_config + - pipenv run molecule test -s aurora + - step: + name: jira_config/default + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/jira_config + - pipenv run molecule test -s default + - step: + name: jira_config/jira_config_props + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/jira_config + - pipenv run molecule test -s jira_config_props + - step: + name: jira_config/password_char_escaping + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/jira_config + - pipenv run molecule test -s password_char_escaping + - step: + name: linux_common/default + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/linux_common + - pipenv run molecule test -s default + - step: + name: product_common/default + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_common + - pipenv run molecule test -s default + - step: + name: product_common/system_jdk + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_common + - pipenv run molecule test -s system_jdk + - step: + name: product_install/bitbucket_latest + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s bitbucket_latest + - step: + name: product_install/confluence_latest + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s confluence_latest + - step: + name: product_install/confluence_version_with_uppercase + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync - export ANSIBLE_CONFIG=./ansible.cfg - ./bin/install-ansible --dev - cd roles/product_install - pipenv run molecule test -s confluence_version_with_uppercase - step: - name: product_install/crowd_latest - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s crowd_latest + name: product_install/crowd_latest + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s crowd_latest - step: - name: product_install/default - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s default + name: product_install/default + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s default - step: - name: product_install/jira_all - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s jira_all + name: product_install/jira_all + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s jira_all - step: - name: product_install/jira_tarball_download_url - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s jira_tarball_download_url + name: product_install/jira_cached_with_downgrade + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s jira_cached_with_downgrade - step: - name: product_install/jira_cached_with_downgrade - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s jira_cached_with_downgrade + name: product_install/jira_cached_with_upgrade + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s jira_cached_with_upgrade - step: - name: product_install/jira_cached_with_upgrade - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s jira_cached_with_upgrade + name: product_install/jira_software_latest + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s jira_software_latest - step: - name: product_install/jira_software_latest - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s jira_software_latest + name: product_install/jira_tarball + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s jira_tarball - step: - name: product_install/jira_tarball - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s jira_tarball + name: product_install/jira_tarball_download_url + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s jira_tarball_download_url - step: - name: product_install/jira_version_from_file - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s jira_version_from_file + name: product_install/jira_version_from_file + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s jira_version_from_file - step: - name: product_install/jira_version_latest - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s jira_version_latest + name: product_install/jira_version_latest + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s jira_version_latest - step: - name: product_install/jira_version_override - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s jira_version_override + name: product_install/jira_version_override + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s jira_version_override - step: - name: product_install/servicedesk3 - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s servicedesk3 + name: product_install/servicedesk3 + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s servicedesk3 - step: - name: product_install/servicedesk4 - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s servicedesk4 + name: product_install/servicedesk4 + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s servicedesk4 - step: - name: product_install/servicedesk_latest - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_install - - pipenv run molecule test -s servicedesk_latest + name: product_install/servicedesk_latest + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_install + - pipenv run molecule test -s servicedesk_latest - step: - name: product_startup/bitbucket - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_startup - - pipenv run molecule test -s bitbucket + name: product_startup/bitbucket + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_startup + - pipenv run molecule test -s bitbucket - step: - name: product_startup/default - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_startup - - pipenv run molecule test -s default + name: product_startup/default + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_startup + - pipenv run molecule test -s default - step: - name: product_startup/startup_restart_false - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_startup - - pipenv run molecule test -s startup_restart_false + name: product_startup/startup_restart_false + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_startup + - pipenv run molecule test -s startup_restart_false - step: - name: product_startup/synchrony - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/product_startup - - pipenv run molecule test -s synchrony + name: product_startup/synchrony + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/product_startup + - pipenv run molecule test -s synchrony - step: - name: Run Snyk security scan - services: - - docker - script: - - ./bin/install-ansible --dev - - apt-get update && apt-get install -y npm - - npm install -g snyk@1.455.0 - - snyk auth $SNYK_TOKEN - - pipenv run snyk monitor --severity-threshold=high --project-name=dc-deployments-automation + name: Run Snyk security scan + caches: + - docker + - pip + - node + services: + - docker + script: + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - apt-get update && apt-get install -y npm + - npm install -g snyk + - snyk auth $SNYK_TOKEN + - pipenv run snyk monitor --severity-threshold=high --project-name=dc-deployments-automation diff --git a/group_vars/aws_node_local.yml b/group_vars/aws_node_local.yml index 18cc082..a72c18c 100644 --- a/group_vars/aws_node_local.yml +++ b/group_vars/aws_node_local.yml @@ -38,7 +38,7 @@ atl_installer_temp: "{{ atl_installation_base }}/tmp" # installed and linked to `/usr/lib/jvm/java`. # See product_common/task/ubuntu.yml for an example of apropriate # linking using `alternatives`. -atl_java_home: "{{ '/usr/lib/jvm/java' if atl_use_system_jdk else (atl_product_installation_current + '/jre') }}" +atl_java_home: "{{ '/usr/lib/jvm/java' if atl_use_system_jdk | bool else (atl_product_installation_current + '/jre') }}" atl_java_binary: "{{ atl_java_home }}/bin/java" atl_product_logs_default: &logs_default @@ -79,8 +79,8 @@ atl_aws_region: "{{ lookup('env', 'ATL_AWS_REGION') }}" atl_aws_iam_role: "{{ lookup('env', 'ATL_AWS_IAM_ROLE') }}" atl_aws_iam_role_arn: "{{ lookup('env', 'ATL_AWS_IAM_ROLE_ARN') }}" -atl_aws_enable_cloudwatch: "{{ lookup('env', 'ATL_AWS_ENABLE_CLOUDWATCH')|bool or false }}" -atl_aws_enable_cloudwatch_logs: "{{ lookup('env', 'ATL_AWS_ENABLE_CLOUDWATCH_LOGS')|bool or false }}" +atl_aws_enable_cloudwatch: "{{ lookup('env', 'ATL_AWS_ENABLE_CLOUDWATCH') | bool or false }}" +atl_aws_enable_cloudwatch_logs: "{{ lookup('env', 'ATL_AWS_ENABLE_CLOUDWATCH_LOGS') | bool or false }}" atl_db_engine: "{{ lookup('env', 'ATL_DB_ENGINE') }}" atl_db_host: "{{ lookup('env', 'ATL_DB_HOST') }}" @@ -100,13 +100,15 @@ atl_db_timebetweenevictionrunsmillis: "{{ lookup('env', 'ATL_DB_TIMEBETWEENEVICT atl_db_minevictableidletimemillis: "{{ lookup('env', 'ATL_DB_MINEVICTABLEIDLETIMEMILLIS') or '5000' }}" atl_db_removeabandoned: "{{ lookup('env', 'ATL_DB_REMOVEABANDONED') or 'true' }}" atl_db_removeabandonedtimeout: "{{ lookup('env', 'ATL_DB_REMOVEABANDONEDTIMEOUT') or '300' }}" -atl_db_testwhileidle: "{{ lookup('env', 'ATL_DB_TESTWHILEIDLE') or 'true'}}" +atl_db_testwhileidle: "{{ lookup('env', 'ATL_DB_TESTWHILEIDLE') or 'true' }}" atl_db_testonborrow: "{{ lookup('env', 'ATL_DB_TESTONBORROW') or 'false' }}" atl_db_engine_to_db_type_map: aurora_postgres: "postgresaurora96" rds_postgres: "postgres72" atl_db_type: "{{ atl_db_engine_to_db_type_map[atl_db_engine] | default('postgres72') }}" +atl_download_secret_name: "{{ lookup('env', 'ATL_DOWNLOAD_SECRET_NAME') or '' }}" + atl_jdbc_db_name: "{{ lookup('env', 'ATL_JDBC_DB_NAME') }}" atl_jdbc_user: "{{ lookup('env', 'ATL_JDBC_USER') }}" atl_jdbc_password: "{{ lookup('env', 'ATL_JDBC_PASSWORD') }}" @@ -116,7 +118,10 @@ atl_jdbc_ctype: "{{ lookup('env', 'ATL_JDBC_CTYPE') or 'en_US.UTF-8' }}" atl_jdbc_template: "{{ lookup('env', 'ATL_JDBC_TEMPLATE') or 'template1' }}" atl_jdbc_query_params_for_engine: aurora_postgres: "?targetServerType=master" -atl_jdbc_url: "jdbc:postgresql://{{ atl_db_host }}:{{ atl_db_port }}/{{ atl_jdbc_db_name }}{{ atl_jdbc_query_params_for_engine[atl_db_engine]| default('') }}" +atl_jdbc_url: "jdbc:postgresql://{{ atl_db_host }}:{{ atl_db_port }}/{{ atl_jdbc_db_name }}{{ atl_jdbc_query_params_for_engine[atl_db_engine] | default('') }}" + +atl_secretsmanager_aws_region: "{{ lookup('env', 'ATL_SECRETSMANAGER_AWS_REGION') }}" +atl_secretsmanager_aws_secret_id: "{{ lookup('env', 'ATL_SECRETSMANAGER_AWS_SECRET_ID') }}" atl_jvm_heap: "{{ lookup('env', 'ATL_JVM_HEAP') or '2048m' }}" atl_jvm_opts: "{{ lookup('env', 'ATL_JVM_OPTS') or '' }}" diff --git a/pipeline_generator/templates/bitbucket-pipelines.yml.j2 b/pipeline_generator/templates/bitbucket-pipelines.yml.j2 index ac5bdc7..6b0135a 100644 --- a/pipeline_generator/templates/bitbucket-pipelines.yml.j2 +++ b/pipeline_generator/templates/bitbucket-pipelines.yml.j2 @@ -4,11 +4,13 @@ # # make > ../bitbucket-pipelines.yml -image: debian:buster +image: debian:bookworm options: size: 2x definitions: + caches: + ansible-collections: ansible_collections services: docker: memory: 4096 @@ -35,23 +37,33 @@ pipelines: - parallel: {% for spath in scenario_paths %} - step: - name: {{ spath.parts[2] }}/{{ spath.parts[4] }} - services: - - docker - script: - - export ANSIBLE_CONFIG=./ansible.cfg - - ./bin/install-ansible --dev - - cd roles/{{ spath.parts[2] }} - - pipenv run molecule test -s {{ spath.parts[4] }} + name: {{ spath.parts[2] }}/{{ spath.parts[4] }} + caches: + - ansible-collections + - docker + - pip + services: + - docker + script: + - apt-get update && apt-get install -y rsync + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - cd roles/{{ spath.parts[2] }} + - pipenv run molecule test -s {{ spath.parts[4] }} {% endfor %} - step: - name: Run Snyk security scan - services: - - docker - script: - - ./bin/install-ansible --dev - - apt-get update && apt-get install -y npm - - npm install -g snyk - - snyk auth $SNYK_TOKEN - - pipenv run snyk monitor --severity-threshold=high --project-name=dc-deployments-automation + name: Run Snyk security scan + caches: + - docker + - pip + - node + services: + - docker + script: + - export ANSIBLE_CONFIG=./ansible.cfg + - ./bin/install-ansible --dev + - apt-get update && apt-get install -y npm + - npm install -g snyk + - snyk auth $SNYK_TOKEN + - pipenv run snyk monitor --severity-threshold=high --project-name=dc-deployments-automation diff --git a/requirements.yml b/requirements.yml index 3b5d258..5aa7253 100644 --- a/requirements.yml +++ b/requirements.yml @@ -1,4 +1,12 @@ --- collections: - name: amazon.aws - version: 3.0.0 + version: "7.5.0" + - name: ansible.posix + version: "1.5.4" + - name: community.docker + version: "3.9.0" + - name: community.general + version: "8.6.0" + - name: community.postgresql + version: "3.4.0" diff --git a/roles/aws_common/handlers/main.yml b/roles/aws_common/handlers/main.yml index 0e43a13..6244dcb 100644 --- a/roles/aws_common/handlers/main.yml +++ b/roles/aws_common/handlers/main.yml @@ -1,15 +1,15 @@ --- - name: Enable CloudWatch Agent - systemd: + ansible.builtin.systemd_service: name: "amazon-cloudwatch-agent.service" daemon_reload: true enabled: true - when: atl_aws_agent_restart + when: atl_aws_agent_restart | bool - name: Restart CloudWatch Agent - systemd: + ansible.builtin.systemd_service: name: "amazon-cloudwatch-agent.service" enabled: true state: restarted - when: atl_aws_agent_restart + when: atl_aws_agent_restart | bool diff --git a/roles/aws_common/molecule/cw-disabled/Dockerfile.j2 b/roles/aws_common/molecule/cw-disabled/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/aws_common/molecule/cw-disabled/Dockerfile.j2 +++ b/roles/aws_common/molecule/cw-disabled/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/aws_common/molecule/cw-disabled/molecule.yml b/roles/aws_common/molecule/cw-disabled/molecule.yml index 9a1ec33..fa1afb4 100644 --- a/roles/aws_common/molecule/cw-disabled/molecule.yml +++ b/roles/aws_common/molecule/cw-disabled/molecule.yml @@ -1,17 +1,17 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local # - name: ubuntu_lts -# image: ubuntu:bionic +# image: ubuntu:jammy provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" inventory: links: group_vars: ../../../../group_vars/ diff --git a/roles/aws_common/molecule/default/Dockerfile.j2 b/roles/aws_common/molecule/default/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/aws_common/molecule/default/Dockerfile.j2 +++ b/roles/aws_common/molecule/default/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/aws_common/molecule/default/molecule.yml b/roles/aws_common/molecule/default/molecule.yml index 9a1ec33..fa1afb4 100644 --- a/roles/aws_common/molecule/default/molecule.yml +++ b/roles/aws_common/molecule/default/molecule.yml @@ -1,17 +1,17 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local # - name: ubuntu_lts -# image: ubuntu:bionic +# image: ubuntu:jammy provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" inventory: links: group_vars: ../../../../group_vars/ diff --git a/roles/aws_common/molecule/logs-disabled/Dockerfile.j2 b/roles/aws_common/molecule/logs-disabled/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/aws_common/molecule/logs-disabled/Dockerfile.j2 +++ b/roles/aws_common/molecule/logs-disabled/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/aws_common/molecule/logs-disabled/molecule.yml b/roles/aws_common/molecule/logs-disabled/molecule.yml index 9a1ec33..fa1afb4 100644 --- a/roles/aws_common/molecule/logs-disabled/molecule.yml +++ b/roles/aws_common/molecule/logs-disabled/molecule.yml @@ -1,17 +1,17 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local # - name: ubuntu_lts -# image: ubuntu:bionic +# image: ubuntu:jammy provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" inventory: links: group_vars: ../../../../group_vars/ diff --git a/roles/aws_common/tasks/amazon-2.yml b/roles/aws_common/tasks/amazon-2.yml new file mode 100644 index 0000000..d7bcee0 --- /dev/null +++ b/roles/aws_common/tasks/amazon-2.yml @@ -0,0 +1,5 @@ +--- + +- name: Amazon Linux 2 no longer supported + fail: + msg: "Amazon Linux 2 is no longer supported; see README.md for supported operating systems/environments." diff --git a/roles/aws_common/tasks/amazon-2023.yml b/roles/aws_common/tasks/amazon-2023.yml new file mode 100644 index 0000000..cad233f --- /dev/null +++ b/roles/aws_common/tasks/amazon-2023.yml @@ -0,0 +1,25 @@ +--- + +- name: Install AWS support packages + ansible.builtin.dnf: + name: + - amazon-efs-utils + - amazon-ssm-agent + - awscli + - git + - ec2-utils + +# https://github.com/amazonlinux/amazon-linux-2023/issues/164 +- name: Ensure group "aoc" exists + ansible.builtin.group: + name: aoc + state: present + when: atl_aws_enable_cloudwatch is defined and atl_aws_enable_cloudwatch | bool + +- name: Install CloudWatch Agent + ansible.builtin.dnf: + name: + - amazon-cloudwatch-agent + when: atl_aws_enable_cloudwatch is defined and atl_aws_enable_cloudwatch | bool + notify: + - Enable CloudWatch Agent diff --git a/roles/aws_common/tasks/amazon.yml b/roles/aws_common/tasks/amazon.yml deleted file mode 100644 index b4b597f..0000000 --- a/roles/aws_common/tasks/amazon.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- - -- name: Install AWS support packages - yum: - name: - - amazon-efs-utils - - amazon-ssm-agent - - awscli - - git - - ec2-utils - -- name: Install CloudWatch Agent - yum: - name: - - "{{ aws_cloudwatch_agent_rpm }}" - when: atl_aws_enable_cloudwatch is defined and atl_aws_enable_cloudwatch - notify: - - Enable CloudWatch Agent diff --git a/roles/aws_common/tasks/main.yml b/roles/aws_common/tasks/main.yml index 9c90622..6afdf7c 100644 --- a/roles/aws_common/tasks/main.yml +++ b/roles/aws_common/tasks/main.yml @@ -1,31 +1,32 @@ --- - name: Fetch local EC2 metadata - ec2_metadata_facts: + amazon.aws.ec2_metadata_facts: tags: - notest -- name: Install distro-specific prerequisites - include_tasks: "{{ ansible_distribution|lower }}.yml" +- name: Install Amazon-Linux-specific prerequisites + ansible.builtin.include_tasks: "{{ ansible_distribution | lower }}-{{ ansible_distribution_version }}.yml" + when: ansible_distribution | lower == 'amazon' - name: Use EC2 instance ID for cluster node ID - set_fact: + ansible.builtin.set_fact: atl_cluster_node_id: "{{ ansible_ec2_instance_id }}" atl_local_ipv4: "{{ ansible_ec2_local_ipv4 | default(ansible_default_ipv4.address) }}" - name: Generate CloudWatch config - template: + ansible.builtin.template: src: "amazon-cloudwatch-agent.json.j2" dest: "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json" owner: root group: root mode: 0644 - when: atl_aws_enable_cloudwatch is defined and atl_aws_enable_cloudwatch + when: atl_aws_enable_cloudwatch is defined and atl_aws_enable_cloudwatch | bool notify: - Restart CloudWatch Agent - name: Store some metadata about this run - include_tasks: "write-tags.yml" + ansible.builtin.include_tasks: "write-tags.yml" - name: Initiate the startup of any new AWS services now - meta: flush_handlers + ansible.builtin.meta: flush_handlers diff --git a/roles/aws_common/tasks/write-tags.yml b/roles/aws_common/tasks/write-tags.yml index d1df291..bf87c20 100644 --- a/roles/aws_common/tasks/write-tags.yml +++ b/roles/aws_common/tasks/write-tags.yml @@ -1,28 +1,27 @@ --- - name: Retrieve all available EC2 tags - ec2_tag: + amazon.aws.ec2_tag_info: region: "{{ ansible_ec2_placement_region }}" resource: "{{ ansible_ec2_instance_id }}" - state: list register: ec2_instance_tags ignore_errors: true tags: - notest - name: Retrieve autoscaling group - set_fact: + ansible.builtin.set_fact: ec2_autoscaling_group: "{{ ec2_instance_tags.tags['aws:autoscaling:groupName'] | default('') }}" - block: # No existing timestamp, so this is a first run. Persist some metadata into the ASG. - - name: Fetch the git revision for this repo - command: + - name: Fetch the git revision for this repo # noqa: command-instead-of-module no-changed-when + ansible.builtin.command: cmd: git rev-parse HEAD register: git_out - name: Setup the new ASG tags - set_fact: + ansible.builtin.set_fact: deployment_firstrun_meta: - ResourceType: "auto-scaling-group" ResourceId: "{{ ec2_autoscaling_group }}" @@ -40,15 +39,15 @@ # Set the tags on the ASG and the local instance. We need to # ignore errors as it's possible we don't have the permissions, # and we can't check up-front. - - name: Set the first-run tags on the ASG ("FAIL" is not critical) - command: "aws autoscaling + - name: Set the first-run tags on the ASG ("FAIL" is not critical) # noqa: no-changed-when + ansible.builtin.command: "aws autoscaling create-or-update-tags --region {{ ansible_ec2_placement_region }} --tags '{{ deployment_firstrun_meta | to_json }}'" ignore_errors: true - name: Set the tags on the local instance ("FAIL" is not critical) - ec2_tag: + amazon.aws.ec2_tag: region: "{{ ansible_ec2_placement_region }}" resource: "{{ ansible_ec2_instance_id }}" tags: diff --git a/roles/aws_common/templates/amazon-cloudwatch-agent.json.j2 b/roles/aws_common/templates/amazon-cloudwatch-agent.json.j2 index cebec1e..5b86b94 100644 --- a/roles/aws_common/templates/amazon-cloudwatch-agent.json.j2 +++ b/roles/aws_common/templates/amazon-cloudwatch-agent.json.j2 @@ -4,7 +4,7 @@ "run_as_user": "root" }, - {% if atl_aws_enable_cloudwatch_logs is defined and atl_aws_enable_cloudwatch_logs %} + {% if atl_aws_enable_cloudwatch_logs is defined and atl_aws_enable_cloudwatch_logs | bool %} "logs": { "logs_collected": { "files": { diff --git a/roles/aws_shared_fs_config/meta/main.yml b/roles/aws_shared_fs_config/meta/main.yml index b0f4ac0..8644a1f 100644 --- a/roles/aws_shared_fs_config/meta/main.yml +++ b/roles/aws_shared_fs_config/meta/main.yml @@ -1,3 +1,3 @@ --- dependencies: - - aws_common + - role: aws_common diff --git a/roles/aws_shared_fs_config/tasks/main.yml b/roles/aws_shared_fs_config/tasks/main.yml index 589383c..c906926 100644 --- a/roles/aws_shared_fs_config/tasks/main.yml +++ b/roles/aws_shared_fs_config/tasks/main.yml @@ -1,13 +1,13 @@ --- - name: Create mountpoint - file: + ansible.builtin.file: state: directory path: "{{ atl_shared_mountpoint }}" mode: 0755 - name: Enable mountpoint in fstab - mount: + ansible.posix.mount: path: "{{ atl_shared_mountpoint }}" src: "{{ efs_target }}:{{ efs_src_dir }}" fstype: "{{ efs_type }}" diff --git a/roles/bitbucket_config/meta/main.yml b/roles/bitbucket_config/meta/main.yml index ca5ee97..ff263fc 100644 --- a/roles/bitbucket_config/meta/main.yml +++ b/roles/bitbucket_config/meta/main.yml @@ -1,4 +1,7 @@ --- +galaxy_info: + namespace: dc_deployments_automation + dependencies: - - bitbucket_common + - role: bitbucket_common diff --git a/roles/bitbucket_config/molecule/default/Dockerfile.j2 b/roles/bitbucket_config/molecule/default/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/bitbucket_config/molecule/default/Dockerfile.j2 +++ b/roles/bitbucket_config/molecule/default/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/bitbucket_config/molecule/default/converge.yml b/roles/bitbucket_config/molecule/default/converge.yml index 64dcf3f..e8b146a 100644 --- a/roles/bitbucket_config/molecule/default/converge.yml +++ b/roles/bitbucket_config/molecule/default/converge.yml @@ -16,6 +16,7 @@ atl_elasticsearch_password: password atl_bitbucket_properties_raw: "key1=val1 key2=val2 key3=val3" + skip_shared_home_symlink: true roles: - role: linux_common diff --git a/roles/bitbucket_config/molecule/default/molecule.yml b/roles/bitbucket_config/molecule/default/molecule.yml index 400e984..07706c7 100644 --- a/roles/bitbucket_config/molecule/default/molecule.yml +++ b/roles/bitbucket_config/molecule/default/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/bitbucket_config/molecule/default/tests/test_default.py b/roles/bitbucket_config/molecule/default/tests/test_default.py index 024095f..cd7a94a 100644 --- a/roles/bitbucket_config/molecule/default/tests/test_default.py +++ b/roles/bitbucket_config/molecule/default/tests/test_default.py @@ -15,9 +15,9 @@ def test_config_file(host): assert f.contains("jdbc.user=bb_db_user") assert f.contains("jdbc.password=molecule_password") - assert f.contains("plugin.search.elasticsearch.username=bitbucket") - assert f.contains("plugin.search.elasticsearch.password=password") - assert not f.contains("plugin.search.elasticsearch.aws.region") + assert f.contains("plugin.search.config.username=bitbucket") + assert f.contains("plugin.search.config.password=password") + assert not f.contains("plugin.search.config.aws.region") assert f.contains("^key1=val1$") assert f.contains("^key2=val2$") diff --git a/roles/bitbucket_config/molecule/iam_elasticsearch/Dockerfile.j2 b/roles/bitbucket_config/molecule/iam_elasticsearch/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/bitbucket_config/molecule/iam_elasticsearch/Dockerfile.j2 +++ b/roles/bitbucket_config/molecule/iam_elasticsearch/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/bitbucket_config/molecule/iam_elasticsearch/converge.yml b/roles/bitbucket_config/molecule/iam_elasticsearch/converge.yml index 596fbfc..9b782f2 100644 --- a/roles/bitbucket_config/molecule/iam_elasticsearch/converge.yml +++ b/roles/bitbucket_config/molecule/iam_elasticsearch/converge.yml @@ -13,7 +13,7 @@ atl_jdbc_password: 'molecule_password' atl_aws_region: us-east-2 - + skip_shared_home_symlink: true roles: - role: linux_common - role: product_common diff --git a/roles/bitbucket_config/molecule/iam_elasticsearch/molecule.yml b/roles/bitbucket_config/molecule/iam_elasticsearch/molecule.yml index 400e984..07706c7 100644 --- a/roles/bitbucket_config/molecule/iam_elasticsearch/molecule.yml +++ b/roles/bitbucket_config/molecule/iam_elasticsearch/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/bitbucket_config/molecule/iam_elasticsearch/tests/test_default.py b/roles/bitbucket_config/molecule/iam_elasticsearch/tests/test_default.py index 1c541f5..a40578c 100644 --- a/roles/bitbucket_config/molecule/iam_elasticsearch/tests/test_default.py +++ b/roles/bitbucket_config/molecule/iam_elasticsearch/tests/test_default.py @@ -10,6 +10,6 @@ def test_config_file(host): f = host.file('/media/atl/bitbucket/shared/bitbucket.properties') assert f.exists - assert not f.contains("plugin.search.elasticsearch.username") - assert not f.contains("plugin.search.elasticsearch.password") - assert f.contains("plugin.search.elasticsearch.aws.region=us-east-2") + assert not f.contains("plugin.search.config.username") + assert not f.contains("plugin.search.config.password") + assert f.contains("plugin.search.config.aws.region=us-east-2") diff --git a/roles/bitbucket_config/tasks/main.yml b/roles/bitbucket_config/tasks/main.yml index 4de771b..868299d 100644 --- a/roles/bitbucket_config/tasks/main.yml +++ b/roles/bitbucket_config/tasks/main.yml @@ -1,22 +1,28 @@ --- - name: Create Bitbucket shared dir if necessary - file: + ansible.builtin.file: path: "{{ atl_product_home_shared }}" owner: "{{ atl_product_user }}" group: "{{ atl_product_user }}" mode: 0750 state: directory +- name: Check if Bitbucket config file exists + ansible.builtin.stat: + path: "{{ atl_product_home_shared }}/bitbucket.properties" + register: bitbucket_config + - name: Create Bitbucket config file - template: + ansible.builtin.template: src: bitbucket.properties.j2 dest: "{{ atl_product_home_shared }}/bitbucket.properties" owner: "{{ atl_product_user }}" group: "{{ atl_product_user }}" + when: not bitbucket_config.stat.exists - name: Remove write permissions from installation directory - file: + ansible.builtin.file: path: "{{ atl_product_installation_versioned }}" owner: "root" group: "root" @@ -25,7 +31,7 @@ changed_when: false # For Molecule idempotence check - name: Create conf/Catalina directory so catalina.out logging works - file: + ansible.builtin.file: path: "{{ atl_product_installation_versioned }}/conf/Catalina" state: directory mode: "u=rwX,g=rX,o-rwx" diff --git a/roles/bitbucket_config/templates/bitbucket.properties.j2 b/roles/bitbucket_config/templates/bitbucket.properties.j2 index df7b88c..7b0a2b7 100644 --- a/roles/bitbucket_config/templates/bitbucket.properties.j2 +++ b/roles/bitbucket_config/templates/bitbucket.properties.j2 @@ -12,15 +12,15 @@ hazelcast.network.aws.region={{ atl_aws_region }} hazelcast.network.aws.tag.value={{ atl_aws_stack_name }} hazelcast.group.name={{ atl_aws_stack_name }} hazelcast.group.password={{ atl_aws_stack_name }} -plugin.search.elasticsearch.baseurl={{ atl_elasticsearch_endpoint }} -{% if elasticsearch_should_auth_with_iam %} -plugin.search.elasticsearch.aws.region={{ atl_aws_region }} +plugin.search.config.baseurl={{ atl_elasticsearch_endpoint }} +{% if elasticsearch_should_auth_with_iam | bool %} +plugin.search.config.aws.region={{ atl_aws_region }} {% else %} -plugin.search.elasticsearch.username={{ atl_elasticsearch_username }} -plugin.search.elasticsearch.password={{ atl_elasticsearch_password }} +plugin.search.config.username={{ atl_elasticsearch_username }} +plugin.search.config.password={{ atl_elasticsearch_password }} {% endif %} setup.displayName=Bitbucket -setup.baseUrl = {{ atl_bitbucket_baseurl }} +setup.baseUrl={{ atl_bitbucket_baseurl }} setup.license={{ atl_bitbucket_license_key }} setup.sysadmin.username=admin setup.sysadmin.password={{ atl_bitbucket_admin_password }} diff --git a/roles/bitbucket_dataset_restore/meta/main.yml b/roles/bitbucket_dataset_restore/meta/main.yml index ca5ee97..ad54581 100644 --- a/roles/bitbucket_dataset_restore/meta/main.yml +++ b/roles/bitbucket_dataset_restore/meta/main.yml @@ -1,4 +1,4 @@ --- dependencies: - - bitbucket_common + - role: bitbucket_common diff --git a/roles/bitbucket_dataset_restore/tasks/main.yml b/roles/bitbucket_dataset_restore/tasks/main.yml index 0204079..2f0fb68 100644 --- a/roles/bitbucket_dataset_restore/tasks/main.yml +++ b/roles/bitbucket_dataset_restore/tasks/main.yml @@ -1,24 +1,24 @@ --- - name: Force all notified handlers to run at this point, not waiting for normal sync points - meta: flush_handlers + ansible.builtin.meta: flush_handlers - name: wait for port 7990 to be up - wait_for: + ansible.builtin.wait_for: port: 7990 delay: 60 - name: wait for path to become available - wait_for: + ansible.builtin.wait_for: path: "{{ atl_product_home_shared }}/data/migration/import" delay: 60 - name: Copy Bitbucket dataset from s3 - get_url: + ansible.builtin.get_url: url: "{{ atl_bitbucket_dataset_url }}" dest: "{{ atl_product_home_shared }}/data/migration/import" - name: Invoke Import API - uri: + ansible.builtin.uri: url: "{{ atl_bitbucket_baseurl }}/rest/api/1.0/migration/imports" user: admin password: "{{ atl_bitbucket_admin_password }}" @@ -36,7 +36,7 @@ failed_when: output is defined and output.json is defined and output.json.state != 'INITIALISING' - name: get import status - uri: + ansible.builtin.uri: url: "{{ atl_bitbucket_baseurl }}/rest/api/1.0/migration/imports/{{ output.json.id }}" user: admin password: "{{ atl_bitbucket_admin_password }}" @@ -50,7 +50,7 @@ delay: 10 - name: create lock file - file: + ansible.builtin.file: path: "{{ atl_product_home_shared }}/data/migration/import/lock.file" state: touch when: import_status.json.state == 'COMPLETED' diff --git a/roles/bitbucket_mesh/defaults/main.yml b/roles/bitbucket_mesh/defaults/main.yml new file mode 100644 index 0000000..555d898 --- /dev/null +++ b/roles/bitbucket_mesh/defaults/main.yml @@ -0,0 +1,7 @@ +mesh_install_dir: /opt/atlassian/mesh +bitbucket_mesh_maven_repo: https://packages.atlassian.com/maven-external +bitbucket_mesh_version: "1.3.1" + +# if basic_auth is required for download of atlassian installable artifact, provide the name of an AWS Secrets Manager secret +# with values for both password and username +atl_download_secret_name: '' \ No newline at end of file diff --git a/roles/bitbucket_mesh/handlers/main.yml b/roles/bitbucket_mesh/handlers/main.yml new file mode 100644 index 0000000..d0864a8 --- /dev/null +++ b/roles/bitbucket_mesh/handlers/main.yml @@ -0,0 +1,19 @@ +--- + +- name: Restart Product + ansible.builtin.service: + name: "{{ atl_systemd_service_name }}" + state: restarted + when: + - atl_startup_restart + - molecule_yml is not defined + no_log: true + +- name: Enable Product + ansible.builtin.service: + name: "{{ atl_systemd_service_name }}" + enabled: true + when: + - atl_startup_enable + - molecule_yml is not defined + no_log: true diff --git a/roles/bitbucket_mesh/tasks/main.yml b/roles/bitbucket_mesh/tasks/main.yml new file mode 100644 index 0000000..44f72aa --- /dev/null +++ b/roles/bitbucket_mesh/tasks/main.yml @@ -0,0 +1,88 @@ +--- + +- name: Create Bitbucket dirs if necessary + ansible.builtin.file: + path: "{{ item }}" + owner: "{{ atl_product_user_uid }}" + group: "{{ atl_product_user_uid }}" + mode: 0750 + state: directory + recurse: no + with_items: + - "{{ atl_home_base }}/{{ atl_product_edition }}" + - "{{ atl_home_base }}/{{ atl_product_user }}" + - "{{ mesh_install_dir }}" + + +# optionally grab basic_auth creds from secrets_manager secret called 'download_atlassian' +- name: set basic_auth facts if the secret exists + ansible.builtin.set_fact: + download_atlassian_password: "{{ lookup('amazon.aws.aws_secret', atl_download_secret_name + '.password', region=ansible_ec2_placement_region, bypath=false, nested=true, on_denied='skip', on_missing='skip') }}" + download_atlassian_username: "{{ lookup('amazon.aws.aws_secret', atl_download_secret_name + '.username', region=ansible_ec2_placement_region, bypath=false, nested=true, on_denied='skip', on_missing='skip') }}" + failed_when: false + ignore_errors: yes + no_log: true + when: + - ansible_ec2_placement_region is defined + - atl_download_secret_name is defined + tags: + - runtime_pkg + +# Fetch binary and copy to temp +# optionally use basic_auth creds from secrets_manager +- name: Fetch binary + ansible.builtin.get_url: + url: "{{ atl_product_download_url }}" + dest: "{{ mesh_install_dir }}" + url_password: "{{ download_atlassian_password | default(omit) }}" + url_username: "{{ download_atlassian_username | default(omit) }}" + owner: "{{ atl_product_user }}" + group: "{{ atl_product_user }}" + mode: 0644 + force: false + register: maven_download + +- name: extract the downloaded artifact + ansible.builtin.unarchive: + src: "{{ maven_download.dest }}" + dest: "/opt/atlassian/mesh/" + creates: "/opt/atlassian/mesh/atlassian-bitbucket-mesh-{{ atl_product_version }}" + mode: 0755 + owner: "{{ atl_product_user }}" + group: "{{ atl_product_user }}" + register: mesh_extract + when: + - maven_download.changed | bool + +# the owner/group on the unarchive above isn't thorough +- name: adjust permissions on the extracted directory + ansible.builtin.file: + state: directory + path: "/opt/atlassian/mesh/atlassian-bitbucket-mesh-{{ atl_product_version }}" + owner: "{{ atl_product_user }}" + group: "{{ atl_product_user }}" + recurse: yes + +- name: symlink to the current version + ansible.builtin.file: + src: "/opt/atlassian/mesh/atlassian-bitbucket-mesh-{{ atl_product_version }}" + dest: "/opt/atlassian/mesh/current" + state: link + when: + - mesh_extract.changed | bool + +- name: touch the jmx password file + ansible.builtin.file: + path: "{{ atl_home_base }}/{{ atl_product_edition }}/jmx.access" + state: touch + owner: "{{ atl_product_user_uid }}" + group: "{{ atl_product_user_uid }}" + mode: 0600 + +# - name: template out mesh.properties +# ansible.builtin.template: +# src: mesh.properties.j2 +# dest: "{{ atl_home_base }}/{{ atl_product_edition }}/mesh.properties" +# owner: "{{ atl_product_user }}" +# group: "{{ atl_product_user }}" +# mode: 0600 \ No newline at end of file diff --git a/roles/bitbucket_mesh/templates/mesh.properties.j2 b/roles/bitbucket_mesh/templates/mesh.properties.j2 new file mode 100644 index 0000000..1143ced --- /dev/null +++ b/roles/bitbucket_mesh/templates/mesh.properties.j2 @@ -0,0 +1,10 @@ +# Listen for gRPC requests on all interfaces by default. This allows connecting to the node remotely +grpc.server.address=0.0.0.0 + +authentication.token={{ ansible_hostname | hash('md5') }} +node.name={{ ansible_hostname }} +node.id={{ ansible_hostname }} + +jmx.enabled={{ mesh_jmx_enabled | default(false) }} +management.metrics.export.jmx.domain={{ mesh_jmx_export_domain | default("") }} +metrics.tags.host={{ ansible_hostname }} \ No newline at end of file diff --git a/roles/confluence_config/defaults/main.yml b/roles/confluence_config/defaults/main.yml index d755769..d5ba7bc 100644 --- a/roles/confluence_config/defaults/main.yml +++ b/roles/confluence_config/defaults/main.yml @@ -19,6 +19,10 @@ atl_hazelcast_network_aws_iam_region: "{{ lookup('env', 'ATL_HAZELCAST_NETWORK_A atl_hazelcast_network_aws_iam_role: "{{ lookup('env', 'ATL_HAZELCAST_NETWORK_AWS_IAM_ROLE') }}" atl_hazelcast_network_aws_tag_value: "{{ lookup('env', 'ATL_HAZELCAST_NETWORK_AWS_TAG_VALUE') }}" +atl_opensearch_endpoint: "{{ lookup('env', 'ATL_OPENSEARCH_ENDPOINT') }}" +atl_opensearch_password: "{{ lookup('env', 'ATL_OPENSEARCH_PASSWORD') }}" +atl_opensearch_user: "{{ lookup('env', 'ATL_OPENSEARCH_USER') }}" + atl_catalina_opts: "" atl_catalina_opts_extra: >- -Datlassian.event.thread_pool_configuration.queue_size=4096 @@ -33,7 +37,7 @@ atl_catalina_opts_extra: >- -Dsynchrony.proxy.enabled=false -Dconfluence.cluster.node.name={{ atl_local_ipv4 }} -Dconfluence.cluster.hazelcast.max.no.heartbeat.seconds=60 - {% if atl_synchrony_service_url|string|length %}-Dsynchrony.service.url={{ atl_synchrony_service_url }}{% endif %} + {% if atl_synchrony_service_url | string | length %}-Dsynchrony.service.url={{ atl_synchrony_service_url }}{% endif %} atl_tomcat_port: "8080" atl_tomcat_mgmt_port: "8005" diff --git a/roles/confluence_config/molecule/aurora/Dockerfile.j2 b/roles/confluence_config/molecule/aurora/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/confluence_config/molecule/aurora/Dockerfile.j2 +++ b/roles/confluence_config/molecule/aurora/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/confluence_config/molecule/aurora/molecule.yml b/roles/confluence_config/molecule/aurora/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/confluence_config/molecule/aurora/molecule.yml +++ b/roles/confluence_config/molecule/aurora/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/confluence_config/molecule/default/Dockerfile.j2 b/roles/confluence_config/molecule/default/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/confluence_config/molecule/default/Dockerfile.j2 +++ b/roles/confluence_config/molecule/default/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/confluence_config/molecule/default/converge.yml b/roles/confluence_config/molecule/default/converge.yml index 636e9aa..5a7ee00 100644 --- a/roles/confluence_config/molecule/default/converge.yml +++ b/roles/confluence_config/molecule/default/converge.yml @@ -16,7 +16,7 @@ atl_autologin_cookie_age: "COOKIEAGE" atl_local_ipv4: "1.1.1.1" atl_tomcat_scheme: "http" - atl_tomcat_contextpath: "foo" + atl_tomcat_contextpath: "/foo" atl_proxy_name: "localhost" atl_proxy_port: "80" atl_db_preferredtestquery: "select 1;" diff --git a/roles/confluence_config/molecule/default/molecule.yml b/roles/confluence_config/molecule/default/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/confluence_config/molecule/default/molecule.yml +++ b/roles/confluence_config/molecule/default/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/confluence_config/molecule/default/tests/test_default.py b/roles/confluence_config/molecule/default/tests/test_default.py index c8fc29a..c312b50 100644 --- a/roles/confluence_config/molecule/default/tests/test_default.py +++ b/roles/confluence_config/molecule/default/tests/test_default.py @@ -38,7 +38,7 @@ def test_server_file(host): assert f.exists assert f.contains('Connector port="8080"') assert f.contains('Server port="8005"') - assert f.contains('ec2.amazonaws.com') assert f.contains('jdbc:postgresql://postgres-db.ap-southeast-2.rds.amazonaws.com:5432/confluence') assert f.contains('molecule_password') - assert f.contains('select 1;') + assert (f.contains('select 1;') or f.contains('true')) assert f.contains('/foo') assert f.contains('my-cluster-tag') diff --git a/roles/confluence_config/molecule/password_char_escaping/Dockerfile.j2 b/roles/confluence_config/molecule/password_char_escaping/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/confluence_config/molecule/password_char_escaping/Dockerfile.j2 +++ b/roles/confluence_config/molecule/password_char_escaping/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/confluence_config/molecule/password_char_escaping/molecule.yml b/roles/confluence_config/molecule/password_char_escaping/molecule.yml index cc50e25..5b3f590 100644 --- a/roles/confluence_config/molecule/password_char_escaping/molecule.yml +++ b/roles/confluence_config/molecule/password_char_escaping/molecule.yml @@ -1,20 +1,22 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/confluence_config/molecule/system_jdk/Dockerfile.j2 b/roles/confluence_config/molecule/system_jdk/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/confluence_config/molecule/system_jdk/Dockerfile.j2 +++ b/roles/confluence_config/molecule/system_jdk/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/confluence_config/molecule/system_jdk/molecule.yml b/roles/confluence_config/molecule/system_jdk/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/confluence_config/molecule/system_jdk/molecule.yml +++ b/roles/confluence_config/molecule/system_jdk/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/confluence_config/tasks/amazon_fonts.yml b/roles/confluence_config/tasks/amazon-2023_fonts.yml similarity index 89% rename from roles/confluence_config/tasks/amazon_fonts.yml rename to roles/confluence_config/tasks/amazon-2023_fonts.yml index 8fa2bda..e2535dd 100644 --- a/roles/confluence_config/tasks/amazon_fonts.yml +++ b/roles/confluence_config/tasks/amazon-2023_fonts.yml @@ -1,15 +1,14 @@ --- - name: Install Google Noto fonts for language coverage - yum: + ansible.builtin.dnf: name: - "google-noto-*" - name: Link the language fonts into the JDK # Not idiomatic, but cleaner than messing with nested lookups... - shell: + ansible.builtin.shell: cmd: "ln -sf /usr/share/fonts/google-noto*/* {{ item }}/" creates: "{{ item }}/NotoSansJavanese-Regular.ttf" - warn: false with_items: "{{ atl_fonts_fallback_dirs }}" changed_when: false # For Molecule idempotence check diff --git a/roles/confluence_config/tasks/amazon-2_fonts.yml b/roles/confluence_config/tasks/amazon-2_fonts.yml new file mode 100644 index 0000000..d7bcee0 --- /dev/null +++ b/roles/confluence_config/tasks/amazon-2_fonts.yml @@ -0,0 +1,5 @@ +--- + +- name: Amazon Linux 2 no longer supported + fail: + msg: "Amazon Linux 2 is no longer supported; see README.md for supported operating systems/environments." diff --git a/roles/confluence_config/tasks/main.yml b/roles/confluence_config/tasks/main.yml index ea807bb..00854ff 100644 --- a/roles/confluence_config/tasks/main.yml +++ b/roles/confluence_config/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: Create application directories - file: + ansible.builtin.file: path: "{{ item }}" state: directory mode: 0750 @@ -17,28 +17,25 @@ # Create symlink to force single (unclustered) Confluence to store # shared-data and attachments in the shared drive. - name: Symlink local attachments to shared storage - file: - src: "{{ item.0 }}" - dest: "{{ item.1 }}" + ansible.builtin.file: + src: "{{ item.src }}" + dest: "{{ item.dest }}" force: false state: link mode: 0750 owner: "{{ atl_product_user }}" group: "{{ atl_product_user }}" - vars: - - links: - - ["{{ atl_product_home_shared }}/", "{{ atl_product_home }}/shared-home"] - - ["{{ atl_product_home_shared }}/attachments/", "{{ atl_product_home }}/attachments"] - with_nested: - - "{{ links }}" + loop: + - {src: "{{ atl_product_home_shared }}/", dest: "{{ atl_product_home }}/shared-home"} + - {src: "{{ atl_product_home_shared }}/attachments/", dest: "{{ atl_product_home }}/attachments"} - name: Create Tomcat server config - template: + ansible.builtin.template: src: server.xml.j2 dest: "{{ atl_product_installation_versioned }}/conf/server.xml" - name: Override JVM memory settings. - replace: + ansible.builtin.replace: path: "{{ atl_product_installation_versioned }}/bin/setenv.sh" regexp: "-{{ item }}\\d+m " replace: "-{{ item }}{{ atl_jvm_heap }} " @@ -47,43 +44,65 @@ - 'Xms' - name: Set the Tomcat environment - lineinfile: + ansible.builtin.lineinfile: path: "{{ atl_product_installation_versioned }}/bin/setenv.sh" insertafter: "EOF" line: 'export CATALINA_OPTS="${CATALINA_OPTS} {{ atl_catalina_opts }} {{ atl_catalina_opts_extra }}"' - name: Configure login properties - template: + ansible.builtin.template: src: seraph-config.xml.j2 dest: "{{ atl_product_installation_versioned }}/confluence/WEB-INF/classes/seraph-config.xml" - name: Configure Confluence home directory - template: + ansible.builtin.template: src: confluence-init.properties.j2 dest: "{{ atl_product_installation_versioned }}/confluence/WEB-INF/classes/confluence-init.properties" - name: Create Confluence configuration - template: + ansible.builtin.template: src: confluence.cfg.xml.j2 dest: "{{ atl_product_home }}/confluence.cfg.xml" owner: "{{ atl_product_user }}" group: "{{ atl_product_user }}" -- name: Limit permissions on the installation directory - file: - path: "{{ atl_product_installation_versioned }}" +- name: Limit permissions on the installer temp directory, recursively + ansible.builtin.file: + path: "{{ atl_installer_temp }}" owner: "root" group: "root" mode: "u=rwX,g=rX,o=rX" recurse: true - with_items: - - "{{ atl_installer_temp }}" - - "{{ atl_product_installation_versioned }}" - - "{{ atl_product_version_cache_dir }}" + changed_when: false # For Molecule idempotence check + +- name: Limit permissions on the installation directory, non-recursively + ansible.builtin.file: + path: "{{ atl_product_installation_versioned }}" + owner: "root" + group: "root" + mode: "u=rwX,g=rX,o=rX" + changed_when: false # For Molecule idempotence check + +- name: Find top-level files/directories in installation directory, excluding working directories + ansible.builtin.find: + paths: "{{ atl_product_installation_versioned }}" + depth: 1 + file_type: any + excludes: logs,temp,work + register: atl_product_installation_versioned_file_list + +- name: Limit permissions on files and directories in the installation directory, recursively, excluding working directories + ansible.builtin.file: + path: "{{ item.path }}" + owner: "root" + group: "root" + mode: "u=rwX,g=rX,o=rX" + recurse: "{{ item.isdir }}" + loop: "{{ atl_product_installation_versioned_file_list.files }}" changed_when: false # For Molecule idempotence check - name: Grant access to the product working directories - file: + ansible.builtin.file: path: "{{ item }}" state: directory mode: "u=rwX,g=rX,o-rwx" @@ -97,7 +116,7 @@ changed_when: false # For Molecule idempotence check - name: Create conf/Catalina directory owned by product so catalina.out logging works - file: + ansible.builtin.file: path: "{{ atl_product_installation_versioned }}/conf/Catalina" state: directory mode: "u=rwX,g=rX,o-rwx" @@ -106,7 +125,7 @@ changed_when: false # For Molecule idempotence check - name: Assert baseurl to same as atl_proxy_name - postgresql_query: + community.postgresql.postgresql_query: login_host: "{{ atl_db_host }}" login_user: "{{ atl_jdbc_user }}" login_password: "{{ atl_jdbc_password }}" @@ -126,11 +145,16 @@ ignore_errors: yes # For Molecule as it has no db test framework included - name: Create JVM font fallback directories - file: + ansible.builtin.file: path: "{{ item }}" state: directory mode: 0755 with_items: "{{ atl_fonts_fallback_dirs }}" -- name: Install & configure distro language fonts - include_tasks: "{{ ansible_distribution|lower }}_fonts.yml" +- name: Install & configure Amazon-Linux-specific language fonts + ansible.builtin.include_tasks: "{{ ansible_distribution | lower }}-{{ ansible_distribution_version }}_fonts.yml" + when: ansible_distribution | lower == 'amazon' + +- name: Install & configure Ubuntu/Debian-specific language fonts + ansible.builtin.include_tasks: "{{ ansible_distribution | lower }}_fonts.yml" + when: ansible_distribution | lower != 'amazon' diff --git a/roles/confluence_config/tasks/ubuntu_fonts.yml b/roles/confluence_config/tasks/ubuntu_fonts.yml index 20fcbb1..41b56d2 100644 --- a/roles/confluence_config/tasks/ubuntu_fonts.yml +++ b/roles/confluence_config/tasks/ubuntu_fonts.yml @@ -1,15 +1,14 @@ --- - name: Install Google Noto fonts for language coverage - package: + ansible.builtin.package: name: - "fonts-noto" - name: Link the language fonts into the JDK # Not idiomatic, but cleaner than messing with nested lookups... - shell: + ansible.builtin.shell: cmd: "ln -sf /usr/share/fonts/truetype/noto/* {{ item }}/" creates: "{{ item }}/NotoSansJavanese-Regular.ttf" - warn: false with_items: "{{ atl_fonts_fallback_dirs }}" changed_when: false # For Molecule idempotence check diff --git a/roles/confluence_config/templates/confluence.cfg.xml.j2 b/roles/confluence_config/templates/confluence.cfg.xml.j2 index 949f332..bc0811f 100644 --- a/roles/confluence_config/templates/confluence.cfg.xml.j2 +++ b/roles/confluence_config/templates/confluence.cfg.xml.j2 @@ -10,13 +10,23 @@ postgresql database-type-standard com.atlassian.confluence.impl.hibernate.dialect.PostgreSQLDialect + ${localHome}/temp ${localHome}/temp ${confluenceHome}/attachments {{ atl_db_driver }} {{ atl_jdbc_url }} {{ atl_jdbc_user }} + + {% if atl_product_version.split(".")[:2] | join(".") is version('8.6', '>=') and atl_secretsmanager_aws_region is defined and atl_secretsmanager_aws_region != "" and atl_secretsmanager_aws_secret_id is defined and atl_secretsmanager_aws_secret_id != "" -%} + com.atlassian.secrets.store.aws.AwsSecretsManagerStore + {"region": "{{ atl_secretsmanager_aws_region }}", "secretId": "{{ atl_secretsmanager_aws_secret_id }}"} + {% else -%} {{ atl_jdbc_password | replace("&", "&") }} + {% endif -%} + + {# Confluence versions 7.13 and newer #} + {%- if (atl_product_version.split(".")[0] | int() == 7 and atl_product_version.split(".")[1] | int() <= 13) or atl_product_version.split(".")[0] | int() < 7 -%} {{ atl_db_poolminsize }} {{ atl_db_poolmaxsize }} {{ atl_db_timeout }} @@ -25,6 +35,13 @@ {{ atl_db_validate }} {{ atl_db_acquireincrement }} {{ atl_db_preferredtestquery }} + {%- else -%} + {{ atl_db_timeout }} + {{ atl_db_poolmaxsize }} + {{ atl_db_poolminsize }} + true + {{ atl_db_provider_class | default('com.atlassian.confluence.impl.hibernate.DelegatingHikariConnectionProvider') }} + {% endif %} {{ atl_product_home_shared }} true @@ -37,9 +54,24 @@ aws {{ atl_aws_stack_name }} 1 - {% if atl_tomcat_contextpath is defined and atl_tomcat_contextpath != '' %} - /{{ atl_tomcat_contextpath }} + {%- if atl_tomcat_contextpath is defined and atl_tomcat_contextpath != '' -%} + {{ atl_tomcat_contextpath }} {% endif %} + {# config specific to opensearch #} + {%- if atl_opensearch_endpoint is defined and atl_opensearch_endpoint != '' %} + {# if password provided set password and user but NOT region #} + {% if atl_opensearch_password is defined and atl_opensearch_password != '' %} + + {{ atl_opensearch_password }} + {{ atl_opensearch_user }} + {%- else %} + + {{ atl_hazelcast_network_aws_iam_region }} + {% endif %} + + https://{{ atl_opensearch_endpoint }} + opensearch + {%- endif %} \ No newline at end of file diff --git a/roles/confluence_config/templates/server.xml.j2 b/roles/confluence_config/templates/server.xml.j2 index 55f9c25..d004cba 100644 --- a/roles/confluence_config/templates/server.xml.j2 +++ b/roles/confluence_config/templates/server.xml.j2 @@ -22,13 +22,10 @@ acceptCount="{{ atl_tomcat_acceptcount }}" secure="{{ atl_tomcat_secure }}" scheme="{{ atl_tomcat_scheme }}" - {% if atl_proxy_name is defined and atl_proxy_name != '' %} - proxyName="{{ atl_proxy_name }}" - {% endif %} - {% if atl_proxy_port is defined and atl_proxy_port != '' %} - proxyPort="{{ atl_proxy_port }}" - {% endif %} - + {% if atl_proxy_name is defined and atl_proxy_name != '' -%}proxyName="{{ atl_proxy_name }}" + {% endif -%} + {% if atl_proxy_port is defined and atl_proxy_port != '' -%}proxyPort="{{ atl_proxy_port }}" + {% endif -%} relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" bindOnInit="false" @@ -40,7 +37,6 @@ {% endif %} + {% if atl_apptunnel_port is defined and atl_apptunnel_port != '' %} + + {% endif %} + debug="0" + useHttpOnly="true"> diff --git a/roles/database_init/tasks/main.yml b/roles/database_init/tasks/main.yml index e065a0a..cec9236 100644 --- a/roles/database_init/tasks/main.yml +++ b/roles/database_init/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: Create application DB user - postgresql_user: + community.postgresql.postgresql_user: login_host: "{{ atl_db_host }}" login_user: "{{ atl_db_root_user }}" login_password: "{{ atl_db_root_password }}" @@ -11,7 +11,7 @@ expires: 'infinity' - name: Collect dbcluster db_names - postgresql_query: + community.postgresql.postgresql_query: login_host: "{{ atl_db_host }}" login_user: "{{ atl_db_root_user }}" login_password: "{{ atl_db_root_password }}" @@ -22,7 +22,7 @@ - block: - name: Update root privs for new user - postgresql_privs: + community.postgresql.postgresql_privs: login_host: "{{ atl_db_host }}" login_user: "{{ atl_db_root_user }}" login_password: "{{ atl_db_root_password }}" @@ -33,7 +33,7 @@ # RDS does not allow changing the collation on an existing DB, it only allows collation change on creation of db. If the db already exists, we need the “create new application database” task to be skipped, idempotence can not be relied upon as we cant be certain the collation of the existing db - name: Create new application database - postgresql_db: + community.postgresql.postgresql_db: login_host: "{{ atl_db_host }}" login_user: "{{ atl_db_root_user }}" login_password: "{{ atl_db_root_password }}" @@ -45,13 +45,13 @@ lc_ctype: "{{ atl_jdbc_ctype }}" template: "{{ atl_jdbc_template }}" register: db_created - when: "atl_jdbc_db_name not in (dbcluster_db_names.query_result | map(attribute='datname') )" + when: "atl_jdbc_db_name not in (dbcluster_db_names.query_result | map(attribute='datname'))" tags: - new_only - name: Assert ownership of public schema - postgresql_query: + community.postgresql.postgresql_query: login_host: "{{ atl_db_host }}" login_user: "{{ atl_db_root_user }}" login_password: "{{ atl_db_root_password }}" @@ -59,7 +59,7 @@ query: "ALTER SCHEMA public OWNER to {{ atl_db_root_user }};" - name: Grant privs to root user on public schema - postgresql_query: + community.postgresql.postgresql_query: login_host: "{{ atl_db_host }}" login_user: "{{ atl_db_root_user }}" login_password: "{{ atl_db_root_password }}" @@ -67,7 +67,7 @@ query: "GRANT ALL ON SCHEMA public TO {{ atl_db_root_user }};" - name: Grant privs to application user on public schema - postgresql_query: + community.postgresql.postgresql_query: login_host: "{{ atl_db_host }}" login_user: "{{ atl_db_root_user }}" login_password: "{{ atl_db_root_password }}" diff --git a/roles/diy_backup/molecule/default/Dockerfile.j2 b/roles/diy_backup/molecule/default/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/diy_backup/molecule/default/Dockerfile.j2 +++ b/roles/diy_backup/molecule/default/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/diy_backup/molecule/default/converge.yml b/roles/diy_backup/molecule/default/converge.yml index a5cecc3..56c2b25 100644 --- a/roles/diy_backup/molecule/default/converge.yml +++ b/roles/diy_backup/molecule/default/converge.yml @@ -20,12 +20,12 @@ pre_tasks: - name: Create base dir - file: + ansible.builtin.file: path: '/opt/atlassian/bin' state: directory - name: Install git - package: + ansible.builtin.package: name: git roles: diff --git a/roles/diy_backup/molecule/default/molecule.yml b/roles/diy_backup/molecule/default/molecule.yml index 400e984..07706c7 100644 --- a/roles/diy_backup/molecule/default/molecule.yml +++ b/roles/diy_backup/molecule/default/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/diy_backup/tasks/main.yml b/roles/diy_backup/tasks/main.yml index 3f1b1be..46dc3c9 100644 --- a/roles/diy_backup/tasks/main.yml +++ b/roles/diy_backup/tasks/main.yml @@ -2,19 +2,19 @@ - name: Fetch the DIY backups repository - git: + ansible.builtin.git: repo: "{{ atl_diy_backup_repo }}" dest: "{{ atl_diy_backup_dir }}" version: "master" - name: Configure DIY backup for BB on AWS - template: + ansible.builtin.template: src: "bitbucket.diy-backup.vars.sh.j2" dest: "{{ atl_diy_backup_dir }}/bitbucket.diy-backup.vars.sh" mode: 0640 - name: Install backup wrapper script - template: + ansible.builtin.template: src: "run-backup.j2" dest: "{{ atl_installation_base }}/bin/run-backup" mode: 0750 diff --git a/roles/jira_config/molecule/aurora/Dockerfile.j2 b/roles/jira_config/molecule/aurora/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/jira_config/molecule/aurora/Dockerfile.j2 +++ b/roles/jira_config/molecule/aurora/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/jira_config/molecule/aurora/molecule.yml b/roles/jira_config/molecule/aurora/molecule.yml index 400e984..07706c7 100644 --- a/roles/jira_config/molecule/aurora/molecule.yml +++ b/roles/jira_config/molecule/aurora/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/jira_config/molecule/default/Dockerfile.j2 b/roles/jira_config/molecule/default/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/jira_config/molecule/default/Dockerfile.j2 +++ b/roles/jira_config/molecule/default/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/jira_config/molecule/default/molecule.yml b/roles/jira_config/molecule/default/molecule.yml index 400e984..07706c7 100644 --- a/roles/jira_config/molecule/default/molecule.yml +++ b/roles/jira_config/molecule/default/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/jira_config/molecule/jira_config_props/Dockerfile.j2 b/roles/jira_config/molecule/jira_config_props/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/jira_config/molecule/jira_config_props/Dockerfile.j2 +++ b/roles/jira_config/molecule/jira_config_props/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/jira_config/molecule/jira_config_props/converge.yml b/roles/jira_config/molecule/jira_config_props/converge.yml index 7e86b81..e0b51fa 100644 --- a/roles/jira_config/molecule/jira_config_props/converge.yml +++ b/roles/jira_config/molecule/jira_config_props/converge.yml @@ -30,11 +30,11 @@ pre_tasks: - name: Create shared home - file: + ansible.builtin.file: path: '/media/atl/jira/shared/' state: directory - name: Create jira-config.properties to check copy - copy: + ansible.builtin.copy: dest: '/media/atl/jira/shared/jira-config.properties' content: "jira.projectkey.warning = testwarning" force: false # For idempotency check diff --git a/roles/jira_config/molecule/jira_config_props/molecule.yml b/roles/jira_config/molecule/jira_config_props/molecule.yml index 400e984..07706c7 100644 --- a/roles/jira_config/molecule/jira_config_props/molecule.yml +++ b/roles/jira_config/molecule/jira_config_props/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/jira_config/molecule/password_char_escaping/Dockerfile.j2 b/roles/jira_config/molecule/password_char_escaping/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/jira_config/molecule/password_char_escaping/Dockerfile.j2 +++ b/roles/jira_config/molecule/password_char_escaping/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/jira_config/molecule/password_char_escaping/molecule.yml b/roles/jira_config/molecule/password_char_escaping/molecule.yml index 400e984..07706c7 100644 --- a/roles/jira_config/molecule/password_char_escaping/molecule.yml +++ b/roles/jira_config/molecule/password_char_escaping/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/jira_config/tasks/main.yml b/roles/jira_config/tasks/main.yml index 9f03d5b..c9476a9 100644 --- a/roles/jira_config/tasks/main.yml +++ b/roles/jira_config/tasks/main.yml @@ -2,29 +2,29 @@ - name: Create database config - template: + ansible.builtin.template: src: dbconfig.xml.j2 dest: "{{ atl_product_home }}/dbconfig.xml" owner: "{{ atl_product_user }}" - name: Create cluster config - template: + ansible.builtin.template: src: cluster.properties.j2 dest: "{{ atl_product_home }}/cluster.properties" owner: "{{ atl_product_user }}" - name: Create server config - template: + ansible.builtin.template: src: server.xml.j2 dest: "{{ atl_product_installation_versioned }}/conf/server.xml" - name: Check for a jira-config.properties in the shared home - stat: + ansible.builtin.stat: path: "{{ atl_product_home_shared }}/jira-config.properties" register: jira_config_properties - name: Copy jira-config.properties if exists - copy: + ansible.builtin.copy: remote_src: true src: "{{ atl_product_home_shared }}/jira-config.properties" dest: "{{ atl_product_home }}/jira-config.properties" @@ -35,7 +35,7 @@ - name: Override JVM memory settings. # Ugly but necessary as the product installs this file so we need to make the change here. - lineinfile: + ansible.builtin.lineinfile: path: "{{ atl_product_installation_versioned }}/bin/setenv.sh" backrefs: true regexp: "^{{ item }}=" @@ -45,25 +45,25 @@ - 'JVM_MAXIMUM_MEMORY' - name: Set Jira home directory - lineinfile: + ansible.builtin.lineinfile: path: "{{ atl_product_installation_versioned }}/bin/setenv.sh" regexp: "JIRA_HOME=" line: 'JIRA_HOME="{{ atl_product_home }}"' - name: Set the Tomcat environment - lineinfile: + ansible.builtin.lineinfile: path: "{{ atl_product_installation_versioned }}/bin/setenv.sh" insertafter: "EOF" line: 'export CATALINA_OPTS="${CATALINA_OPTS} {{ atl_catalina_opts }} {{ atl_catalina_opts_extra }}"' - name: Set support recommended JVM args - lineinfile: + ansible.builtin.lineinfile: path: "{{ atl_product_installation_versioned }}/bin/setenv.sh" regexp: "JVM_SUPPORT_RECOMMENDED_ARGS=" line: 'JVM_SUPPORT_RECOMMENDED_ARGS="{{ atl_jvm_opts }}"' - name: Create application directories - file: + ansible.builtin.file: path: "{{ item }}" state: directory mode: 0750 @@ -75,22 +75,43 @@ - "{{ atl_product_shared_plugins }}" changed_when: false # For Molecule idempotence check - -- name: Limit permissions on the installation directory - file: - path: "{{ atl_product_installation_versioned }}" +- name: Limit permissions on the installer temp directory, recursively + ansible.builtin.file: + path: "{{ atl_installer_temp }}" owner: "root" group: "root" mode: "u=rwX,g=rX,o=rX" recurse: true - with_items: - - "{{ atl_installer_temp }}" - - "{{ atl_product_installation_versioned }}" - - "{{ atl_product_version_cache_dir }}" + changed_when: false # For Molecule idempotence check + +- name: Limit permissions on the installation directory, non-recursively + ansible.builtin.file: + path: "{{ atl_product_installation_versioned }}" + owner: "root" + group: "root" + mode: "u=rwX,g=rX,o=rX" + changed_when: false # For Molecule idempotence check + +- name: Find top-level files/directories in installation directory, excluding working directories + ansible.builtin.find: + paths: "{{ atl_product_installation_versioned }}" + depth: 1 + file_type: any + excludes: logs,temp,work + register: atl_product_installation_versioned_file_list + +- name: Limit permissions on files and directories in the installation directory, recursively, excluding working directories + ansible.builtin.file: + path: "{{ item.path }}" + owner: "root" + group: "root" + mode: "u=rwX,g=rX,o=rX" + recurse: "{{ item.isdir }}" + loop: "{{ atl_product_installation_versioned_file_list.files }}" changed_when: false # For Molecule idempotence check - name: Grant access to the product working directories - file: + ansible.builtin.file: path: "{{ item }}" state: directory mode: "u=rwX,g=rX,o-rwx" @@ -104,7 +125,7 @@ changed_when: false # For Molecule idempotence check - name: Create conf/Catalina directory owned by product so catalina.out logging works - file: + ansible.builtin.file: path: "{{ atl_product_installation_versioned }}/conf/Catalina" state: directory mode: "u=rwX,g=rX,o-rwx" @@ -113,7 +134,7 @@ changed_when: false # For Molecule idempotence check - name: Assert baseurl to same as atl_proxy_name - postgresql_query: + community.postgresql.postgresql_query: login_host: "{{ atl_db_host }}" login_user: "{{ atl_jdbc_user }}" login_password: "{{ atl_jdbc_password }}" diff --git a/roles/jira_config/templates/dbconfig.xml.j2 b/roles/jira_config/templates/dbconfig.xml.j2 index c2b92c4..19f72a4 100644 --- a/roles/jira_config/templates/dbconfig.xml.j2 +++ b/roles/jira_config/templates/dbconfig.xml.j2 @@ -8,7 +8,12 @@ {{ atl_jdbc_url }} {{ atl_jdbc_user }} + {% if atl_product_version.split(".")[:2] | join(".") is version('9.11', '>=') and atl_secretsmanager_aws_region is defined and atl_secretsmanager_aws_region != "" and atl_secretsmanager_aws_secret_id is defined and atl_secretsmanager_aws_secret_id != "" -%} + com.atlassian.secrets.store.aws.AwsSecretsManagerStore + {"region": "{{ atl_secretsmanager_aws_region }}", "secretId": "{{ atl_secretsmanager_aws_secret_id }}"} + {% else -%} {{ atl_jdbc_password | replace("&", "&") }} + {% endif -%} {{ atl_db_driver }} {% if 'postgres' in atl_db_type %} tcpKeepAlive={{ atl_db_keepalive }};socketTimeout={{ atl_db_sockettimeout }} diff --git a/roles/linux_common/molecule/default/Dockerfile.j2 b/roles/linux_common/molecule/default/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/linux_common/molecule/default/Dockerfile.j2 +++ b/roles/linux_common/molecule/default/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/linux_common/molecule/default/molecule.yml b/roles/linux_common/molecule/default/molecule.yml index 106d967..e77fc96 100644 --- a/roles/linux_common/molecule/default/molecule.yml +++ b/roles/linux_common/molecule/default/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" inventory: links: group_vars: ../../../../group_vars/ diff --git a/roles/linux_common/tasks/amazon-2.yml b/roles/linux_common/tasks/amazon-2.yml new file mode 100644 index 0000000..d7bcee0 --- /dev/null +++ b/roles/linux_common/tasks/amazon-2.yml @@ -0,0 +1,5 @@ +--- + +- name: Amazon Linux 2 no longer supported + fail: + msg: "Amazon Linux 2 is no longer supported; see README.md for supported operating systems/environments." diff --git a/roles/linux_common/tasks/amazon-2023.yml b/roles/linux_common/tasks/amazon-2023.yml new file mode 100644 index 0000000..5e06469 --- /dev/null +++ b/roles/linux_common/tasks/amazon-2023.yml @@ -0,0 +1,16 @@ +--- + +- name: Install Amazon-Linux-2023-specific support packages + ansible.builtin.dnf: + name: + - dejavu-sans-fonts + - file + - git + - libxml2 + - shadow-utils + +- name: Uninstall curl-minimal (conflicts with curl) + ansible.builtin.dnf: + name: curl-minimal + state: absent + autoremove: no diff --git a/roles/linux_common/tasks/amazon.yml b/roles/linux_common/tasks/amazon.yml deleted file mode 100644 index 325397c..0000000 --- a/roles/linux_common/tasks/amazon.yml +++ /dev/null @@ -1,20 +0,0 @@ ---- - -- name: Install Amazon-Linux-specific support packages - yum: - name: - - dejavu-sans-fonts - - file - - git-{{ git_version }} - - libxml2 - - shadow-utils - -- name: Limit the SSH ciphers - lineinfile: - path: "/etc/ssh/sshd_config" - # Drop insecure ciphers, currently 3des-cbc only. You can get the - # full list with `sshd -T | grep -i ciphers` - regexp: '^[Cc]iphers' - line: "Ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,cast128-cbc" - insertbefore: "BOF" - ignore_errors: yes # No sshd == no problem diff --git a/roles/linux_common/tasks/main.yml b/roles/linux_common/tasks/main.yml index 2fadb06..7942952 100644 --- a/roles/linux_common/tasks/main.yml +++ b/roles/linux_common/tasks/main.yml @@ -2,33 +2,37 @@ # Note: Try and limit these to packages that are distro-specific, and # place commonly-named ones below. -- name: Install distro-specific prerequisites - include_tasks: "{{ ansible_distribution|lower }}.yml" +- name: Install Amazon-Linux-specific prerequisites + ansible.builtin.include_tasks: "{{ ansible_distribution | lower }}-{{ ansible_distribution_version }}.yml" + when: ansible_distribution | lower == 'amazon' + +- name: Install Ubuntu/Debian-specific prerequisites + ansible.builtin.include_tasks: "{{ ansible_distribution | lower }}.yml" + when: ansible_distribution | lower != 'amazon' - name: Install common support packages - package: + ansible.builtin.package: name: - jq - tar - curl - unzip - fontconfig - - python-psycopg2 - name: Create product group - group: + ansible.builtin.group: name: "{{ atl_product_user }}" gid: "{{ atl_product_user_uid }}" - name: Create product user - user: + ansible.builtin.user: name: "{{ atl_product_user }}" uid: "{{ atl_product_user_uid }}" group: "{{ atl_product_user }}" comment: "Product runtime user" - name: Stop systemd-cleanup deleting the jvm socket file - copy: + ansible.builtin.copy: src: java.conf dest: "/usr/lib/tmpfiles.d/java.conf" owner: root @@ -37,7 +41,7 @@ register: systemd_config_changed - name: Force systemd to reload daemon configuration - systemd: + ansible.builtin.systemd_service: daemon_reload: yes when: - systemd_config_changed is defined diff --git a/roles/linux_common/tasks/ubuntu.yml b/roles/linux_common/tasks/ubuntu.yml index 0ea8343..1071e28 100644 --- a/roles/linux_common/tasks/ubuntu.yml +++ b/roles/linux_common/tasks/ubuntu.yml @@ -1,9 +1,8 @@ --- - name: Install common Ubuntu support packages - apt: + ansible.builtin.apt: name: - - python3-psycopg2 - libxml2-utils - git - fontconfig diff --git a/roles/nfs_mount/tasks/main.yml b/roles/nfs_mount/tasks/main.yml index dfe6a27..bcdff26 100644 --- a/roles/nfs_mount/tasks/main.yml +++ b/roles/nfs_mount/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: Create mountpoint - file: + ansible.builtin.file: state: directory path: "{{ atl_shared_mountpoint }}" mode: 0755 @@ -9,7 +9,7 @@ group: "{{ atl_product_user }}" - name: Enable mountpoint in fstab - mount: + ansible.posix.mount: src: "{{ atl_fileserver_host }}:{{ atl_nfs_target }}" path: "{{ atl_nfs_mountpoint }}" fstype: nfs diff --git a/roles/nfs_server/handlers/main.yml b/roles/nfs_server/handlers/main.yml index 3936144..8a65b54 100644 --- a/roles/nfs_server/handlers/main.yml +++ b/roles/nfs_server/handlers/main.yml @@ -1,6 +1,6 @@ --- - name: Restart NFS - service: + ansible.builtin.service: name: "nfs.service" state: restarted diff --git a/roles/nfs_server/tasks/amazon-2.yml b/roles/nfs_server/tasks/amazon-2.yml new file mode 100644 index 0000000..d7bcee0 --- /dev/null +++ b/roles/nfs_server/tasks/amazon-2.yml @@ -0,0 +1,5 @@ +--- + +- name: Amazon Linux 2 no longer supported + fail: + msg: "Amazon Linux 2 is no longer supported; see README.md for supported operating systems/environments." diff --git a/roles/nfs_server/tasks/amazon-2023.yml b/roles/nfs_server/tasks/amazon-2023.yml new file mode 100644 index 0000000..c6972a3 --- /dev/null +++ b/roles/nfs_server/tasks/amazon-2023.yml @@ -0,0 +1,18 @@ +--- + +- name: Install Amazon-Linux-2023-specific NFS packages + ansible.builtin.dnf: + name: + - nfs-utils + +- name: Create nfs.service symlink to nfs-server.service + ansible.builtin.file: + src: /usr/lib/systemd/system/nfs-server.service + dest: /usr/lib/systemd/system/nfs.service + owner: root + group: root + state: link + +- name: Reload systemd services + ansible.builtin.systemd_service: + daemon_reload: yes \ No newline at end of file diff --git a/roles/nfs_server/tasks/amazon.yml b/roles/nfs_server/tasks/amazon.yml deleted file mode 100644 index ad2adee..0000000 --- a/roles/nfs_server/tasks/amazon.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- - -- name: Install Amazon-Linux-specific NFS packages - yum: - name: - - nfs-utils diff --git a/roles/nfs_server/tasks/main.yml b/roles/nfs_server/tasks/main.yml index 44fc8b0..c2f2dc5 100644 --- a/roles/nfs_server/tasks/main.yml +++ b/roles/nfs_server/tasks/main.yml @@ -1,16 +1,20 @@ --- -- name: Install distro-specific NFS packages - include_tasks: "{{ ansible_distribution|lower }}.yml" +- name: Install Amazon-Linux-specific NFS packages + ansible.builtin.include_tasks: "{{ ansible_distribution | lower }}-{{ ansible_distribution_version }}.yml" + when: ansible_distribution | lower == 'amazon' +- name: Install Ubuntu/Debian-specific NFS packages + ansible.builtin.include_tasks: "{{ ansible_distribution | lower }}.yml" + when: ansible_distribution | lower != 'amazon' - name: Create mountpoint - file: + ansible.builtin.file: path: "{{ atl_shared_mountpoint }}" state: directory - name: Setup the disk partition - parted: + community.general.parted: device: "{{ atl_nfs_server_device }}" label: gpt name: "{{ atl_nfs_fs_label }}" @@ -22,7 +26,7 @@ - name: Create the filesystem - filesystem: + community.general.filesystem: dev: "{{ atl_nfs_server_device }}" fstype: "{{ atl_nfs_fs_type }}" opts: "-L {{ atl_nfs_fs_label }}" @@ -30,7 +34,7 @@ - new_only - name: Setup fstab and mount the filesystem - mount: + ansible.posix.mount: path: "{{ atl_shared_mountpoint }}" src: "LABEL={{ atl_nfs_fs_label }}" fstype: "{{ atl_nfs_fs_type }}" @@ -40,7 +44,7 @@ - name: Create the shared home - file: + ansible.builtin.file: path: "{{ atl_shared_mountpoint }}/{{ atl_product_user }}/shared" state: directory owner: "{{ atl_product_user }}" @@ -51,14 +55,14 @@ - name: Create the NFS export file - template: + ansible.builtin.template: src: "media-atl.exports.j2" dest: "/etc/exports.d/20-media-atl.exports" notify: - Restart NFS - name: Enable NFS - service: + ansible.builtin.service: name: nfs.service enabled: true state: started diff --git a/roles/nfs_server/tasks/ubuntu.yml b/roles/nfs_server/tasks/ubuntu.yml index becb1d8..e263578 100644 --- a/roles/nfs_server/tasks/ubuntu.yml +++ b/roles/nfs_server/tasks/ubuntu.yml @@ -1,7 +1,7 @@ --- - name: Install Ubuntu-specific NFS packages - apt: + ansible.builtin.apt: name: - nfs-kernel-server - libnfs-utils diff --git a/roles/product_common/molecule/default/Dockerfile.j2 b/roles/product_common/molecule/default/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_common/molecule/default/Dockerfile.j2 +++ b/roles/product_common/molecule/default/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_common/molecule/default/molecule.yml b/roles/product_common/molecule/default/molecule.yml index b790cb4..fd78aea 100644 --- a/roles/product_common/molecule/default/molecule.yml +++ b/roles/product_common/molecule/default/molecule.yml @@ -1,14 +1,14 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" verifier: name: testinfra diff --git a/roles/product_common/molecule/system_jdk/Dockerfile.j2 b/roles/product_common/molecule/system_jdk/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_common/molecule/system_jdk/Dockerfile.j2 +++ b/roles/product_common/molecule/system_jdk/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_common/molecule/system_jdk/molecule.yml b/roles/product_common/molecule/system_jdk/molecule.yml index b790cb4..fd78aea 100644 --- a/roles/product_common/molecule/system_jdk/molecule.yml +++ b/roles/product_common/molecule/system_jdk/molecule.yml @@ -1,14 +1,14 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" verifier: name: testinfra diff --git a/roles/product_common/tasks/amazon-2.yml b/roles/product_common/tasks/amazon-2.yml new file mode 100644 index 0000000..d7bcee0 --- /dev/null +++ b/roles/product_common/tasks/amazon-2.yml @@ -0,0 +1,5 @@ +--- + +- name: Amazon Linux 2 no longer supported + fail: + msg: "Amazon Linux 2 is no longer supported; see README.md for supported operating systems/environments." diff --git a/roles/product_common/tasks/amazon-2023.yml b/roles/product_common/tasks/amazon-2023.yml new file mode 100644 index 0000000..865f948 --- /dev/null +++ b/roles/product_common/tasks/amazon-2023.yml @@ -0,0 +1,43 @@ +--- + +- name: Add Adoptium repo and install Eclipse Temurin JDK if necessary on Amazon Linux 2023 + block: + + # There is no amazonlinux/2023 package available from the Adoptium repo; AL2023 docs point to upstream compatiblity + # with Fedora 34, 35, and 36, so we use the latest of those for the Temurin package for now + - name: Add Adoptium yum repository + ansible.builtin.yum_repository: + name: Adoptium + file: adoptium + description: Adoptium Repo + baseurl: + - "https://packages.adoptium.net/artifactory/rpm/fedora/36/{{ ansible_architecture }}" + - "{{ atl_adoptium_alternate_url is defined | ternary(atl_adoptium_alternate_url, '') }}" + gpgkey: + - https://packages.adoptium.net/artifactory/api/gpg/key/public + - "{{ atl_adoptium_gpgkey_alternate_url is defined | ternary(atl_adoptium_gpgkey_alternate_url, '') }}" + gpgcheck: yes + state: present + tags: + - molecule-idempotence-notest + + - name: Install Eclipse Temurin JDK + ansible.builtin.yum: + name: "temurin-{{ java_major_version }}-jdk" + state: present + + - name: Ensure common JDK symlink exists + community.general.alternatives: + link: "/usr/lib/jvm/java" + name: "java_sdk" + path: "/usr/lib/jvm/temurin-{{ java_major_version }}-jdk" + priority: 99 + + when: atl_use_system_jdk | bool + tags: + - runtime_pkg + +- name: Install other base packages on Amazon Linux 2023 + ansible.builtin.dnf: + name: + - dejavu-fonts-all # Required by the installer diff --git a/roles/product_common/tasks/amazon.yml b/roles/product_common/tasks/amazon.yml deleted file mode 100644 index 41e75e1..0000000 --- a/roles/product_common/tasks/amazon.yml +++ /dev/null @@ -1,35 +0,0 @@ ---- - -- name: Add Adoptium repo and install Eclipse Temurin JDK if necessary on Amazon Linux - block: - - - name: Add Adoptium yum repository - yum_repository: - name: Adoptium - file: adoptium - description: Adoptium Repo - baseurl: "https://packages.adoptium.net/artifactory/rpm/amazonlinux/{{ ansible_distribution_version }}/{{ ansible_architecture }}" - gpgkey: https://packages.adoptium.net/artifactory/api/gpg/key/public - gpgcheck: yes - state: present - - - name: Install Eclipse Temurin JDK - yum: - name: "temurin-{{ java_major_version }}-jdk" - state: present - - - name: Ensure common JDK symlink exists - alternatives: - link: "/usr/lib/jvm/java" - name: "java_sdk" - path: "/usr/lib/jvm/temurin-{{ java_major_version }}-jdk" - priority: 99 - - when: atl_use_system_jdk - tags: - - runtime_pkg - -- name: Install other base packages on Amazon Linux - yum: - name: - - dejavu-fonts-common # Required by the installer diff --git a/roles/product_common/tasks/main.yml b/roles/product_common/tasks/main.yml index 071ef0e..f687ae5 100644 --- a/roles/product_common/tasks/main.yml +++ b/roles/product_common/tasks/main.yml @@ -1,4 +1,9 @@ --- -- name: Perform distro-specific tasks - include_tasks: "{{ ansible_distribution|lower }}.yml" +- name: Perform Amazon-Linux-specific tasks + ansible.builtin.include_tasks: "{{ ansible_distribution | lower }}-{{ ansible_distribution_version }}.yml" + when: ansible_distribution | lower == 'amazon' + +- name: Perform Ubuntu/Debian-specific tasks + ansible.builtin.include_tasks: "{{ ansible_distribution | lower }}.yml" + when: ansible_distribution | lower != 'amazon' diff --git a/roles/product_common/tasks/ubuntu.yml b/roles/product_common/tasks/ubuntu.yml index 7a8a9b1..083e4fe 100644 --- a/roles/product_common/tasks/ubuntu.yml +++ b/roles/product_common/tasks/ubuntu.yml @@ -4,39 +4,39 @@ block: - name: Install gnupg - apt: + ansible.builtin.apt: name: gnupg state: present - name: Add Adoptium debian repo public key - apt_key: + ansible.builtin.apt_key: url: https://packages.adoptium.net/artifactory/api/gpg/key/public state: present - name: Add Adoptium debian repository - apt_repository: + ansible.builtin.apt_repository: repo: "deb https://packages.adoptium.net/artifactory/deb {{ ansible_distribution_release }} main" state: present filename: adoptium - name: Install Eclipse Temurin JDK - apt: + ansible.builtin.apt: name: "temurin-{{ java_major_version }}-jdk" update_cache: yes state: present - name: Ensure common JDK symlink exists - alternatives: + community.general.alternatives: link: "/usr/lib/jvm/java" name: "java_sdk" path: "/usr/lib/jvm/temurin-{{ java_major_version }}-jdk-{{ debian_architecture }}" priority: 99 - when: atl_use_system_jdk + when: atl_use_system_jdk | bool tags: - runtime_pkg - name: Install other base packages on Ubuntu - package: + ansible.builtin.package: name: - fonts-dejavu-core # Required by installer diff --git a/roles/product_install/defaults/main.yml b/roles/product_install/defaults/main.yml index d768e62..d86c346 100644 --- a/roles/product_install/defaults/main.yml +++ b/roles/product_install/defaults/main.yml @@ -3,6 +3,9 @@ # Empty values to simplify logic (no undefineds) atl_latest_version: '' atl_cached_version: '' +# if basic_auth is required for download of atlassian installable artifact, provide the name of an AWS Secrets Manager secret +# with values for both password and username +atl_download_secret_name: '' atl_product_latest_version_url: "https://marketplace.atlassian.com/rest/2/products/key/{{ atl_product_family }}/versions" atl_product_version_cache_dir: "{{ atl_product_home_shared }}" @@ -16,7 +19,8 @@ atl_download_suffix: "{{ atl_download_format_suffix_map[atl_download_format] }}" atl_release_base_url: "https://product-downloads.atlassian.com/software" atl_product_base_url: "{{ atl_release_base_url }}/{{ atl_product_family }}/downloads" -atl_product_download_url: "{{ atl_product_base_url }}/atlassian-{{ atl_download_edition | default(atl_product_edition) }}-{{ atl_product_version }}{{ atl_download_suffix }}" +atl_product_download_default_url: "{{ atl_product_base_url }}/atlassian-{{ atl_download_edition | default(atl_product_edition) }}-{{ atl_product_version }}{{ atl_download_suffix }}" +atl_product_download_url: "{{ lookup('env', 'ATL_PRODUCT_DOWNLOAD_URL') or atl_product_download_default_url }}" atl_product_download_filename: "{{ atl_download_edition | default(atl_product_edition) }}.{{ atl_product_version }}{{ atl_download_suffix }}" atl_product_temp_download: "{{ atl_installer_temp }}/{{ atl_product_download_filename }}" @@ -41,3 +45,4 @@ atl_source_obr_from_marketplace: true atl_servicedesk_download_file: "{{ atl_installer_temp }}/jira-servicedesk.{{ atl_product_version }}.obr" force_version_update: false +skip_shared_home_symlink: false \ No newline at end of file diff --git a/roles/product_install/molecule/bitbucket_latest/Dockerfile.j2 b/roles/product_install/molecule/bitbucket_latest/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/bitbucket_latest/Dockerfile.j2 +++ b/roles/product_install/molecule/bitbucket_latest/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/bitbucket_latest/converge.yml b/roles/product_install/molecule/bitbucket_latest/converge.yml index 55ad545..63cd939 100644 --- a/roles/product_install/molecule/bitbucket_latest/converge.yml +++ b/roles/product_install/molecule/bitbucket_latest/converge.yml @@ -7,6 +7,7 @@ atl_product_user: "bitbucket" atl_product_home: "{{ atl_shared_mountpoint }}/{{ atl_product_edition }}" + skip_shared_home_symlink: true roles: - role: linux_common - role: product_common diff --git a/roles/product_install/molecule/bitbucket_latest/molecule.yml b/roles/product_install/molecule/bitbucket_latest/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/product_install/molecule/bitbucket_latest/molecule.yml +++ b/roles/product_install/molecule/bitbucket_latest/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/confluence_latest/Dockerfile.j2 b/roles/product_install/molecule/confluence_latest/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/confluence_latest/Dockerfile.j2 +++ b/roles/product_install/molecule/confluence_latest/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/confluence_latest/molecule.yml b/roles/product_install/molecule/confluence_latest/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/product_install/molecule/confluence_latest/molecule.yml +++ b/roles/product_install/molecule/confluence_latest/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/confluence_version_with_uppercase/Dockerfile.j2 b/roles/product_install/molecule/confluence_version_with_uppercase/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/confluence_version_with_uppercase/Dockerfile.j2 +++ b/roles/product_install/molecule/confluence_version_with_uppercase/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/confluence_version_with_uppercase/molecule.yml b/roles/product_install/molecule/confluence_version_with_uppercase/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/product_install/molecule/confluence_version_with_uppercase/molecule.yml +++ b/roles/product_install/molecule/confluence_version_with_uppercase/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/crowd_latest/Dockerfile.j2 b/roles/product_install/molecule/crowd_latest/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/crowd_latest/Dockerfile.j2 +++ b/roles/product_install/molecule/crowd_latest/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/crowd_latest/molecule.yml b/roles/product_install/molecule/crowd_latest/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/product_install/molecule/crowd_latest/molecule.yml +++ b/roles/product_install/molecule/crowd_latest/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/default/Dockerfile.j2 b/roles/product_install/molecule/default/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/default/Dockerfile.j2 +++ b/roles/product_install/molecule/default/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/default/molecule.yml b/roles/product_install/molecule/default/molecule.yml index 644207c..68f5666 100644 --- a/roles/product_install/molecule/default/molecule.yml +++ b/roles/product_install/molecule/default/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/jira_all/Dockerfile.j2 b/roles/product_install/molecule/jira_all/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/jira_all/Dockerfile.j2 +++ b/roles/product_install/molecule/jira_all/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/jira_all/converge.yml b/roles/product_install/molecule/jira_all/converge.yml index 7dd8f2d..7043280 100644 --- a/roles/product_install/molecule/jira_all/converge.yml +++ b/roles/product_install/molecule/jira_all/converge.yml @@ -16,11 +16,11 @@ atl_jdbc_template: 'template0' pre_tasks: - name: Create cache dir - file: + ansible.builtin.file: path: '/media/atl/jira/shared/' state: directory - name: Seed version - copy: + ansible.builtin.copy: dest: '/media/atl/jira/shared/jira-core.version' content: "8.14.0" force: false # For idempotency check diff --git a/roles/product_install/molecule/jira_all/molecule.yml b/roles/product_install/molecule/jira_all/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/product_install/molecule/jira_all/molecule.yml +++ b/roles/product_install/molecule/jira_all/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/jira_cached_with_downgrade/Dockerfile.j2 b/roles/product_install/molecule/jira_cached_with_downgrade/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/jira_cached_with_downgrade/Dockerfile.j2 +++ b/roles/product_install/molecule/jira_cached_with_downgrade/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/jira_cached_with_downgrade/converge.yml b/roles/product_install/molecule/jira_cached_with_downgrade/converge.yml index ed658e6..c9cf986 100644 --- a/roles/product_install/molecule/jira_cached_with_downgrade/converge.yml +++ b/roles/product_install/molecule/jira_cached_with_downgrade/converge.yml @@ -10,11 +10,11 @@ pre_tasks: - name: Create cache dir - file: + ansible.builtin.file: path: '/media/atl/jira/shared/' state: directory - name: Seed version - copy: + ansible.builtin.copy: dest: '/media/atl/jira/shared/jira-core.version' content: "7.10.2" force: false # For idempotency check diff --git a/roles/product_install/molecule/jira_cached_with_downgrade/molecule.yml b/roles/product_install/molecule/jira_cached_with_downgrade/molecule.yml index 34c0289..a8da747 100644 --- a/roles/product_install/molecule/jira_cached_with_downgrade/molecule.yml +++ b/roles/product_install/molecule/jira_cached_with_downgrade/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: vvv: true skip-tags: runtime_pkg diff --git a/roles/product_install/molecule/jira_cached_with_upgrade/Dockerfile.j2 b/roles/product_install/molecule/jira_cached_with_upgrade/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/jira_cached_with_upgrade/Dockerfile.j2 +++ b/roles/product_install/molecule/jira_cached_with_upgrade/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/jira_cached_with_upgrade/converge.yml b/roles/product_install/molecule/jira_cached_with_upgrade/converge.yml index dcf29a6..f87088e 100644 --- a/roles/product_install/molecule/jira_cached_with_upgrade/converge.yml +++ b/roles/product_install/molecule/jira_cached_with_upgrade/converge.yml @@ -10,11 +10,11 @@ pre_tasks: - name: Create cache dir - file: + ansible.builtin.file: path: '/media/atl/jira/shared/' state: directory - name: Seed version - copy: + ansible.builtin.copy: dest: '/media/atl/jira/shared/jira-core.version' content: "7.9.0" force: false # For idempotency check diff --git a/roles/product_install/molecule/jira_cached_with_upgrade/molecule.yml b/roles/product_install/molecule/jira_cached_with_upgrade/molecule.yml index 34c0289..a8da747 100644 --- a/roles/product_install/molecule/jira_cached_with_upgrade/molecule.yml +++ b/roles/product_install/molecule/jira_cached_with_upgrade/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: vvv: true skip-tags: runtime_pkg diff --git a/roles/product_install/molecule/jira_software_latest/Dockerfile.j2 b/roles/product_install/molecule/jira_software_latest/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/jira_software_latest/Dockerfile.j2 +++ b/roles/product_install/molecule/jira_software_latest/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/jira_software_latest/molecule.yml b/roles/product_install/molecule/jira_software_latest/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/product_install/molecule/jira_software_latest/molecule.yml +++ b/roles/product_install/molecule/jira_software_latest/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/jira_tarball/Dockerfile.j2 b/roles/product_install/molecule/jira_tarball/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/jira_tarball/Dockerfile.j2 +++ b/roles/product_install/molecule/jira_tarball/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/jira_tarball/molecule.yml b/roles/product_install/molecule/jira_tarball/molecule.yml index 644207c..68f5666 100644 --- a/roles/product_install/molecule/jira_tarball/molecule.yml +++ b/roles/product_install/molecule/jira_tarball/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/jira_tarball_download_url/Dockerfile.j2 b/roles/product_install/molecule/jira_tarball_download_url/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/jira_tarball_download_url/Dockerfile.j2 +++ b/roles/product_install/molecule/jira_tarball_download_url/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/jira_tarball_download_url/molecule.yml b/roles/product_install/molecule/jira_tarball_download_url/molecule.yml index 3ea826a..1f8d749 100644 --- a/roles/product_install/molecule/jira_tarball_download_url/molecule.yml +++ b/roles/product_install/molecule/jira_tarball_download_url/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/jira_version_from_file/Dockerfile.j2 b/roles/product_install/molecule/jira_version_from_file/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/jira_version_from_file/Dockerfile.j2 +++ b/roles/product_install/molecule/jira_version_from_file/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/jira_version_from_file/converge.yml b/roles/product_install/molecule/jira_version_from_file/converge.yml index 271343f..0391262 100644 --- a/roles/product_install/molecule/jira_version_from_file/converge.yml +++ b/roles/product_install/molecule/jira_version_from_file/converge.yml @@ -10,11 +10,11 @@ pre_tasks: - name: Create cache dir - file: + ansible.builtin.file: path: '/media/atl/jira/shared/' state: directory - name: Seed version - copy: + ansible.builtin.copy: dest: '/media/atl/jira/shared/jira-core.version' content: "7.9.0" force: false # For idempotency check diff --git a/roles/product_install/molecule/jira_version_from_file/molecule.yml b/roles/product_install/molecule/jira_version_from_file/molecule.yml index 644207c..68f5666 100644 --- a/roles/product_install/molecule/jira_version_from_file/molecule.yml +++ b/roles/product_install/molecule/jira_version_from_file/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/jira_version_latest/Dockerfile.j2 b/roles/product_install/molecule/jira_version_latest/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/jira_version_latest/Dockerfile.j2 +++ b/roles/product_install/molecule/jira_version_latest/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/jira_version_latest/molecule.yml b/roles/product_install/molecule/jira_version_latest/molecule.yml index 644207c..68f5666 100644 --- a/roles/product_install/molecule/jira_version_latest/molecule.yml +++ b/roles/product_install/molecule/jira_version_latest/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/jira_version_override/Dockerfile.j2 b/roles/product_install/molecule/jira_version_override/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/jira_version_override/Dockerfile.j2 +++ b/roles/product_install/molecule/jira_version_override/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/jira_version_override/molecule.yml b/roles/product_install/molecule/jira_version_override/molecule.yml index 644207c..68f5666 100644 --- a/roles/product_install/molecule/jira_version_override/molecule.yml +++ b/roles/product_install/molecule/jira_version_override/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_install/molecule/servicedesk3/Dockerfile.j2 b/roles/product_install/molecule/servicedesk3/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/servicedesk3/Dockerfile.j2 +++ b/roles/product_install/molecule/servicedesk3/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/servicedesk3/molecule.yml b/roles/product_install/molecule/servicedesk3/molecule.yml index f597cd9..2f99550 100644 --- a/roles/product_install/molecule/servicedesk3/molecule.yml +++ b/roles/product_install/molecule/servicedesk3/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: vv: true skip-tags: runtime_pkg diff --git a/roles/product_install/molecule/servicedesk4/Dockerfile.j2 b/roles/product_install/molecule/servicedesk4/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/servicedesk4/Dockerfile.j2 +++ b/roles/product_install/molecule/servicedesk4/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/servicedesk4/molecule.yml b/roles/product_install/molecule/servicedesk4/molecule.yml index f597cd9..2f99550 100644 --- a/roles/product_install/molecule/servicedesk4/molecule.yml +++ b/roles/product_install/molecule/servicedesk4/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: vv: true skip-tags: runtime_pkg diff --git a/roles/product_install/molecule/servicedesk_latest/Dockerfile.j2 b/roles/product_install/molecule/servicedesk_latest/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_install/molecule/servicedesk_latest/Dockerfile.j2 +++ b/roles/product_install/molecule/servicedesk_latest/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_install/molecule/servicedesk_latest/molecule.yml b/roles/product_install/molecule/servicedesk_latest/molecule.yml index f597cd9..2f99550 100644 --- a/roles/product_install/molecule/servicedesk_latest/molecule.yml +++ b/roles/product_install/molecule/servicedesk_latest/molecule.yml @@ -1,19 +1,21 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: vv: true skip-tags: runtime_pkg diff --git a/roles/product_install/tasks/bitbucket_extra_tasks.yml b/roles/product_install/tasks/bitbucket_extra_tasks.yml deleted file mode 120000 index 55832eb..0000000 --- a/roles/product_install/tasks/bitbucket_extra_tasks.yml +++ /dev/null @@ -1 +0,0 @@ -no_op.yml \ No newline at end of file diff --git a/roles/product_install/tasks/bitbucket_extra_tasks.yml b/roles/product_install/tasks/bitbucket_extra_tasks.yml new file mode 100644 index 0000000..cd47126 --- /dev/null +++ b/roles/product_install/tasks/bitbucket_extra_tasks.yml @@ -0,0 +1,17 @@ +--- +- name: Create the product local home directory + ansible.builtin.file: + path: "{{ atl_product_home }}" + state: directory + owner: "{{ atl_product_user }}" + group: "{{ atl_product_user }}" + mode: "0754" + changed_when: false # For Molecule idempotence check + +- name: Symlink the the shared home + ansible.builtin.file: + src: "{{ atl_shared_mountpoint }}/{{ atl_product_edition }}/shared" + dest: "{{ atl_product_home }}/shared" + state: link + force: true + when: not skip_shared_home_symlink | bool diff --git a/roles/product_install/tasks/jira-core_version_latest.yml b/roles/product_install/tasks/jira-core_version_latest.yml index 0112206..9c423a8 100644 --- a/roles/product_install/tasks/jira-core_version_latest.yml +++ b/roles/product_install/tasks/jira-core_version_latest.yml @@ -1,9 +1,9 @@ --- - name: Fetch the latest version from URL - set_fact: + ansible.builtin.set_fact: atl_product_version_json: "{{ lookup('url', 'https://marketplace.atlassian.com/rest/2/products/key/jira-software/versions') }}" - name: Set the local var to retrieved version - set_fact: + ansible.builtin.set_fact: atl_latest_version: "{{ atl_product_version_json._embedded.versions[0].name }}" \ No newline at end of file diff --git a/roles/product_install/tasks/jira-servicedesk_as_obr.yml b/roles/product_install/tasks/jira-servicedesk_as_obr.yml index 73e7c3b..d9ef2d7 100644 --- a/roles/product_install/tasks/jira-servicedesk_as_obr.yml +++ b/roles/product_install/tasks/jira-servicedesk_as_obr.yml @@ -1,7 +1,7 @@ --- - name: Check for alternate obr download url - set_fact: + ansible.builtin.set_fact: atl_source_obr_from_marketplace: false when: - atl_obr_download_url is defined @@ -10,40 +10,40 @@ block: - name: Marketplace OBR - Get the installer product version info - uri: + ansible.builtin.uri: url: "{{ atl_mpac_products }}/key/jira/versions/name/{{ atl_product_version }}" return_content: yes register: atl_product_version_info - name: Marketplace OBR - Show the returned build number - debug: + ansible.builtin.debug: msg="buildNumber={{ atl_product_version_info.json.buildNumber }}" - name: Marketplace OBR - Get the JSD build version info - uri: + ansible.builtin.uri: url: "{{ atl_mpac_products }}/key/jira-servicedesk/versions/latest?application=\ jira&applicationBuild={{ atl_product_version_info.json.buildNumber }}" return_content: yes register: atl_jsd_build_info - name: Marketplace OBR - Show the returned obr binary href - debug: + ansible.builtin.debug: msg="obr_ref={{ atl_jsd_build_info.json._embedded.artifact._links.binary.href }}" - name: Marketplace OBR - Set atl_obr_download_url - set_fact: + ansible.builtin.set_fact: atl_obr_download_url: "{{ atl_jsd_build_info.json._embedded.artifact._links.binary.href }}" - name: Marketplace OBR - Set atl_jsd_build - set_fact: + ansible.builtin.set_fact: atl_jsd_build: "{{ atl_jsd_build_info.json.name }}" - name: Marketplace OBR - Show the obr filename - debug: + ansible.builtin.debug: msg="obr_name=jira-servicedesk-application-{{ atl_jsd_build }}.obr" - name: Marketplace OBR - Set the obr filename - set_fact: + ansible.builtin.set_fact: atl_obr_filename: "jira-servicedesk-application-{{ atl_jsd_build }}.obr" when: @@ -56,18 +56,18 @@ block: - name: Alternate URL OBR - Show the obr filename - debug: + ansible.builtin.debug: msg="obr_name=jira-servicedesk-application-{{ atl_jsd_build }}.obr" - name: Alternate OBR - Set the obr filename - set_fact: + ansible.builtin.set_fact: atl_obr_filename: "jira-servicedesk-application-{{ atl_jsd_build }}.obr" when: - not atl_source_obr_from_marketplace | bool - name: is shared_home set ? - debug: + ansible.builtin.debug: msg="atl_product_home_shared_download_dir={{ atl_product_home_shared_download_dir }}" # For the first run a temp obr should be downloaded but moved to @@ -77,7 +77,7 @@ # a directory is used as a lockfile (atomic operation) when moving obr. - name: Set assumptions to avoid race condition - set_fact: + ansible.builtin.set_fact: download_obr: true move_obr: false atl_obr_download: "{{ atl_installer_temp }}/{{ atl_obr_filename }}" @@ -87,22 +87,22 @@ # Check for pre-downloaded obr on shared_home and completed lock dir. - name: Check for completed lock directory - stat: + ansible.builtin.stat: path: "{{ atl_obr_completed_lock }}" register: completed_lock - name: Check for obr in home_shared - stat: + ansible.builtin.stat: path: "{{ atl_obr_shared_download }}" register: home_shared_download - name: debug home_shared_download - debug: + ansible.builtin.debug: var: home_shared_download # If obr exists and lockdir exists use this obr instead - name: Check lock directory and obr exists on shared_home - set_fact: + ansible.builtin.set_fact: download_obr: false atl_obr_download: "{{ atl_obr_shared_download }}" when: @@ -114,14 +114,14 @@ # Fetch obr if required - note we validate it by mimetype rather than checksum due to https://ecosystem.atlassian.net/browse/AMKT-25526 - name: download_obr is true so fetch and do all the things block: - - debug: + - ansible.builtin.debug: var: atl_obr_download_url - - debug: + - ansible.builtin.debug: var: atl_obr_download # Fetch obr and copy to temp - name: Fetch obr - get_url: + ansible.builtin.get_url: url: "{{ atl_obr_download_url }}" dest: "{{ atl_obr_download }}" mode: 0755 @@ -130,12 +130,12 @@ register: atl_obr_completed - name: Confirm the output from the download task - debug: + ansible.builtin.debug: var: atl_obr_completed # get details about the obr - name: Stat the new obr file - stat: + ansible.builtin.stat: path: "{{ atl_obr_completed.dest }}" get_mime: yes register: atl_obr_stats @@ -143,14 +143,14 @@ - atl_obr_completed.dest is defined - name: fail if the downloaded OBR is not a zip file - fail: + ansible.builtin.fail: msg: "The downloaded OBR was not detected as being a valid ZIP file: {{ atl_obr_stats }}" when: - (atl_obr_stats.stat.mimetype is not defined) or (atl_obr_stats.stat.mimetype is not match("application/zip")) # If obr was fetched make the lock directory - name: Create moving_lock. - file: + ansible.builtin.file: path: "{{ atl_obr_moving_lock }}" state: directory when: @@ -160,7 +160,7 @@ # Directory lock was created by this run? # If so, then set a fact intending to move obr - name: Move obr Scenario - lock created by this run - set_fact: + ansible.builtin.set_fact: move_obr: true when: - moving_lock_created is succeeded @@ -168,28 +168,28 @@ # Otherwise directory lock was either already created or # could not be created. Fall back is to continue and install from temp - when: download_obr + when: download_obr | bool # If the intention is to move obr to home_shared - name: Move obr to home_shared block: - name: Copy temp installer to home_shared - copy: + ansible.builtin.copy: src: "{{ atl_obr_download }}" dest: "{{ atl_obr_shared_download }}" remote_src: true register: copied - name: Create completed_lock once obr downloaded and copied - file: + ansible.builtin.file: path: "{{ atl_obr_completed_lock }}" state: directory when: copied is succeeded register: completed_lock_created - name: Remove moving_lock to show that obr is completed - file: + ansible.builtin.file: path: "{{ atl_obr_moving_lock }}" state: absent when: @@ -198,24 +198,24 @@ register: moving_lock_removed - name: Delete old temp installer - file: + ansible.builtin.file: path: "{{ atl_obr_download }}" state: absent when: moving_lock_removed is succeeded register: temp_deleted - name: Set install to home_shared location - set_fact: + ansible.builtin.set_fact: atl_obr_download: "{{ atl_obr_shared_download }}" when: temp_deleted is succeeded - when: move_obr + when: move_obr | bool # At this point the binary is in {{ atl_obr_download }} # (which is either on home_shared or temp) - name: Ensure instaled-plugins dir exists - file: + ansible.builtin.file: path: "{{ atl_product_home_shared }}/plugins/installed-plugins" state: directory mode: 0750 @@ -224,7 +224,7 @@ # Note as ansible unarchive cant handle "-j junk paths" we need to ignore errors to bypass the path verify - name: Unpack the obr into the atlassian-bundled-plugins dir - unarchive: + ansible.builtin.unarchive: remote_src: yes src: "{{ atl_obr_download }}" dest: "{{ atl_product_installation_versioned }}/atlassian-jira/WEB-INF/atlassian-bundled-plugins" @@ -238,15 +238,15 @@ mode: 0644 register: obr_unpack -- name: Move JSD dependency jars into the bundled-plugins dir # noqa 503 - ignore lint info about when changed - copy: +- name: Move JSD dependency jars into the bundled-plugins dir # noqa no-handler - ignore lint info about when changed + ansible.builtin.copy: remote_src: yes src: "{{ atl_product_installation_versioned }}/atlassian-jira/WEB-INF/atlassian-bundled-plugins/dependencies/" dest: "{{ atl_product_installation_versioned }}/atlassian-jira/WEB-INF/atlassian-bundled-plugins/" when: obr_unpack.changed -- name: Remove the empty dependencies folder # noqa 503 - ignore lint info about when changed - file: +- name: Remove the empty dependencies folder # noqa no-handler - ignore lint info about when changed + ansible.builtin.file: path: "{{ atl_product_installation_versioned }}/atlassian-jira/WEB-INF/atlassian-bundled-plugins/dependencies" state: absent when: obr_unpack.changed \ No newline at end of file diff --git a/roles/product_install/tasks/jira-servicedesk_extra_tasks.yml b/roles/product_install/tasks/jira-servicedesk_extra_tasks.yml index 0dd37cc..8b85a8f 100644 --- a/roles/product_install/tasks/jira-servicedesk_extra_tasks.yml +++ b/roles/product_install/tasks/jira-servicedesk_extra_tasks.yml @@ -1,5 +1,5 @@ --- - name: Set the download edition for ServiceDesk - set_fact: + ansible.builtin.set_fact: atl_download_edition: "servicedesk" diff --git a/roles/product_install/tasks/jira-servicedesk_version_latest.yml b/roles/product_install/tasks/jira-servicedesk_version_latest.yml index 8911ae8..07c9bbd 100644 --- a/roles/product_install/tasks/jira-servicedesk_version_latest.yml +++ b/roles/product_install/tasks/jira-servicedesk_version_latest.yml @@ -1,9 +1,9 @@ --- - name: Fetch the latest version from URL - set_fact: + ansible.builtin.set_fact: atl_product_version_json: "{{ lookup('url', 'https://marketplace.atlassian.com/rest/2/products/key/jira-servicedesk/versions') }}" - name: Set the local var to retrieved version - set_fact: + ansible.builtin.set_fact: atl_latest_version: "{{ atl_product_version_json._embedded.versions[0].name }}" \ No newline at end of file diff --git a/roles/product_install/tasks/jira-software_version_latest.yml b/roles/product_install/tasks/jira-software_version_latest.yml index 0112206..9c423a8 100644 --- a/roles/product_install/tasks/jira-software_version_latest.yml +++ b/roles/product_install/tasks/jira-software_version_latest.yml @@ -1,9 +1,9 @@ --- - name: Fetch the latest version from URL - set_fact: + ansible.builtin.set_fact: atl_product_version_json: "{{ lookup('url', 'https://marketplace.atlassian.com/rest/2/products/key/jira-software/versions') }}" - name: Set the local var to retrieved version - set_fact: + ansible.builtin.set_fact: atl_latest_version: "{{ atl_product_version_json._embedded.versions[0].name }}" \ No newline at end of file diff --git a/roles/product_install/tasks/main.yml b/roles/product_install/tasks/main.yml index 5216abc..4b95d8f 100644 --- a/roles/product_install/tasks/main.yml +++ b/roles/product_install/tasks/main.yml @@ -1,8 +1,6 @@ --- - - - name: Check for existing version cache file - stat: + ansible.builtin.stat: path: "{{ atl_product_version_cache }}" register: cached @@ -11,19 +9,19 @@ block: - name: Read cached version from file - command: "cat {{ atl_product_version_cache }}" + ansible.builtin.command: "cat {{ atl_product_version_cache }}" register: atl_product_version_file changed_when: false - name: Set the local var to cached version - set_fact: + ansible.builtin.set_fact: atl_cached_version: "{{ atl_product_version_file.stdout }}" when: cached.stat.exists - name: Determine if requested version is 'latest' - set_fact: + ansible.builtin.set_fact: version_is_latest: "{{ atl_product_version is undefined or not atl_product_version or atl_product_version == 'latest' }}" @@ -33,9 +31,9 @@ block: - name: Fetch the latest edition version - include_tasks: "{{ atl_product_edition }}_version_latest.yml" + ansible.builtin.include_tasks: "{{ atl_product_edition }}_version_latest.yml" - when: not cached.stat.exists and version_is_latest + when: not cached.stat.exists and version_is_latest | bool ###################################################################### @@ -63,64 +61,63 @@ block: - name: "Case: Cached version exists, has precedence over 'latest'" - set_fact: + ansible.builtin.set_fact: atl_download_version: "{{ atl_cached_version }}" when: cached.stat.exists - name: "Case: No cached version, use latest" - set_fact: + ansible.builtin.set_fact: atl_download_version: "{{ atl_latest_version }}" when: not cached.stat.exists - when: version_is_latest + when: version_is_latest | bool - name: "Case: Version is not latest" block: - name: "create atlassian z versioning for comparison" - set_fact: + ansible.builtin.set_fact: atl_z_product_version: "{{ atl_product_version ~ '-z' }}" atl_z_cached_version: "{{ atl_cached_version ~ '-z' }}" - name: "create atlassian ordered versioning for comparison" - set_fact: + ansible.builtin.set_fact: atl_product_normalised_version: "{{ atl_z_product_version | replace('-m', '-am') }}" atl_cached_normalised_version: "{{ atl_z_cached_version | replace('-m', '-am') }}" - name: "Case: No cached version, or supplied is higher; use supplied" - set_fact: + ansible.builtin.set_fact: atl_download_version: "{{ atl_product_version }}" when: force_version_update | bool or not cached.stat.exists or atl_product_normalised_version is version(atl_cached_normalised_version, '>') - name: "Case: Cached version is higher or forced, ignore supplied" - set_fact: + ansible.builtin.set_fact: atl_download_version: "{{ atl_cached_version }}" when: cached.stat.exists and atl_product_normalised_version is version(atl_cached_normalised_version, '<=') and not force_version_update | bool - when: not version_is_latest + when: not version_is_latest | bool - name: "Fallthrough guard: Use cached or supplied version if nothing set" - set_fact: + ansible.builtin.set_fact: atl_download_version: "{{ atl_cached_version or atl_product_version }}" when: atl_download_version is not defined or - atl_download_version|length == 0 + atl_download_version | length == 0 - name: Override the supplied version with the calculated one - set_fact: + ansible.builtin.set_fact: atl_product_version: "{{ atl_download_version }}" ###################################################################### - name: Perform any additional per-edition version setup - include_tasks: "{{ atl_product_edition }}_extra_tasks.yml" - + ansible.builtin.include_tasks: "{{ atl_product_edition }}_extra_tasks.yml" - name: Create installation directories - file: + ansible.builtin.file: path: "{{ item }}" state: directory mode: 0750 @@ -136,9 +133,12 @@ # At this point atl_product_version should be set, cache if necessary. - name: Write override cached version when specified - template: + ansible.builtin.template: src: version.j2 dest: "{{ atl_product_version_cache }}" + owner: "root" + group: "root" + mode: "u=rwX,g=rX,o=rX" force: true # For the first run a temp binary should be downloaded but moved to @@ -148,25 +148,25 @@ # a directory is used as a lockfile (atomic operation) when moving binary. - name: Set assumptions to avoid race condition - set_fact: + ansible.builtin.set_fact: download_binary: true move_binary: false atl_product_download: "{{ atl_product_temp_download }}" # Check for pre-downloaded binary on shared_home and completed lock dir. - name: Check for completed lock directory - stat: + ansible.builtin.stat: path: "{{ atl_product_home_shared_completed_lock }}" register: completed_lock - name: Check for product installer in home_shared - stat: + ansible.builtin.stat: path: "{{ atl_product_home_shared_download }}" register: home_shared_download # If binary exists and lockdir exists use this binary instead - name: Check lock directory and binary exists on shared_home - set_fact: + ansible.builtin.set_fact: download_binary: false atl_product_download: "{{ atl_product_home_shared_download }}" when: @@ -178,11 +178,28 @@ - name: download_binary is true so fetch and do all the things block: - # Fetch binary and copy to temp + # optionally grab basic_auth creds from secrets_manager secret called 'download_atlassian' + - name: set basic_auth facts if the secret exists + ansible.builtin.set_fact: + download_atlassian_password: "{{ lookup('amazon.aws.secretsmanager_secret', atl_download_secret_name + '.password', region=ansible_ec2_placement_region, bypath=false, nested=true, on_denied='skip', on_missing='skip') }}" + download_atlassian_username: "{{ lookup('amazon.aws.secretsmanager_secret', atl_download_secret_name + '.username', region=ansible_ec2_placement_region, bypath=false, nested=true, on_denied='skip', on_missing='skip') }}" + failed_when: false + ignore_errors: yes + no_log: true + when: + - ansible_ec2_placement_region is defined + - atl_download_secret_name is defined + tags: + - runtime_pkg + + # Fetch binary and copy to temp + # optionally use basic_auth creds from secrets_manager - name: Fetch binary - get_url: + ansible.builtin.get_url: url: "{{ atl_product_download_url }}" dest: "{{ atl_product_temp_download }}" + url_password: "{{ download_atlassian_password | default(omit) }}" + url_username: "{{ download_atlassian_username | default(omit) }}" mode: 0755 force: false http_agent: "ansible-httpget_{{ ansible_play_name }}" @@ -190,7 +207,7 @@ # If product installer was fetched make the lock directory - name: Create moving_lock. - file: + ansible.builtin.file: path: "{{ atl_product_home_shared_moving_lock }}" state: directory when: @@ -200,7 +217,7 @@ # Directory lock was created by this run? # If so, then set a fact intending to move binary - name: Move binary Scenario - lock created by this run - set_fact: + ansible.builtin.set_fact: move_binary: true when: - moving_lock_created is succeeded @@ -208,14 +225,14 @@ # Otherwise directory lock was either already created or # could not be created. Fall back is to continue and install from temp - when: download_binary + when: download_binary | bool # If the intention is to move binary to home_shared - name: Move product installer to home_shared block: - name: Copy temp installer to home_shared - copy: + ansible.builtin.copy: src: "{{ atl_product_temp_download }}" dest: "{{ atl_product_home_shared_download }}" remote_src: true @@ -225,14 +242,14 @@ register: copied - name: Create completed_lock once product installer downloaded and copied - file: + ansible.builtin.file: path: "{{ atl_product_home_shared_completed_lock }}" state: directory when: copied is succeeded register: completed_lock_created - name: Remove moving_lock to show that binary is completed - file: + ansible.builtin.file: path: "{{ atl_product_home_shared_moving_lock }}" state: absent when: @@ -241,33 +258,33 @@ register: moving_lock_removed - name: Delete old temp installer - file: + ansible.builtin.file: path: "{{ atl_product_temp_download }}" state: absent when: moving_lock_removed is succeeded register: temp_deleted - name: Set install to home_shared location - set_fact: + ansible.builtin.set_fact: atl_product_download: "{{ atl_product_home_shared_download }}" when: temp_deleted is succeeded - when: move_binary + when: move_binary | bool # At this point the binary is in {{ atl_product_download }} # (which is either on home_shared or temp) - name: Unpack the downloaded application depending on format - include_tasks: "unpack_{{ atl_download_format }}.yml" + ansible.builtin.include_tasks: "unpack_{{ atl_download_format }}.yml" - name: Symlink the installed version to current - file: + ansible.builtin.file: src: "{{ atl_product_installation_versioned }}" dest: "{{ atl_product_installation_current }}" state: link force: true - name: "Ensure catalina.out log dir exists after product is installed (except bitbucket)" - file: + ansible.builtin.file: path: "{{ atl_product_installation_current }}/logs" state: directory mode: 0750 @@ -277,5 +294,5 @@ changed_when: false # For Molecule idempotence check - name: Include if jsd is requested to be installed from OBR - include_tasks: "jira-servicedesk_as_obr.yml" - when: atl_install_jsd_as_obr + ansible.builtin.include_tasks: "jira-servicedesk_as_obr.yml" + when: atl_install_jsd_as_obr | bool diff --git a/roles/product_install/tasks/product_version_latest.yml b/roles/product_install/tasks/product_version_latest.yml index 604e816..03ac7cf 100644 --- a/roles/product_install/tasks/product_version_latest.yml +++ b/roles/product_install/tasks/product_version_latest.yml @@ -5,9 +5,9 @@ # product that supports the standard marketplace API. - name: Fetch the latest version from URL - set_fact: + ansible.builtin.set_fact: atl_product_version_json: "{{ lookup('url', '{{ atl_product_latest_version_url }}') }}" - name: Set the local var to retrieved version - set_fact: + ansible.builtin.set_fact: atl_latest_version: "{{ atl_product_version_json._embedded.versions[0].name }}" diff --git a/roles/product_install/tasks/unpack_installer.yml b/roles/product_install/tasks/unpack_installer.yml index f340463..5ecca1e 100644 --- a/roles/product_install/tasks/unpack_installer.yml +++ b/roles/product_install/tasks/unpack_installer.yml @@ -1,7 +1,7 @@ --- - name: Create installer varfile - template: + ansible.builtin.template: src: "{{ atl_product_family }}.varfile.j2" dest: "{{ atl_product_varfile }}" mode: 0755 @@ -13,7 +13,7 @@ # The variable {{ atl_product_download }} will be on temp for first nodes and shared_home for # subsequent nodes. - name: Run the installer - command: /bin/sh "{{ atl_product_download }}" -q -varfile "{{ atl_product_varfile }}" + ansible.builtin.command: /bin/sh "{{ atl_product_download }}" -q -varfile "{{ atl_product_varfile }}" args: creates: "{{ atl_product_installation_versioned }}/.install4j/" become: true diff --git a/roles/product_install/tasks/unpack_tarball.yml b/roles/product_install/tasks/unpack_tarball.yml index 196928f..2c5d46d 100644 --- a/roles/product_install/tasks/unpack_tarball.yml +++ b/roles/product_install/tasks/unpack_tarball.yml @@ -1,7 +1,7 @@ --- - name: Unpack the product packages - unarchive: + ansible.builtin.unarchive: remote_src: true src: "{{ atl_product_download }}" dest: "{{ atl_product_installation_versioned }}" diff --git a/roles/product_startup/defaults/main.yml b/roles/product_startup/defaults/main.yml index da7824c..7b3f329 100644 --- a/roles/product_startup/defaults/main.yml +++ b/roles/product_startup/defaults/main.yml @@ -24,7 +24,7 @@ atl_stop_exec_path: "{{ atl_product_installation_current }}/{{ atl_stop_script_m atl_systemd_service_dir_map: amazon: "/usr/lib/systemd/system" ubuntu: "/lib/systemd/system" -atl_systemd_service_dir: "{{ atl_systemd_service_dir_map[ansible_distribution|lower] }}" +atl_systemd_service_dir: "{{ atl_systemd_service_dir_map[ansible_distribution | lower] }}" atl_systemd_service_name: "{{ atl_product_edition }}.service" diff --git a/roles/product_startup/handlers/main.yml b/roles/product_startup/handlers/main.yml index 57275c9..6aad4f5 100644 --- a/roles/product_startup/handlers/main.yml +++ b/roles/product_startup/handlers/main.yml @@ -1,19 +1,19 @@ --- - name: Restart Product - service: + ansible.builtin.service: name: "{{ atl_systemd_service_name }}" state: restarted when: - - atl_startup_restart + - atl_startup_restart | bool - molecule_yml is not defined no_log: true - name: Enable Product - service: + ansible.builtin.service: name: "{{ atl_systemd_service_name }}" enabled: true when: - - atl_startup_enable + - atl_startup_enable | bool - molecule_yml is not defined no_log: true diff --git a/roles/product_startup/molecule/bitbucket/Dockerfile.j2 b/roles/product_startup/molecule/bitbucket/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_startup/molecule/bitbucket/Dockerfile.j2 +++ b/roles/product_startup/molecule/bitbucket/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_startup/molecule/bitbucket/converge.yml b/roles/product_startup/molecule/bitbucket/converge.yml index b0b462a..7209cc0 100644 --- a/roles/product_startup/molecule/bitbucket/converge.yml +++ b/roles/product_startup/molecule/bitbucket/converge.yml @@ -27,7 +27,7 @@ pre_tasks: - name: Create systemd dir if necessary - file: + ansible.builtin.file: path: "{{ item }}" state: directory with_items: diff --git a/roles/product_startup/molecule/bitbucket/molecule.yml b/roles/product_startup/molecule/bitbucket/molecule.yml index 400e984..07706c7 100644 --- a/roles/product_startup/molecule/bitbucket/molecule.yml +++ b/roles/product_startup/molecule/bitbucket/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_startup/molecule/default/Dockerfile.j2 b/roles/product_startup/molecule/default/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_startup/molecule/default/Dockerfile.j2 +++ b/roles/product_startup/molecule/default/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_startup/molecule/default/converge.yml b/roles/product_startup/molecule/default/converge.yml index 9a232fc..8b5d53f 100644 --- a/roles/product_startup/molecule/default/converge.yml +++ b/roles/product_startup/molecule/default/converge.yml @@ -10,7 +10,7 @@ pre_tasks: - name: Create systemd dir if necessary - file: + ansible.builtin.file: path: "{{ item }}" state: directory with_items: @@ -21,17 +21,17 @@ - role: product_startup post_tasks: - - include_vars: ../../defaults/main.yml + - ansible.builtin.include_vars: ../../defaults/main.yml # workaround Molecule idempotence check # normal pattern of setting changed_when allows file to be written twice, which takes extra time - name: Check if vars have already been dumped - stat: + ansible.builtin.stat: path: "{{ ansible_vars_dump_location }}" register: ansible_vars_stat_result - name: Dump vars to file for inspection - copy: + ansible.builtin.copy: content: | {{ vars | to_nice_yaml }} dest: "{{ ansible_vars_dump_location }}" diff --git a/roles/product_startup/molecule/default/molecule.yml b/roles/product_startup/molecule/default/molecule.yml index 400e984..07706c7 100644 --- a/roles/product_startup/molecule/default/molecule.yml +++ b/roles/product_startup/molecule/default/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_startup/molecule/startup_restart_false/Dockerfile.j2 b/roles/product_startup/molecule/startup_restart_false/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_startup/molecule/startup_restart_false/Dockerfile.j2 +++ b/roles/product_startup/molecule/startup_restart_false/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_startup/molecule/startup_restart_false/converge.yml b/roles/product_startup/molecule/startup_restart_false/converge.yml index 1943cb3..70f7941 100644 --- a/roles/product_startup/molecule/startup_restart_false/converge.yml +++ b/roles/product_startup/molecule/startup_restart_false/converge.yml @@ -10,17 +10,17 @@ ansible_vars_dump_location: "/tmp/ansible-vars.yml" tasks: - - include_vars: ../../defaults/main.yml + - ansible.builtin.include_vars: ../../defaults/main.yml # workaround Molecule idempotence check # normal pattern of setting changed_when allows file to be written twice, which takes extra time - name: Check if vars have already been dumped - stat: + ansible.builtin.stat: path: "{{ ansible_vars_dump_location }}" register: ansible_vars_stat_result - name: Dump vars to file for inspection - copy: + ansible.builtin.copy: content: | {{ vars | to_nice_yaml }} dest: "{{ ansible_vars_dump_location }}" diff --git a/roles/product_startup/molecule/startup_restart_false/molecule.yml b/roles/product_startup/molecule/startup_restart_false/molecule.yml index 85b7cb3..09cb7c2 100644 --- a/roles/product_startup/molecule/startup_restart_false/molecule.yml +++ b/roles/product_startup/molecule/startup_restart_false/molecule.yml @@ -1,24 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" ATL_STARTUP_RESTART: "false" options: skip-tags: runtime_pkg diff --git a/roles/product_startup/molecule/synchrony/Dockerfile.j2 b/roles/product_startup/molecule/synchrony/Dockerfile.j2 index e6aa95d..fbd7b34 100644 --- a/roles/product_startup/molecule/synchrony/Dockerfile.j2 +++ b/roles/product_startup/molecule/synchrony/Dockerfile.j2 @@ -6,8 +6,8 @@ FROM {{ item.registry.url }}/{{ item.image }} FROM {{ item.image }} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates file && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python3.11 sudo python3.11-devel python*-dnf bash && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ diff --git a/roles/product_startup/molecule/synchrony/converge.yml b/roles/product_startup/molecule/synchrony/converge.yml index b4fa14b..1418f0e 100644 --- a/roles/product_startup/molecule/synchrony/converge.yml +++ b/roles/product_startup/molecule/synchrony/converge.yml @@ -19,7 +19,7 @@ pre_tasks: - name: Create systemd dir if necessary - file: + ansible.builtin.file: path: "{{ item }}" state: directory with_items: diff --git a/roles/product_startup/molecule/synchrony/molecule.yml b/roles/product_startup/molecule/synchrony/molecule.yml index 400e984..07706c7 100644 --- a/roles/product_startup/molecule/synchrony/molecule.yml +++ b/roles/product_startup/molecule/synchrony/molecule.yml @@ -1,23 +1,25 @@ --- -dependency: - name: galaxy driver: name: docker platforms: - - name: amazon_linux2 - image: amazonlinux:2 + - name: amazon_linux2023 + image: amazonlinux:2023 groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 - name: ubuntu_lts - image: ubuntu:bionic + image: ubuntu:jammy groups: - aws_node_local + platform: linux/amd64 ulimits: - nofile:262144:262144 provisioner: name: ansible + env: + ANSIBLE_COLLECTIONS_PATH: "../../../../" options: skip-tags: runtime_pkg inventory: diff --git a/roles/product_startup/tasks/main.yml b/roles/product_startup/tasks/main.yml index 99a40e4..e5120ab 100644 --- a/roles/product_startup/tasks/main.yml +++ b/roles/product_startup/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: "Install systemd service file" - template: + ansible.builtin.template: src: "product.service.j2" dest: "{{ atl_systemd_service_dir }}/{{ atl_systemd_service_name }}" owner: root diff --git a/roles/product_startup/templates/product.service.j2 b/roles/product_startup/templates/product.service.j2 index 9c16e66..fa6d398 100644 --- a/roles/product_startup/templates/product.service.j2 +++ b/roles/product_startup/templates/product.service.j2 @@ -17,7 +17,7 @@ StandardError=journal+console {# Bitbucket DC sets up its service start/stop logging in a different way to all our other DC offerings and so we exclude it from having the catalina.out redirect and foreground startup #} {% if (atl_product_family == "stash") %} -PIDFile={{ atl_product_home }}/log/bitbucket.pid +PIDFile={{ atl_product_home }}/log/{{ atl_product_edition }}.pid ExecStart={{ atl_startup_exec_path }}{% for c in atl_startup_exec_options %} {{ c }}{% endfor %} ExecStop={{ atl_stop_exec_path }} diff --git a/roles/synchrony_config/tasks/main.yml b/roles/synchrony_config/tasks/main.yml index f3cf3f2..e9b8db0 100644 --- a/roles/synchrony_config/tasks/main.yml +++ b/roles/synchrony_config/tasks/main.yml @@ -1,14 +1,14 @@ --- - name: Install the startup wrapper script - copy: + ansible.builtin.copy: src: start-synchrony dest: "{{ atl_product_installation_current }}/bin/start-synchrony" group: "{{ atl_product_user }}" mode: "0750" - name: Install the Synchrony environment settings - template: + ansible.builtin.template: src: "atl.synchrony.j2" dest: "/etc/atl.synchrony" group: "{{ atl_product_user }}" diff --git a/security-assistant.yml b/security-assistant.yml index bee9e16..a0c42d8 100644 --- a/security-assistant.yml +++ b/security-assistant.yml @@ -1,2 +1,2 @@ -owner: ssmith@atlassian.com +owner: lgoolsbee@atlassian.com file-sourceclear-tickets: true \ No newline at end of file