【发布时间】:2023-02-15 06:00:06
【问题描述】:
我正在编写一个简单的剧本,以使用 ansible 从 vmware 获取所有提供的 vm 名称的 UUID。
我可以使用 var: vm_info.results 获取所有 vm 的输出,但我只需要 UUID。我尝试var: vm_info.results.instance.instance_uuid 但它不起作用。输出如下。
TASK [print VM UUID] **************************************************************************************************************************
ok: [localhost] => (item=server01) => {
"ansible_loop_var": "item",
"item": "server01",
"vm_info.results.instance.instance_uuid": "VARIABLE IS NOT DEFINED!"
}
ok: [localhost] => (item=server02) => {
"ansible_loop_var": "item",
"item": "server02",
"vm_info.results.instance.instance_uuid": "VARIABLE IS NOT DEFINED!"
}
下面是我的 yaml 文件。
---
- name: Vm UUID Play
hosts: localhost
become: false
gather_facts: false
pre_tasks:
- include_vars: vars/vmw-vmguest.yaml
tasks:
-
name: Get Vm UUID
vmware_guest_info:
hostname: '{{ vsphere_host }}'
username: '{{ vsphere_user }}'
password: '{{ vsphere_password }}'
validate_certs: no
datacenter: '{{ vsphere_datacenter }}'
name: '{{ item }}'
register: vm_info
with_items: '{{ virtual_machines }}'
-
name: print VM UUID
debug:
var: vm_info.results
#var: vm_info.instance.instance_uuid
with_items: '{{ virtual_machines }}'
【问题讨论】:
-
vm_info.results是一个列表每次迭代的dict,因此你不能说results.instance它必须是results[SOME_VAR].instance或以其他方式更改with_items: "{{ vm_info.results }}"而不是像你一样迭代virtual_machines