当前位置 : 首页 » 互动问答 » 正文

Ansible:获取当前目标主机的IP地址

分类 : 互动问答 | 发布时间 : 2016-10-03 00:54:32 | 评论 : 5 | 浏览 : 87824 | 喜欢 : 34

如何在角色中获取当前主机的IP地址?

我知道您可以获取主机所属的组列表以及主机的主机名但我无法找到获取IP地址的解决方案。

您可以使用 {{inventory_hostname}} 获取主机名,使用 {{group_names}}

我可以尝试 {{hostvars [ {{inventory_hostname}}] ['ansible_ssh_host']}} and ip =“{{hostvars。{{inventory_hostname}}。ansible_ssh_host}}”

回答(5)

  • 1楼
  • 所有地址的列表存储在事实中的默认地址ansible_all_ipv4_addresses 中, ansible_default_ipv4.address .

     ---
     -  hosts:localhost
      连接:本地
      任务:
         -  debug:var = ansible_all_ipv4_addresses
         -  debug:var = ansible_default_ipv4.address
    

    然后为每个网络接口分配地址......在这种情况下,您可以显示所有事实并找到具有您要使用的值的事实。

  • 2楼
  • 您可以从hostvars, dict 获取IP地址ansible_default_ipv4 and key address

     hostvars [inventory_hostname] ['ansible_default_ipv4'] ['地址']
    

    和IPv6地址分别为

     hostvars [inventory_hostname] ['ansible_default_ipv6'] ['address']
    

    示例剧本:

     ---
     -  hosts:localhost
      任务:
         -  debug:var = hostvars [inventory_hostname] ['ansible_default_ipv4'] ['address']
         -  debug:var = hostvars [inventory_hostname] ['ansible_default_ipv6'] ['address']
  • 4楼
  • 如果您想要外部公共IP 并且您处于AWS或Azure等云环境中,则可以使用 ipify_facts模块:

     #TODO:SECURITY:这要求我们信任ipify提供正确的公共IP。我们可以运行自己的ipify服务器。
     - 姓名:从ipify.org获取我的公共IP
      ipify_facts:
    

    这会将公共IP放入变量 ipify_public_ip中.

  • 5楼
  • http://docs.ansible.com/ansible/latest/plugins/lookup/dig.html

    so在模板中,对于e。 g。:

     {{lookup('dig',ansible_host)}}
    

    Notes:

    • 因为不仅可以在库存中使用DNS名称,还可以检查是否已经更好地添加了IP
    • 显然这个收据不能用于间接主机规范(例如使用跳转主机)< notranslate>但它仍然服务于用例的99%(比喻说)。

    But still it serves 99 % (figuratively speaking) of use cases.

相关阅读:

如何使用Ansible创建目录

为Ansible指定sudo密码

如何使用远程系统上的Ansible任务移动/重命名文件

如何为每个任务或一组任务切换用户?

我在哪里可以获得Ansible预定义变量列表?

我在哪里可以获得Ansible预定义变量列表?

安全地将Ansible剧本限制在一台机器上?

在Ansible主机上运行命令

如何在命令行中将变量传递给ansible playbook?

使用Ansible创建新用户和密码