Ansible πΒΆ
Use this section for Ansible-specific guidance that applies across the repository.
Common πΒΆ
Use these shared rules as the default baseline for role values and path handling.
Paths πΒΆ
You MUST build filesystem paths with path_join instead of concatenating path segments as strings.
Variables and Constants π§ΒΆ
These rules keep shared role values explicit, reusable, and easy to read.
You MUST prefer defining shared fixed role variables once in
vars/main.ymlas the single source of truth instead of recomputing them withlookup()or dotted variable composition in*.j2or*.yml.Variables that are defined once and treated as constants MUST be uppercase.
Role Design ποΈΒΆ
Use this section for role-structure guidance around images, files, and constants.
Container Images π³ΒΆ
Use this rule when a role needs a Docker image definition.
You SHOULD prefer
DockerfileoverDockerfile.j2; only useDockerfile.j2when build-time templating is genuinely required.
Image Versions π·οΈΒΆ
Use this rule when a role pins container image versions in roles/*/meta/services.yml.
You MUST keep semver-like image versions current when the upstream image publishes matching newer tags.
You MUST use
# nocheck: docker-versiondirectly above aversion:key only for intentional exceptions that should not be flagged by the external image-version check.You SHOULD prefer explicit version pinning over drifting tags when the role depends on stable, reproducible deploys.
Extracted Code π€ΒΆ
Use this rule when a task body contains non-trivial shell, SQL, Python, JavaScript, or any other non-YAML code.
You MUST extract non-trivial non-YAML code out of task files into a dedicated role asset instead of inlining it:
Static scripts (shell, Python, binaries) belong in
roles/<role>/files/<name>.<ext>and are invoked viaansible.builtin.scriptorcommand.Rendered code (SQL, JSON, JS, config snippets, env files) belongs in
roles/<role>/templates/<name>.<ext>.j2and is consumed vialookup('template', '<name>.<ext>.j2')(for inline values) oransible.builtin.template(for file deployment).
The reason is reviewability and tooling. Extracted assets get proper syntax highlighting, linting, and diffing. Inline heredocs and multi-line
query:orcommand:blocks hide all three and make the task file harder to read.One-liners such as a single
command:or a shortshell:pipeline MAY stay inline. The rule targets bodies that are themselves a program, not every shell call.
For documentation, comments, semantics, and writing guidance, see documentation.md.
For test commands and testing standards, see testing.md.