Cómo obtener el formato de clave-valor de un diccionario utilizando Jinja2 en Ansible mediante el módulo debug o set fact.
Tengo la siguiente salida:
TAREA [depurar] *******************************************************************
ok: [1.1.1.1] => {
"msg": [
{
"DESCRIP": "server-abc",
"PORT": "Po3",
"PROTOCOL": "up",
"STATUS": "up"
},
{
"DESCRIP": "Leaf-1",
"PORT": "Po4",
"PROTOCOL": "up",
"STATUS": "up"
},
{
"DESCRIP": "server-xyz",
"PORT": "Po1",
"PROTOCOL": "up",
"STATUS": "up"
},
{
"DESCRIP": "Leaf-2",
"PORT": "Po2",
"PROTOCOL": "up",
"STATUS": "up"
}
]
}
Quiero obtener / imprimir solo los bloques que contienen "Leaf" en DESCRIP y "Po" en PORT. Para hacer esto, tengo la siguiente depuración con jinja2:
- depurar:
msg: >-
{%- for item in output.parsed -%}
{%- if ('Leaf' in item.DESCRIP) and ('Po' in item.PORT) -%}
"DESCRIP": {{item.DESCRIP}},
"PORT": {{item.PORT}}
{%- endif -%}
{%- endfor -%}
Estoy obteniendo la siguiente salida imprimiendo todo en una sola línea:
TAREA [depurar] *******************************************************************
ok: [10.2.4.1] => {
"msg": "\"DESCRIP\": Leaf-1,\n \"PORT\": Po4\"\"DESCRIP\": Leaf-2,\n \"PORT\": Po2"
}
Lo que quiero es el formato clave-valor del diccionario/formato JSON. como se muestra a continuación:
[{
"DESCRIP": "Leaf-1",
"PORT": "Po4",
},
{
"DESCRIP": "Leaf-2",
"PORT": "Po2",
} ]
Cómo/qué debo modificar en la sección msg de mi depuración para obtener la salida anterior
davy.ai
Para obtener la salida deseada en formato de clave y valor del diccionario, puedes modificar la sección de mensajes de depuración de la siguiente manera:
Esto filtrará la lista en base a la condición de que ‘Leaf’ esté en DESCRIP y ‘Po’ esté en PORT, luego utiliza los filtros map y attribute para crear un diccionario con DESCRIP y PORT como claves y valores respectivamente. Finalmente, se utiliza el filtro list para convertirlo de nuevo en una lista.