Ansible 运行 所有任务,即使使用了标签
Ansible running all task even if tags are used
这是我的任务,有 2 个标签
- name: Set custom iptables rules
iptables_raw:
name: 'iptables_custom_rules'
rules: '{{ iptables_custom_rules }}'
tags: 'commonrules'
- name: Set XXX iptable rules
iptables_raw:
name: 'iptables_wsg_rules'
rules: '{{ iptables_wsg_rules }}'
tags: 'wsgrules'
在 iptable.yml 文件中,我包含了带有标签的角色
- hosts: iptables
roles:
- { role: "Iptables", tags: "commonrules" }
它应该 运行 只标记通用规则,但是当我 运行 剧本时它 运行 包含所有任务。
标签仅在 ansible-playbook
的命令行上使用 --tags/--skip-tags
options.
激活(取消)激活
剧本和角色中的标签声明仅用于声明激活这些任务和角色的标签。
By default ansible runs as if --tags all
had been specified.
因此,如果您只想 运行 带有 'commonrules' 标签的任务,您必须:
- 从角色部分删除标签(否则它将应用于该角色的所有任务)
- 使用选项
--tags commonrules
调用 ansible-playbook
如果要动态应用任务,最好的方法是使用基于标志的when
条件,该标志仅为需要应用任务的主机定义。
- name: Set custom iptables rules
iptables_raw:
name: 'iptables_custom_rules'
rules: '{{ iptables_custom_rules }}'
when: commonrules | default(False)
- name: Set XXX iptable rules
iptables_raw:
name: 'iptables_wsg_rules'
rules: '{{ iptables_wsg_rules }}'
when: wsgrules | default(False)
然后,在 group_vars
or host_vars
files 中,类似于:
# group_vars/common.yml
commonrules: True
# group_vars/wsg.yml
wsgrules: True
或者更好的是,您甚至可以在 when 条件下测试 iptables_XXX_rules
变量是否存在,因此任务只会对定义了这些变量的主机执行。
这是我的任务,有 2 个标签
- name: Set custom iptables rules
iptables_raw:
name: 'iptables_custom_rules'
rules: '{{ iptables_custom_rules }}'
tags: 'commonrules'
- name: Set XXX iptable rules
iptables_raw:
name: 'iptables_wsg_rules'
rules: '{{ iptables_wsg_rules }}'
tags: 'wsgrules'
在 iptable.yml 文件中,我包含了带有标签的角色
- hosts: iptables
roles:
- { role: "Iptables", tags: "commonrules" }
它应该 运行 只标记通用规则,但是当我 运行 剧本时它 运行 包含所有任务。
标签仅在 ansible-playbook
的命令行上使用 --tags/--skip-tags
options.
激活(取消)激活
剧本和角色中的标签声明仅用于声明激活这些任务和角色的标签。
By default ansible runs as if
--tags all
had been specified.
因此,如果您只想 运行 带有 'commonrules' 标签的任务,您必须:
- 从角色部分删除标签(否则它将应用于该角色的所有任务)
- 使用选项
--tags commonrules
调用 ansible-playbook
如果要动态应用任务,最好的方法是使用基于标志的when
条件,该标志仅为需要应用任务的主机定义。
- name: Set custom iptables rules
iptables_raw:
name: 'iptables_custom_rules'
rules: '{{ iptables_custom_rules }}'
when: commonrules | default(False)
- name: Set XXX iptable rules
iptables_raw:
name: 'iptables_wsg_rules'
rules: '{{ iptables_wsg_rules }}'
when: wsgrules | default(False)
然后,在 group_vars
or host_vars
files 中,类似于:
# group_vars/common.yml
commonrules: True
# group_vars/wsg.yml
wsgrules: True
或者更好的是,您甚至可以在 when 条件下测试 iptables_XXX_rules
变量是否存在,因此任务只会对定义了这些变量的主机执行。