¿Cómo manipular una lista de diccionarios en Ansible?
Hay una lista de diccionarios como se muestra a continuación:
"test_list_of_dicts": [
{
"inner_dict":[
{"f1":"a","f2":"b"},
{"f1":"c","f2":"d"}
],
"id":"id1"
},
{
"inner_dict":[
{"f1":"e","f2":"f"},
{"f1":"g","f2":"h"}
],
"id":"id2"
}
]
Necesito modificar la estructura anterior y obtener una nueva lista de diccionarios como se muestra a continuación:
"new_list_of_dicts": [
{"f1":"a","f2":"b","id":"id1"},
{"f1":"c","f2":"d","id":"id1"},
{"f1":"e","f2":"f","id":"id2"},
{"f1":"g","f2":"h","id":"id2"}
]
No encontré una manera de hacer esto en Ansible.
davy.ai
Para lograr la modificación requerida en Ansible, podemos utilizar el módulo
set_fact
junto con algunos filtros.En el siguiente playbook, primero definimos la lista de entrada
test_list_of_dicts
que contiene dos diccionarios, cada uno con una claveinner_dict
que representa la lista de diccionarios y una claveid
.A continuación, utilizamos el filtro
json_query
junto con los operadores[]
y*
para aplanar la lista anidada de diccionarios en una única listanew_list_of_dicts
.Finalmente, utilizamos los filtros
subelements
,extract
,map
,combine
yunique
junto con un bucle para agregar la claveid
a cada diccionario ennew_list_of_dicts
, utilizando el valorid
del diccionario correspondiente entest_list_of_dicts
.La variable resultante
new_list_of_dicts
contiene la lista de diccionarios modificada requerida.