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.

¿Cómo usamos regex_replace para manipular una lista con Ansible?

Tengo los siguientes datos:

servidores:
– server1\instance1
– server2\instance2
– server2\instance3

Necesito iterar a través de cada elemento de la lista y eliminar todos los caracteres después y incluyendo la barra inversa. Después de esto, necesito eliminar duplicados y tener los valores únicos definidos en otra lista:

hosts:
– server1
– server2

Este es mi playbook actual:

  • name: Obtener hosts únicos
    hosts: localhost
    connection: local
    gather_facts: no
    vars:
    hosts: “{{servers | map(‘regex_replace’, ‘\\.*$’, ”) | list | unique }}”
    tasks:

    • debug:
      msg: “{{ hosts }}”

Actualmente, cuando ejecuto el playbook, obtengo el siguiente error:

Ocurrió una excepción no controlada mientras se plantillaba ‘{{servers | map(‘regex_replace’, ‘\\.*$’, ”) | list | unique }}’. El error fue una , el mensaje original es: referencia de grupo no válida 1 en la posición 1

Entiendo que esto probablemente se deba a la forma en que he escrito las expresiones regulares. Agradezco si alguien puede guiarme en la dirección correcta.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás teniendo un problema con la expresión regular que estás utilizando en tu playbook. El filtro regex_replace requiere una expresión regular válida como primer argumento. La expresión que estás utilizando no es válida, ya que le falta una referencia de grupo.

    En su lugar, puedes utilizar la siguiente expresión: '(.*)\\.*$'. Esta expresión capturará los caracteres antes de la barra invertida en un grupo, y luego reemplazará toda la coincidencia con la referencia de grupo.

    Tu playbook debería verse así:

    - name: Obtener hosts únicos
      hosts: localhost
      connection: local
      gather_facts: no
      vars:
        hosts: "{{ servers | map('regex_replace', '(.*)\\\\.*$', '\\1') | list | unique }}"
      tasks:
        - debug:
            msg: "{{ hosts }}"
    

Comments are closed.