Ansible 剧本精粹 - 编写你的第一个 Playbook
Ansible 剧本精粹 - 编写你的第一个 Playbook
如果说 Ansible Ad-Hoc 命令像是你对厨房里的助手发出的零散口头指令(“切个洋葱”、“烧开水”),那么 Playbook 就是一份完整、详细、写在纸上的菜谱。它列明了所有需要的“食材”(变量),详细的“烹饪步骤”(任务),甚至还有一些“特殊处理程序”(处理器),可以指导任何人(或 Ansible)精确地烹制出一道(甚至一桌)美味佳肴(即完成复杂的系统配置)。
Playbook 是 Ansible 实现“配置即代码 (Configuration as Code)”的核心。
Playbook 基础结构
Playbook 使用 YAML (YAML Ain’t Markup Language) 格式编写。YAML 以其简洁、人类可读性强而著称。你需要了解一些基本的 YAML 语法:
- 缩进: YAML 使用空格(通常是 2 个或 4 个,但必须在同一层级保持一致)来表示层级关系,非常重要!
- 列表/数组: 以
-
(短横线加空格) 开头。 - 字典/映射: 以
key: value
(冒号后有空格) 的形式表示。
下面是一个最小化的 Playbook 结构示例,用于确保 webservers
组中的服务器都安装并启动了 Nginx:
# my_nginx_playbook.yaml
--- # YAML 文档开始的标志 (可选,但推荐)
- name: Configure Nginx Web Servers # 这是第一个 "Play" (剧目) 的名称hosts: webservers # 此 Play 针对 Inventory 中的 'webservers' 组become: true # 表示需要提权 (例如 sudo) 来执行任务tasks: # 此 Play 包含的任务列表- name: Ensure nginx package is present and updated # 第一个任务的名称ansible.builtin.apt: # 使用的模块 (推荐使用 FQCN - 完全限定集合名称)name: nginxstate: present # 确保 nginx 包是 'present'(已安装) 状态update_cache: yes # 执行前更新 apt 缓存- name: Ensure nginx service is started and enabled # 第二个任务的名称ansible.builtin.service:name: nginxstate: started # 确保服务是 'started'