返回顶部
A

AnsibleAnsible避坑指南

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

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
1,859
下载量
免费
免费
3
收藏
概述
安装方式
版本历史

Ansible

YAML 语法陷阱

  • - 值中的 Jinja2 需要引号 — {{ variable }} 而非 {{ variable }}
  • 字符串中的 : 需要引号 — msg: Note: this works 而非 msg: Note: this
  • 布尔字符串:yes、no、true、false 会被解析为布尔值 — 如需字面字符串请加引号
  • 缩进必须一致 — 标准为2个空格,禁止使用制表符

变量优先级

  • - 额外变量(-e)覆盖一切 — 优先级最高
  • 主机变量优先于组变量 — 更具体的胜出
  • 剧本中的 vars: 优先于清单变量 — 顺序:清单 < 剧本 < 额外变量
  • 未定义变量会失败 — 使用 {{ var | default(fallback) }}

幂等性

  • - command/shell 模块不具备幂等性 — 始终显示已变更,请使用 creates: 或特定模块
  • 使用 apt、yum、copy 等模块 — 专为幂等性设计
  • 对不改变状态(如查询)的命令使用 changed_when: false
  • 使用 creates:/removes: 实现命令幂等性 — 文件存在/不存在时跳过

处理器

  • - 处理器仅在任务报告已变更时运行 — 而非正常状态
  • 处理器在剧本结束时运行一次 — 而非通知后立即执行
  • 同一处理器的多次通知 = 只运行一次 — 自动去重
  • 使用 --force-handlers 即使在失败时也运行 — 或使用 meta: flush_handlers

提权(权限提升)

  • - become: yes 以 root 身份运行 — 使用 becomeuser: 指定特定用户
  • becomemethod: sudo 为默认值 — 如需可使用 su 或 doas
  • sudo 需要密码 — --ask-become-pass 或在 ansible.cfg 中配置
  • 某些模块需要在任务级别设置提权 — 即使剧本已设置 become: yes

条件判断

  • - when: 不需要 Jinja2 花括号 — when: ansibleosfamily == Debian 而非 when: {{ ... }}
  • 多个条件使用 and/or — 或使用列表表示隐式 and
  • 使用 is defined、is not defined 判断可选变量 — when: myvar is defined
  • 布尔变量:when: mybool — 不要比较 == true

循环

  • - loop: 是现代写法,withitems: 是旧版写法 — 两者均可,推荐使用 loop
  • 嵌套循环使用 loopcontrol.loopvar — 避免变量冲突
  • item 是循环变量 — 使用 loopcontrol.label 获得更清晰的输出
  • 重试循环使用 until: — until: result.rc == 0 retries: 5 delay: 10

事实

  • - gatherfacts: no 可加速剧本 — 但无法使用 ansible 变量
  • 使用 factcaching 缓存事实 — 跨运行持久化
  • 自定义事实位于 /etc/ansible/facts.d/.fact — JSON 或 INI 格式,以 ansiblelocal 形式可用

常见错误

  • - register: 即使在失败时也会捕获输出 — 请检查 result.rc 或 result.failed
  • ignoreerrors: yes 会继续执行但不改变结果 — 任务在注册变量中仍显示失败
  • 本地命令使用 delegateto: localhost — 但 local_action 更简洁
  • 加密文件需要保险库密码 — --ask-vault-pass 或使用保险库密码文件
  • --check(试运行)并非所有模块都支持 — command、shell 始终跳过

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 ansible-1776328508 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 ansible-1776328508 技能

通过命令行安装

skillhub install ansible-1776328508

下载

⬇ 下载 Ansible v1.0.0(免费)

文件大小: 2.09 KB | 发布时间: 2026-4-17 15:11

v1.0.0 最新 2026-4-17 15:11
Initial release

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部