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.

Ansible verifica si el valor existe en la lista del diccionario.

A continuación se muestra mi lista de variables.

hostlist:
  - { name: 'host1', ip_addr: '192.168.2.31', hostgrp: 'physical_workstation' }
  - { name: 'host2', ip_addr: '192.168.2.32', hostgrp: 'physical_workstation' }
  - { name: 'host3', ip_addr: '192.168.2.33', hostgrp: 'virtual_machine' }

Intenté lo siguiente:

- name: Prueba condicional
  debug:
    msg: "Hola mundo"
  when: hostlist|selectattr("name", "equalto", "host1")|list|length != 0

Esto no funciona y muestra el siguiente error:

El error fue: TemplateRuntimeError: no hay una prueba llamada 'equalto'

Hay una solución de actualizar Jinja2, pero ¿hay algún otro método en lugar de usar selectattr? Prefiero no actualizar Jinja2.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay otro método para obtener la salida deseada sin usar selectattr.
    En su lugar, puedes usar el filtro select. Aquí tienes un ejemplo:

    - name: Prueba condicional
      debug:
        msg: "hola mundo"
      when: hostlist|select(lambda x: x.name == "host1")|list|length != 0
    

    Esto debería funcionar sin tener que actualizar Jinja2.

Comments are closed.