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 模块,不用正规模块 → 失去幂等性,风险高
相关推荐
张3234 小时前
Ansible文件部署
服务器·ansible
张3235 小时前
Ansible介绍
ansible
热爱Liunx的丘丘人21 小时前
Ansible的Playbook案例一
linux·运维·服务器·ansible
小梦爱安全1 天前
Ansible剧本1
java·网络·ansible
WJ.Polar1 天前
Ansible任务控制
linux·运维·网络·python·ansible
热爱Liunx的丘丘人1 天前
PlayBook常用的模块编写
linux·服务器·ansible
淼淼爱喝水1 天前
Ansible Playbook 入门实战:自动化创建 Linux 用户
linux·运维·服务器·网络·ansible
热爱Liunx的丘丘人2 天前
Ansible-doc及常用模块
linux·运维·服务器·ansible
亚空间仓鼠5 天前
Ansible之Playbook(一):简单应用
ansible