快速上手 Ansible Playbook 实施
每个 Play 可单独配置remote_user(远程用户)、become(是否提权)、become_method(提权方式,如 sudo)、become_user(提权目标用户),覆盖全局配置;
一、先搞定 Ansible 主机清单
清单是 Ansible 管理受管主机的基础,分为静态和动态两类(课程重点讲解静态),核心作用是定义受管主机及分组。
静态清单格式
优先 INI 格式,以[组名]标识分组,后续行写主机名 / IP,支持组嵌套(:children后缀)和地址范围简写([START:END],如server[01:20].com、192.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 的受管主机(如路由器)。
更多推荐
所有评论(0)