如何在Ansible Playbook中按指定顺序运行角色特定任务?
解决Ansible Playbook任务顺序控制问题
你之前的写法无效,原因是:使用role关键字时,指定tasks参数不会替换角色的默认任务(main.yml),而是将这些任务追加到角色默认任务之后执行,所以snapshots角色的所有任务都会被运行。
下面提供两种可行的解决方案:
方案一:直接调用角色内的任务文件
不需要修改角色结构,直接在playbook中用import_tasks调用目标任务文件,同时用import_role执行something角色的所有任务,完全按你的顺序控制:
- hosts: all tasks: - name: 运行snapshots角色的create任务 import_tasks: roles/snapshots/tasks/create.yml - name: 运行something角色的所有任务 import_role: name: something - name: 运行snapshots角色的remove任务 import_tasks: roles/snapshots/tasks/remove.yml
方案二:利用标签精准控制角色任务
先修改snapshots角色的任务文件,给对应任务添加标签:
- 在
create.yml的所有任务中添加tags: snapshot_create - 在
remove.yml的所有任务中添加tags: snapshot_remove
然后在playbook中通过import_role指定标签,只执行对应标签的任务:
- hosts: all tasks: - name: 执行snapshots角色的create任务 import_role: name: snapshots tags: snapshot_create - name: 执行something角色的所有任务 import_role: name: something - name: 执行snapshots角色的remove任务 import_role: name: snapshots tags: snapshot_remove
注意:如果snapshots角色的main.yml本身包含了create.yml和remove.yml的引用,这种标签方式可以精准筛选出对应任务;如果main.yml没有引用这两个文件,你需要先在main.yml中通过import_tasks引入它们,标签才能生效。
内容的提问来源于stack exchange,提问作者Arny80Hexa
相关产品推荐
相关产品推荐

