所以,这是设置。
我通过额外的vars将FQDN列表传递给了剧本,但是控制机器的键被复制了相应的IP地址。此外,他们在清单中没有特定的这些组。
这个剧本的主持人是一个服务器,它可能是也可能不是我通过额外的vars传递的列表的一部分。因此,剧本并没有任何关于这些节点的事实。
所以,我的问题是我如何动态获取相应主机的IP地址,以便我可以循环它们对我通过另一个剧本使用FQDN设置的某些属性进行一些检查/角色以前。 (注意:我严格要求FQDN设置这些属性)
我已经使用了delegate_to模块,并且传递了FQDN并且它可以工作,但是它询问我是否要继续连接(是/否)并等待初始运行的用户输入(如果给定是,它可以作为预期)。他们还有其他更简单,更清洁的方法来解决这个问题吗?
(注意:请记住,我不能修改库存内容,如放别名等)
- name: Checks
become_user: hdfs
shell: hdfs dfsadmin –report
delegate_to: "{{ item.host_name }}"
with_items:
- "{{rackDetails}}"
- name: Checks for the property
hosts: servernode
roles:
- Checks
[servernode]
10.0.2.15 ansible_ssh_user = grant ansible_ssh_pass = grant
[全部]
10.0.2.15 ansible_ssh_user = grant ansible_ssh_pass = grant
10.0.2.16 ansible_ssh_user = grant ansible_ssh_pass = grant
10.0.2.17 ansible_ssh_user = grant ansible_ssh_pass = grant
10.0.2.18 ansible_ssh_user = grant ansible_ssh_pass = grant
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"}]}
答案 0 :(得分:2)
我想知道delegate_to
是否有效,如果主机作为额外的vars传递但不能存在于库存中。
无论如何,您可以使用dig
查找插件:
http://docs.ansible.com/ansible/playbooks_lookups.html#the-dns-lookup-dig
{{ lookup('dig', item.host_name) }}
答案 1 :(得分:0)
我认为您想要的是将这些转换为FQDN到IP地址并将它们放入-l
(限制)到剧本中:
ansible-playbook my_playbook -l $( getent hosts $( cat fqdns.txt ) | cut -d' ' -f1 | tr '\n' ',' )