
1. 什么是 Playbook
1.1 定义
Playbook 是 Ansible 自动化中的核心组件,以 YAML 格式编写,用于定义一组或多组任务的执行步骤。
1.2 作用
自动化执行复杂任务。 提供可重用的任务定义文件。 支持任务的条件判断和动态配置。
1.3 特点
结构化且可读性强:以 YAML 格式书写,适合团队协作和版本控制。 模块化支持:结合变量、模板、roles 等,实现灵活和高效的自动化任务。 幂等性:确保任务多次运行后,目标主机状态保持一致。
2 Playbook 的核心结构
2.1 基础结构
一个 Playbook 通常由以下几个部分组成:
---
- name: "Play 描述性名称"
hosts: # 主机组名称或目标主机
become: # 是否提升权限 (true/false)
vars:
# 定义全局变量或局部变量。
tasks:
# 定义任务
handlers:
# 用于触发在某些条件下执行的动作。 (可选)
roles:
# 调用预定义的角色 (可选)
示例 Playbook
---
- name: 安装和配置 Apache Web 服务器
hosts: webservers
become: true
vars:
apache_port: 8080
tasks:
- name: 安装 Apache
yum:
name: httpd
state: present
- name: 配置 Apache 端口
lineinfile:
path: etc/httpd/conf/httpd.conf
regexp: '^Listen'
line: "Listen {{ apache_port }}"
- name: 确保 Apache 已启动
service:
name: httpd
state: started
enabled: true
- name: 配置防火墙
firewalld:
port: "{{ http_port }}/tcp"
permanent: true
state: enabled
notify:
- 重启防火墙
handlers:
- name: 重启防火墙
service:
name: firewalld
state: restarted
2.2 Playbook 各组件详解
2.2.1. hosts
hosts 定义任务要运行在哪些目标主机上:
可以是 inventory 文件中定义的主机组。 支持单主机名称或主机模式表达式。
hosts: webservers
也可以使用表达式:
hosts: 192.168.1.[1:5]
2.2.2. vars(变量)
vars 用于定义任务中使用的变量,支持动态插值。
vars:
app_dir: var/www/html
port: 80
变量使用方式:
tasks:
- name: 使用变量配置文件路径
file:
path: "{{ app_dir }}"
state: directory
2.2.3. tasks(任务)
任务是 Playbook 的核心,描述了要执行的操作。
任务结构:
name: 描述性文字,用于记录任务目的。 模块: 使用 Ansible 模块完成操作。 参数: 模块的配置选项。
tasks:
- name: 安装软件包
yum:
name: httpd
state: present
2.2.4. handlers(处理器)
handlers 是特殊任务,仅在被 notify 调用时执行。典型应用是服务重启、配置重新加载等。
tasks:
- name: 更新配置文件
copy:
src: myapp.conf
dest: etc/myapp.conf
notify:
- 重启服务
handlers:
- name: 重启服务
service:
name: myapp
state: restarted
2.2.5. loops(循环)
支持循环执行任务,减少重复代码。
tasks:
- name: 安装多组软件
yum:
name: "{{ item }}"
state: present
loop:
- httpd
- php
- mariadb
2.2.6. when(条件执行)
条件允许在满足特定条件时运行任务。
示例:仅在 RedHat 系统中执行
tasks:
- name: 安装 Apache
yum:
name: httpd
state: present
when: ansible_os_family == "RedHat"
示例:使用变量判断
vars:
is_webserver: true
tasks:
- name: 安装 Web 服务器
yum:
name: httpd
state: present
when: is_webserver
2.2.7. templates(模板)
通过模板动态生成配置文件,使用 Jinja2 模板语言。
模板文件(example.j2):
ServerName {{ ansible_hostname }}
Listen {{ apache_port }}
Playbook 中调用模板:
tasks:
- name: 配置 Apache
template:
src: example.j2
dest: etc/httpd/conf/httpd.conf
2.2.8. roles(角色)
roles 是 Playbook 的高级抽象,用于组织和重用任务。一个 role 通常包含以下目录结构:
roles/
├── common/
│ ├── tasks/
│ │ └── main.yml
│ ├── handlers/
│ │ └── main.yml
│ ├── templates/
│ │ └── example.j2
│ ├── files/
│ │ └── somefile
│ ├── vars/
│ │ └── main.yml
│ ├── defaults/
│ │ └── main.yml
Playbook 调用 Role:
- name: 部署 Web 服务器
hosts: webservers
roles:
- common
- web
2.2.9. tags(标签)
tags 用于在运行 Playbook 时选择性地执行任务。
tasks:
- name: 安装 Apache
yum:
name: httpd
state: present
tags: apache
- name: 安装 MySQL
yum:
name: mysql
state: present
tags: mysql
运行特定标签的任务:
ansible-playbook site.yml --tags "apache"
3 运行 Playbook
运行 Playbook 使用 ansible-playbook 命令:
ansible-playbook playbook.yml
常用参数
-i:指定 inventory 文件。 --check:检查模式,不做实际更改。 -e:传递额外变量。 --tags: 运行指定标签任务。
4 Playbook 最佳实践
使用 roles 管理大型 Playbook。 合理使用变量和模板,增强动态性。 在任务名称中添加描述性信息,便于调试。 尽量使用 幂等操作,确保任务多次运行不会产生副作用。
如有帮助,请点个赞和“在看”!如有不足,敬请指出!感谢你的关注与支持。
路虽远,行则将至!
事虽难,做则必成!共勉!
红帽认证RHCE题目及答案分享(上),全面了解Ansible的生产实践 红帽认证RHCE题目及答案分享(下),全面了解Ansible的生产实践
Ansible 入门教程:从零开始掌握自动化运维 Linux的150个常用命令汇总,运维大神不一定全部掌握! Linux文件处理三剑客详解(运维高手必备) Nginx配置文件详解及常用功能配置(实用率90%)
文章转载自运维李哥不背锅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




