Ansible如何将多个标签合并为单个`all`标签?
Ansible实现自定义
all标签聚合指定标签任务 Ansible支持将多个指定标签合并为一个all标签来执行,有两种常用实现方式:
方式一:给目标任务统一添加all标签
直接在需要纳入all标签的每个任务(或Play/Role)上,同时打上all标签和原有标签。例如:
- name: 安装Apache ansible.builtin.yum: name: httpd state: present tags: ['install', 'all'] - name: 配置Apache SSL ansible.builtin.template: src: ssl.conf.j2 dest: /etc/httpd/conf.d/ssl.conf tags: ['ssl', 'all'] # 其他需要纳入的任务同理,都添加`all`标签
之后执行你想要的命令:
ansible-playbook apache.yml -e 'TARGET=bs' -i inventories/devqa-servers.ini -b -K -u root --ask-vault-pass --ask-pass --tags 'all'
这样只会运行带有all标签的任务,也就是你指定的那些标签对应的任务。
方式二:利用Play级标签继承
如果所有需要纳入的任务都在同一个Play中,可以直接在Play级别设置包含all和所有目标标签的标签列表,Play下的所有任务会自动继承这些标签:
- name: Apache部署Play hosts: "{{ TARGET }}" tags: ['all', 'normal_vars', 'install', 'configure', 'ssl', 'custom_config', 'services', 'mdm', 'enterpriseenrollment_80', 'enroll'] tasks: # 这里写所有需要执行的任务,无需逐个加标签
这种方式更高效,无需给每个任务单独打标签,执行同样的--tags 'all'命令即可触发所有目标任务。
注意事项
- Ansible内置的
all标签默认会匹配所有未被排除的任务,如果你的Playbook中存在其他未打标签的任务,直接用内置all会一并执行。上面两种方式是自定义all标签的范围,仅包含你指定的任务。 - 如果需要完全替代内置
all的行为,确保只有带有all标签的任务被执行,不要在其他无关任务上添加all标签。
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

