一、先搞定 Ansible 主机清单

清单是 Ansible 管理受管主机的基础,分为静态和动态两类(课程重点讲解静态),核心作用是定义受管主机及分组。

静态清单格式

优先 INI 格式,以[组名]标识分组,后续行写主机名 / IP,支持组嵌套:children后缀)和地址范围简写[START:END],如server[01:20].com192.168.[4:7].1)。

清单验证与指定

默认清单文件/etc/ansible/hosts,建议在项目目录自定义,通过-i/--inventory指定路径;用ansible-navigator inventory命令验证(--list列所有主机、--graph列组结构、--host验证单主机)。

二、配置 Ansible 核心文件

Ansible 的行为由配置文件控制,核心是ansible.cfg(Ansible 主配置)和ansible-navigator.yml(导航器配置),配置文件有优先级(项目目录 > 用户主目录 > 系统默认),可用ansible --version查看当前生效配置。

ansible.cfg 关键配置

分[defaults]和[privilege_escalation]两大核心段,重点配置清单路径、远程用户、SSH 免密、特权提权(become=true切换 root,推荐按需在 Playbook 中配置而非全局开启)。

SSH 免密配置

建议提前通过ssh-copy-id建立控制节点与受管主机的免密连接,也可通过 Ansible 的authorized_key模块批量分发公钥。

ansible-navigator.yml

主要配置执行环境镜像、禁用 playbook 工件(需密码验证时必须关闭)。

三、编写第一个 Ansible Playbook

Playbook 是 YAML 格式的文本文件,核心是Play(一组针对指定主机的任务),Task(调用模块执行具体操作),是 Ansible 自动化的核心载体。

YAML 基础语法要求

以---开头(可选...结尾),仅用空格缩进(禁止 tab,建议 2 个空格),同级元素缩进一致;
列表项以- 开头,键值对用键: 值(冒号后必须加空格);
注释以#开头,行间注释需加空格。

基础 Playbook 结构

一个简单的 Play 包含名称(可选,建议写,方便排错)、目标主机、任务列表,任务调用 Ansible 模块实现功能,示例:

---
- name: 创建指定UID的用户
  hosts: webservers
  tasks:
    - name: 确保newbie用户存在,UID为4000
      ansible.builtin.user:
        name: newbie
        uid: 4000
        state: present

模块使用要点

模块是 Playbook 的 “工具”,Ansible 核心模块在ansible.builtin集合中,推荐使用完全限定集合名称(FQCN) 避免冲突;
多数模块具备幂等性(多次运行无副作用,目标状态已满足则不做修改),这是 Ansible 的核心特性;
用ansible-navigator doc 模块名查看模块文档,ansible-navigator collections浏览所有可用模块。

四、Playbook 的执行与验证

控制节点通过ansible-navigator run命令执行 Playbook,核心参数和实操步骤缺一不可,执行前的验证能大幅减少排错成本。

语法验证:ansible-navigator run -m stdout 剧本.yml --syntax-check,提前检查 YAML 和 Playbook 语法;
空运行(预检查):--check/-C,模拟执行并显示将要发生的更改,不实际操作受管主机;
执行命令:ansible-navigator run -m stdout 剧本.yml,-m stdout将输出打印到终端(默认交互模式);
详细输出:通过-v/-vv/-vvv/-vvvv提升日志详细程度,用于排错(如连接问题、模块执行细节);
核心特性:因模块的幂等性,重复执行 Playbook 时,若受管主机已达目标状态,将无任何变更(状态为ok)。

五、进阶:多 Play 与特权提权精细化

一个 Playbook 可包含多个 Play,每个 Play 可针对不同主机组、配置不同的远程用户和特权提权规则,实现精细化的自动化编排。

多 Play 编写:多个 Play 以- 开头依次排列,各自定义hosts、tasks,按顺序执行;
Play 内自定义提权:每个 Play 可单独配置remote_user(远程用户)、become(是否提权)、become_method(提权方式,如 sudo)、become_user(提权目标用户),覆盖全局配置;
常用模块分类:按功能可分为文件(copy/lineinfile)、软件(dnf/package)、系统(service/user)、网络(get_url)等,覆盖日常 Linux 管理核心操作;
特殊命令模块:无对应模块时,可使用command/shell/raw运行自定义命令,优先使用 command(最安全),shell 支持管道 / 环境变量,raw 用于无 Python 的受管主机(如路由器)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐