如何从明显的事实中提取特定的价值

时间:2019-01-25 12:16:46

标签: ansible virtual-machine

ansible的新手,学习如何处理任务返回的数据。我正在尝试从以下返回的数据(这是一个片段)中提取IP地址:

"vmfacts": {
  "changed": false, 
  "failed": false, 
  "virtual_machines": {
      "Alpha-0": {
          "cluster": "GPLAB-Compute01", 
          "esxi_hostname": "gplab-esxi02.gplab.com", 
          "guest_fullname": "Other Linux (64-bit)", 
          "ip_address": "192.168.0.1", 

如果我运行

- debug:
    var: vmfacts.virtual_machines

我得到了VM的完整词典,这很好。但是我如何获得Alpha-0 VM的IP地址?我尝试了多种变体来获取值,但似乎无法获得它。我敢肯定这很简单!

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决嵌套字典中的子键。如您所见,可以通过用点分隔每个键来引用一个子键。但是,这实际上是简写,而且在各种情况下它都不起作用。

我猜您已经尝试过点方法,并且遇到了问题,因为“ Alpha-0”包含一个“-”,这是YAML中的重要字符,用于标识列表项。

长格式版本是用['']包装每个键(如果使用的是包含键名的变量,则不需要单引号),因此在您的情况下,这应该可行:

- debug:
    var: vmfacts['virtual_machines']['Alpha-0']['ip_address']