ansible-lint In A venv Of Its Own

ansible-lint pinned in /opt/ansible-lint, a virtual environment with its own ansible-core, apart from the system Python and the host's Ansible. The live test runs pip check, lints an unnamed play offline and expects name[play] among the findings, and asserts the system Python cannot import it. Original role, live-tested on Rocky Linux 10.

ansibleCloud Tooling

Verification

Live-tested

Really deployed to a container sandbox, proven idempotent (a second run changes nothing), verified against the role’s assertions, then torn down.

Conformance

  • Static validation (yamllint · ansible-lint)

Provenance

  • SHA-256 checksum
  • Signature (pending)

Functional

  • Live-tested - applied, verified, destroyed

Last verified 2026-09-20 · podman 4.9.3 · ansible 2.21.4 · how we verify

Cite it in your README

badge · attribution

Paste this beside the module in the repository that uses it. The badge is rendered from this artifact's verification record, so it reads live-tested because the record says so, and the link lands on this page.

README.md, GitLab, Gitea
[![IaC Bazaar: live-tested](https://www.iac-bazaar.com/api/artifacts/ansible-ansible-lint/badge)](https://www.iac-bazaar.com/catalog/ansible-ansible-lint?utm_source=syndication&utm_medium=readme&utm_campaign=artifact)

Ansible role 1.0.0, live-tested on IaC Bazaar: [ansible-lint In A venv Of Its Own](https://www.iac-bazaar.com/catalog/ansible-ansible-lint?utm_source=syndication&utm_medium=readme&utm_campaign=artifact)

```yaml
# ansible-lint In A venv Of Its Own: https://www.iac-bazaar.com/catalog/ansible-ansible-lint (download from your IaC Bazaar account)
```

Preview:IaC Bazaar: live-tested

Documentation

ansible-lint

The Ansible CLI (ansible-lint) on EL 10, pinned to a version, in a virtual environment of its own with a link in the PATH. Original role for EL 10, live-tested with podman on Rocky Linux 10.

There is no package; the documented install is pip. EL 10 carries no ansible-lint, and pip install into the system Python ties the CLI's dependencies to whatever the OS ships. This role puts the CLI in /opt/ansible-lint, a venv apart from the system Python: an OS update cannot break it, and it cannot break the OS. The live test asserts import ansiblelint fails in /usr/bin/python3.

Pinned, and checked for consistency. ansible_lint_version is what gets installed; the live test runs pip check inside the venv and expects no broken requirements.

pip verifies nothing beyond TLS. The index is PyPI over HTTPS; there is no signature to check. For a byte-for-byte pin, give ansible_lint_pip_extra_args a requirements file with hashes and --require-hashes, or a private index.

Proven to run. The live test calls ansible-lint --offline --nocolor -p /tmp/alint-p/play.yml and expects "name[play]" - the whole tree loaded and the linter did its work.

Its own ansible-core, apart from the host's. ansible-lint pulls ansible-core into the venv (2.21.4 with this pin), so linting does not depend on, or disturb, whatever Ansible the host runs. The live test lints an unnamed play with one bare shell task, offline, and expects name[play] among the findings: the rules loaded and ran. Profiles, skip lists and .ansible-lint files are per repository.

License

Commercial - IaC Bazaar EULA. (c) IaC Bazaar.

Usage code & full reference need an account

The complete copy-paste usage, the full input/output reference, and operational notes are free with an account - shown here and bundled in the download. Sign in and this section fills in.

  • Variables
  • Test

Related modules

Live-tested

ansible-forgejo-runner

Forgejo Runner 13.2 from the vendor's release, sha256-checked, in a hardened unit, registered the way Forgejo now asks: a secret registered with forgejo-cli on the Forgejo host and a connection in config.yml. The live test pushes a workflow; its job runs on the runner and finds /home hidden, /tmp private and the system read-only. Original role, live-tested on Rocky Linux 10.

View module
Live-tested

ansible-forgejo

Forgejo from the upstream release as a hardened service on loopback with sqlite and a configuration it never needs to write. The live test creates an administrator with Forgejo's own command, sees a wrong password refused and registration disabled, creates a private repository, hides it from an anonymous request and clones it over HTTP. Original role, live-tested on Rocky Linux 10.

View module
Live-tested

ansible-atmos

atmos on EL 10 from the GitHub release, get_url refuses it unless its SHA-256 is the one in the vendor's SHA256SUMS, and the live test re-checks it, then writes an atmos.yaml, a stack and a component, validates the stacks and describes the component with no Terraform installed. Pinned. Original role, live-tested on Rocky Linux 10.

View module
Live-tested

ansible-checkov

Checkov pinned in /opt/checkov, a virtual environment apart from the system Python. The live test runs pip check, scans a one-resource module with the built-in checks and --skip-download and expects a 'Failed checks:' summary with no network, and asserts the system Python cannot import it. Original role, live-tested on Rocky Linux 10.

View module
Live-tested

ansible-conftest

conftest on EL 10 from the GitHub release, refused by Ansible's get_url unless its SHA-256 is the one in the project's checksums.txt, and re-checked with sha256sum -c by the live test, which then writes a one-rule Rego v1 policy and a one-line document, runs conftest test and expects the denial in the report. Original role, live-tested on Rocky Linux 10.

View module
Live-tested

ansible-consul-cli

consul on EL 10 from releases.hashicorp.com: the client binary, not a server. HashiCorp's key lives in a GnuPG home of its own, pinned by fingerprint; the SHA256SUMS signature is verified before get_url checks the zip against that file, and the live test verifies it again, then runs consul members against nothing and expects the refused connection. Original role, live-tested on Rocky Linux 10.

View module