diff --git a/.github/workflows/lint-ansible.yml b/.github/workflows/lint-ansible.yml new file mode 100644 index 000000000..893ea6105 --- /dev/null +++ b/.github/workflows/lint-ansible.yml @@ -0,0 +1,31 @@ +name: Lint Ansible + +on: + push: + branches: [main] + pull_request: + branches: [main] + + workflow_dispatch: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - uses: actions/setup-python@v6 + with: + python-version: "3.12" + - name: Install Poetry + run: pipx install poetry + - name: Install dependencies + run: poetry install + working-directory: ./controls + - name: yamllint + run: poetry run yamllint . + working-directory: ./controls + # Blocking. The existing backlog is demoted to warnings in controls/.ansible-lint, + # so this fails only on rule types that are not already violated. + - name: ansible-lint + run: poetry run ansible-lint + working-directory: ./controls diff --git a/.github/workflows/test-molecule.yml b/.github/workflows/test-molecule.yml index bd62932f5..16248c164 100644 --- a/.github/workflows/test-molecule.yml +++ b/.github/workflows/test-molecule.yml @@ -25,27 +25,23 @@ jobs: python-version: "3.12" - name: Install depencencies run: | - pip install ansible==13.3.0 - pip install molecule==25.12.0 - pip install "molecule[docker.lint]" - pip install molecule-plugins==25.8.12 - pip install "molecule-plugins[docker]" - pip install molecule-hetznercloud - pip install docker - pip install hcloud + pip install "ansible==14.3.1" + pip install "molecule==26.8.0" + pip install "molecule-plugins==26.7.15" + pip install "molecule-plugins[docker]==26.7.15" + pip install "molecule-hetznercloud==2.8.0" + pip install "docker==7.2.0" + pip install "hcloud==2.23.0" ansible-galaxy collection install community.docker - name: Install dependency for pipx run: | - /opt/pipx/venvs/ansible-core/bin/python -m pip install ansible==13.3.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule==25.12.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule[docker.lint]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-plugins==25.8.12 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-hetznercloud - /opt/pipx/venvs/ansible-core/bin/python -m pip install docker - /opt/pipx/venvs/ansible-core/bin/python -m pip install hcloud - - name: Install ansible-lint - run: sudo apt-get install -y ansible-lint + /opt/pipx/venvs/ansible-core/bin/python -m pip install "ansible==14.3.1" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule==26.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-hetznercloud==2.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "docker==7.2.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "hcloud==2.23.0" - name: Molecule version run: molecule --version env: @@ -74,6 +70,7 @@ jobs: { role: "update-changes", test: "247" }, { role: "update-changes", test: "248" }, { role: "update-changes", test: "250" }, + { role: "update-changes", test: "251" }, ] fail-fast: false concurrency: molecule-test-${{ matrix.tests.role }}-${{ matrix.tests.test }} @@ -86,27 +83,23 @@ jobs: python-version: "3.12" - name: Install depencencies run: | - pip install ansible==13.3.0 - pip install molecule==25.12.0 - pip install "molecule[docker.lint]" - pip install molecule-plugins==25.8.12 - pip install "molecule-plugins[docker]" - pip install molecule-hetznercloud - pip install docker - pip install hcloud + pip install "ansible==14.3.1" + pip install "molecule==26.8.0" + pip install "molecule-plugins==26.7.15" + pip install "molecule-plugins[docker]==26.7.15" + pip install "molecule-hetznercloud==2.8.0" + pip install "docker==7.2.0" + pip install "hcloud==2.23.0" ansible-galaxy collection install community.docker - name: Install dependency for pipx run: | - /opt/pipx/venvs/ansible-core/bin/python -m pip install ansible==13.3.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule==25.12.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule[docker.lint]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-plugins==25.8.12 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-hetznercloud - /opt/pipx/venvs/ansible-core/bin/python -m pip install docker - /opt/pipx/venvs/ansible-core/bin/python -m pip install hcloud - - name: Install ansible-lint - run: sudo apt-get install -y ansible-lint + /opt/pipx/venvs/ansible-core/bin/python -m pip install "ansible==14.3.1" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule==26.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-hetznercloud==2.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "docker==7.2.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "hcloud==2.23.0" - name: Molecule version run: molecule --version env: @@ -251,27 +244,23 @@ jobs: python-version: "3.12" - name: Install depencencies run: | - pip install ansible==13.3.0 - pip install molecule==25.12.0 - pip install "molecule[docker.lint]" - pip install molecule-plugins==25.8.12 - pip install "molecule-plugins[docker]" - pip install molecule-hetznercloud - pip install docker - pip install hcloud + pip install "ansible==14.3.1" + pip install "molecule==26.8.0" + pip install "molecule-plugins==26.7.15" + pip install "molecule-plugins[docker]==26.7.15" + pip install "molecule-hetznercloud==2.8.0" + pip install "docker==7.2.0" + pip install "hcloud==2.23.0" ansible-galaxy collection install community.docker - name: Install dependency for pipx run: | - /opt/pipx/venvs/ansible-core/bin/python -m pip install ansible==13.3.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule==25.12.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule[docker.lint]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-plugins==25.8.12 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-hetznercloud - /opt/pipx/venvs/ansible-core/bin/python -m pip install docker - /opt/pipx/venvs/ansible-core/bin/python -m pip install hcloud - - name: Install ansible-lint - run: sudo apt-get install -y ansible-lint + /opt/pipx/venvs/ansible-core/bin/python -m pip install "ansible==14.3.1" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule==26.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-hetznercloud==2.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "docker==7.2.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "hcloud==2.23.0" - name: Molecule version run: molecule --version env: @@ -364,27 +353,23 @@ jobs: python-version: "3.12" - name: Install depencencies run: | - pip install ansible==13.3.0 - pip install molecule==25.12.0 - pip install "molecule[docker.lint]" - pip install molecule-plugins==25.8.12 - pip install "molecule-plugins[docker]" - pip install molecule-hetznercloud - pip install docker - pip install hcloud + pip install "ansible==14.3.1" + pip install "molecule==26.8.0" + pip install "molecule-plugins==26.7.15" + pip install "molecule-plugins[docker]==26.7.15" + pip install "molecule-hetznercloud==2.8.0" + pip install "docker==7.2.0" + pip install "hcloud==2.23.0" ansible-galaxy collection install community.docker - name: Install dependency for pipx run: | - /opt/pipx/venvs/ansible-core/bin/python -m pip install ansible==13.3.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule==25.12.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule[docker.lint]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-plugins==25.8.12 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-hetznercloud - /opt/pipx/venvs/ansible-core/bin/python -m pip install docker - /opt/pipx/venvs/ansible-core/bin/python -m pip install hcloud - - name: Install ansible-lint - run: sudo apt-get install -y ansible-lint + /opt/pipx/venvs/ansible-core/bin/python -m pip install "ansible==14.3.1" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule==26.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-hetznercloud==2.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "docker==7.2.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "hcloud==2.23.0" - name: Molecule version run: molecule --version env: @@ -471,27 +456,23 @@ jobs: python-version: "3.12" - name: Install depencencies run: | - pip install ansible==13.3.0 - pip install molecule==25.12.0 - pip install "molecule[docker.lint]" - pip install molecule-plugins==25.8.12 - pip install "molecule-plugins[docker]" - pip install molecule-hetznercloud - pip install docker - pip install hcloud + pip install "ansible==14.3.1" + pip install "molecule==26.8.0" + pip install "molecule-plugins==26.7.15" + pip install "molecule-plugins[docker]==26.7.15" + pip install "molecule-hetznercloud==2.8.0" + pip install "docker==7.2.0" + pip install "hcloud==2.23.0" ansible-galaxy collection install community.docker - name: Install dependency for pipx run: | - /opt/pipx/venvs/ansible-core/bin/python -m pip install ansible==13.3.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule==25.12.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule[docker.lint]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-plugins==25.8.12 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-hetznercloud - /opt/pipx/venvs/ansible-core/bin/python -m pip install docker - /opt/pipx/venvs/ansible-core/bin/python -m pip install hcloud - - name: Install ansible-lint - run: sudo apt-get install -y ansible-lint + /opt/pipx/venvs/ansible-core/bin/python -m pip install "ansible==14.3.1" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule==26.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-hetznercloud==2.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "docker==7.2.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "hcloud==2.23.0" - name: Molecule version run: molecule --version env: @@ -528,27 +509,23 @@ jobs: python-version: "3.12" - name: Install depencencies run: | - pip install ansible==13.3.0 - pip install molecule==25.12.0 - pip install "molecule[docker.lint]" - pip install molecule-plugins==25.8.12 - pip install "molecule-plugins[docker]" - pip install molecule-hetznercloud - pip install docker - pip install hcloud + pip install "ansible==14.3.1" + pip install "molecule==26.8.0" + pip install "molecule-plugins==26.7.15" + pip install "molecule-plugins[docker]==26.7.15" + pip install "molecule-hetznercloud==2.8.0" + pip install "docker==7.2.0" + pip install "hcloud==2.23.0" ansible-galaxy collection install community.docker - name: Install dependency for pipx run: | - /opt/pipx/venvs/ansible-core/bin/python -m pip install ansible==13.3.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule==25.12.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule[docker.lint]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-plugins==25.8.12 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-hetznercloud - /opt/pipx/venvs/ansible-core/bin/python -m pip install docker - /opt/pipx/venvs/ansible-core/bin/python -m pip install hcloud - - name: Install ansible-lint - run: sudo apt-get install -y ansible-lint + /opt/pipx/venvs/ansible-core/bin/python -m pip install "ansible==14.3.1" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule==26.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-hetznercloud==2.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "docker==7.2.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "hcloud==2.23.0" - name: Molecule version run: molecule --version env: @@ -589,27 +566,23 @@ jobs: python-version: "3.12" - name: Install depencencies run: | - pip install ansible==13.3.0 - pip install molecule==25.12.0 - pip install "molecule[docker.lint]" - pip install molecule-plugins==25.8.12 - pip install "molecule-plugins[docker]" - pip install molecule-hetznercloud - pip install docker - pip install hcloud + pip install "ansible==14.3.1" + pip install "molecule==26.8.0" + pip install "molecule-plugins==26.7.15" + pip install "molecule-plugins[docker]==26.7.15" + pip install "molecule-hetznercloud==2.8.0" + pip install "docker==7.2.0" + pip install "hcloud==2.23.0" ansible-galaxy collection install community.docker - name: Install dependency for pipx run: | - /opt/pipx/venvs/ansible-core/bin/python -m pip install ansible==13.3.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule==25.12.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule[docker.lint]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-plugins==25.8.12 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-hetznercloud - /opt/pipx/venvs/ansible-core/bin/python -m pip install docker - /opt/pipx/venvs/ansible-core/bin/python -m pip install hcloud - - name: Install ansible-lint - run: sudo apt-get install -y ansible-lint + /opt/pipx/venvs/ansible-core/bin/python -m pip install "ansible==14.3.1" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule==26.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-hetznercloud==2.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "docker==7.2.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "hcloud==2.23.0" - name: Molecule version run: molecule --version env: @@ -651,27 +624,23 @@ jobs: python-version: "3.12" - name: Install depencencies run: | - pip install ansible==13.3.0 - pip install molecule==25.12.0 - pip install "molecule[docker.lint]" - pip install molecule-plugins==25.8.12 - pip install "molecule-plugins[docker]" - pip install molecule-hetznercloud - pip install docker - pip install hcloud + pip install "ansible==14.3.1" + pip install "molecule==26.8.0" + pip install "molecule-plugins==26.7.15" + pip install "molecule-plugins[docker]==26.7.15" + pip install "molecule-hetznercloud==2.8.0" + pip install "docker==7.2.0" + pip install "hcloud==2.23.0" ansible-galaxy collection install community.docker - name: Install dependency for pipx run: | - /opt/pipx/venvs/ansible-core/bin/python -m pip install ansible==13.3.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule==25.12.0 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule[docker.lint]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-plugins==25.8.12 - /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]" - /opt/pipx/venvs/ansible-core/bin/python -m pip install molecule-hetznercloud - /opt/pipx/venvs/ansible-core/bin/python -m pip install docker - /opt/pipx/venvs/ansible-core/bin/python -m pip install hcloud - - name: Install ansible-lint - run: sudo apt-get install -y ansible-lint + /opt/pipx/venvs/ansible-core/bin/python -m pip install "ansible==14.3.1" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule==26.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-plugins[docker]==26.7.15" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "molecule-hetznercloud==2.8.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "docker==7.2.0" + /opt/pipx/venvs/ansible-core/bin/python -m pip install "hcloud==2.23.0" - name: Molecule version run: molecule --version env: diff --git a/controls/.ansible-lint b/controls/.ansible-lint new file mode 100644 index 000000000..4f00445f6 --- /dev/null +++ b/controls/.ansible-lint @@ -0,0 +1,28 @@ +--- +# The tree carries a large stylistic backlog. These rules are demoted to warnings +# so the gate blocks only on rule types that are not already violated - anything +# new, plus real syntax errors. Remove entries as the backlog gets cleaned up. +warn_list: + - args + - command-instead-of-module + - command-instead-of-shell + - fqcn + - ignore-errors + - jinja + - key-order + - latest + - name + - no-changed-when + - no-free-form + - no-handler + - package-latest + - risky-file-permissions + - risky-shell-pipe + - schema + - role-name + - var-naming + +# Legacy per-role test playbooks: the role is not resolvable from that directory, +# which ansible-lint reports as a syntax error. Not real syntax problems. +exclude_paths: + - roles/*/tests/ diff --git a/controls/.yamllint b/controls/.yamllint new file mode 100644 index 000000000..5f7436425 --- /dev/null +++ b/controls/.yamllint @@ -0,0 +1,36 @@ +--- +# Based on ansible-lint config +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + max-spaces-inside: 1 + level: error + colons: + max-spaces-after: -1 + level: error + commas: + max-spaces-after: -1 + level: error + comments: disable + comments-indentation: disable + document-start: disable + empty-lines: + max: 3 + level: error + hyphens: + level: error + indentation: disable + key-duplicates: enable + line-length: disable + new-line-at-end-of-file: disable + new-lines: + type: unix + trailing-spaces: disable + truthy: disable + +ignore: | + .venv/ diff --git a/controls/poetry.lock b/controls/poetry.lock index 4eb08280e..00aecbcf2 100644 --- a/controls/poetry.lock +++ b/controls/poetry.lock @@ -2,33 +2,33 @@ [[package]] name = "ansible" -version = "13.8.0" +version = "14.3.1" description = "Radically simple IT automation" optional = false python-versions = ">=3.12" groups = ["main"] files = [ - {file = "ansible-13.8.0-py3-none-any.whl", hash = "sha256:daf9c9a2850bbc6c098ba3368aeba99d4ae37c90bca47f974dc19342c0571361"}, - {file = "ansible-13.8.0.tar.gz", hash = "sha256:41793dcd0f1cb4891a80e196e1f1fb16947cb2554d52b25d812cf38548da603c"}, + {file = "ansible-14.3.1-py3-none-any.whl", hash = "sha256:efa64b9aa99549d5ad35fa4dadedc258371138db5dc174f47dc026630eda90c9"}, + {file = "ansible-14.3.1.tar.gz", hash = "sha256:98d4ad2b355feac8dc04d99e8377d6cb801b1d58bbfadd6d80534e4607fb5c4d"}, ] [package.dependencies] -ansible-core = ">=2.20.7,<2.21.0" +ansible-core = ">=2.21.3,<2.22.0" [[package]] name = "ansible-compat" -version = "25.12.0" +version = "26.8.0" description = "Ansible compatibility goodies" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "ansible_compat-25.12.0-py3-none-any.whl", hash = "sha256:322ccc7002030a91588d1fdba21e934703d64736f0e483dc6afe8ecd93a75614"}, - {file = "ansible_compat-25.12.0.tar.gz", hash = "sha256:d38a149c5f95bb0d529c3b5e5fa3200b26f5e938ec7c31d8bb01d87c1f634410"}, + {file = "ansible_compat-26.8.0-py3-none-any.whl", hash = "sha256:cf23f3353c3b4179530eb589a0f6fb1c674d2b69660c14841de89f3688e0530a"}, + {file = "ansible_compat-26.8.0.tar.gz", hash = "sha256:1254bd1db72dcc93b74774f54b81e272260d3cd34ba5d595d42ca2dd9c46f7de"}, ] [package.dependencies] -ansible-core = ">=2.16" +ansible-core = ">=2.16.19,<2.17.dev0 || >=2.18.dev0" jsonschema = ">=4.6.0" packaging = ">=22.0" pyyaml = ">=6.0.1" @@ -36,14 +36,14 @@ subprocess-tee = ">=0.4.1" [[package]] name = "ansible-core" -version = "2.20.7" +version = "2.21.3" description = "Radically simple IT automation" optional = false python-versions = ">=3.12" groups = ["main"] files = [ - {file = "ansible_core-2.20.7-py3-none-any.whl", hash = "sha256:f4be63a9a8b6bb5f4fc68d41f8582f5b289b1ee1db0600caab8b3a660b9d7ddc"}, - {file = "ansible_core-2.20.7.tar.gz", hash = "sha256:84d4097a28e816e8bf8066307088f833837db9efdc9dc6716b43253de3b14106"}, + {file = "ansible_core-2.21.3-py3-none-any.whl", hash = "sha256:9e7dd367f7dc5d5e9fc5ae1baf8af9c4edc09e916a73a40108a3f32e3ad93f10"}, + {file = "ansible_core-2.21.3.tar.gz", hash = "sha256:4194fbd82273cbacfd06d86d74d2d7168c3c4b8426c03e93562cd7217f811ae1"}, ] [package.dependencies] @@ -53,6 +53,37 @@ packaging = "*" PyYAML = ">=5.1" resolvelib = ">=0.8.0,<2.0.0" +[[package]] +name = "ansible-lint" +version = "26.8.0" +description = "Checks playbooks for practices and behavior that could potentially be improved" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "ansible_lint-26.8.0-py3-none-any.whl", hash = "sha256:94e58501cc7fafaa505dd9daea3bddb4affa6e8efe8217323c06d7194a312f57"}, + {file = "ansible_lint-26.8.0.tar.gz", hash = "sha256:65cb5efab1ffaedbe23af0fff241a8834294f8ac80a8c838c2143024afc103a4"}, +] + +[package.dependencies] +ansible-compat = ">=26.3.0" +ansible-core = ">=2.16.19,<2.17.dev0 || >=2.18.dev0" +black = ">=24.3.0" +cffi = ">=1.15.1" +cryptography = ">=37" +distro = ">=1.9.0" +filelock = ">=3.8.2" +jsonschema = ">=4.10.0" +packaging = ">=22.0" +pathspec = ">=1.0.3,<1.2.0" +pyyaml = ">=6.0.1" +referencing = ">=0.36.2" +ruamel-yaml = ">=0.18.11" +ruamel-yaml-clib = {version = ">=0.2.12", markers = "python_version < \"3.14\""} +subprocess-tee = ">=0.4.1" +wcmatch = {version = ">=8.5.0", markers = "python_version >= \"3.12\""} +yamllint = ">=1.38.0" + [[package]] name = "attrs" version = "25.4.0" @@ -65,6 +96,57 @@ files = [ {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, ] +[[package]] +name = "black" +version = "26.5.1" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "black-26.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9942db8888e06943c5dde66ca0037dcff82a2a4ec1ad0ada9e0d2ee9d9823893"}, + {file = "black-26.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:89c93167a74d3a75dfaa38a5c7cca015537d5820dd7f17d63267d674a61cae90"}, + {file = "black-26.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f2cd76d069cc54c71f10360744ba8983fbb616903b4304a85b734915c8e1b4"}, + {file = "black-26.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:87ed5c6f450580a2f6790bc7cbfb016dfc73bc750249762268a3695361315eef"}, + {file = "black-26.5.1-cp310-cp310-win_arm64.whl", hash = "sha256:58b4bd92cf88aacf83d88479c8f9caee044b1ec55f2451a337354a7ea2590a22"}, + {file = "black-26.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:96ae2c733b2aabdd9986e2c5df628ff3473676cd1c5faded1ff496cf6d74083c"}, + {file = "black-26.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0e48b87e03bf109288e55cfceadcfa15ff5470aca2851a851950ed2926f450d7"}, + {file = "black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5119fa92ae61f786e8c3662fd60aece1d0a2dd5cca5d0c79417a95e7a4272a59"}, + {file = "black-26.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:30d3c14661f2792e9142cce3eeeb1cbc175b3eb5f733be0c8eeb99651e52b0c3"}, + {file = "black-26.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:1ef92b76f7733f282fd096ea406200b5a286c42947412b0eaff3a74e3616cefe"}, + {file = "black-26.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4ad6fa01f941920f54f2bbb35f3df7673428a0ef98a0b0840c2eaef3b110efa8"}, + {file = "black-26.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3915f256e75a2d7cf88d8953d37f780455dc586cc72dee059c528fe77f581217"}, + {file = "black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d98d4137277c75dfb898ec8d846c4fd68ba1e9cf77f95e2865c203dc18f4c3d"}, + {file = "black-26.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:a1dca32d9f1784af512a13410ec204c6f7f0aa9797a111c42e1c03449821c264"}, + {file = "black-26.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1037d5ac7b7b310b2632ad867ec8d0e4c4819dcdb0b820f63135da746a24e418"}, + {file = "black-26.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b36cf2ddf5566e205f6535f782a62194a184d33e175b64ae8c40b1737522be3"}, + {file = "black-26.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f7ea64ebfa01b50f693508fc39f875e264446d3b097088f84f203b9d09618a0"}, + {file = "black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecb3e624844c798144e9bd986954e0adc81d8911a1f30f375e1252fe26e8c294"}, + {file = "black-26.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:e1a26503279b6b310669fb0b219c39e4820b77e8189fe80f522bb511f247db0a"}, + {file = "black-26.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c34b25da232ead53a6f335b76dbea124f4d152ad568b9080d6f944bc2b34b52"}, + {file = "black-26.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e88976690a64b0af98312ca958415849cb42423423c5f2ee74af4b49a97a2168"}, + {file = "black-26.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32d5ea7f6c8bdfa6e648326ebca1f02b0764e2a029edc6f8dce2627e19d468c3"}, + {file = "black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea8d16dc41655aa113cd64665e7219446cd7e4ff2248d7178eaa905190c86b18"}, + {file = "black-26.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:577f21094ea469ef92ec1adaf2c9441a226d2144d01a5be2fa823cecf6543e50"}, + {file = "black-26.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:ed1a20af114c301a0269bf01163d51dbef72737fd65f850001e7cbe7f3c7abae"}, + {file = "black-26.5.1-py3-none-any.whl", hash = "sha256:4ed7f7da04046d2e488437170797d3b4a4ad83906683bcb7dfc68b673bbce5e2"}, + {file = "black-26.5.1.tar.gz", hash = "sha256:dd321f668053961824bcc1be1cc1df748b2d7e4fa28086b08331e577b0100a73"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=1.0.0" +platformdirs = ">=2" +pytokens = ">=0.4.0,<0.5.0" + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.10)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2) ; sys_platform != \"win32\"", "winloop (>=0.5.0) ; sys_platform == \"win32\""] + [[package]] name = "bracex" version = "2.6" @@ -96,7 +178,6 @@ description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.9" groups = ["main"] -markers = "platform_python_implementation != \"PyPy\"" files = [ {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, @@ -325,24 +406,6 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -[[package]] -name = "click-help-colors" -version = "0.9.4" -description = "Colorization of help messages in Click" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "click-help-colors-0.9.4.tar.gz", hash = "sha256:f4cabe52cf550299b8888f4f2ee4c5f359ac27e33bcfe4d61db47785a5cc936c"}, - {file = "click_help_colors-0.9.4-py3-none-any.whl", hash = "sha256:b33c5803eeaeb084393b1ab5899dc5476c7196b87a18713045afe76f840b42db"}, -] - -[package.dependencies] -click = ">=7.0,<9" - -[package.extras] -dev = ["mypy", "pytest"] - [[package]] name = "colorama" version = "0.4.6" @@ -425,7 +488,6 @@ description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "sys_platform == \"linux2\" or sys_platform == \"linux\"" files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -433,14 +495,14 @@ files = [ [[package]] name = "docker" -version = "7.1.0" +version = "7.2.0" description = "A Python library for the Docker Engine API." optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"}, - {file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"}, + {file = "docker-7.2.0-py3-none-any.whl", hash = "sha256:a3f45fdeb9165e2d25d9a1d02ddf3bc70fb572cf5ebbf9b58558c22caf29b71f"}, + {file = "docker-7.2.0.tar.gz", hash = "sha256:cebb93773d334f778e023a7ee352a8d6e13ab1bd3b863a4d4a59dec897df43ac"}, ] [package.dependencies] @@ -472,16 +534,28 @@ rich = ">=9.5.1" [package.extras] test = ["mock (>=3.0.5)", "pytest (>=5.4.0)", "pytest-cov (>=2.7.1)", "pytest-mock (>=3.3.1)", "pytest-plus", "pytest-xdist (>=1.29.0)"] +[[package]] +name = "filelock" +version = "3.32.4" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "filelock-3.32.4-py3-none-any.whl", hash = "sha256:22e58ca3b1ae3b98993b762d7338367ae64fe50252bf78d59da3bfebcdf1cedd"}, + {file = "filelock-3.32.4.tar.gz", hash = "sha256:2bde2e4cf732e0153406d8a7bc80620ecf5e621fe0d25e41143c4e3b4733ff30"}, +] + [[package]] name = "hcloud" -version = "2.16.0" +version = "2.23.0" description = "Official Hetzner Cloud python library" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "hcloud-2.16.0-py3-none-any.whl", hash = "sha256:37b3ef30be1034299879d1da89b2ed34e907b79796b684e16d8d6f76bd4a3c47"}, - {file = "hcloud-2.16.0.tar.gz", hash = "sha256:eb1acb3115bc0b356b450ad23256873b58311b357a49625a8fe0cbaba2db509b"}, + {file = "hcloud-2.23.0-py3-none-any.whl", hash = "sha256:5a3fa1bbd1f87bfc5f0c726caebe041b9e1119b4361aafabc12fad284a2c445a"}, + {file = "hcloud-2.23.0.tar.gz", hash = "sha256:c12dce3f14404ea342d79236292a15fbc4ceeb7861724a09dd3fe60cef513e0b"}, ] [package.dependencies] @@ -489,8 +563,8 @@ python-dateutil = ">=2.7.5" requests = ">=2.20" [package.extras] -docs = ["myst-parser (>=5,<5.1)", "sphinx (>=9,<9.2)", "sphinx-rtd-theme (>=3,<3.2)", "watchdog (>=6,<6.1)"] -test = ["coverage (>=7.13,<7.14)", "mypy (>=1.19,<1.20)", "pylint (>=4,<4.1)", "pytest (>=9,<9.1)", "pytest-cov (>=7,<7.1)", "types-python-dateutil", "types-requests"] +docs = ["myst-parser (>=5,<5.2)", "sphinx (>=9,<9.2)", "sphinx-rtd-theme (>=3,<3.2)", "watchdog (>=6,<6.1)"] +test = ["coverage (>=7.15,<7.16)", "mypy (>=2.3,<2.4)", "pylint (>=4,<4.1)", "pytest (>=9,<9.2)", "pytest-cov (>=7,<7.2)", "types-python-dateutil", "types-requests"] [[package]] name = "idna" @@ -699,21 +773,20 @@ files = [ [[package]] name = "molecule" -version = "25.12.0" +version = "26.8.0" description = "Molecule aids in the development and testing of Ansible roles" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "molecule-25.12.0-py3-none-any.whl", hash = "sha256:3df4fc034f3204efce7247b5b1087b2a7e411e27374a05fe96c6c676656e82bd"}, - {file = "molecule-25.12.0.tar.gz", hash = "sha256:b226bf1be67ce0fa30c726aab226063f9443e561d7e3d048f55dfb2ee51adbd6"}, + {file = "molecule-26.8.0-py3-none-any.whl", hash = "sha256:69a2a07dad27d362b9209024c9d3f0daac29da6637945fec5098deea448e3b52"}, + {file = "molecule-26.8.0.tar.gz", hash = "sha256:506a0a0416683f4e404a42ce8c56a980cd93b7c802258222c1a9736b0f4ec37c"}, ] [package.dependencies] ansible-compat = ">=25.1.4" -ansible-core = ">=2.15.0" +ansible-core = ">=2.15.0,<2.17.dev0 || >=2.18.dev0" click = ">=8.0,<9" -click-help-colors = ">=0.9.4" enrich = ">=1.2.7" jinja2 = ">=2.11.3" jsonschema = ">=4.9.1" @@ -725,14 +798,14 @@ wcmatch = ">=8.1.2" [[package]] name = "molecule-hetznercloud" -version = "2.7.0" +version = "2.8.0" description = "Molecule driver for Hetzner Cloud" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "molecule_hetznercloud-2.7.0-py3-none-any.whl", hash = "sha256:48f07c2975fb31d2943c2a569f028da34400a2e35a937241023e409cea3f9b42"}, - {file = "molecule_hetznercloud-2.7.0.tar.gz", hash = "sha256:abc803d0eab4aeeec6e6a4012d6a22a839146f36671da55201bc85427823f1a8"}, + {file = "molecule_hetznercloud-2.8.0-py3-none-any.whl", hash = "sha256:129f670e6eb4153cd311c43ea565eeea12d094b78a3a09740a35c446579ea932"}, + {file = "molecule_hetznercloud-2.8.0.tar.gz", hash = "sha256:717c3c8811e5d2ad7afe5fefe6b7f6b7d68245318a62cdedda392b6bc69350bb"}, ] [package.dependencies] @@ -742,18 +815,18 @@ python-dateutil = ">=2.7.5" requests = ">=2.20" [package.extras] -test = ["pytest (>=9,<9.1)", "pytest-ansible (>=25.12,<25.13)", "pytest-cov (>=7,<7.1)", "pytest-xdist (>=3.3.1,<4.0)", "tox (>=4.11.3,<5.0)"] +test = ["pytest (>=9,<9.2)", "pytest-ansible (>=26.6,<26.7)", "pytest-cov (>=7,<7.2)", "pytest-xdist (>=3.3.1,<4.0)", "tox (>=4.11.3,<5.0)"] [[package]] name = "molecule-plugins" -version = "25.8.12" +version = "26.7.15" description = "Molecule Plugins" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "molecule_plugins-25.8.12-py3-none-any.whl", hash = "sha256:c5b8ceb209a5ff87326631d60408f8d08b9431b2e339dad4c620130b50279ce0"}, - {file = "molecule_plugins-25.8.12.tar.gz", hash = "sha256:75f32763e90275bfc24bcc0d27b9bb22ac973658bf902b2e3e8af8e2a1c32083"}, + {file = "molecule_plugins-26.7.15-py3-none-any.whl", hash = "sha256:191dfa7fd965c637e3b61d0929f2fb741f0df1181a250df62eca3657b1182794"}, + {file = "molecule_plugins-26.7.15.tar.gz", hash = "sha256:df4cab8d9e13ed448fc33d72af1fbae54883e9255a42c021ae7e875dfd3374c1"}, ] [package.dependencies] @@ -767,9 +840,20 @@ docker = ["docker (>=4.3.1)", "requests", "selinux ; sys_platform == \"linux\"", gce = ["google-auth (>=2.28.2)", "requests (>=2.31.0)"] openstack = ["openstacksdk (>=1.1.0)"] selinux = ["selinux ; sys_platform == \"linux\"", "selinux ; sys_platform == \"linux2\""] -test = ["molecule[test] (>=25.1.0)", "pytest-helpers-namespace (>=2019.1.8)"] vagrant = ["python-vagrant"] +[[package]] +name = "mypy-extensions" +version = "1.1.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, +] + [[package]] name = "netaddr" version = "1.3.0" @@ -797,6 +881,35 @@ files = [ {file = "packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4"}, ] +[[package]] +name = "pathspec" +version = "1.1.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189"}, + {file = "pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a"}, +] + +[package.extras] +hyperscan = ["hyperscan (>=0.7)"] +optional = ["typing-extensions (>=4)"] +re2 = ["google-re2 (>=1.1)"] + +[[package]] +name = "platformdirs" +version = "4.11.5" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "platformdirs-4.11.5-py3-none-any.whl", hash = "sha256:89f8d42695853b89c7170bd49bc3dc593f98a71e695ede88e06a3b247bc4563b"}, + {file = "platformdirs-4.11.5.tar.gz", hash = "sha256:e8b31f4f8bcbbedef91a6b57a706255e4f148d2a4e01648382a0a47342539173"}, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -820,7 +933,7 @@ description = "C parser in Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"" +markers = "implementation_name != \"PyPy\"" files = [ {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, @@ -856,6 +969,61 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "pytokens" +version = "0.4.1" +description = "A Fast, spec compliant Python 3.14+ tokenizer that runs on older Pythons." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pytokens-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a44ed93ea23415c54f3face3b65ef2b844d96aeb3455b8a69b3df6beab6acc5"}, + {file = "pytokens-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:add8bf86b71a5d9fb5b89f023a80b791e04fba57960aa790cc6125f7f1d39dfe"}, + {file = "pytokens-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:670d286910b531c7b7e3c0b453fd8156f250adb140146d234a82219459b9640c"}, + {file = "pytokens-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4e691d7f5186bd2842c14813f79f8884bb03f5995f0575272009982c5ac6c0f7"}, + {file = "pytokens-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:27b83ad28825978742beef057bfe406ad6ed524b2d28c252c5de7b4a6dd48fa2"}, + {file = "pytokens-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440"}, + {file = "pytokens-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc"}, + {file = "pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d"}, + {file = "pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16"}, + {file = "pytokens-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6"}, + {file = "pytokens-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083"}, + {file = "pytokens-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1"}, + {file = "pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1"}, + {file = "pytokens-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9"}, + {file = "pytokens-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68"}, + {file = "pytokens-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b"}, + {file = "pytokens-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f"}, + {file = "pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1"}, + {file = "pytokens-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4"}, + {file = "pytokens-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78"}, + {file = "pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321"}, + {file = "pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa"}, + {file = "pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d"}, + {file = "pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324"}, + {file = "pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9"}, + {file = "pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb"}, + {file = "pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3"}, + {file = "pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975"}, + {file = "pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a"}, + {file = "pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918"}, + {file = "pytokens-0.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:da5baeaf7116dced9c6bb76dc31ba04a2dc3695f3d9f74741d7910122b456edc"}, + {file = "pytokens-0.4.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11edda0942da80ff58c4408407616a310adecae1ddd22eef8c692fe266fa5009"}, + {file = "pytokens-0.4.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0fc71786e629cef478cbf29d7ea1923299181d0699dbe7c3c0f4a583811d9fc1"}, + {file = "pytokens-0.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dcafc12c30dbaf1e2af0490978352e0c4041a7cde31f4f81435c2a5e8b9cabb6"}, + {file = "pytokens-0.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:42f144f3aafa5d92bad964d471a581651e28b24434d184871bd02e3a0d956037"}, + {file = "pytokens-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:34bcc734bd2f2d5fe3b34e7b3c0116bfb2397f2d9666139988e7a3eb5f7400e3"}, + {file = "pytokens-0.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:941d4343bf27b605e9213b26bfa1c4bf197c9c599a9627eb7305b0defcfe40c1"}, + {file = "pytokens-0.4.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3ad72b851e781478366288743198101e5eb34a414f1d5627cdd585ca3b25f1db"}, + {file = "pytokens-0.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:682fa37ff4d8e95f7df6fe6fe6a431e8ed8e788023c6bcc0f0880a12eab80ad1"}, + {file = "pytokens-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:30f51edd9bb7f85c748979384165601d028b84f7bd13fe14d3e065304093916a"}, + {file = "pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de"}, + {file = "pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a"}, +] + +[package.extras] +dev = ["black", "build", "mypy", "pytest", "pytest-cov", "setuptools", "tox", "twine", "wheel"] + [[package]] name = "pywin32" version = "311" @@ -1170,6 +1338,96 @@ files = [ {file = "rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84"}, ] +[[package]] +name = "ruamel-yaml" +version = "0.19.1" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "ruamel_yaml-0.19.1-py3-none-any.whl", hash = "sha256:27592957fedf6e0b62f281e96effd28043345e0e66001f97683aa9a40c667c93"}, + {file = "ruamel_yaml-0.19.1.tar.gz", hash = "sha256:53eb66cd27849eff968ebf8f0bf61f46cdac2da1d1f3576dd4ccee9b25c31993"}, +] + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] +libyaml = ["ruamel.yaml.clibz (>=0.3.7) ; platform_python_implementation == \"CPython\""] +oldlibyaml = ["ruamel.yaml.clib ; platform_python_implementation == \"CPython\""] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.15" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version < \"3.14\"" +files = [ + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88eea8baf72f0ccf232c22124d122a7f26e8a24110a0273d9bcddcb0f7e1fa03"}, + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b6f7d74d094d1f3a4e157278da97752f16ee230080ae331fcc219056ca54f77"}, + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4be366220090d7c3424ac2b71c90d1044ea34fca8c0b88f250064fd06087e614"}, + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f66f600833af58bea694d5892453f2270695b92200280ee8c625ec5a477eed3"}, + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da3d6adadcf55a93c214d23941aef4abfd45652110aed6580e814152f385b862"}, + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e9fde97ecb7bb9c41261c2ce0da10323e9227555c674989f8d9eb7572fc2098d"}, + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:05c70f7f86be6f7bee53794d80050a28ae7e13e4a0087c1839dcdefd68eb36b6"}, + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f1d38cbe622039d111b69e9ca945e7e3efebb30ba998867908773183357f3ed"}, + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-win32.whl", hash = "sha256:fe239bdfdae2302e93bd6e8264bd9b71290218fff7084a9db250b55caaccf43f"}, + {file = "ruamel_yaml_clib-0.2.15-cp310-cp310-win_amd64.whl", hash = "sha256:468858e5cbde0198337e6a2a78eda8c3fb148bdf4c6498eaf4bc9ba3f8e780bd"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c583229f336682b7212a43d2fa32c30e643d3076178fb9f7a6a14dde85a2d8bd"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56ea19c157ed8c74b6be51b5fa1c3aff6e289a041575f0556f66e5fb848bb137"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5fea0932358e18293407feb921d4f4457db837b67ec1837f87074667449f9401"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef71831bd61fbdb7aa0399d5c4da06bea37107ab5c79ff884cc07f2450910262"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:617d35dc765715fa86f8c3ccdae1e4229055832c452d4ec20856136acc75053f"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1b45498cc81a4724a2d42273d6cfc243c0547ad7c6b87b4f774cb7bcc131c98d"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:def5663361f6771b18646620fca12968aae730132e104688766cf8a3b1d65922"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:014181cdec565c8745b7cbc4de3bf2cc8ced05183d986e6d1200168e5bb59490"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-win32.whl", hash = "sha256:d290eda8f6ada19e1771b54e5706b8f9807e6bb08e873900d5ba114ced13e02c"}, + {file = "ruamel_yaml_clib-0.2.15-cp311-cp311-win_amd64.whl", hash = "sha256:bdc06ad71173b915167702f55d0f3f027fc61abd975bd308a0968c02db4a4c3e"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cb15a2e2a90c8475df45c0949793af1ff413acfb0a716b8b94e488ea95ce7cff"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:64da03cbe93c1e91af133f5bec37fd24d0d4ba2418eaf970d7166b0a26a148a2"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f6d3655e95a80325b84c4e14c080b2470fe4f33b6846f288379ce36154993fb1"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71845d377c7a47afc6592aacfea738cc8a7e876d586dfba814501d8c53c1ba60"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e5499db1ccbc7f4b41f0565e4f799d863ea720e01d3e99fa0b7b5fcd7802c9"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4b293a37dc97e2b1e8a1aec62792d1e52027087c8eea4fc7b5abd2bdafdd6642"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:512571ad41bba04eac7268fe33f7f4742210ca26a81fe0c75357fa682636c690"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5e9f630c73a490b758bf14d859a39f375e6999aea5ddd2e2e9da89b9953486a"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-win32.whl", hash = "sha256:f4421ab780c37210a07d138e56dd4b51f8642187cdfb433eb687fe8c11de0144"}, + {file = "ruamel_yaml_clib-0.2.15-cp312-cp312-win_amd64.whl", hash = "sha256:2b216904750889133d9222b7b873c199d48ecbb12912aca78970f84a5aa1a4bc"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4dcec721fddbb62e60c2801ba08c87010bd6b700054a09998c4d09c08147b8fb"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:65f48245279f9bb301d1276f9679b82e4c080a1ae25e679f682ac62446fac471"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:46895c17ead5e22bea5e576f1db7e41cb273e8d062c04a6a49013d9f60996c25"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3eb199178b08956e5be6288ee0b05b2fb0b5c1f309725ad25d9c6ea7e27f962a"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d1032919280ebc04a80e4fb1e93f7a738129857eaec9448310e638c8bccefcf"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ab0df0648d86a7ecbd9c632e8f8d6b21bb21b5fc9d9e095c796cacf32a728d2d"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:331fb180858dd8534f0e61aa243b944f25e73a4dae9962bd44c46d1761126bbf"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd4c928ddf6bce586285daa6d90680b9c291cfd045fc40aad34e445d57b1bf51"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-win32.whl", hash = "sha256:bf0846d629e160223805db9fe8cc7aec16aaa11a07310c50c8c7164efa440aec"}, + {file = "ruamel_yaml_clib-0.2.15-cp313-cp313-win_amd64.whl", hash = "sha256:45702dfbea1420ba3450bb3dd9a80b33f0badd57539c6aac09f42584303e0db6"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:753faf20b3a5906faf1fc50e4ddb8c074cb9b251e00b14c18b28492f933ac8ef"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:480894aee0b29752560a9de46c0e5f84a82602f2bc5c6cde8db9a345319acfdf"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4d3b58ab2454b4747442ac76fab66739c72b1e2bb9bd173d7694b9f9dbc9c000"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bfd309b316228acecfa30670c3887dcedf9b7a44ea39e2101e75d2654522acd4"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2812ff359ec1f30129b62372e5f22a52936fac13d5d21e70373dbca5d64bb97c"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7e74ea87307303ba91073b63e67f2c667e93f05a8c63079ee5b7a5c8d0d7b043"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:713cd68af9dfbe0bb588e144a61aad8dcc00ef92a82d2e87183ca662d242f524"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:542d77b72786a35563f97069b9379ce762944e67055bea293480f7734b2c7e5e"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-win32.whl", hash = "sha256:424ead8cef3939d690c4b5c85ef5b52155a231ff8b252961b6516ed7cf05f6aa"}, + {file = "ruamel_yaml_clib-0.2.15-cp314-cp314-win_amd64.whl", hash = "sha256:ac9b8d5fa4bb7fd2917ab5027f60d4234345fd366fe39aa711d5dca090aa1467"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:923816815974425fbb1f1bf57e85eca6e14d8adc313c66db21c094927ad01815"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dcc7f3162d3711fd5d52e2267e44636e3e566d1e5675a5f0b30e98f2c4af7974"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5d3c9210219cbc0f22706f19b154c9a798ff65a6beeafbf77fc9c057ec806f7d"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bb7b728fd9f405aa00b4a0b17ba3f3b810d0ccc5f77f7373162e9b5f0ff75d5"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3cb75a3c14f1d6c3c2a94631e362802f70e83e20d1f2b2ef3026c05b415c4900"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:badd1d7283f3e5894779a6ea8944cc765138b96804496c91812b2829f70e18a7"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0ba6604bbc3dfcef844631932d06a1a4dcac3fee904efccf582261948431628a"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a8220fd4c6f98485e97aea65e1df76d4fed1678ede1fe1d0eed2957230d287c4"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-win32.whl", hash = "sha256:04d21dc9c57d9608225da28285900762befbb0165ae48482c15d8d4989d4af14"}, + {file = "ruamel_yaml_clib-0.2.15-cp39-cp39-win_amd64.whl", hash = "sha256:27dc656e84396e6d687f97c6e65fb284d100483628f02d95464fd731743a4afe"}, + {file = "ruamel_yaml_clib-0.2.15.tar.gz", hash = "sha256:46e4cc8c43ef6a94885f72512094e482114a8a706d3c555a34ed4b0d20200600"}, +] + [[package]] name = "selinux" version = "0.3.0" @@ -1260,7 +1518,26 @@ files = [ [package.dependencies] bracex = ">=2.1.1" +[[package]] +name = "yamllint" +version = "1.38.0" +description = "A linter for YAML files." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "yamllint-1.38.0-py3-none-any.whl", hash = "sha256:fc394a5b3be980a4062607b8fdddc0843f4fa394152b6da21722f5d59013c220"}, + {file = "yamllint-1.38.0.tar.gz", hash = "sha256:09e5f29531daab93366bb061e76019d5e91691ef0a40328f04c927387d1d364d"}, +] + +[package.dependencies] +pathspec = ">=1.0.0" +pyyaml = "*" + +[package.extras] +dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "ruff", "sphinx"] + [metadata] lock-version = "2.1" python-versions = "^3.12" -content-hash = "8d08ad92697a4cca255e956e4f9964af30f8a8c7f13f81e09a8523cdf9bf6c8b" +content-hash = "c99306adaeaaf36e99847f44dd0f4074958fe2431d004831f9e7ce53e8c75fcd" diff --git a/controls/pyproject.toml b/controls/pyproject.toml index 1106ef4cc..5c7728d2e 100644 --- a/controls/pyproject.toml +++ b/controls/pyproject.toml @@ -8,12 +8,14 @@ package-mode = false [tool.poetry.dependencies] python = "^3.12" -ansible = "^13.3.0" -molecule = {extras = ["docker-lint"], version = "^25.12.0"} -molecule-plugins = {extras = ["docker"], version = "^25.8.12"} -molecule-hetznercloud = "^2.7.0" -docker = "^7.1.0" -hcloud = "^2.16.0" +ansible = "14.3.1" +molecule = "26.8.0" +molecule-plugins = {extras = ["docker"], version = "26.7.15"} +molecule-hetznercloud = "2.8.0" +docker = "7.2.0" +hcloud = "2.23.0" +yamllint = "1.38.0" +ansible-lint = "26.8.0" [build-system] requires = ["poetry-core"] diff --git a/controls/roles/configure-updates/molecule/default/molecule.yml b/controls/roles/configure-updates/molecule/default/molecule.yml index 357596801..a3bfb429b 100644 --- a/controls/roles/configure-updates/molecule/default/molecule.yml +++ b/controls/roles/configure-updates/molecule/default/molecule.yml @@ -13,10 +13,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/configure-updates/molecule/no-unattended-updates/molecule.yml b/controls/roles/configure-updates/molecule/no-unattended-updates/molecule.yml index 357596801..a3bfb429b 100644 --- a/controls/roles/configure-updates/molecule/no-unattended-updates/molecule.yml +++ b/controls/roles/configure-updates/molecule/no-unattended-updates/molecule.yml @@ -13,10 +13,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/initiate-devnet-genesis/molecule/default/molecule.yml b/controls/roles/initiate-devnet-genesis/molecule/default/molecule.yml index 8123a9123..a85b1dacd 100644 --- a/controls/roles/initiate-devnet-genesis/molecule/default/molecule.yml +++ b/controls/roles/initiate-devnet-genesis/molecule/default/molecule.yml @@ -16,10 +16,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/besu-lighthouse/molecule.yml b/controls/roles/manage-service/molecule/besu-lighthouse/molecule.yml index a222bb95f..61426c093 100644 --- a/controls/roles/manage-service/molecule/besu-lighthouse/molecule.yml +++ b/controls/roles/manage-service/molecule/besu-lighthouse/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/besu-lodestar/molecule.yml b/controls/roles/manage-service/molecule/besu-lodestar/molecule.yml index 73cb07193..a0d4a961a 100644 --- a/controls/roles/manage-service/molecule/besu-lodestar/molecule.yml +++ b/controls/roles/manage-service/molecule/besu-lodestar/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/besu-nimbus/molecule.yml b/controls/roles/manage-service/molecule/besu-nimbus/molecule.yml index 50ba09e58..ab14f8f75 100644 --- a/controls/roles/manage-service/molecule/besu-nimbus/molecule.yml +++ b/controls/roles/manage-service/molecule/besu-nimbus/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/besu-prysm/molecule.yml b/controls/roles/manage-service/molecule/besu-prysm/molecule.yml index 6e8b33055..cd932376a 100644 --- a/controls/roles/manage-service/molecule/besu-prysm/molecule.yml +++ b/controls/roles/manage-service/molecule/besu-prysm/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/besu-teku/molecule.yml b/controls/roles/manage-service/molecule/besu-teku/molecule.yml index 32e272a1c..d30292295 100644 --- a/controls/roles/manage-service/molecule/besu-teku/molecule.yml +++ b/controls/roles/manage-service/molecule/besu-teku/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/erigon-lighthouse/molecule.yml b/controls/roles/manage-service/molecule/erigon-lighthouse/molecule.yml index 19db6e1a2..90e523fe6 100644 --- a/controls/roles/manage-service/molecule/erigon-lighthouse/molecule.yml +++ b/controls/roles/manage-service/molecule/erigon-lighthouse/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/erigon-lodestar/molecule.yml b/controls/roles/manage-service/molecule/erigon-lodestar/molecule.yml index 6f2e28d4d..2e3141eac 100644 --- a/controls/roles/manage-service/molecule/erigon-lodestar/molecule.yml +++ b/controls/roles/manage-service/molecule/erigon-lodestar/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/erigon-prysm/molecule.yml b/controls/roles/manage-service/molecule/erigon-prysm/molecule.yml index fa201929a..420e7a987 100644 --- a/controls/roles/manage-service/molecule/erigon-prysm/molecule.yml +++ b/controls/roles/manage-service/molecule/erigon-prysm/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/geth-lighthouse/molecule.yml b/controls/roles/manage-service/molecule/geth-lighthouse/molecule.yml index 1d14eab21..ae7f45e33 100644 --- a/controls/roles/manage-service/molecule/geth-lighthouse/molecule.yml +++ b/controls/roles/manage-service/molecule/geth-lighthouse/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/geth-nimbus/molecule.yml b/controls/roles/manage-service/molecule/geth-nimbus/molecule.yml index 7136ec477..1dec813ce 100644 --- a/controls/roles/manage-service/molecule/geth-nimbus/molecule.yml +++ b/controls/roles/manage-service/molecule/geth-nimbus/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/geth-prysm/molecule.yml b/controls/roles/manage-service/molecule/geth-prysm/molecule.yml index e79fe4865..1b02073b8 100644 --- a/controls/roles/manage-service/molecule/geth-prysm/molecule.yml +++ b/controls/roles/manage-service/molecule/geth-prysm/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/geth-teku/molecule.yml b/controls/roles/manage-service/molecule/geth-teku/molecule.yml index 7f25d33b4..cfcd7bf56 100644 --- a/controls/roles/manage-service/molecule/geth-teku/molecule.yml +++ b/controls/roles/manage-service/molecule/geth-teku/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-besu-lighthouse/molecule.yml b/controls/roles/manage-service/molecule/mevboost-besu-lighthouse/molecule.yml index fe93cf5c0..57d7a8ed3 100644 --- a/controls/roles/manage-service/molecule/mevboost-besu-lighthouse/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-besu-lighthouse/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-besu-nimbus/molecule.yml b/controls/roles/manage-service/molecule/mevboost-besu-nimbus/molecule.yml index 92d1304eb..894c7f07f 100644 --- a/controls/roles/manage-service/molecule/mevboost-besu-nimbus/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-besu-nimbus/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-besu-prysm/molecule.yml b/controls/roles/manage-service/molecule/mevboost-besu-prysm/molecule.yml index fb657cb50..5e86ec50d 100644 --- a/controls/roles/manage-service/molecule/mevboost-besu-prysm/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-besu-prysm/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-besu-teku/molecule.yml b/controls/roles/manage-service/molecule/mevboost-besu-teku/molecule.yml index 6f5de6634..858445bce 100644 --- a/controls/roles/manage-service/molecule/mevboost-besu-teku/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-besu-teku/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-erigon-lodestar/molecule.yml b/controls/roles/manage-service/molecule/mevboost-erigon-lodestar/molecule.yml index 394f3d80d..4acdfbdc1 100644 --- a/controls/roles/manage-service/molecule/mevboost-erigon-lodestar/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-erigon-lodestar/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-geth-lighthouse/molecule.yml b/controls/roles/manage-service/molecule/mevboost-geth-lighthouse/molecule.yml index 164568063..f185e8856 100644 --- a/controls/roles/manage-service/molecule/mevboost-geth-lighthouse/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-geth-lighthouse/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-geth-nimbus/molecule.yml b/controls/roles/manage-service/molecule/mevboost-geth-nimbus/molecule.yml index efd7855a0..d92febe31 100644 --- a/controls/roles/manage-service/molecule/mevboost-geth-nimbus/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-geth-nimbus/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-geth-prysm/molecule.yml b/controls/roles/manage-service/molecule/mevboost-geth-prysm/molecule.yml index e45f94e39..5e4c0df7d 100644 --- a/controls/roles/manage-service/molecule/mevboost-geth-prysm/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-geth-prysm/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-geth-teku/molecule.yml b/controls/roles/manage-service/molecule/mevboost-geth-teku/molecule.yml index 6988637c0..b70845c96 100644 --- a/controls/roles/manage-service/molecule/mevboost-geth-teku/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-geth-teku/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-nethermind-lighthouse/molecule.yml b/controls/roles/manage-service/molecule/mevboost-nethermind-lighthouse/molecule.yml index d89f2ed31..390a02c34 100644 --- a/controls/roles/manage-service/molecule/mevboost-nethermind-lighthouse/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-nethermind-lighthouse/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-nethermind-nimbus/molecule.yml b/controls/roles/manage-service/molecule/mevboost-nethermind-nimbus/molecule.yml index c808ea125..8604c2fd3 100644 --- a/controls/roles/manage-service/molecule/mevboost-nethermind-nimbus/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-nethermind-nimbus/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-nethermind-prysm/molecule.yml b/controls/roles/manage-service/molecule/mevboost-nethermind-prysm/molecule.yml index 7e3b62f0c..4cf4d64bd 100644 --- a/controls/roles/manage-service/molecule/mevboost-nethermind-prysm/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-nethermind-prysm/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/mevboost-nethermind-teku/molecule.yml b/controls/roles/manage-service/molecule/mevboost-nethermind-teku/molecule.yml index 75b88eb11..66e2dcc65 100644 --- a/controls/roles/manage-service/molecule/mevboost-nethermind-teku/molecule.yml +++ b/controls/roles/manage-service/molecule/mevboost-nethermind-teku/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-besu/molecule.yml b/controls/roles/manage-service/molecule/monitor-besu/molecule.yml index e0be0b428..37e88d88e 100644 --- a/controls/roles/manage-service/molecule/monitor-besu/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-besu/molecule.yml @@ -17,10 +17,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-erigon/molecule.yml b/controls/roles/manage-service/molecule/monitor-erigon/molecule.yml index 88be0c086..1f592858d 100644 --- a/controls/roles/manage-service/molecule/monitor-erigon/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-erigon/molecule.yml @@ -17,10 +17,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-geth/molecule.yml b/controls/roles/manage-service/molecule/monitor-geth/molecule.yml index b160dd7ad..36f7b0ba8 100644 --- a/controls/roles/manage-service/molecule/monitor-geth/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-geth/molecule.yml @@ -17,10 +17,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-lighthouse/molecule.yml b/controls/roles/manage-service/molecule/monitor-lighthouse/molecule.yml index 5646be7c3..8124bc71f 100644 --- a/controls/roles/manage-service/molecule/monitor-lighthouse/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-lighthouse/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-lodestar/molecule.yml b/controls/roles/manage-service/molecule/monitor-lodestar/molecule.yml index abe3362ba..ed0329cc6 100644 --- a/controls/roles/manage-service/molecule/monitor-lodestar/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-lodestar/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-nethermind/molecule.yml b/controls/roles/manage-service/molecule/monitor-nethermind/molecule.yml index 482cb0c47..279006c90 100644 --- a/controls/roles/manage-service/molecule/monitor-nethermind/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-nethermind/molecule.yml @@ -17,10 +17,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-nimbus/molecule.yml b/controls/roles/manage-service/molecule/monitor-nimbus/molecule.yml index efe8fd1a5..b3a6d966b 100644 --- a/controls/roles/manage-service/molecule/monitor-nimbus/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-nimbus/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-prysm/molecule.yml b/controls/roles/manage-service/molecule/monitor-prysm/molecule.yml index 1ee219cb8..0174fcdc8 100644 --- a/controls/roles/manage-service/molecule/monitor-prysm/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-prysm/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-ssvnetwork/molecule.yml b/controls/roles/manage-service/molecule/monitor-ssvnetwork/molecule.yml index 8914a52f9..98df88e2f 100644 --- a/controls/roles/manage-service/molecule/monitor-ssvnetwork/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-ssvnetwork/molecule.yml @@ -17,10 +17,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/monitor-teku/molecule.yml b/controls/roles/manage-service/molecule/monitor-teku/molecule.yml index e1dad2035..4ed525e35 100644 --- a/controls/roles/manage-service/molecule/monitor-teku/molecule.yml +++ b/controls/roles/manage-service/molecule/monitor-teku/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/nethermind-lighthouse/molecule.yml b/controls/roles/manage-service/molecule/nethermind-lighthouse/molecule.yml index 6eb26e64c..9970f6b85 100644 --- a/controls/roles/manage-service/molecule/nethermind-lighthouse/molecule.yml +++ b/controls/roles/manage-service/molecule/nethermind-lighthouse/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/nethermind-nimbus/molecule.yml b/controls/roles/manage-service/molecule/nethermind-nimbus/molecule.yml index 8ad3e12cd..5d00925f0 100644 --- a/controls/roles/manage-service/molecule/nethermind-nimbus/molecule.yml +++ b/controls/roles/manage-service/molecule/nethermind-nimbus/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/nethermind-prysm/molecule.yml b/controls/roles/manage-service/molecule/nethermind-prysm/molecule.yml index f700841b6..0c5fe2439 100644 --- a/controls/roles/manage-service/molecule/nethermind-prysm/molecule.yml +++ b/controls/roles/manage-service/molecule/nethermind-prysm/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/nethermind-teku-gnosis/molecule.yml b/controls/roles/manage-service/molecule/nethermind-teku-gnosis/molecule.yml index a3294d120..5fc0d86ec 100644 --- a/controls/roles/manage-service/molecule/nethermind-teku-gnosis/molecule.yml +++ b/controls/roles/manage-service/molecule/nethermind-teku-gnosis/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/nethermind-teku/molecule.yml b/controls/roles/manage-service/molecule/nethermind-teku/molecule.yml index f700841b6..0c5fe2439 100644 --- a/controls/roles/manage-service/molecule/nethermind-teku/molecule.yml +++ b/controls/roles/manage-service/molecule/nethermind-teku/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/nimbus-checkpoint-sync/molecule.yml b/controls/roles/manage-service/molecule/nimbus-checkpoint-sync/molecule.yml index 0db411b9c..ae549fb8b 100644 --- a/controls/roles/manage-service/molecule/nimbus-checkpoint-sync/molecule.yml +++ b/controls/roles/manage-service/molecule/nimbus-checkpoint-sync/molecule.yml @@ -18,10 +18,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/ssv-lighthouse/molecule.yml b/controls/roles/manage-service/molecule/ssv-lighthouse/molecule.yml index ef5bdd0d0..bf803eead 100644 --- a/controls/roles/manage-service/molecule/ssv-lighthouse/molecule.yml +++ b/controls/roles/manage-service/molecule/ssv-lighthouse/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/ssv-lodestar/molecule.yml b/controls/roles/manage-service/molecule/ssv-lodestar/molecule.yml index 88451b34b..c93422fb2 100644 --- a/controls/roles/manage-service/molecule/ssv-lodestar/molecule.yml +++ b/controls/roles/manage-service/molecule/ssv-lodestar/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/ssv-nimbus/molecule.yml b/controls/roles/manage-service/molecule/ssv-nimbus/molecule.yml index d43a69d47..7b2a8f4e1 100644 --- a/controls/roles/manage-service/molecule/ssv-nimbus/molecule.yml +++ b/controls/roles/manage-service/molecule/ssv-nimbus/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/ssv-prysm/molecule.yml b/controls/roles/manage-service/molecule/ssv-prysm/molecule.yml index f6528344b..10a74cf39 100644 --- a/controls/roles/manage-service/molecule/ssv-prysm/molecule.yml +++ b/controls/roles/manage-service/molecule/ssv-prysm/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/ssv-teku/molecule.yml b/controls/roles/manage-service/molecule/ssv-teku/molecule.yml index 3a1164d8b..a76c7b18b 100644 --- a/controls/roles/manage-service/molecule/ssv-teku/molecule.yml +++ b/controls/roles/manage-service/molecule/ssv-teku/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/start-multiple/molecule.yml b/controls/roles/manage-service/molecule/start-multiple/molecule.yml index 08268a382..d98fe20a9 100644 --- a/controls/roles/manage-service/molecule/start-multiple/molecule.yml +++ b/controls/roles/manage-service/molecule/start-multiple/molecule.yml @@ -19,10 +19,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/start-stop/molecule.yml b/controls/roles/manage-service/molecule/start-stop/molecule.yml index 8bace6644..ad8efcc5e 100644 --- a/controls/roles/manage-service/molecule/start-stop/molecule.yml +++ b/controls/roles/manage-service/molecule/start-stop/molecule.yml @@ -19,10 +19,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/start/molecule.yml b/controls/roles/manage-service/molecule/start/molecule.yml index 244113975..5eace5673 100644 --- a/controls/roles/manage-service/molecule/start/molecule.yml +++ b/controls/roles/manage-service/molecule/start/molecule.yml @@ -19,10 +19,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/teku-geth/molecule.yml b/controls/roles/manage-service/molecule/teku-geth/molecule.yml index ac137c712..a3e99c9f7 100644 --- a/controls/roles/manage-service/molecule/teku-geth/molecule.yml +++ b/controls/roles/manage-service/molecule/teku-geth/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/manage-service/molecule/write-start/molecule.yml b/controls/roles/manage-service/molecule/write-start/molecule.yml index f980234c2..efa28f5ea 100644 --- a/controls/roles/manage-service/molecule/write-start/molecule.yml +++ b/controls/roles/manage-service/molecule/write-start/molecule.yml @@ -19,10 +19,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/prune-geth/molecule/default/molecule.yml b/controls/roles/prune-geth/molecule/default/molecule.yml index 96db4aa02..471ccfd72 100644 --- a/controls/roles/prune-geth/molecule/default/molecule.yml +++ b/controls/roles/prune-geth/molecule/default/molecule.yml @@ -18,10 +18,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/restart-services/molecule/default/molecule.yml b/controls/roles/restart-services/molecule/default/molecule.yml index 5e195a2a4..cc1ee7b35 100644 --- a/controls/roles/restart-services/molecule/default/molecule.yml +++ b/controls/roles/restart-services/molecule/default/molecule.yml @@ -17,10 +17,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/setup/molecule/default/molecule.yml b/controls/roles/setup/molecule/default/molecule.yml index 28194655b..1c4bfee4d 100644 --- a/controls/roles/setup/molecule/default/molecule.yml +++ b/controls/roles/setup/molecule/default/molecule.yml @@ -19,7 +19,3 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . diff --git a/controls/roles/setup/tasks/update-os-centos.yml b/controls/roles/setup/tasks/update-os-centos.yml index 6552e6d25..61c76ff09 100644 --- a/controls/roles/setup/tasks/update-os-centos.yml +++ b/controls/roles/setup/tasks/update-os-centos.yml @@ -2,7 +2,7 @@ - name: Upgrade all packages yum: name: '*' - state: latest # noqa 403 package-latest + state: latest # noqa package-latest changed_when: "'molecule-notest' not in ansible_skip_tags" - name: Install epel-release diff --git a/controls/roles/ssv-key-generator/molecule/default/molecule.yml b/controls/roles/ssv-key-generator/molecule/default/molecule.yml index e504bd89b..f58e09076 100644 --- a/controls/roles/ssv-key-generator/molecule/default/molecule.yml +++ b/controls/roles/ssv-key-generator/molecule/default/molecule.yml @@ -21,10 +21,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/switch-repos/molecule/default/molecule.yml b/controls/roles/switch-repos/molecule/default/molecule.yml index 2f9381d49..647ffb8f3 100644 --- a/controls/roles/switch-repos/molecule/default/molecule.yml +++ b/controls/roles/switch-repos/molecule/default/molecule.yml @@ -16,10 +16,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-changes/molecule/242/molecule.yml b/controls/roles/update-changes/molecule/242/molecule.yml index 728689ff3..0f82a93a8 100644 --- a/controls/roles/update-changes/molecule/242/molecule.yml +++ b/controls/roles/update-changes/molecule/242/molecule.yml @@ -13,10 +13,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-changes/molecule/243/molecule.yml b/controls/roles/update-changes/molecule/243/molecule.yml index 62396fb5c..ba4250c52 100644 --- a/controls/roles/update-changes/molecule/243/molecule.yml +++ b/controls/roles/update-changes/molecule/243/molecule.yml @@ -16,10 +16,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-changes/molecule/244/molecule.yml b/controls/roles/update-changes/molecule/244/molecule.yml index bb851324a..c663c0ddc 100644 --- a/controls/roles/update-changes/molecule/244/molecule.yml +++ b/controls/roles/update-changes/molecule/244/molecule.yml @@ -13,10 +13,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-changes/molecule/245/molecule.yml b/controls/roles/update-changes/molecule/245/molecule.yml index 5462a43c6..32b8721f5 100644 --- a/controls/roles/update-changes/molecule/245/molecule.yml +++ b/controls/roles/update-changes/molecule/245/molecule.yml @@ -13,10 +13,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-changes/molecule/246/molecule.yml b/controls/roles/update-changes/molecule/246/molecule.yml index 181c7408c..93a422ff4 100644 --- a/controls/roles/update-changes/molecule/246/molecule.yml +++ b/controls/roles/update-changes/molecule/246/molecule.yml @@ -13,10 +13,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-changes/molecule/247/molecule.yml b/controls/roles/update-changes/molecule/247/molecule.yml index 8056d1f54..8ae55219b 100644 --- a/controls/roles/update-changes/molecule/247/molecule.yml +++ b/controls/roles/update-changes/molecule/247/molecule.yml @@ -13,10 +13,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-changes/molecule/248/molecule.yml b/controls/roles/update-changes/molecule/248/molecule.yml index 6b9b91e75..c6006fb35 100644 --- a/controls/roles/update-changes/molecule/248/molecule.yml +++ b/controls/roles/update-changes/molecule/248/molecule.yml @@ -13,10 +13,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-changes/molecule/250/molecule.yml b/controls/roles/update-changes/molecule/250/molecule.yml index d1e70620b..6e0609d1e 100644 --- a/controls/roles/update-changes/molecule/250/molecule.yml +++ b/controls/roles/update-changes/molecule/250/molecule.yml @@ -13,10 +13,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-changes/molecule/251/converge.yml b/controls/roles/update-changes/molecule/251/converge.yml new file mode 100644 index 000000000..3f84cb4a2 --- /dev/null +++ b/controls/roles/update-changes/molecule/251/converge.yml @@ -0,0 +1,10 @@ +--- +- name: Converge + hosts: all + vars_files: + - ../../../../defaults/stereum_defaults.yaml + + tasks: + - name: "Include update-changes" + include_role: + name: "update-changes" diff --git a/controls/roles/update-changes/molecule/251/molecule.yml b/controls/roles/update-changes/molecule/251/molecule.yml new file mode 100644 index 000000000..e4653a00a --- /dev/null +++ b/controls/roles/update-changes/molecule/251/molecule.yml @@ -0,0 +1,24 @@ +--- +#dependency: +# name: galaxy +driver: + name: docker +platforms: + - name: "update-changes--2.5.1--ubuntu-26.04" + image: ubuntu:resolute + # - name: "configure-updates--default--centos-8" + # image: geerlingguy/docker-centos8-ansible +provisioner: + name: ansible + env: + ANSIBLE_PIPELINING: "True" + ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" +scenario: + test_sequence: + - destroy + - create + - prepare + - converge + - idempotence + - verify + - destroy diff --git a/controls/roles/update-changes/molecule/251/playbook.yml b/controls/roles/update-changes/molecule/251/playbook.yml new file mode 100644 index 000000000..710c596cf --- /dev/null +++ b/controls/roles/update-changes/molecule/251/playbook.yml @@ -0,0 +1,7 @@ +--- +- name: Converge + hosts: all + tasks: + - name: "Include update-changes" + include_role: + name: "update-changes" diff --git a/controls/roles/update-changes/molecule/251/prepare.yml b/controls/roles/update-changes/molecule/251/prepare.yml new file mode 100644 index 000000000..73afadcba --- /dev/null +++ b/controls/roles/update-changes/molecule/251/prepare.yml @@ -0,0 +1,178 @@ +--- +- name: Prepare + hosts: all + tasks: + - name: Make sure Stereum's config path exists + file: + path: "/etc/stereum/services" + state: directory + owner: "root" + group: "root" + mode: 0644 + become: yes + + - name: Create FlashbotsMevBoostService config (mainnet, retired relays to drop) + copy: + dest: "/etc/stereum/services/mev00001-0000-0000-0000-000000000001.yaml" + owner: "root" + group: "root" + mode: 0644 + content: | + service: FlashbotsMevBoostService + id: mev00001-0000-0000-0000-000000000001 + configVersion: 1 + command: null + entrypoint: + - /app/mev-boost + - -addr + - 0.0.0.0:18550 + - -mainnet + - -relay-check + - -relays + - https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net,https://0x98650451ba02064f7b000f5768cf0cf4d4e492317d82871bdc87ef841a0743f69f0f1eea11168503240ac35d101c9135@mainnet-relay.securerpc.com,https://0x8c4ed5e24fe5c6ae21018437bde147693f68cda427cd1122cf20819c30eda7ed74f72dece09bb313f2a1855595ab677d@global.titanrelay.xyz,https://0x8b5d2e73e2a3a55c6c87b8b6eb92e0149a125c852751db1422fa951e42a09b82c142c3ea98d0d9930b056a3bc9896b8f@bloxroute.max-profit.blxrbdn.com + env: {} + image: flashbots/mev-boost:v0.8.2 + ports: [] + volumes: [] + user: "2000" + autoupdate: true + network: mainnet + dependencies: + executionClients: [] + consensusClients: [] + mevboost: [] + otherServices: [] + become: yes + + - name: Create FlashbotsMevBoostService config (sepolia, stale pubkey to refresh) + copy: + dest: "/etc/stereum/services/mev00002-0000-0000-0000-000000000002.yaml" + owner: "root" + group: "root" + mode: 0644 + content: | + service: FlashbotsMevBoostService + id: mev00002-0000-0000-0000-000000000002 + configVersion: 1 + command: null + entrypoint: + - /app/mev-boost + - -addr + - 0.0.0.0:18550 + - -sepolia + - -relay-check + - -relays + - https://0x845bd072b7cd566f02faeb0a4033ce9399e42839ced64e8b2adcfc859ed1e8e1a5a293336a49feac6d9a5edb779be53a@boost-relay-sepolia.flashbots.net + env: {} + image: flashbots/mev-boost:v0.8.2 + ports: [] + volumes: [] + user: "2000" + autoupdate: true + network: sepolia + dependencies: + executionClients: [] + consensusClients: [] + mevboost: [] + otherServices: [] + become: yes + + - name: Create FlashbotsMevBoostService config (mainnet, every relay retired) + copy: + dest: "/etc/stereum/services/mev00003-0000-0000-0000-000000000003.yaml" + owner: "root" + group: "root" + mode: 0644 + content: | + service: FlashbotsMevBoostService + id: mev00003-0000-0000-0000-000000000003 + configVersion: 1 + command: null + entrypoint: + - /app/mev-boost + - -addr + - 0.0.0.0:18550 + - -mainnet + - -relay-check + - -relays + - https://0x98650451ba02064f7b000f5768cf0cf4d4e492317d82871bdc87ef841a0743f69f0f1eea11168503240ac35d101c9135@mainnet-relay.securerpc.com,https://0x8b5d2e73e2a3a55c6c87b8b6eb92e0149a125c852751db1422fa951e42a09b82c142c3ea98d0d9930b056a3bc9896b8f@bloxroute.max-profit.blxrbdn.com + env: {} + image: flashbots/mev-boost:v0.8.2 + ports: [] + volumes: [] + user: "2000" + autoupdate: true + network: mainnet + dependencies: + executionClients: [] + consensusClients: [] + mevboost: [] + otherServices: [] + become: yes + + - name: Create FlashbotsMevBoostService config (mainnet, already healthy) + copy: + dest: "/etc/stereum/services/mev00004-0000-0000-0000-000000000004.yaml" + owner: "root" + group: "root" + mode: 0644 + content: | + service: FlashbotsMevBoostService + id: mev00004-0000-0000-0000-000000000004 + configVersion: 1 + command: null + entrypoint: + - /app/mev-boost + - -addr + - 0.0.0.0:18550 + - -mainnet + - -relay-check + - -relays + - https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net,https://0x8c4ed5e24fe5c6ae21018437bde147693f68cda427cd1122cf20819c30eda7ed74f72dece09bb313f2a1855595ab677d@global.titanrelay.xyz + env: {} + image: flashbots/mev-boost:v0.8.2 + ports: [] + volumes: [] + user: "2000" + autoupdate: true + network: mainnet + dependencies: + executionClients: [] + consensusClients: [] + mevboost: [] + otherServices: [] + become: yes + + - name: Create FlashbotsMevBoostService config (holesky, deliberately untouched) + copy: + dest: "/etc/stereum/services/mev00005-0000-0000-0000-000000000005.yaml" + owner: "root" + group: "root" + mode: 0644 + content: | + service: FlashbotsMevBoostService + id: mev00005-0000-0000-0000-000000000005 + configVersion: 1 + command: null + entrypoint: + - /app/mev-boost + - -addr + - 0.0.0.0:18550 + - -holesky + - -relay-check + - -relays + - https://0xb1559beef7b5ba3127485bbbb090362d9f497ba64e177ee2c8e7db74746306efad687f2cf8574e38d70067d40ef136dc@relay-stag.ultrasound.money + env: {} + image: flashbots/mev-boost:v0.8.2 + ports: [] + volumes: [] + user: "2000" + autoupdate: true + network: holesky + dependencies: + executionClients: [] + consensusClients: [] + mevboost: [] + otherServices: [] + become: yes +# EOF diff --git a/controls/roles/update-changes/molecule/251/verify.yml b/controls/roles/update-changes/molecule/251/verify.yml new file mode 100644 index 000000000..9a3630ed0 --- /dev/null +++ b/controls/roles/update-changes/molecule/251/verify.yml @@ -0,0 +1,73 @@ +--- +- name: Verify + hosts: all + gather_facts: false + tasks: + - name: Read FlashbotsMevBoostService files + slurp: + src: "/etc/stereum/services/{{ item }}.yaml" + loop: + - mev00001-0000-0000-0000-000000000001 + - mev00002-0000-0000-0000-000000000002 + - mev00003-0000-0000-0000-000000000003 + - mev00004-0000-0000-0000-000000000004 + - mev00005-0000-0000-0000-000000000005 + register: mevboost_configuration_raw + + - name: Parse FlashbotsMevBoostService configurations + set_fact: + mevboost_relays: >- + {{ mevboost_relays | default({}) | combine({ + item.item: (item['content'] | b64decode | from_yaml).entrypoint[ + (item['content'] | b64decode | from_yaml).entrypoint.index('-relays') + 1 + ].split(',') + }) }} + loop: "{{ mevboost_configuration_raw.results }}" + loop_control: + label: "{{ item.item }}" + + - debug: + msg: "{{ mevboost_relays }}" + + - name: Assert retired relays were dropped and live relays kept in order + assert: + that: + - (mevboost_relays['mev00001-0000-0000-0000-000000000001'] | length) == 2 + - mevboost_relays['mev00001-0000-0000-0000-000000000001'][0] is search('boost-relay\.flashbots\.net') + - mevboost_relays['mev00001-0000-0000-0000-000000000001'][1] is search('global\.titanrelay\.xyz') + - not (mevboost_relays['mev00001-0000-0000-0000-000000000001'] | join(',') is search('mainnet-relay\.securerpc\.com')) + - not (mevboost_relays['mev00001-0000-0000-0000-000000000001'] | join(',') is search('bloxroute\.max-profit\.blxrbdn\.com')) + fail_msg: "retired relays not dropped: {{ mevboost_relays['mev00001-0000-0000-0000-000000000001'] }}" + + - name: Assert Sepolia relay pubkey was refreshed + assert: + that: + - (mevboost_relays['mev00002-0000-0000-0000-000000000002'] | length) == 1 + - mevboost_relays['mev00002-0000-0000-0000-000000000002'][0] is search('0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110') + - not (mevboost_relays['mev00002-0000-0000-0000-000000000002'][0] is search('0x845bd072')) + - mevboost_relays['mev00002-0000-0000-0000-000000000002'][0] is search('boost-relay-sepolia\.flashbots\.net') + fail_msg: "sepolia relay pubkey not refreshed: {{ mevboost_relays['mev00002-0000-0000-0000-000000000002'] }}" + + - name: Assert a config with only retired relays was left untouched + assert: + that: + - (mevboost_relays['mev00003-0000-0000-0000-000000000003'] | length) == 2 + - mevboost_relays['mev00003-0000-0000-0000-000000000003'] | join(',') is search('mainnet-relay\.securerpc\.com') + - mevboost_relays['mev00003-0000-0000-0000-000000000003'] | join(',') is search('bloxroute\.max-profit\.blxrbdn\.com') + fail_msg: "all-retired config should have been left alone: {{ mevboost_relays['mev00003-0000-0000-0000-000000000003'] }}" + + - name: Assert an already healthy config was left untouched + assert: + that: + - (mevboost_relays['mev00004-0000-0000-0000-000000000004'] | length) == 2 + - mevboost_relays['mev00004-0000-0000-0000-000000000004'][0] is search('boost-relay\.flashbots\.net') + - mevboost_relays['mev00004-0000-0000-0000-000000000004'][1] is search('global\.titanrelay\.xyz') + fail_msg: "healthy config was modified: {{ mevboost_relays['mev00004-0000-0000-0000-000000000004'] }}" + + - name: Assert the holesky relay was left untouched + assert: + that: + - (mevboost_relays['mev00005-0000-0000-0000-000000000005'] | length) == 1 + - mevboost_relays['mev00005-0000-0000-0000-000000000005'][0] is search('relay-stag\.ultrasound\.money') + fail_msg: "holesky relay should have been left alone: {{ mevboost_relays['mev00005-0000-0000-0000-000000000005'] }}" +# EOF diff --git a/controls/roles/update-changes/tasks/2.5.1/mevboost_relay_changes.yaml b/controls/roles/update-changes/tasks/2.5.1/mevboost_relay_changes.yaml new file mode 100644 index 000000000..9a37e3a92 --- /dev/null +++ b/controls/roles/update-changes/tasks/2.5.1/mevboost_relay_changes.yaml @@ -0,0 +1,57 @@ +--- +- name: Read service file + slurp: + src: "{{ config_file.path }}" + register: service_configuration_raw + +- name: Parse service's configuration + set_fact: + service_configuration: "{{ service_configuration_raw['content'] | b64decode | from_yaml }}" + +# Drop the retired bloXroute MAX PROFIT and Manifold relays and refresh the rotated +# Flashbots Sepolia pubkey. Holesky is left alone. No-op once applied. +- name: MEV-Boost Relay Changes + when: + - service_configuration.service == "FlashbotsMevBoostService" + - service_configuration.entrypoint is defined + - '"-relays" in service_configuration.entrypoint' + - (service_configuration.entrypoint | length) > (service_configuration.entrypoint.index("-relays") + 1) + block: + - name: Collect the configured relays + set_fact: + mevboost_relays_old: "{{ service_configuration.entrypoint[service_configuration.entrypoint.index('-relays') + 1] }}" + mevboost_dead_relay_hosts: 'bloxroute\.max-profit\.blxrbdn\.com|mainnet-relay\.securerpc\.com' + mevboost_stale_sepolia_pubkey: "0x845bd072b7cd566f02faeb0a4033ce9399e42839ced64e8b2adcfc859ed1e8e1a5a293336a49feac6d9a5edb779be53a" + mevboost_current_sepolia_pubkey: "0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110" + + - name: Drop retired relays and refresh the Sepolia pubkey + set_fact: + mevboost_relays_new: "{{ mevboost_relays_old.split(',') | reject('search', mevboost_dead_relay_hosts) | map('regex_replace', mevboost_stale_sepolia_pubkey, mevboost_current_sepolia_pubkey) | join(',') }}" + + # mev-boost will not start with an empty -relays, so leave such configs as they are. + - name: Warn when every configured relay has been retired + when: + - (mevboost_relays_old | length) > 0 + - (mevboost_relays_new | length) == 0 + debug: + msg: >- + Every relay configured for MEV-Boost service {{ service_configuration.id }} has been + retired. Leaving the configuration untouched so mev-boost keeps starting - select a + relay in Stereum (Edit Node -> MEV-Boost) to restore MEV rewards. + + - name: Apply the corrected relay list + when: + - mevboost_relays_new != mevboost_relays_old + - (mevboost_relays_new | length) > 0 + block: + - name: Update the configured relays + replace: + path: "{{ config_file.path }}" + regexp: "{{ mevboost_relays_old | regex_escape }}" + replace: "{{ mevboost_relays_new }}" + + - name: Touch service config file to trigger service restart + file: + path: "{{ config_file.path }}" + state: touch + changed_when: false # to pass idempotence test diff --git a/controls/roles/update-changes/tasks/2.5.1/updates-251.yaml b/controls/roles/update-changes/tasks/2.5.1/updates-251.yaml new file mode 100644 index 000000000..e95802a5f --- /dev/null +++ b/controls/roles/update-changes/tasks/2.5.1/updates-251.yaml @@ -0,0 +1,11 @@ +--- +- name: Find service configs + find: + paths: "/etc/stereum/services" + register: service_config_files + +- name: Include MEV-Boost Relay Changes + include_tasks: mevboost_relay_changes.yaml + loop: "{{ service_config_files.files }}" + loop_control: + loop_var: config_file diff --git a/controls/roles/update-changes/tasks/main.yml b/controls/roles/update-changes/tasks/main.yml index 6e4fcae91..f563e67fb 100644 --- a/controls/roles/update-changes/tasks/main.yml +++ b/controls/roles/update-changes/tasks/main.yml @@ -13,4 +13,8 @@ - name: Include 2.5.0 Update Scripts include_tasks: "2.5.0/updates-250.yaml" ignore_errors: true + +- name: Include 2.5.1 Update Scripts + include_tasks: "2.5.1/updates-251.yaml" + ignore_errors: true # EOF diff --git a/controls/roles/update-os/molecule/default/molecule.yml b/controls/roles/update-os/molecule/default/molecule.yml index ee53138c8..7cd3596e5 100644 --- a/controls/roles/update-os/molecule/default/molecule.yml +++ b/controls/roles/update-os/molecule/default/molecule.yml @@ -16,10 +16,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-os/molecule/run-stereum-service-update/molecule.yml b/controls/roles/update-os/molecule/run-stereum-service-update/molecule.yml index 020083603..a3625270d 100644 --- a/controls/roles/update-os/molecule/run-stereum-service-update/molecule.yml +++ b/controls/roles/update-os/molecule/run-stereum-service-update/molecule.yml @@ -16,10 +16,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-package/molecule/default/molecule.yml b/controls/roles/update-package/molecule/default/molecule.yml index 73bd6ba20..ecdd205d0 100644 --- a/controls/roles/update-package/molecule/default/molecule.yml +++ b/controls/roles/update-package/molecule/default/molecule.yml @@ -16,10 +16,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-services/molecule/default/molecule.yml b/controls/roles/update-services/molecule/default/molecule.yml index 32a270602..f4b2a00bc 100644 --- a/controls/roles/update-services/molecule/default/molecule.yml +++ b/controls/roles/update-services/molecule/default/molecule.yml @@ -20,10 +20,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-services/molecule/single-service/molecule.yml b/controls/roles/update-services/molecule/single-service/molecule.yml index 77670a907..4b230f8de 100644 --- a/controls/roles/update-services/molecule/single-service/molecule.yml +++ b/controls/roles/update-services/molecule/single-service/molecule.yml @@ -20,10 +20,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-stereum/molecule/default/molecule.yml b/controls/roles/update-stereum/molecule/default/molecule.yml index c19eab86b..e5ac2e86f 100644 --- a/controls/roles/update-stereum/molecule/default/molecule.yml +++ b/controls/roles/update-stereum/molecule/default/molecule.yml @@ -19,10 +19,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-stereum/molecule/full/molecule.yml b/controls/roles/update-stereum/molecule/full/molecule.yml index 926df2b71..0a5cd66b8 100644 --- a/controls/roles/update-stereum/molecule/full/molecule.yml +++ b/controls/roles/update-stereum/molecule/full/molecule.yml @@ -19,10 +19,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/update-stereum/molecule/override/molecule.yml b/controls/roles/update-stereum/molecule/override/molecule.yml index 97e9d1b73..3f277c244 100644 --- a/controls/roles/update-stereum/molecule/override/molecule.yml +++ b/controls/roles/update-stereum/molecule/override/molecule.yml @@ -19,10 +19,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/controls/roles/upgrade-prep/molecule/default/molecule.yml b/controls/roles/upgrade-prep/molecule/default/molecule.yml index 1e4255387..6435b07c5 100644 --- a/controls/roles/upgrade-prep/molecule/default/molecule.yml +++ b/controls/roles/upgrade-prep/molecule/default/molecule.yml @@ -16,10 +16,6 @@ provisioner: env: ANSIBLE_PIPELINING: "True" ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/..:./roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles" -lint: | - set -e - yamllint . - ansible-lint . scenario: test_sequence: - destroy diff --git a/launcher/package.json b/launcher/package.json index a608558f8..e81a7627d 100755 --- a/launcher/package.json +++ b/launcher/package.json @@ -109,4 +109,4 @@ "type": "git", "url": "git@github.com:stereum-dev/ethereum-node.git" } -} \ No newline at end of file +} diff --git a/launcher/src/backend/OneClickInstall.js b/launcher/src/backend/OneClickInstall.js index 2d6fff59a..d3f41f3dd 100755 --- a/launcher/src/backend/OneClickInstall.js +++ b/launcher/src/backend/OneClickInstall.js @@ -566,7 +566,6 @@ export class OneClickInstall { if (/lido/.test(selectedPreset)) { const networkFeeAddress = { mainnet: "0x388C818CA8B9251b393131C08a736A67ccB19297", - holesky: "0xE73a3602b99f1f913e72F8bdcBC235e206794Ac8", hoodi: "0x9b108015fe433F173696Af3Aa0CF7CDb3E104258", }; const serviceFeeAddressCommand = { diff --git a/launcher/src/backend/tests/integration/LodestarBeaconService.int.js b/launcher/src/backend/tests/integration/LodestarBeaconService.int.js index d20932629..df012d8cf 100755 --- a/launcher/src/backend/tests/integration/LodestarBeaconService.int.js +++ b/launcher/src/backend/tests/integration/LodestarBeaconService.int.js @@ -120,7 +120,7 @@ test("lodestar validator import", async () => { /Searching peers/.test(BCstatus.stdout) && /Syncing/.test(BCstatus.stdout) && /Genesis fetched from the beacon node/.test(VCstatus.stdout) && - /Verified connected beacon node and validator have same the config/.test(VCstatus.stdout) && + /Verified connected beacon node and validator have the same config/.test(VCstatus.stdout) && /REST api server keymanager bearer access token located at/.test(VCstatus.stdout) ) { condition = true; @@ -161,6 +161,6 @@ test("lodestar validator import", async () => { //check lighthouse VC logs expect(VCstatus.stdout).toMatch(/Genesis fetched from the beacon node/); - expect(VCstatus.stdout).toMatch(/Verified connected beacon node and validator have same the config/); + expect(VCstatus.stdout).toMatch(/Verified connected beacon node and validator have the same config/); expect(VCstatus.stdout).toMatch(/REST api server keymanager bearer access token located at/); }); diff --git a/launcher/src/backend/tests/integration/PrysmBeaconService.int.js b/launcher/src/backend/tests/integration/PrysmBeaconService.int.js index c1b0060cd..5f8889149 100755 --- a/launcher/src/backend/tests/integration/PrysmBeaconService.int.js +++ b/launcher/src/backend/tests/integration/PrysmBeaconService.int.js @@ -6,11 +6,12 @@ import { NodeConnection } from "../../NodeConnection.js"; import { ServiceManager } from "../../ServiceManager.js"; import { TaskManager } from "../../TaskManager.js"; import { ValidatorAccountManager } from "../../ValidatorAccountManager.js"; +import { StringUtils } from "../../StringUtils.js"; const log = require("electron-log"); jest.setTimeout(1800000); -test("prysm validator import", async () => { +test("prysm wallet generation", async () => { const testServer = new HetznerServer(); const keyResponse = await testServer.createSSHKey("Prysm--integration-test--ubuntu-2604"); @@ -91,18 +92,13 @@ test("prysm validator import", async () => { //Waiting for the service to start properly await testServer.Sleep(60000); - //import validator + //generate the validator wallet, using the same function Stereum calls before importing keys const validatorAccountManager = new ValidatorAccountManager(nodeConnection, serviceManager); - validatorAccountManager.batches.push({ - keystores: [ - '{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "de4b32f49572c01146afb11a82c326fdc03be6cf447983daf9eb7ec0f868a116"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "1ccb24f0f1469ab56cc0147dae242aab59ff360177c8ec4f710966913da839b6"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "a24857026939492f49444679544cb6bb"}, "message": "b5d944adfb65e33873c5c1b809c3c15b558821f2829cd7e9da1df65d0b78fdb6"}}, "description": "", "pubkey": "acaa51756fb445b406c9e599f3f4bec991f7799c002619566ab1fa5b70445c62f1ac6561154ca5e49d7542dbe690b96b", "path": "m/12381/3600/0/0/0", "uuid": "1ea9ed13-e3bb-4555-99d9-c5e83ab9eb67", "version": 4}', - '{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "de4b32f49572c01146afb11a82c326fdc03be6cf447983daf9eb7ec0f868a116"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "3691a02425a4607b86292313cc72e31d4866043034ee9cff0b7cab2096105269"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "a24857026939492f49444679544cb6bb"}, "message": "e8a184e9d70408acd33459c67632c7bb63cf9c58a175de2030f962da88a2eb4d"}}, "description": "", "pubkey": "82ed748ffbc23ee3b730577a81f4cd05fe7dba234b3de5efc31f53de67091de9631d8581d72892351dfad52b65e53fbf", "path": "m/12381/3600/1/0/0", "uuid": "f712f984-b926-4e90-a603-f3f14703bf4b", "version": 4}', - '{"crypto": {"kdf": {"function": "scrypt", "params": {"dklen": 32, "n": 262144, "r": 8, "p": 1, "salt": "de4b32f49572c01146afb11a82c326fdc03be6cf447983daf9eb7ec0f868a116"}, "message": ""}, "checksum": {"function": "sha256", "params": {}, "message": "fa52987837af01ec48e2b21f2078acef3368983943751013758052e07dae841d"}, "cipher": {"function": "aes-128-ctr", "params": {"iv": "a24857026939492f49444679544cb6bb"}, "message": "8c055c8c504cd3ad20bcb1101431b2b1a506b1a4d0efdbd294d75c39c0f2268b"}}, "description": "", "pubkey": "948f092cb5b5cae121fdc14af0e4e5a90d03ab661266b700ded1c1ca4fd6f0a76f8dac187815409197bf036675571458", "path": "m/12381/3600/2/0/0", "uuid": "c7521eed-533a-4fd1-90b7-ad1aa0f24a2d", "version": 4}', - ], - passwords: ["MyTestPassword", "MyTestPassword", "MyTestPassword"], - }); - const importResult = await validatorAccountManager.importKey(prysmVC.id); - log.info(importResult); + const services = await serviceManager.readServiceConfigurations(); + await validatorAccountManager.initWallet( + services.find((service) => service.id === prysmVC.id), + StringUtils.createRandomString() + ); await Promise.all([serviceManager.manageServiceState(prysmBC.id, "stopped"), serviceManager.manageServiceState(prysmVC.id, "stopped")]); @@ -147,13 +143,6 @@ test("prysm validator import", async () => { const validatorAccounts = await nodeConnection.sshService.exec(`cat ${wallet_path}/direct/accounts/all-accounts.keystore.json`); const auth_token = await nodeConnection.sshService.exec(`cat ${wallet_path}/auth-token`); const docker = await nodeConnection.sshService.exec("docker ps"); - let responseValidator = await nodeConnection.sshService.exec( - "docker exec stereum-" + - prysmVC.id + - " /app/cmd/validator/validator accounts list --wallet-dir=/opt/app/data/wallets --wallet-password-file=/opt/app/data/passwords/wallet-password --accept-terms-of-use" - ); - const runningValidator = responseValidator.stdout.replace("\x1B[93m3\x1B[0m", "3"); //remove yellow color coding - // destroy await testServer.finishTestGracefully(nodeConnection); @@ -188,5 +177,4 @@ test("prysm validator import", async () => { //check prysm VC logs expect(VCstatus.stderr).toMatch(/Prysm Validator started/); expect(VCstatus.stderr).toMatch(/Opened validator wallet/); - expect(runningValidator).toMatch(/Showing .{1} validator accounts/); }); diff --git a/launcher/src/components/UI/edit-page/components/drawer/DrawerFilter.vue b/launcher/src/components/UI/edit-page/components/drawer/DrawerFilter.vue index 47e568572..08c1b4cb0 100644 --- a/launcher/src/components/UI/edit-page/components/drawer/DrawerFilter.vue +++ b/launcher/src/components/UI/edit-page/components/drawer/DrawerFilter.vue @@ -78,7 +78,6 @@ const networkFilter = (service) => { switch (currentNetwork.value) { case "mainnet": case "hoodi": - case "holesky": return true; case "sepolia": return service.service !== "SSVNetworkService" && service.service !== "SSVDKGService"; diff --git a/launcher/src/components/UI/plugin-installation/ConsensusSync.vue b/launcher/src/components/UI/plugin-installation/ConsensusSync.vue index 5d4e12279..123b6308c 100755 --- a/launcher/src/components/UI/plugin-installation/ConsensusSync.vue +++ b/launcher/src/components/UI/plugin-installation/ConsensusSync.vue @@ -112,7 +112,6 @@ export default { mainnet: "mainnet", sepolia: "sepolia", gnosis: "gnosis", - holesky: "holesky", hoodi: "hoodi", }), ...mapWritableState(useNodeManage, { @@ -177,20 +176,17 @@ export default { this.checkPointSync = item.url; }, setSelectedLinks() { - switch (this.currentNetwork.id) { - case 1: + switch (this.currentNetwork.network) { + case "mainnet": this.selectedLinks = this.mainnet; break; - case 2: + case "sepolia": this.selectedLinks = this.sepolia; break; - case 3: + case "gnosis": this.selectedLinks = this.gnosis; break; - case 4: - this.selectedLinks = this.holesky; - break; - case 5: + case "hoodi": this.selectedLinks = this.hoodi; break; default: diff --git a/launcher/src/store/clickInstallation.js b/launcher/src/store/clickInstallation.js index 25d4d4543..007b4bf95 100755 --- a/launcher/src/store/clickInstallation.js +++ b/launcher/src/store/clickInstallation.js @@ -342,32 +342,6 @@ export const useClickInstall = defineStore("clickInstallation", { url: "https://checkpoint.gnosischain.com/", }, ], - holesky: [ - { - id: 1, - name: "Lodestar", - icon: "/img/icon/checkpoint-sync-icons/lodestar-checkpoint-icon.png", - url: "https://beaconstate-holesky.chainsafe.io", - }, - { - id: 2, - name: "BeaconState.info", - icon: "", - url: "https://holesky.beaconstate.info", - }, - { - id: 3, - name: "EthStaker", - icon: "/img/icon/checkpoint-sync-icons/ethstaker-checkpoint-icon.png", - url: "https://holesky.beaconstate.ethstaker.cc", - }, - { - id: 4, - name: "EF DevOps", - icon: "/img/icon/checkpoint-sync-icons/ef-devops-checkpoint-icon.png", - url: "https://checkpoint-sync.holesky.ethpandaops.io", - }, - ], hoodi: [ { id: 1, diff --git a/launcher/src/store/nodeManage.js b/launcher/src/store/nodeManage.js index b57979dcf..5bfe853cd 100755 --- a/launcher/src/store/nodeManage.js +++ b/launcher/src/store/nodeManage.js @@ -46,7 +46,7 @@ export const useNodeManage = defineStore("nodeManage", { mainnet: "https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net", sepolia: - "https://0x845bd072b7cd566f02faeb0a4033ce9399e42839ced64e8b2adcfc859ed1e8e1a5a293336a49feac6d9a5edb779be53a@boost-relay-sepolia.flashbots.net", + "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@boost-relay-sepolia.flashbots.net", hoodi: "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@boost-relay-hoodi.flashbots.net", id: 1, @@ -54,16 +54,6 @@ export const useNodeManage = defineStore("nodeManage", { isRemoved: false, freeCensorship: false, }, - { - icon: "/img/icon/one-click-icons/mevboost-icons/bloxroute.png", - name: "BloXroute MAX PROFIT", - mainnet: - "https://0x8b5d2e73e2a3a55c6c87b8b6eb92e0149a125c852751db1422fa951e42a09b82c142c3ea98d0d9930b056a3bc9896b8f@bloxroute.max-profit.blxrbdn.com", - id: 2, - isSelected: false, - isRemoved: false, - freeCensorship: true, - }, { icon: "/img/icon/one-click-icons/mevboost-icons/bloxroute.png", name: "BloXroute REGULATED", @@ -74,23 +64,11 @@ export const useNodeManage = defineStore("nodeManage", { isRemoved: false, freeCensorship: false, }, - { - icon: "/img/icon/one-click-icons/mevboost-icons/manifold.png", - name: "Manifold", - mainnet: - "https://0x98650451ba02064f7b000f5768cf0cf4d4e492317d82871bdc87ef841a0743f69f0f1eea11168503240ac35d101c9135@mainnet-relay.securerpc.com", - id: 6, - isSelected: false, - isRemoved: false, - freeCensorship: true, - }, { icon: "/img/icon/one-click-icons/mevboost-icons/ultra-sound-relay.png", name: "Ultra sound money", mainnet: "https://0xa1559ace749633b997cb3fdacffb890aeebdb0f5a3b6aaa7eeeaf1a38af0a8fe88b9e4b1f61f236d2e64d95733327a62@relay.ultrasound.money", - holesky: - "https://0xb1559beef7b5ba3127485bbbb090362d9f497ba64e177ee2c8e7db74746306efad687f2cf8574e38d70067d40ef136dc@relay-stag.ultrasound.money", hoodi: "https://0xb1559beef7b5ba3127485bbbb090362d9f497ba64e177ee2c8e7db74746306efad687f2cf8574e38d70067d40ef136dc@relay-hoodi.ultrasound.money", id: 7, @@ -124,8 +102,6 @@ export const useNodeManage = defineStore("nodeManage", { name: "Titan Relay", mainnet: "https://0x8c4ed5e24fe5c6ae21018437bde147693f68cda427cd1122cf20819c30eda7ed74f72dece09bb313f2a1855595ab677d@global.titanrelay.xyz", - holesky: - "https://0xaa58208899c6105603b74396734a6263cc7d947f444f396a90f7b7d3e65d102aec7e5e5291b27e08d02c50a050825c2f@holesky.titanrelay.xyz", hoodi: "https://0xaa58208899c6105603b74396734a6263cc7d947f444f396a90f7b7d3e65d102aec7e5e5291b27e08d02c50a050825c2f@hoodi.titanrelay.xyz", id: 10, @@ -217,15 +193,6 @@ export const useNodeManage = defineStore("nodeManage", { dataEndpoint: "https://beacon.gnosischain.com/api/v1", support: ["staking", "stereum on arm", "archive"], }, - { - id: 4, - name: "Holesky Testnet", - network: "holesky", - icon: "/img/icon/network-icons/ethereum-testnet-icon.png", - currencyIcon: "/img/icon/control-page-icons/network-currency-icons/network-currency-icons-goerli-testnet.png", - dataEndpoint: "https://holesky.beaconcha.in/api/v1", - support: ["staking", "ssv.network", "stereum on arm", "mev boost", "archive", "obol", "lidoobol", "lidossv", "lidocsm"], - }, { id: 5,