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

Gir*_*ane 2 ansible ansible-facts ansible-inventory

所以,这是设置。

我通过额外的变量将 FQDN 列表传递给剧本,但控制机器的密钥与其对应的 IP 地址一起复制。此外,它们在清单中也没有特定的一组。

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

所以,我的问题是如何即时获取各个主机的 IP 地址,以便我可以遍历它们以对我之前通过另一个剧本/角色使用它们的 FQDN 设置的某些属性进行一些检查。(注意:我严格需要 FQDN 来设置这些属性)

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

以下是代码片段:

- name: Checks
  become_user: hdfs
  shell: hdfs dfsadmin –report
  delegate_to: "{{ item.host_name }}"
  with_items:
    - "{{rackDetails}}"
Run Code Online (Sandbox Code Playgroud)

这是主 yml 文件的片段,其中调用了上述角色:

- name: Checks for the property
  hosts: servernode
  roles:
    - Checks
Run Code Online (Sandbox Code Playgroud)

库存代码片段如下所示:

[servernode]
10.0.2.15 ansible_ssh_user =授予ansible_ssh_pass =许可
[全部]
10.0.2.15 ansible_ssh_user =授予ansible_ssh_pass =授权
10.0.2.16 ansible_ssh_user =授权ansible_ssh_pass =授权
10.0.2.17 ansible_ssh_user =授权ansible_ssh_pass =授权
10.0.2.18 ansible_ssh_user =授权ansible_ssh_pass =授予
10.0.2.19 ansible_ssh_user=grant ansible_ssh_pass=grant

最后,这就是我通过额外变量传递的内容:

{"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"}]}
Run Code Online (Sandbox Code Playgroud)

Chr*_*Lam 5

我想知道如果delegate_to主机作为额外的变量传递但不在库存中是否有效。

无论如何,您可以使用dig查找插件:http : //docs.ansible.com/ansible/playbooks_lookups.html#the-dns-lookup-dig

{{ lookup('dig', item.host_name) }}
Run Code Online (Sandbox Code Playgroud)