Playbook 中多个连续任务按 tasks 列表顺序逐个执行,每个任务以 - name: 开头、调用单个模块,依赖 register/when 实现结果传递,支持 tags 控制执行范围。

在 Playbook 中编写多个连续的任务,本质是把一组有逻辑顺序的操作,按先后关系写进 tasks 列表里。Ansible 默认逐个执行这些任务,前一个完成才开始下一个,天然支持“连续”语义。
任务必须放在 tasks 列表中
tasks 是关键字,必须为复数形式,且缩进对齐于 hosts 同级。每个任务以 - name: 开头,后面紧跟模块调用:
- 每个
name是任务的描述,建议写清楚动作目的,比如"Start nginx service"而不是"Do something" - 每个任务只能调用一个模块(如
copy、service、user),不能在一个任务里写多条命令 - 任务之间靠缩进和换行区分,YAML 对缩进敏感,必须统一用空格,不能混用 tab
按实际操作顺序排列任务
例如部署 Web 服务,典型流程是:安装 → 配置 → 启动 → 检查。对应 Playbook 片段如下:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- name: Install httpd
ansible.builtin.dnf:
name: httpd
state: latest
<ul><li><p>name: Copy custom config
ansible.builtin.copy:
src: files/httpd.conf
dest: /etc/httpd/conf/httpd.conf</p></li><li><p>name: Enable and start httpd
ansible.builtin.service:
name: httpd
enabled: true
state: started</p></li><li><p>name: Verify service is listening
ansible.builtin.uri:
url: <a href="https://www.php.cn/link/bb122c8fe6c764e8aae555e2186a6344">https://www.php.cn/link/bb122c8fe6c764e8aae555e2186a6344</a>
status_code: 200
这四个任务会严格按从上到下的顺序,在每台目标主机上依次执行。
需要跨任务传递结果?用 register + when
如果后一个任务要根据前一个任务的执行结果决定是否运行,可用 register 捕获输出,再用 when 判断:
-
register: result_var把上一任务的返回存入变量 -
when: result_var.rc == 0表示只在上一任务成功时执行当前任务 - 注意:
when是条件控制,不是跳过错误;真正想忽略失败要用ignore_errors: yes
想让某些任务只在特定条件下运行?用 tags
给任务加 tags,就能按需执行部分任务,而不必改写整个 Playbook:
- 单个任务打标签:
tags: install - 多个任务共用标签:
tags: [config, deploy] - 运行时指定:
ansible-playbook site.yml --tags "install" - 排除某标签:
--skip-tags "test"

















