从Ansible结构中获取价值

时间:2015-12-22 17:21:47

标签: ansible

使用debug运行playbook时,我有以下输出:

TASK: [debug lb data]    ***********************************
ok: [localhost] => {
    "var": {
        "lb": {
            "balancer": {
                "algorithm": "LEAST_CONNECTIONS",
                "contentCaching": {
                    "enabled": false
                }
                "virtual_ips": [
                    {
                         "address": "10.0.0.1",
                         "id": 123,
                         "ip_version": "IPV4",
                         "type": "PUBLIC"
                    }
                ]
            }
     }
}

如何获得变量“地址”,以便以后可以将其用作另一个变量的输入?

例如:

- name: Create A record
  local_action:
    data: "{{ address }}"
    type: A

谢谢。

2 个答案:

答案 0 :(得分:0)

你可以像这样使用它:

- name: Create A record local_action: data: "{{ lb.balancer.virtual_ips.address }}" type: A

这是来自ansible docs的文档:

  

访问复杂的可变数据

     

我们已经在文档中谈到了更高的事实。

     

某些提供的事实(如网络信息)可用作嵌套数据结构。要访问它们,一个简单的{{foo}}是不够的,但它仍然很容易做到。以下是我们获取IP地址的方式:

   {{ ansible_eth0["ipv4"]["address"] }}
     

或者:

   {{ ansible_eth0.ipv4.address }}
     

同样,这是我们访问数组的第一个元素的方式:

   {{ foo[0] }}

答案 1 :(得分:0)

我还发现这很好用:

{{hostvars[inventory_hostname]['ansible_dns']['nameservers'][0]}}

使用

{{hostvars[inventory_hostname]['ansible_dns']['nameservers']}}

将包括一些其他令人讨厌的字符:-)