es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“Flattening” una lista en una clave/valor de diccionario en Ansible

Tengo un conjunto de datos yaml de la siguiente manera:

- order_number: 1
  name: 7zip
  unique_id: uid_1637333977
  parameters:
    - msi_file_name: 7z2104-x64.msi
    - msi_file_path: c:\users\zztest\7z2104-x64.msi
    - msi_file_directory: c:\users\zztest

Estoy intentando definir un nuevo hecho solo con “parameters”, pero no quiero que sea una lista, sino una colección de claves y valores de diccionario.

Por ejemplo:

new_variable: {
  msi_file_name: 7z2104-x64.msi
  msi_file_path: c:\users\zztest\7z2104-x64.msi
  msi_file_directory: c:\users\zztest
}

¿Cómo puedo hacer para devolver “parameters” como un diccionario definido con claves y valores en lugar de una lista de claves y valores?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir la lista de “parámetros” en un diccionario con pares clave/valor, puedes utilizar el filtro “from_items” en Jinja2. A continuación te mostramos un ejemplo de código en Ansible para lograr esto:

    - name: Convertir la lista de parámetros en un diccionario
      set_fact:
        new_variable: "{{ dict(parameters | map('items') | sum(start=[])) }}"
      vars:
        parameters: "{{ item.parameters }}"
      loop: "{{ data }}"
    
    - debug:
        var: new_variable
    

    En este código, primero utilizamos el filtro “map” para convertir cada elemento de la lista de “parámetros” en un diccionario con pares clave/valor utilizando el método “items”. Luego utilizamos el filtro “sum” con “start=[]” para concatenar todos estos diccionarios en una sola lista de pares clave/valor. Finalmente, utilizamos el filtro “dict” para convertir esta lista en un diccionario.

    El resultado de la variable “new_variable” será un diccionario con los pares clave/valor de la lista de “parámetros”.

Comments are closed.