playbooks/site.yml imports the docker_host role, but it didn't exist, so ansible-lint's syntax-check failed on a clean checkout — breaking CLAUDE.md's "main must always work" / "Never skip lint" (top open finding O1 from the 2026-06-11 review). Scaffold docker_host as a proper placeholder via the prescribed mechanism (make new-role): filled meta/main.yml + README, an honest no-task tasks/main.yml documenting planned scope (Docker engine + Compose, daemon hardening, nftables.d container rules per ADR-004/020), and the standard molecule scenario. This preserves site.yml's full-standard-state intent rather than dropping the play. Update STATUS.md (docker_host moves from "Not in git" to "scaffolded, no tasks") and the role/playbook READMEs to match. make lint: 0 failures, 0 warnings; check-tags OK. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
15 lines
757 B
Markdown
15 lines
757 B
Markdown
# roles/
|
|
|
|
Local Ansible roles. **No Galaxy roles** — every role is written and maintained here
|
|
(ADR-003). Scaffold new ones with `make new-role NAME=<name>`; never create the
|
|
directory structure by hand.
|
|
|
|
Each role must have: a `molecule/default/` scenario (Debian 13), a populated
|
|
`README.md`, and a filled-in `meta/main.yml`. Conventions: CLAUDE.md and
|
|
`docs/runbooks/new-role.md`.
|
|
|
|
Current state: `base` is **partially built** — its `firewall` concern (nftables) is
|
|
implemented and tested; the other concerns (SSH hardening, fail2ban, auditd, packages,
|
|
users) are not yet built. `docker_host` is **scaffolded but has no tasks yet**. `dev_env` (interactive
|
|
developer environment) is built and applied. See `STATUS.md` for the authoritative
|
|
breakdown.
|