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

错误

致命:[test-mw]:失败!=> {“changed”: false,“msg”:“AnsibleUndefinedVariable:'ansible.parsing.yaml.objects.AnsibleUnicode object'没有属性'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(.*)$') %}

相关内容