带有循环的 Ansible vmware_host_facts

带有循环的 Ansible vmware_host_facts

我正在尝试获取多个 ESXi 主机上的所有数据存储的列表(它们都位于不同的 vCenter,因此我必须使用带有字典的循环来获取 ESXi 主机的正确 vCenter,否则主机不会出现)

我的问题是试图理解输出。我读过文档,但似乎找不到一个清晰的方法来获得我想要的输出。请考虑文档中的以下内容作为工作示例 - 在一个 ESXi 主机上。

- name: Gather vmware host facts from vCenter
  vmware_host_facts:
    hostname: "{{ vcenter_server }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    esxi_hostname: "{{ esxi_hostname }}"
  register: host_facts
  delegate_to: localhost
- debug:
    var: host_facts['ansible_facts']['ansible_datastore']

在我的示例中,我添加了一个循环来获取正确的组合:

- name: Gather vmware host facts from vCenter
  vmware_host_facts:
    hostname: "{{ item.vcs }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    esxi_hostname: "{{ item.host }}"
  register: host_facts
  delegate_to: localhost
  loop:
     - { host: 'mtboskt1bl07.oam.eeint.co.uk', vcs: 'vmtvcsakt01.oam.eeint.co.uk' }
     - { host: 'mtaoskt1bl10.oam.eeint.co.uk', vcs: 'vmtvcsakt01.oam.eeint.co.uk' }

变量“host_facts”是一个包含三个条目的字典:信息已更改结果

如果我访问结果- 这是一份字典列表,但我似乎无法访问任何条目。

我查看了“子元素”文档,但不知道该如何在这里应用它。有人能进一步帮助我吗?

答案1

您所指的元素是results(带 的复数s),如文档

当您在具有循环的任务中注册变量时,注册的变量将包含循环中每一项的值。循环期间放置在变量中的数据结构将包含一个results属性,即模块的所有响应的列表。有关其工作原理的更深入的示例,请参阅循环关于使用寄存器循环的部分。

在您的例子中,循环包含两次迭代。以上面的 var 示例为例,第一次迭代的循环等效于:

- debug:
    var: host_facts.results[0].ansible_facts.ansible_datastore

如果您想要获取上一个循环收集的所有数据存储,您可以循环结果:

- debug:
    var: item.ansible_facts.ansible_datastore
  loop: "{{ host_facts.results }}"

相关内容