Problema no modelo de variáveis ​​​​Ansible

Problema no modelo de variáveis ​​​​Ansible

Eu tenho um modelo no Ansible para criar um arquivo de configuração para o Prometheus. Gostaria de adicionar hosts dinamicamente, usando variável prometheus_hosts. Esta variável é definida em host_vars para cada host, mas o Ansible provavelmente tem algum problema com o modelo.

A variável é definida como:prometheus_hosts: [ host1, host2, host3 ]

O modelo

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 %}

O erro

fatal: [test-mw]: FALHOU! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'ansible.parsing.yaml.objects.AnsibleUnicode object' has no atributo 'name'"} para tentar novamente, use: --limit @/home/gitlab- runner/builds/xw_vGpUQ/0/ansible/middleware/middleware.retry

Você tem alguma ideia de como consertar isso? Obrigado!

Responder1

Na expressão

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

"host" é um item da lista "prometheus_hosts". Os itens desta lista não possuem atributos "nome". Esse é o motivo do erro

"msg": "AnsibleUndefinedVariable: 'objeto ansible.parsing.yaml.objects.AnsibleUnicode' não tem atributo 'nome'


É possível usarTestando strings. Por exemplo

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

informação relacionada