【问题标题】:Ansible get hostname as defined in inventoryAnsible 获取清单中定义的主机名
【发布时间】:2018-06-30 06:21:59
【问题描述】:

在我的清单中,我这样定义主机:

 [server1]
 141.151.176.223

我正在寻找一个保留 server1 名称的变量,因为我使用它来定义服务器主机名。

inventory_hostname 设置为 141.151.176.223 ansible_hostnameinventory_hostname_short 设置为 148

为了解决这个问题,我设置了自己的变量,如下所示:

 [server1]
 141.151.176.223 hostname=server1

但我对这种方法并不满意。

有什么想法吗?

【问题讨论】:

    标签: ansible hostname ansible-inventory


    【解决方案1】:

    [server1] 声明是 group 的名称,而不是主机(即使您只为该组分配了一个主机)。

    由于 ansible 允许将主机放置在多个组中,因此您只能以数组的形式获取名称:http://docs.ansible.com/ansible/latest/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts

    所以我认为您找到的解决方法是可行的方法,除非您可以使用真实主机名而不是 IP 地址(使用 DNS 或仅使用静态主机文件)。

    【讨论】:

      【解决方案2】:

      说明

      如果清单文件是这样定义的:

      [server1_group]
      server1 ansible_host=141.151.176.223
      

      然后就可以访问了:

      • server1inventory_hostname 事实;

      • 141.151.176.223ansible_host 事实;

      • server1_groupgroup_names|firstgroup_names 实际上包含服务器所属的所有组的列表,first 从该列表中选择第一个元素)。

      不管上述情况如何,ansible_hostname fact 包含在主机本身上定义的主机名(该值在事实收集期间设置)。


      解决方案

      您应该使用标准的ansible_host 声明来指向目标的 IP 地址,并将清单主机名设置为您希望在 Ansible playbook 中引用服务器的方式。

      特别是您可以完全跳过组定义而只定义:

      server1 ansible_host=141.151.176.223
      

      【讨论】:

      • 谢谢你。我不知道我用错了 Ansible。我已经修复了我的库存:)
      • 如果你能提供准确的语法如何访问真的很感激
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多