Ansible Loop Over Custom Facts
У меня есть следующая структура в пользовательских фактах.
{
"ansible_local":{
"finance":{
"facts":{
"files":{
"file1":{
"dest":"/tmp/dir1",
"path":"/etc/finance/file1"
},
"file2":{
"dest":"/tmp/dir2",
"path":"/etc/finance/file2"
}
}
}
},
"marketing":{
"facts":{
"files":{
"file1":{
"dest":"/tmp/dir1",
"path":"/etc/finance/file1"
},
"file2":{
"dest":"/tmp/dir2",
"path":"/etc/finance/file2"
}
}
}
}
}
}
А также задача, которая перебирает элементы:
tasks:
- debug:
msg: "src: {{ item.value.path}} dest: {{ item.value.dest }}"
with_dict: "{{ ansible_local.finance.facts.files }}"
Мой вопрос, учитывая эту структуру, я всегда перебираю финансы. Что делать, если я хочу перебрать финансы и маркетинг и, возможно, больше элементов на этом уровне, предполагая, что я не знаю их имени, так же, как это делается в файлах элементов и единиц.
Большое спасибо за помощь.
2 ответа
Решение
Вы можете использовать запрос JMESPath:
- debug:
msg: "src: {{ item.path }} dest: {{ item.dest }}"
loop: "{{ ansible_local | json_query('[*.facts.files.*]') | flatten }}"
Вариант будет заключаться в цикле include_tasks
- include_tasks: inner.yml
loop: "{{ lookup('dict',ansible_local) }}"
loop_control:
loop_var: outer_item
$ cat inner.yml
- debug:
msg: "dest: {{ item.value.dest }} path: {{ item.value.path }}"
with_dict: "{{ outer_item.value.facts.files }}"