Linode CLI In A venv Of Its Own
The Linode CLI pinned in /opt/linode-cli, a virtual environment apart from the system Python, linked into the PATH. No package exists; pip into the system Python is the documented install. The live test runs pip check, calls the API with a token that is not one and expects Linode's 401, and asserts the system Python cannot import the package. Original role, live-tested on Rocky Linux 10.
Verification
Live-testedReally 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-19 · podman 4.9.3 · ansible 2.21.4 · how we verify
Documentation
linode-cli
The Linode (Akamai Connected Cloud) CLI (linode-cli) 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
linode-cli, and pip install into the system Python ties the CLI's
dependencies to whatever the OS ships. This role puts the CLI in
/opt/linode-cli, a venv apart from the system Python: an OS update
cannot break it, and it cannot break the OS. The live test asserts
import linodecli fails in /usr/bin/python3.
Pinned, and checked for consistency. linode_cli_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
linode_cli_pip_extra_args a requirements file with hashes and
--require-hashes, or a private index.
Proven to run. The live test calls linode-cli linodes list without
usable credentials and expects "401" - the whole tree loaded
and the Linode client ran.
Without a token it starts a wizard. linode-cli with no token
walks through interactive setup; the live test gives it a token that is
not one and expects the API's 401, which proves the client reached
Linode's API and was refused there.
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