Проблема с шаблоном переменных Ansible

Проблема с шаблоном переменных Ansible

У меня есть шаблон в Ansible для создания файла конфигурации для Prometheus. Я хотел бы добавлять хосты динамически, используя переменную prometheus_hosts. Эта переменная определена в host_vars для каждого хоста, но у Ansible, вероятно, есть какие-то проблемы с шаблоном.

Переменная задается следующим образом:prometheus_hosts: [ host1, host2, host3 ]

Шаблон

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

Ошибка

fatal: [test-mw]: НЕУДАЧНО! => {"changed": false, "msg": "AnsibleUndefinedVariable: объект 'ansible.parsing.yaml.objects.AnsibleUnicode' не имеет атрибута 'name'"} для повторной попытки используйте: --limit @/home/gitlab-runner/builds/xw_vGpUQ/0/ansible/middleware/middleware.retry

Есть идеи, как это исправить? Спасибо!

решение1

В выражении

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

"host" — элемент из списка "prometheus_hosts". Элементы в этом списке не имеют атрибута "name". Это причина ошибки

"msg": "AnsibleUndefinedVariable: объект 'ansible.parsing.yaml.objects.AnsibleUnicode' не имеет атрибута 'name'


Можно использоватьТестирование строк. Например

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

Связанный контент