15

当我们检查主机变量时:

  - name: Display all variables/facts known for a host
    debug: var=hostvars[inventory_hostname]

我们得到:

ok: [default] => {
    "hostvars[inventory_hostname]": {
        "admin_email": "admin@surfer190.com", 
        "admin_user": "root", 
        "ansible_all_ipv4_addresses": [
            "192.168.35.19", 
            "10.0.2.15"
        ],...

我将如何指定"ansible_all_ipv4_addresses"列表的第一个元素?

4

3 回答 3

25

使用点符号

"{{ ansible_all_ipv4_addresses.0 }}"
于 2016-04-16T23:10:24.243 回答
8

这应该就像在 Python 中一样工作。这意味着您可以使用引号访问键和使用整数的索引。

  - set_fact:
      ip_address_1: "{{ hostvars[inventory_hostname]['ansible_all_ipv4_addresses'][0] }}"
      ip_address_2: "{{ hostvars[inventory_hostname]['ansible_all_ipv4_addresses'][1] }}"

  - name: Display 1st ipaddress
    debug:
      var: ip_address_1
  - name: Display 2nd ipaddress
    debug:
      var: ip_address_2
于 2016-04-16T22:51:00.000 回答
0

在尝试解析Ansible中的命令结果时,我遇到了同样的挑战。

所以结果是:

{
  "changed": true,
  "instance_ids": [
    "i-0a243240353e84829"
  ],
  "instances": [
    {
      "id": "i-0a243240353e84829",
      "state": "running",
      "hypervisor": "xen",
      "tags": {
        "Backup": "FES",
        "Department": "Research"
      },
      "tenancy": "default"
    }
    ],
    "tagged_instances": [],
  "_ansible_no_log": false
}

我想将值解析到ansible playbook 中state的寄存器中。result

我是这样做的

由于结果是散列数组的散列,即state在数组的 index ( 0) 散列中instances,我修改了我的剧本,使其看起来像这样:

---
- name: Manage AWS EC2 instance
  hosts: localhost
  connection: local
  # gather_facts: false
  tasks:
  - name: AWS EC2 Instance Restart
    ec2:
      instance_ids: '{{ instance_id }}'
      region: '{{ aws_region }}'
      state: restarted
      wait: True
    register: result

  - name: Show result of task
    debug:
      var: result.instances.0.state

我将命令的值保存register在一个名为的变量中result,然后state使用以下方法获取变量中的值:

result.instances.0.state

这次命令运行时,我得到的结果如下:

TASK [Show result of task] *****************************************************
ok: [localhost] => {
    "result.instances.0.state": "running"
}

就这样。

我希望这有帮助

于 2021-04-16T13:25:54.317 回答