Dhe*_*raj 1 ansible ansible-2.x ansible-facts ansible-inventory
这是我的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'
Run Code Online (Sandbox Code Playgroud)
在iptable.yml文件中,我包含了带标记的角色
- hosts: iptables
roles:
- { role: "Iptables", tags: "commonrules" }
Run Code Online (Sandbox Code Playgroud)
它应该只运行带有commonrules的标签,但是当我运行playbook时它会运行所有任务.
标签仅在ansible-playbook带有--tags/--skip-tags选项的命令行上激活(de).
playbooks和roles中的标签声明仅用于声明激活这些任务和角色的标签.
默认情况下,ansible运行就像
--tags all已经指定一样.
因此,如果您只想使用'commonrules'标记运行任务,则必须:
--tags commonrules如果要动态应用任务,最好的方法是使用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)
Run Code Online (Sandbox Code Playgroud)
然后,在group_vars或host_vars文件中,类似于:
# group_vars/common.yml
commonrules: True
# group_vars/wsg.yml
wsgrules: True
Run Code Online (Sandbox Code Playgroud)
甚至更好,您甚至可以iptables_XXX_rules在when条件下测试变量的存在,因此任务将仅针对定义了这些变量的主机执行.