Ansible Playbook

一、主机清单 Inventory

核心知识点

  1. 清单作用:定义 Ansible 管理的主机列表,支持主机分组,单台主机可同时属于多个组
  2. 清单类型:
    • 静态清单:手动编写 INI 格式文件,适合服务器固定的场景
    • 动态清单:从云平台 / LDAP/CMDB 自动拉取主机信息,适合云环境动态场景
  3. 静态清单规则:
    • 组名用[组名]包裹,组内写主机名 / IP
    • 子组写法:[父组:children],将多个小组合并为大组
    • 范围简化:连续主机可简写为server[01:20].example.com192.168.[1:3].[0:255]

重难点

  • 子组的层级关系、范围写法的规则

  • 清单验证命令的组合使用

    查看清单树状结构,检查组/子组关系

    ansible-navigator inventory -m stdout --graph

    检查单台主机的信息

    ansible-navigator inventory -m stdout --host <主机名>

    手动指定清单文件

    ansible-navigator run ... -i <清单路径>

易错点

  • 不要使用系统默认的/etc/ansible/hosts,每个项目单独在项目目录自建清单文件
  • --graph必须加-m stdout,否则会进入交互界面

二、Ansible 配置文件

核心知识点

  1. 项目内的两个核心配置文件:
    • ansible.cfg:配置 Ansible 本身的运行行为
    • ansible-navigator.yml:配置 navigator 工具的运行行为
  2. 配置文件优先级(从高到低,仅生效第一个找到的):
    1. 当前项目目录的ansible.cfg
    2. 用户主目录的~/.ansible.cfg
    3. 系统默认的/etc/ansible/ansible.cfg
  3. ansible.cfg 核心段落:
    • [defaults]:默认配置,包含默认清单路径、远程用户、SSH 密码提示
    • [privilege_escalation]:提权配置,包含是否默认提权、提权方式、提权目标用户、sudo 密码提示

重难点

  • 配置文件的优先级(必考)

  • 密码登录的特殊配置

    查看当前生效的配置文件

    ansible --version

    查看所有Ansible配置

    ansible-navigator config

易错点

  • 密码登录(SSH 密码 /sudo 密码)时,必须在ansible-navigator.yml中关闭playbook-artifact,否则日志功能会拦截密码输入,无法正常输入密码
  • 不要全局开启提权,安全风险高

三、连接与特权升级

核心知识点

  1. 默认连接方式:SSH,默认使用控制节点当前的用户连接
  2. 提权(become):先用普通用户登录,再切换到 root 执行管理操作,避免直接用 root 登录,符合安全规范
  3. 免密 SSH:生产环境标配,用ssh-copy-id将控制节点公钥分发到受管服务器,无需输入密码

重难点

  • 提权的安全用法:在需要 root 权限的 Play 内单独开启become: true,不要全局开启提权

四、Playbook 核心

核心知识点

  1. 基础概念:

    • Task:最小操作单元,比如安装一个软件,依赖模块实现
    • Play:针对一组主机的任务集合,定义这些任务要在哪些服务器上运行
    • Playbook:一个或多个 Play 组成的 YAML 文件,Ansible 按顺序执行所有 Play
  2. YAML 语法规则(错一个就运行失败,必背):

    1. 文件后缀.yml,开头必须写---
    2. 仅支持空格缩进,绝对不能用 Tab,YAML 不识别 Tab
    3. 同一层级的内容,缩进必须完全一致,子项要比父项多缩进
    4. key: value冒号后必须加空格
    5. 注释用#
  3. Playbook 基础结构:

    复制代码
    ---
    - name: Play的描述
      hosts: 目标主机/组
      remote_user: 连接用的远程用户
      become: 是否开启提权
      tasks:
        - name: 任务的描述
          模块名:
            参数1: 值1
            参数2: 值2
  4. 模块规则:

    • 新版本必须使用FQCN 全称 (如ansible.builtin.dnf),不要用旧的短名称,否则新版本会报错
    • 大部分模块是幂等的:可反复运行 playbook,只要主机已经是你要的状态,模块就不会做任何修改,不会重复操作
  5. 辅助运行选项:

    • 语法检查:运行前先检查 playbook 有没有语法错误
    • 空运行:模拟运行 playbook,告诉你会修改哪些内容,不实际修改服务器

重难点

  • YAML 语法规则,新手最容易在这里出错

  • 幂等性的概念,这是 Ansible 自动化的核心特性

  • 多 Play 的配置:一个 playbook 可包含多个 Play,每个 Play 可单独配置用户、提权

    语法检查

    ansible-navigator run <剧本.yml> -m stdout --syntax-check

    空运行(模拟运行)

    ansible-navigator run <剧本.yml> -m stdout -C

    正常运行

    ansible-navigator run <剧本.yml> -m stdout

    查看模块文档

    ansible-navigator doc <模块名>

易错点

  • Tab 缩进、冒号后无空格,直接语法报错
  • 忘记加-m stdout,运行命令后进入交互界面,不知道怎么退出
  • 模块不用 FQCN 全称,新版本 Ansible 报错 / 警告
  • 滥用 shell/command 模块,优先用正规模块,正规模块是幂等的,更安全

五、特殊模块

核心知识点

无合适的正规模块时,可使用三个特殊模块直接运行命令,不到万不得已不要用

  1. ansible.builtin.command:最基础的命令模块,不支持 shell 的重定向、管道功能,优先用这个
  2. ansible.builtin.shell:支持 shell 的重定向、管道、环境变量,仅需要这些功能时用
  3. ansible.builtin.raw:绕过模块系统,无需受管服务器安装 Python,用来管理路由器、交换机这类无 Python 的设备
  4. 模拟幂等:用creates参数,指定如果某个文件已经存在,就跳过这个任务,避免重复运行

重难点

  • 三个模块的使用场景,区分什么时候用哪个

全局易错点汇总

  1. YAML 缩进用 Tab、冒号后无空格 → 语法报错
  2. 忘记加-m stdout → 进入交互界面
  3. 密码登录时没关 playbook artifact → 输不了密码
  4. 全局开启提权 → 安全风险
  5. 模块不用 FQCN 全称 → 新版本报错
  6. 滥用 shell 模块,不用正规模块 → 失去幂等性,风险高
相关推荐
IT大白鼠12 小时前
Ansible vs 运维智能体:自动化工具的优劣对比与适用场景分析
运维·自动化·ansible
悠悠121382 天前
从0到1掌握Ansible:让自动化运维不再是梦想
运维·自动化·ansible
卧室小白4 天前
ansible自动化
ansible
yuezhilangniao5 天前
Ansible基础 ansible入门 针对不同python3版本 - 含 Terraform 入门联动
运维·自动化·ansible
Koma_zhe7 天前
【Ansible开源自动化运维工具】别再手动装监控了,Ansible能让上百台机器同时搞定Node Exporter(1)
运维·开源·ansible
.柒宇.9 天前
RedHat10-Ansible部署Docker操作
docker·eureka·ansible
道清茗17 天前
【RH294知识点汇总】第 7 章 《 使用角色和 Ansible 内容集合简化 Playbook 》常见问题
ansible
何中应18 天前
Ansible安装&使用
运维·自动化·ansible·运维开发·自动化运维
王九思19 天前
Ansible 自动化运维基础—模板
运维·自动化·ansible
道清茗19 天前
【RH294知识点汇总】第 7 章 《 使用角色和 Ansible 内容集合简化 Playbook 》
java·前端·ansible