‹ 首页

ansible

@clawic · 收录于 昨天 · 上游提交 2 天前

Avoid common Ansible mistakes — YAML syntax traps, variable precedence, idempotence failures, and handler gotchas.

适合你,如果正在编写自动化部署脚本,想避免常见错误

/ 通过 npx 安装 校验哈希
npx oh-my-skill add clawic/skills/ansible
/ 通过 bash 安装
curl -fsSL https://oh-my-skill.com/install.sh | bash -s -- clawic/skills/ansible
/ 已经装过?验证本机副本,不用重装
npx oh-my-skill verify clawic/skills/ansible
安装目标可用 --agent / --scope 或 --to 明确指定;省略时只会在唯一已存在的 agent 目录上自动选择,零命中或多命中会停止并提示。content_hash 缺失或不一致均拒装。
14GitHub stars
~673最小装载
~673含声明引用
~706文本包总量
索引托管

怎么用

商店整理自技能原文 · 版本 f825206 · 表述以原文为准
它做什么

当用户讨论或编写Ansible Playbook时,Claude会检查并指出YAML语法陷阱、变量优先级错误、幂等性缺失、handler问题、权限提升误区、条件判断错误、循环使用不当、facts优化等常见错误,并提供正确示例。

什么时候触发

当用户询问Ansible代码问题或展示Playbook片段时触发。

装好后可以这样说
Claude会扫描并修正YAML陷阱
解释handler触发条件和执行时机
给出正确的模块用法
技能原文 SKILL.md作者撰写 · MIT · f825206
YAML Syntax Traps
  • Jinja2 in value needs quotes — "{{ variable }}" not {{ variable }}
  • : in string needs quotes — msg: "Note: this works" not msg: Note: this
  • Boolean strings: yes, no, true, false parsed as bool — quote if literal string
  • Indentation must be consistent — 2 spaces standard, tabs forbidden
Variable Precedence
  • Extra vars (-e) override everything — highest precedence
  • Host vars beat group vars — more specific wins
  • vars: in playbook beats inventory vars — order: inventory < playbook < extra vars
  • Undefined variable fails — use {{ var | default('fallback') }}
Idempotence
  • command/shell modules aren't idempotent — always "changed", use creates: or specific module
  • Use apt, yum, copy etc. — designed for idempotence
  • changed_when: false for commands that don't change state — like queries
  • creates:/removes: for command idempotence — skips if file exists/doesn't
Handlers
  • Handlers only run if task reports changed — not on "ok"
  • Handlers run once at end of play — not immediately after notify
  • Multiple notifies to same handler = one run — deduplicated
  • --force-handlers to run even on failure — or meta: flush_handlers
Become (Privilege Escalation)
  • become: yes to run as root — become_user: for specific user
  • become_method: sudo is default — use su or doas if needed
  • Password needed for sudo — --ask-become-pass or in ansible.cfg
  • Some modules need become at task level — even if playbook has become: yes
Conditionals
  • when: without Jinja2 braces — when: ansible_os_family == "Debian" not when: "{{ ... }}"
  • Multiple conditions use and/or — or list for implicit and
  • is defined, is not defined for optional vars — when: my_var is defined
  • Boolean variables: when: my_bool — don't compare == true
Loops
  • loop: is modern, with_items: is legacy — both work, loop preferred
  • loop_control.loop_var for nested loops — avoids variable collision
  • item is the loop variable — use loop_control.label for cleaner output
  • until: for retry loops — until: result.rc == 0 retries: 5 delay: 10
Facts
  • gather_facts: no speeds up play — but can't use ansible_* variables
  • Facts cached with fact_caching — persists across runs
  • Custom facts in /etc/ansible/facts.d/*.fact — JSON or INI, available as ansible_local
Common Mistakes
  • register: captures output even on failure — check result.rc or result.failed
  • ignore_errors: yes continues but doesn't change result — task still "failed" in register
  • delegate_to: localhost for local commands — but local_action is cleaner
  • Vault password for encrypted files — --ask-vault-pass or vault password file
  • --check (dry run) not supported by all modules — command, shell always skip
按 MIT 许可原样转载,未经改动 · 在 GitHub 查看 →

评论

登录即可评论;带「已验证安装」的,是发布者名下有本店的安装或持有记录。