Amazon ec2 如何知道ansible客户端的外部ip地址
部署期间需要设置ufw防火墙规则:从资源清册启用主机组Amazon ec2 如何知道ansible客户端的外部ip地址,amazon-ec2,ansible,Amazon Ec2,Ansible,部署期间需要设置ufw防火墙规则:从资源清册启用主机组服务器的访问。目标主机是anazon ec2实例,但它可能位于其他提供程序 我试过: - name: Ufw rules ufw: rule=allow from_ip={{ hostvars[item]['ansible_eth0']['ipv4']['address'] }} with_items: groups['servers'] notify: - Restart 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
文件主机
:
..
[servers]
server1.site.com
server2.site.com
server3.site.com
..
但是主机server1.site.com
,实际上有主机变量:
"ansible_eth0": {
"active": true,
"device": "eth0",
"ipv4": {
"address": "10.x.x.x",
...
据我所知,Ip地址10.x.x.x是亚马逊内部网络Ip地址
如果从ec2外部执行pingserver1.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防火墙?我认为您最好使用@dsedivec()编写的查找插件 在playbook的顶部目录创建一个
lookup\u 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
祝你好运 最简单的方法是添加连接:本地
---
- 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