ansible-preflight
Pre-deployment validation for Ansible changes targeting the Proxmox home-lab cluster — catches common mistakes before they become fix commits
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Pre-deployment validation for Ansible changes targeting the Proxmox home-lab cluster — catches common mistakes before they become fix commits
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Route proposed Team Mimir profile behavior changes to target-owned Hermes dialogue.
Build a versioned Antigravity teammate delegation envelope and route it through the guarded agy wrapper.
Create durable Infiquetra implementation plans with issue, review, test, and deploy gates. Interrogates HOW work gets built, writes an agent-consumable plan artifact, records a plan saga, and routes to doc-review and /work. Triggers on "plan this", "how should we build this", "create a plan", "break this down", or a handoff issue ready for planning.
Coordinate a whole outcome as a durable DAG of leaf sagas. A level-triggered reconcile loop that dispatches the ready frontier to executors, harvests completion, and pages the operator only at gates and exceptions. The coordinator routes and never runs leaf work; status is derived on read. Thin coordinator verbs only — start, graph, advance, attend, resume, discover, handoff, attach — leaf work stays the native /resume, /work, /code-review, /qa.
Execute a settled Infiquetra plan to PR-ready, then own the round-N PR continuation loop. Restores and writes the work-thread saga (the primary writer), recommends an execution backend, runs risk-gated tests, calls /code-review programmatically and reads its envelope, gates hard on P0/P1 and stale reviews, and coordinates PR-open/review-request/merge under explicit confirmation — without owning deploy. Triggers on "build it", "work this plan", "execute the plan", "resume work on
Deep-dive one chosen Infiquetra idea into a right-sized requirements document before planning.
| name | ansible-preflight |
| description | Pre-deployment validation for Ansible changes targeting the Proxmox home-lab cluster — catches common mistakes before they become fix commits |
| when_to_use | Use this skill when the user: - Is about to commit or run Ansible changes (roles, playbooks, inventory, group_vars, host_vars) - Asks to validate, lint, check, or preflight any YAML in the ansible/ directory - Has modified any role task, template, or defaults file - Is adding a new role or playbook to the cluster - Wants a dry-run before applying changes to the live Proxmox cluster - Says "preflight", "validate", "check before deploying", "dry run" |
You are helping validate Ansible changes for the olympus Proxmox cluster before they are deployed. The goal is to catch errors that historically required follow-up fix commits.
Always run validation from the ansible/ directory with vault password available:
cd /path/to/home-lab/ansible
Run syntax-only validation (no connection required):
ansible-playbook --syntax-check -i inventory/hosts.yml proxmox_cluster.yml \
--vault-password-file ~/.vault_pass.txt
ansible-playbook --syntax-check -i inventory/hosts.yml service_vms.yml \
--vault-password-file ~/.vault_pass.txt
ansible-playbook --syntax-check -i inventory/hosts.yml openclaw_cluster.yml \
--vault-password-file ~/.vault_pass.txt
For a specific role or tag only:
ansible-playbook --syntax-check -i inventory/hosts.yml proxmox_cluster.yml \
--tags <role_name> --vault-password-file ~/.vault_pass.txt
Run ansible-lint for best-practice violations:
cd ansible && uv run ansible-lint roles/<role_name>/
uv run ansible-lint playbooks/
Key lint rules to pay attention to:
no-changed-when — shell/command tasks without changed_whenrisky-shell-pipe — shell commands piped without pipefailno-free-form — using free-form module args instead of structured YAMLfqcn-builtins — using short names (e.g. copy) instead of FQCN (ansible.builtin.copy)Test against live hosts without making changes:
# Full playbook dry-run with diff output
ansible-playbook --check --diff -i inventory/hosts.yml proxmox_cluster.yml \
--vault-password-file ~/.vault_pass.txt --tags <role>
# Single host dry-run
ansible-playbook --check --diff -i inventory/hosts.yml proxmox_cluster.yml \
--limit r420.infiquetra.com --vault-password-file ~/.vault_pass.txt
Note: Check mode does not work reliably for tasks that use delegate_to, run_once, or pvecm/pveceph CLI commands — these will show as "skipped" in check mode even though they have real effects.
Verify variables are resolved before referencing them:
# Print all variables for a host (catches undefined vars before runtime)
ansible -i inventory/hosts.yml r420.infiquetra.com -m debug \
-a "var=hostvars[inventory_hostname]" --vault-password-file ~/.vault_pass.txt
For template validation, test Jinja2 rendering:
ansible -i inventory/hosts.yml all -m debug \
-a "msg={{ your_variable }}" --vault-password-file ~/.vault_pass.txt
Before finalizing, review the common mistakes catalog (references/common-mistakes.md) and manually verify the change doesn't exhibit any of the known patterns extracted from the fix commit history.
When reviewing Ansible changes, check:
become: true on all tasks that run as root (pvecm, pveceph, ceph, systemctl)delegate_to: "{{ proxmox_master }}" on all cluster-wide operations (pvecm join, ceph init)run_once: true paired with delegate_to when creating global resourcesserial: 1 on node-join and OSD-add plays (prevents race conditions)when: not ansible_check_mode on tasks that can't run in check modechanged_when: false or changed_when: result.rc != 0 on shell/command tasksignore_errors: false — only use ignore_errors: true when genuinely OK to faildefaults/main.yml for every variable used in tasks{{ vault_var }} exist in the encrypted vault file