我有以下字典
myarr:
- name: test1
- name: test2
- name: test3
在我的ansible中,我想做以下事情:
lineinfile: dest=testfile line="var = {{myarr|last ['name']}}"
但是,我无法弄清楚如何访问最后一个变量,然后使用name
键。我无法修改我的字典。
答案 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)
我尝试了使用last
,map
,attr
和类似过滤器在一行中尝试各种选项,但都失败了。
然而,使用中间变量可以工作(使用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