Ansible:如何仅从Ansible中的FQDN获取IP地址?

Ansible:如何仅从Ansible中的FQDN获取IP地址?,ansible,ansible-inventory,ansible-facts,Ansible,Ansible Inventory,Ansible Facts,下面是设置 我正在通过额外的变量将FQDN列表传递给playbook,但控制机器的密钥会与其相应的IP地址一起复制。此外,他们的库存中没有具体的一组 这个剧本的主机是一个服务器,它可能是也可能不是我通过额外变量传递的列表的一部分。因此,剧本中没有这些节点的事实 因此,我的问题是如何动态获取各个主机的IP地址,以便我可以循环访问它们,以检查我以前通过另一个剧本/角色使用它们的FQDN设置的某些属性。(注意:我严格需要FQDN来设置这些属性) 我使用了delegate_to module,并传递了F

下面是设置

我正在通过额外的变量将FQDN列表传递给playbook,但控制机器的密钥会与其相应的IP地址一起复制。此外,他们的库存中没有具体的一组

这个剧本的主机是一个服务器,它可能是也可能不是我通过额外变量传递的列表的一部分。因此,剧本中没有这些节点的事实

因此,我的问题是如何动态获取各个主机的IP地址,以便我可以循环访问它们,以检查我以前通过另一个剧本/角色使用它们的FQDN设置的某些属性。(注意:我严格需要FQDN来设置这些属性)

我使用了delegate_to module,并传递了FQDN,它可以工作,但它会询问我是否要继续连接(是/否),并等待用户输入初始运行(如果给出是,它会按预期工作)。他们还有其他更简单、更干净的方法来解决这个问题吗
(注意:请记住,我不能修改库存的内容,如放置别名等)

下面是代码片段:
下面是调用上述角色的主yml文件片段:
清单代码片段如下所示:
[servernode]
10.0.2.15 ansible\u ssh\u用户=授予ansible\u ssh\u通行证=授予
[全部]
10.0.2.15 ansible\u ssh\u用户=授予ansible\u ssh\u通行证=授予
10.0.2.16 ansible\u ssh\u用户=授予ansible\u ssh\u通行证=授予
10.0.2.17 ansible\u ssh\u用户=授予ansible\u ssh\u通行证=授予
10.0.2.18 ansible\u ssh\u用户=授予ansible\u ssh\u通行证=授予
10.0.2.19 ansible\u ssh\u用户=授予ansible\u ssh\u通行证=授予

最后,这就是我通过额外变量传递的内容:
相反,我认为您想要的是将这些FQDN转换为IP地址,并将它们放入剧本的
-l
(限制):

ansible-playbook my_playbook -l $( getent hosts $( cat fqdns.txt ) | cut -d' ' -f1 | tr '\n' ',' )

我想知道,如果主机作为额外的变量传递,但不在库存中,那么
delegate\u to
是否有效

无论如何,您可以使用
dig
lookup插件:


这里有一个答案。不幸的是,我无法理解您的问题。@techraf请让我知道您不理解问题的哪一部分,以便我能更好地说明。除了“如何获取IP地址”之外,我不清楚所有内容。委托_工作,只是初始运行要求用户输入以继续连接(是/否),因为我猜,ansible不知道fqdn,只知道它们的IP地址。从第二次运行开始,我得到了预期的输出。
- name: Checks for the property
  hosts: servernode
  roles:
    - Checks
{"rackDetails":[{"host_name":"prod_node1.paas.com","rack_name":"/rack1"},{"host_name":"prod_node2.paas.com","rack_name":"/rack2"},{"host_name":"prod_node3.paas.com","rack_name":"/rack3"}]}
ansible-playbook my_playbook -l $( getent hosts $( cat fqdns.txt ) | cut -d' ' -f1 | tr '\n' ',' )
{{ lookup('dig', item.host_name) }}