我正在尝试获取跨多个 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' }
var 'host_facts' 是一个包含三个条目的字典:msg、changed和result。
如果我访问结果- 它是一个字典列表,但我似乎无法访问任何条目。
我查看了“子元素”文档,但看不到如何在此处应用它。任何人都可以进一步帮助我?
如文档中所述,您所指的元素是
results
(复数)s
在您的情况下,您的循环包含两次迭代。以您上面的 var 示例为例,第一次迭代的循环等效项是:
如果您想获取从前一个循环收集的所有数据存储,您可以循环结果: