Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

642
Vistas
Permitir valores nulos o vacíos en una variable usando Ansible

Tengo este fragmento de código que verifica si la variable "propietario" coincide con la siguiente expresión regular y acepta que no está definida, es decir, el libro de jugadas puede funcionar sin que se pase esa variable.

 varexample is undefined or varexample is match('^[a-zA-Z]+$')

Lo que me gustaría hacer es que esta variable acepte valores vacíos o nulos. Lo que probé es algo como esto.

 varexample is null or varexample is match('^[a-zA-Z]+$')

Pero tengo este error:

 The conditional check 'varexample is null or varexample is match('[a-zA-Z]+')' failed. The error was: template error while templating string: no test named 'null'. String: {% if varexample is null or varexample is match('[a-zA-Z]+') %} True {% else %} False {% endif %}

¿Alguien puede darme una pista o alguna ayuda?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

P: "la variable acepta valores nulos "

R: Es un error. Ansible no debería coincidir con nulo en '^[a-zA-Z]+$'

 - set_fact: varexample: - debug: var: varexample - debug: msg: "undefined: {{ varexample is undefined }}" - debug: msg: "match: {{ varexample is match('^[a-zA-Z]+$') }}"

da

 varexample: null msg: 'undefined: False' msg: 'match: True'

Como resultado de este error, su condición debería funcionar como se esperaba

 varexample is undefined or varexample is match('^[a-zA-Z]+$')

Para estar del lado de guardar, en el caso de que se solucione el error, también puede probar None , por ejemplo

 - debug: msg: "Test passed. varexample: {{ item.varexample }}" when: item.varexample is undefined or item.varexample == None or item.varexample is match('^[a-zA-Z]+$') loop: - varexample: ABC - varexample: 123 - varexample:

da

 ok: [localhost] => (item={'varexample': 'ABC'}) => msg: 'Test passed. varexample: ABC' skipping: [localhost] => (item={'varexample': 123}) ok: [localhost] => (item={'varexample': None}) => msg: 'Test passed. varexample: '

Detalles

 - debug: msg: | Undefined: {{ item.varexample is undefined }} Is None: {{ item.varexample == None }} Match a-zA-Z: {{ item.varexample is match('^[a-zA-Z]+$') }} loop: - varexample: ABC - varexample: 123 - varexample:
 ok: [localhost] => (item={'varexample': 'ABC'}) => msg: |- Undefined: False Is None: False Match a-zA-Z: True ok: [localhost] => (item={'varexample': 123}) => msg: |- Undefined: False Is None: False Match a-zA-Z: False ok: [localhost] => (item={'varexample': None}) => msg: |- Undefined: False Is None: True Match a-zA-Z: True
over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente use un default que su match consideraría verdadero.

Por ejemplo; con un varexample | default('a') is match('^[a-zA-Z]+$') , debería poder lograr lo que está buscando.

Dadas las tareas:

 - debug: msg: "for {{ item }} the result is {{ item | default('a') is match('[a-zA-Z]+') }}" loop: "{{ cases }}" vars: cases: - ~ - 123 - abc - - debug: msg: "for an undefined variable the result is {{ item | default('a') is match('[a-zA-Z]+') }}"

Esto produce:

 TASK [debug] **************************************************************************** ok: [localhost] => (item=None) => msg: for the result is True ok: [localhost] => (item=123) => msg: for 123 the result is False ok: [localhost] => (item=abc) => msg: for abc the result is True ok: [localhost] => (item=None) => msg: for the result is True TASK [debug] **************************************************************************** ok: [localhost] => msg: for an undefined variable the result is True
over 4 years ago · Santiago Trujillo Denunciar

0

Creo que la respuesta más cercana a exactamente lo que pediste es algo como:

 varexample is defined and varexample is match('^[a-zA-Z]+$')

También puede usar "no está definido", o simplemente proporcionar un valor predeterminado como se menciona en la otra respuesta es otra buena manera de hacerlo.

 varexample|default('') is match('^[a-zA-Z]+$')
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda