2016-07-14 2 views
2

Я следующий словарюJinja2 доступа последней переменной с ключом

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

В моей анзибль, я хочу сделать следующее:

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

Однако, я не могу понять, как получить доступ к последним переменную, а затем используйте name ключ. Я не могу изменить словарь.

ответ

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" 
} 
+0

Этот не работал для меня на A2.0.1.0 – SztupY

+0

@SztupY, я тестировал 2.0.1.0, и он работает. Получали ли вы сообщения об ошибках? –

+0

, возможно, испортил это где-то в другом месте – SztupY

1

Я пробовал различные варианты, пытаясь сделать это в одной строке, используя last, map, attr и аналогичные фильтры, но все не удалось.

Использование промежуточной переменной работы, однако (с использованием анзибль 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 
+0

Я хотел бы иметь несколько вариантов принятия в SO. – doptimusprime

Смежные вопросы