在部署期间需要设置ufw防火墙规则:从库存中启用主机组servers
的访问权限。目标主机是anazon ec2实例,但它可能放在其他提供商处。
我试过了:
- name: Ufw rules
ufw: rule=allow from_ip={{ hostvars[item]['ansible_eth0']['ipv4']['address'] }}
with_items: groups['servers']
notify:
- Restart ufw
档案hosts
:
..
[servers]
server1.site.com
server2.site.com
server3.site.com
..
但是主持人server1.site.com
实际上有host_vars:
"ansible_eth0": {
"active": true,
"device": "eth0",
"ipv4": {
"address": "10.x.x.x",
...
据我所知,IP地址10.x.x.x是内部亚马逊网络IP地址。
如果从ec2外面执行ping server1.site.com
,我会得到:
64 bytes from server1.site.com (46.x.x.x): icmp_seq=1 ttl=56 time=49.5 ms
...
执行ansible server1.site.com -m setup -i hosts | grep 46.x.x.x
一无所获。
如何使用ansible从库存组中获知主机的外部IP地址? 或者如何设置ufw防火墙使用库存中的主机名?
答案 0 :(得分:2)
我认为最好的办法是使用@dsedivec(https://github.com/dsedivec/ansible-plugins)编写的查找插件。
在您的剧本的顶层目录中创建一个lookup_plugins/
目录。
将dns.py
放入其中
curl https://raw.githubusercontent.com/dsedivec/ansible-plugins/master/lookup_plugins/dns.py > lookup_plugins/dns.py
并像这样使用它:
- name: Ufw rules
ufw: rule=allow from_ip={{ lookup('dns', item) }}
with_items: groups['servers']
notify:
- Restart ufw
祝你好运!
答案 1 :(得分:1)
最简单的方法是添加连接:local
---
- name: get my public IP
ipify_facts: api_url=http://api.ipify.org
connection: local
- firewalld: rich_rule='rule family=ipv4 source address={{ ipify_public_ip }} accept' permanent=no state=enabled timeout=300
become: true