¿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 }}”
- debug:
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
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.
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í: