遍历库存事实

时间:2019-08-02 16:20:25

标签: ansible ansible-inventory

我需要编写一个Ansible脚本,该脚本遍历整个清单的所有可用IPv4 / 6地址,以创建包含所有“我的”地址的防火墙脚本。

我尝试的是:

foreach ($dest in 'there2','there3') { cp there $dest }

并运行例如ansible-playbook site.yml --limit = server1,结果中仅打印一个条目,而不是全部打印

{% for hostname in groups['all'] %}
{% if hostvars[hostname]['ansible_default_ipv4']['address'] is defined %}
  iptables ... {{ hostvars[hostname]['ansible_default_ipv4']['address'] }}
{% endif %}
{% if hostvars[hostname]['ansible_default_ipv6']['address'] is defined %}
  ip6tables ... {{ hostvars[hostname]['ansible_default_ipv6']['address'] }}
{% endif %}
{% endfor %}

当我用一个组(不是全部)运行一个剧本时,它只包含该组的IP,但不包含“全部”,这对我来说更有意义,因为有foreach组[all]。

结果是通过任务生成的

iptables ... a.b.c.d
ip6tables .... c:d:e:f::1

我知道- name: Configure Firewall template: src={{item.src}} dest={{item.dest}} owner={{item.owner}} group={{item.group}} mode={{item.mode}} with_items: - { src: "init.sh.j2", dest: "/etc/firewall/init.sh", owner: 'root', group: 'root', mode: '0750' } 是可靠的,但是它只是每个主机的一个IP,如果完全双栈IPv4 / 6是不可接受的,因为将配置两个地址中的一个。 / p>

还有另一种方法可以从所有主机获取事实吗?

0 个答案:

没有答案