Можно использовать пользовательский фильтр. Например,
$ cat filter_plugins/dict_utils.py
def dict_flatten(d, separator='.'):
out = {}
def flatten(x, name=''):
if type(x) is dict:
for a in x:
flatten(x[a], name + a + separator)
elif type(x) is list:
i = 0
for a in x:
flatten(a, name + str(i) + separator)
i += 1
else:
out[name[:-1]] = x
flatten(d)
return out
class FilterModule(object):
def filters(self):
return {
'dict_flatten': dict_flatten
}
Задача
- debug:
msg: "{{ sql|dict_flatten }}"
дает
"msg": {
"alter_table": true,
"store.driver": "org.postgresql.Driver",
"store.url": "jdbc:postgresql://localhost:5432/db"
}
Предварительно добавьте имя переменной, чтобы получить требуемый вывод. Например
- set_fact:
my_dict: "{{ {}|combine({'sql': sql}) }}"
- debug:
msg: "{{ my_dict|dict_flatten }}"
дать
"msg": {
"sql.alter_table": true,
"sql.store.driver": "org.postgresql.Driver",
"sql.store.url": "jdbc:postgresql://localhost:5432/db"
}