Amazon ec2 如何知道ansible客户端的外部ip地址

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]

部署期间需要设置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]
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