2016-12-15 7 views
1

Рассмотрите следующую игру. То, что я пытаюсь сделать, это добавить поле, tmp_path, которое в основном является ключом и ревизией, прилагаемой к каждому элементу в скриптах dict.Добавление поля в элементы dict

--- 
- hosts: localhost 
    connection: local 
    gather_facts: no 
    vars: 
    scripts: 
     a.pl: 
     revision: 123 
     b.pl: 
     revision: 456 
    tasks: 
    - with_dict: "{{ scripts }}" 
     debug: 
     msg: "{{ item.key }}_{{ item.value.revision }}" 
#  - with_items: "{{ scripts }}" 
#  set_fact: {{item.value.tmp_path}}="{{item.key}}_{{item.value.revision}}" 
#  - with_items: "{{ scripts }}" 
#  debug: 
#   msg: "{{ item.value.tmp_path }}" 
... 

Очевидно, что прокомментированный код не работает, любая идея, как я могу заставить это работать? Можно ли напрямую изменять скрипты dict, или мне нужно каким-то образом создать новый dict для ссылки?

К слову, добро пожаловать, чтобы исправить терминологию для того, что я пытаюсь сделать.

ответ

0

ОК, я думаю, что я получил решение (ниже), по крайней мере, чтобы позволить мне двигаться вперед с этим. Недостатки в том, что он удалил структуру моего dict и также кажется немного избыточным, чтобы переопределить все поля и использовать новую переменную. Если кто-то может предоставить лучшее решение, я соглашусь с этим.

--- 
- hosts: localhost 
    connection: local 
    gather_facts: no 
    vars: 
    scripts: 
     a.pl: 
     revision: 123 
     b.pl: 
     revision: 456 
    tasks: 
    - with_dict: "{{ scripts }}" 
     debug: 
     msg: "{{ item.key }}_{{ item.value.revision }}" 
    - with_dict: "{{ scripts }}" 
     set_fact: 
     new_scripts: "{{ (new_scripts | default([])) + [ {'name': item.key, 'revision': item.value.revision, 'tmp_path': item.key ~ '_' ~ item.value.revision}] }}" 
#  - debug: 
#   var: x 
#  - with_dict: "{{ scripts }}" 
    - with_items: "{{ new_scripts }}" 
     debug: 
     msg: "{{ item.tmp_path }}" 
... 

BTW кредит на следующий вопрос, который указал мне в правильном направлении: Using Ansible set_fact to create a dictionary from register results