Problema con la plantilla de variables ansibles

Problema con la plantilla de variables ansibles

Tengo una plantilla en Ansible para crear un archivo de configuración para Prometheus. Me gustaría agregar hosts dinámicamente, usando variables prometheus_hosts. Esta variable está definida en host_vars para cada host, pero probablemente Ansible tenga algún problema con la plantilla.

La variable se establece como:prometheus_hosts: [ host1, host2, host3 ]

La plantilla

global:
    scrape_interval: 15s

global:
    scrape_interval: 15s

scrape_configs:
- job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
       - targets: ['localhost:9090']

{% if prometheus_hosts is defined %}
{% for host in prometheus_hosts %}
- job_name: '{{ host }}'
    scrape_interval: 5s
    static_configs:
       - targets: ['{{ host }}:9100']
{% endfor %}
- job_name: 'mysql'
    scrape_interval: 5s
    static_configs:
       - targets: ['localhost:9104']
- job_name: 'redis'
    scrape_interval: 5s
    static_configs:
       - targets: ['localhost:9121']

{% for host in prometheus_hosts if host.name.startswith('edge') %}
- job_name: '{{ host }}_varnish'
   scrape_interval: 5s
   static_configs:
       - targets: ['{{ host }}:9131']
{% endfor %}
{% endif %}

El error

fatal: [prueba-mw]: ¡FALLÓ! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'ansible.parsing.yaml.objects.AnsibleUnicode object' no tiene el atributo 'name'"} para volver a intentarlo, use: --limit @/home/gitlab- corredor/builds/xw_vGpUQ/0/ansible/middleware/middleware.retry

¿Tienes alguna idea de cómo solucionarlo? ¡Gracias!

Respuesta1

en la expresión

 {% for host in prometheus_hosts if host.name.startswith('edge') %}

"host" es un elemento de la lista "prometheus_hosts". Los elementos de esta lista no tienen atributos "nombre". Esta es la razón del error.

"msg": "AnsibleUndefinedVariable: 'ansible.parsing.yaml.objects.El objeto AnsibleUnicode' no tiene el atributo 'nombre'


Es posible utilizarCadenas de prueba. Por ejemplo

{% for host in my_hosts %}
{% if host is regex('^edge(.*)$') %}

información relacionada