【发布时间】:2017-12-05 02:06:44
【问题描述】:
我有两个剧本 - 我的第一个剧本在 ESXi 服务器列表上迭代,获取所有 VM 的列表,然后将该列表传递给第二个剧本,它应该在 VM 的 IP 上进行迭代。相反,它仍在尝试在最后一个 ESXi 服务器上执行。我必须将主机切换到我当前传递给第二个剧本的那个 VM IP。不知道如何切换...有人吗?
第一个剧本:
- name: get VM list from ESXi
hosts: all
tasks:
- name: get facts
vmware_vm_facts:
hostname: "{{ inventory_hostname }}"
username: "{{ ansible_ssh_user }}"
password: "{{ ansible_ssh_pass }}"
delegate_to: localhost
register: esx_facts
- name: Debugging data
debug:
msg: "IP of {{ item.key }} is {{ item.value.ip_address }} and is {{ item.value.power_state }}"
with_dict: "{{ esx_facts.virtual_machines }}"
- name: Passing data to include file
include: includeFile.yml ip_address="{{ item.value.ip_address }}"
with_dict: "{{ esx_facts.virtual_machines }}"
我的第二本剧本:
- name: <<Check the IP received
debug:
msg: "Received IP: {{ ip_address }}"
- name: <<Get custom facts
vmware_vm_facts:
hostname: "{{ ip_address }}"
username: root
password: passw
validate_certs: False
delegate_to: localhost
register: custom_facts
我确实收到了正确的 VM 的 ip_address,但 vmware_vm_facts 仍在尝试在 ESXi 服务器上运行...
【问题讨论】:
-
首先,请使用适当的术语:您有一本剧本,一部剧本,并包含一个任务文件。所以你声称你将任务委托给本地主机,但它在其他地方执行?如果是这样,您可以削减您发布的代码的 80% 并获得相同的结果。
-
此外,
<<Get custom facts任务将针对清单中的所有目标运行多次,但这不是它正在执行的位置。您可能会因误读日志而感到困惑。 -
当然,以这种方式运行
vmware_vm_facts两次的整个想法似乎很奇怪。
标签: ansible ansible-facts