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 object' には属性 'name' がありません


使用可能文字列のテスト。 例えば

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

関連情報