ansible
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
YAML Syntax Traps
- Jinja2 in value needs quotes —
"{{ variable }}"not{{ variable }} :in string needs quotes —msg: "Note: this works"notmsg: Note: this- Boolean strings:
yes,no,true,falseparsed 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/shellmodules aren't idempotent — always "changed", usecreates:or specific module- Use
apt,yum,copyetc. — designed for idempotence changed_when: falsefor commands that don't change state — like queriescreates:/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-handlersto run even on failure — ormeta: flush_handlers
Become (Privilege Escalation)
become: yesto run as root —become_user:for specific userbecome_method: sudois default — usesuordoasif needed- Password needed for sudo —
--ask-become-passor 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"notwhen: "{{ ... }}"- Multiple conditions use
and/or— or list for implicitand is defined,is not definedfor 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 preferredloop_control.loop_varfor nested loops — avoids variable collisionitemis the loop variable — useloop_control.labelfor cleaner outputuntil:for retry loops —until: result.rc == 0 retries: 5 delay: 10
Facts
gather_facts: nospeeds up play — but can't useansible_*variables- Facts cached with
fact_caching— persists across runs - Custom facts in
/etc/ansible/facts.d/*.fact— JSON or INI, available asansible_local
Common Mistakes
register:captures output even on failure — checkresult.rcorresult.failedignore_errors: yescontinues but doesn't change result — task still "failed" in registerdelegate_to: localhostfor local commands — butlocal_actionis cleaner- Vault password for encrypted files —
--ask-vault-passor vault password file --check(dry run) not supported by all modules —command,shellalways skip
按 MIT 许可原样转载,未经改动 · 在 GitHub 查看 →
评论
登录即可评论;带「已验证安装」的,是发布者名下有本店的安装或持有记录。
…