Как обрабатывать цикл в цикле
Подскажите пожалуйста. Имеем список переменных в плейбуке:
var:
SERVICE:
service1:
- 1.txt
- 2.txt
- 3.txt
service2:
- 4.txt
- 5.txt
- 6.txt
- 7.txt
service3:
- 8.txt
- 9.txt
- 10.txt
Необходимо в зависимости от того, с какими списками файлов мы хотим работать, итерировать каждый элемент списка. На вход плейбуку через extra-vars передаём список желаемых сервисов:
-e '{"service_name":["service1","service3"]}'
Есть дебаг таска:
- debug:
var: "{{ item }}"
loop: "{{ service_name | map('extract', SERVICE) | list }}"
Получаем следующий вывод:
ok: [localhost] => (item=['1.txt', '2.txt', '3.txt']) => {
"<class 'list'>": "VARIABLE IS NOT DEFINED!",
"ansible_loop_var": "item",
"item": [
"1.txt",
"2.txt",
"3.txt"
]
}
ok: [localhost] => (item=['8.txt', '9.txt', '10.txt']) => {
"<class 'list'>": "VARIABLE IS NOT DEFINED!",
"ansible_loop_var": "item",
"item": [
"8.txt",
"9.txt",
"10.txt"
]
}
В item содержится то, что необходимо, но итерируется список который мы передаем на вход а не объекты в нем.
Мне нужно, чтобы вывод был примерно такой, т.е. для каждого item из списка сервисов {{ service_name }} перебирался каждый item из списка переменных:
ok: [localhost] => (item=1.txt) => {
"1.txt": "VARIABLE IS NOT DEFINED!",
"ansible_loop_var": "item",
"item": "1.txt"
}
ok: [localhost] => (item=2.txt) => {
"2.txt": "VARIABLE IS NOT DEFINED!",
"ansible_loop_var": "item",
"item": "2.txt"
}
ok: [localhost] => (item=3.txt) => {
"3.txt": "VARIABLE IS NOT DEFINED!",
"ansible_loop_var": "item",
"item": "3.txt"
}
Если делать так:
- debug:
var: "{{ item }}"
loop: "{{ service_name }}"
И передавать: -e '{"service_name":["service1","service3"]}'
то возникает ошибка:
fatal: [localhost]: FAILED! => {"msg": "'dict object' has no attribute 'service_name'"}
не воспринимает как переменную.