Цель
Я пытаюсь добавить строку в список, принадлежащий ключу, который находится на несколько уровней ниже в словаре.
Объяснение
Я инициализирую пустой список, скрытый внутри некоторой ранее существовавшей переменной с именем info:
tasks:
- set_fact:
info: "{{ info | combine( { host: { repo: { folders: [] }}}, recursive=true ) }}"
В более поздней задаче я sh добавляю к нему строку пустой список. Это может произойти в нескольких задачах, поэтому я не хочу заменять пустой список, но добавляю его по мере необходимости. В настоящее время я пытаюсь сделать это:
tasks:
- set_fact:
info: "{{ info | combine( { 'host': { 'repo': { 'folders': [] }}}, recursive=true ) }}"
- set_fact:
info: "{{ info.host.repo.folders + ['ERROR. folderX does not exist'] }}"
when: folderX does not exist
- set_fact:
info: "{{ info.host.repo.folders + ['ERROR. folderY does not exist'] }}"
when: folderY does not exist
Однако я получаю сообщение об ошибке шаблона:
FAILED! => {"msg": "template error while templating string: expected name or number. String: {{ info.host.repo.folder + ['ERROR. folderX does not exist'] }}"}
Я знаю, что вы можете просто добавлять элементы в список, когда пункт назначения находится на самом верхнем уровне . Например:
- set_fact:
folders: []
- set_fact:
folders: "{{ folders + ['ERROR. folderX does not exist'] }}"
when: folderX does not exist
- set_fact:
folders: "{{ folders + ['ERROR. folderY does not exist'] }}"
when: folderY does not exist
- debug: var=folders
Что при желании дает:
TASK [debug] ***************************************************************************************************
"folders": [
"ERROR. folderX does not exist",
"ERROR. folderY does not exist"
]
Итак, как изменяется синтаксис, когда я пытаюсь спуститься по нескольким уровням и получить доступ к списку, который находится в вложенный словарь? Спасибо!