Jinja2用密钥访问最后一个变量

时间:2016-07-14 06:58:30

标签: ansible jinja2

我有以下字典

myarr:
  - name: test1
  - name: test2
  - name: test3

在我的ansible中,我想做以下事情:

lineinfile: dest=testfile line="var = {{myarr|last ['name']}}"

但是,我无法弄清楚如何访问最后一个变量,然后使用name键。我无法修改我的字典。

2 个答案:

答案 0 :(得分:2)

只需使用括号

var = {{(myarr|last)['name']}}

<强> playbook.yml

---
- hosts: localhost
  vars:
      myarr:
        - name: test1
        - name: test2
        - name: test3
  tasks:
    - debug:
        msg: "var = {{(myarr|last)['name']}}"

<强> $ ansible-playbook playbook.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "var = test3"
}

答案 1 :(得分:1)

我尝试了使用lastmapattr和类似过滤器在一行中尝试各种选项,但都失败了。

然而,使用中间变量可以工作(使用ansible 2.0.1.0):

<强> group_vars/all.yml

myarr:
  - name: test1
  - name: test2
  - name: test3

<强> play.yml

---
- hosts: localhost
  vars:
    - lastarr: "{{myarr|last}}"
  tasks:
    - debug:
        msg: "var = {{lastarr['name']}}"

<强> $ ansible-playbook -i localhost, play.yml

PLAY [localhost] ***************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "var = test3"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0