#ansible
Вопрос:
Я пытаюсь динамически создать список словарей на Ansible из выходящих переменных, которые называются аналогичным образом. Я действительно не могу изменить существующие переменные, так как они используются другими вещами в проекте.
Предполагая, что следующие переменные уже существуют:
item_1a: name: first test item value: 100 item_2a: name: second test item value: 200 options: extra item_zz: name: last test item option: nameless
Что мне нужно, чтобы динамически создавать из всех переменных с сопоставлением имен ^item_*
:
dynamic_list: - name: first test item value: 100 - name: second test item value: 200 options: extra - name: last test item option: nameless
Могу ли я каким-либо образом запросить шаблон vars по имени?
Комментарии:
1. Знаете ли вы об
vars.keys()
этом иhostvars["whatever-host"].keys()
?2. @mdaniel, да, вы также можете получить список ключей от varnames.
Ответ №1:
Например, приведенная ниже задача выполняет эту работу
- set_fact: dynamic_list: "{{ my_vars|map('extract', vars)|list }}" vars: my_vars: "{{ vars|select('match', '^item_.*
дает
dynamic_list: - name: first test item value: 100 - name: second test item options: extra value: 200 - name: last test item option: nameless
Комментарии:
1. Можете ли вы объяснить, почему необходим set_fact? Кроме того, в любом случае, чтобы не устанавливать каждую переменную как факт, по крайней мере?
2. set_fact не требуется. Положи его туда, куда хочешь.
Ответ №2:
В итоге я получил список следующим образом,
vars: varname_list: "{{ query(varnames, '^item_.*
дает
)|list }}"
Комментарии:
1. Можете ли вы объяснить, почему необходим set_fact? Кроме того, в любом случае, чтобы не устанавливать каждую переменную как факт, по крайней мере?
2. set_fact не требуется. Положи его туда, куда хочешь.
Ответ №2:
В итоге я получил список следующим образом,
) }}" dynamic_list: "{{ varname_list | map('extract', vars) | list }}"
)|list }}»дает
Комментарии:
1. Можете ли вы объяснить, почему необходим set_fact? Кроме того, в любом случае, чтобы не устанавливать каждую переменную как факт, по крайней мере?
2. set_fact не требуется. Положи его туда, куда хочешь.
Ответ №2:
В итоге я получил список следующим образом,