目录
1 Playbook基础概念解析
1.1 什么是Ansible Playbook?
Ansible Playbook是采用YAML格式编写的自动化脚本文件,用于定义在多台远程主机上执行的一系列有序任务。与Ad-Hoc命令相比,Playbook具有以下显著优势:
- 可重复性:脚本化配置可反复执行
- 版本控制:支持Git等版本管理系统
- 结构化编排:复杂任务的多层次组织
- 参数化支持:通过变量实现灵活配置

概念说明:
- Play:定义在哪些主机上执行什么任务
- Task:调用Ansible模块执行具体操作
- Module:Ansible内置的执行单元(如ping、yum等)
1.2 YAML语法快速入门
Playbook采用YAML格式,基本规则包括:
- 使用---开头
- 缩进表示层级(必须使用空格,不能使用Tab)
- 键值对用:表示
- 列表用-表示
2 环境准备与配置
2.1 基础环境要求

控制节点:
- 安装Ansible
- 配置SSH密钥认证
ssh-keygen -t rsa
ssh-copy-id user@remote_host
被管节点:
- 开启SSH服务
- 安装Python基础环境
- 防火墙放行SSH端口(默认22)
2.2 库存文件(Inventory)配置
- 创建/etc/ansible/hosts文件(或自定义路径):
[web_servers]
server1 ansible_host=192.168.10.101
server2 ansible_host=192.168.10.102
[db_servers]
db1 ansible_host=192.168.10.84
[all:vars]
ansible_user=admin
ansible_ssh_private_key_file=~/.ssh/id_rsa
- 验证连接:
ansible all -m ping
3 编写第一个Playbook
3.1 创建基础Playbook文件
- 新建first_playbook.yml文件:
---
- name: My first playbook
hosts: all
gather_facts: false
tasks:
- name: Ping test
ping:
代码解析:
- ---:YAML文件开始标记
- name:Play的描述信息
- hosts:指定目标主机组(all表示所有主机)
- gather_facts:是否收集主机信息(首次可禁用加速)
- tasks:任务列表开始
- - name:任务描述
- ping::调用ping模块
3.2 Playbook执行流程

3.3 执行与验证
ansible-playbook first_playbook.yml
- 预期输出:
PLAY [My first playbook] *******************************************************
TASK [Ping test] ***************************************************************
ok: [server1]
ok: [server2]
ok: [db1]
PLAY RECAP *********************************************************************
server1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
db1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
状态解读:
- ok:任务成功执行
- changed:是否改变了系统状态(ping模块始终为0)
- unreachable:主机不可达
- failed:任务执行失败
4 进阶功能扩展
4.1 结果验证与处理
- 增强版Playbook(添加结果验证):
---
- name: Enhanced ping test
hosts: all
gather_facts: false
tasks:
- name: Ping connectivity test
ping:
register: ping_result
ignore_errors: yes
- name: Display ping status
debug:
msg: "{{ item }} is reachable"
loop: "{{ ansible_play_hosts }}"
when: ping_result is success
新增功能:
- register:保存任务结果到变量
- ignore_errors:即使失败也继续执行
- debug:调试信息输出
- loop:遍历主机列表
- when:条件判断执行
4.2 多Play编排
---
- name: Test web servers
hosts: web_servers
tasks:
- ping:
- name: Test database servers
hosts: db_servers
tasks:
- ping:
- name: Additional check
shell: hostname
register: hostname_out
- debug:
var: hostname_out.stdout
结构说明:
- 一个YAML文件可包含多个Play
- 每个Play可针对不同主机组
- Play之间按顺序独立执行
5 错误排查指南
5.1 常见错误及解决
错误现象 | 可能原因 | 解决方案 |
UNREACHABLE | SSH连接失败 | 检查网络/认证/防火墙 |
FAILED | Python环境异常 | 确认被管节点Python版本 |
语法错误 | YAML格式问题 | 使用yamllint验证 |
权限不足 | 未使用sudo | 添加become: yes |
5.2 调试技巧
- 详细模式:
ansible-playbook -vvv first_playbook.yml
- 语法检查:
ansible-playbook --syntax-check first_playbook.yml
- 单步执行:
ansible-playbook --step first_playbook.yml
- 使用调试器:
- name: Debug task
ping:
debugger: on_failed
6 总结
简单的ping测试Playbook虽然功能基础,但包含了Playbook的所有核心要素:
- YAML结构:理解了Playbook的基本语法框架
- 模块使用:掌握了ping模块的调用方法
- 执行流程:熟悉了Playbook的运行机制
- 结果验证:学会了基本的调试和错误处理方法