首页 > 解决方案 > 如何从 ansible 事实中提取特定值

问题描述

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

我得到了完整的虚拟机字典,这很好。但是我如何获得 Alpha-0 虚拟机的 IP 地址?我尝试了多种变体来提取价值,但我似乎无法得到它。我相信这很简单!

标签: ansiblevirtual-machine

解决方案


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

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

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

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

推荐阅读