文章背景图

Ansible Playbook 进阶:变量、模板、Handlers、Vault 与调试

2026-07-25
4
-
- 分钟

Playbook 用 YAML 描述目标状态。可维护性来自清晰命名、幂等模块、合理变量范围和失败处理,而不是把 shell 脚本逐行搬进 YAML。

## 基本 Playbook

```yaml

- name: Configure web servers

hosts: web

become: true

serial: 2

tasks:

- name: Install nginx

ansible.builtin.package:

name: nginx

state: present

- name: Deploy configuration

ansible.builtin.template:

src: nginx.conf.j2

dest: /etc/nginx/nginx.conf

owner: root

group: root

mode: '0644'

validate: 'nginx -t -c %s'

notify: Restart nginx

handlers:

- name: Restart nginx

ansible.builtin.service:

name: nginx

state: restarted

```

Handler 只在通知且任务发生变更时运行。模板使用 validate 可在覆盖正式配置前检查语法。

## 变量

变量可来自 role defaults、Inventory、host_vars、group_vars、Play、include、事实和 extra-vars,优先级复杂。团队应约定每类变量只放一个位置;Role 可覆盖参数放 defaults,环境差异放 Inventory,敏感值加密。

{{ variable }} 开头的 YAML 值要整体加引号。使用 ansible-playbook ... -e @vars.yml 比复杂命令行字符串更安全和清晰,但文件仍需权限保护。

## Blocks 与错误处理

```yaml

- block:

- name: Deploy new version

ansible.builtin.include_role:

name: app_deploy

rescue:

- name: Roll back

ansible.builtin.include_role:

name: app_rollback

always:

- name: Collect status

ansible.builtin.command: /opt/app/bin/status

changed_when: false

```

rescue 不是忽略错误。回滚任务也可能失败,关键操作应使用 any_errors_fatal、max_fail_percentage、serial 和明确的健康检查限制影响范围。

## Ansible Vault

```bash

ansible-vault create group_vars/prod/vault.yml

ansible-vault edit group_vars/prod/vault.yml

ansible-playbook site.yml --vault-id prod@prompt

```

Vault 加密静态数据,不会自动阻止任务把 Secret 打到日志。敏感任务设置 no_log: true,并限制 Vault 密码文件权限和访问者。更大规模可集成外部 Secret 系统。

## 调试

```bash

ansible-playbook site.yml --syntax-check

ansible-playbook site.yml --list-hosts --list-tasks

ansible-playbook site.yml --check --diff --limit web01

ansible-playbook site.yml -vv

```

使用 debug 输出必要变量,避免整个 hostvars 和 Secret。register 后先参考模块文档 RETURN 结构,不要猜字段。

## 生产发布

- serial 小批量执行。

- pre_tasks 检查容量与依赖。

- 每批完成后执行健康检查。

- 失败立即停止,不在所有主机继续。

- 部署产物使用不可变版本。

- 回滚 Playbook 与发布一起测试。

参考:https://docs.ansible.com/projects/ansible/latest/playbook_guide/

原创

Ansible Playbook 进阶:变量、模板、Handlers、Vault 与调试

本文链接: Ansible Playbook 进阶:变量、模板、Handlers、Vault 与调试

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录