prometheus-community / ansible

Ansible Collection for Prometheus
https://prometheus-community.github.io/ansible/
Apache License 2.0
393 stars 133 forks source link

Create systemd service fails with template error #451

Open kwelch426 opened 3 weeks ago

kwelch426 commented 3 weeks ago

Getting the below error on AmazonLinux 2 with debug on. I ran the same code on Ubuntu 22.04LTS and AmazonLinux 2023 without any issues. Ansible version is 2.9.27. Python version is 2.7.18

The playbook variables I am using are:

- name: install node exporter
  hosts: all
  vars:
    node_exporter_version: "1.8.2"
    node_exporter_web_listen_address: "0.0.0.0:9100"
    node_exporter_enabled_collectors:
      - "systemd"
    node_exporter_disabled_collectors: []
TASK [prometheus.prometheus._common : Create systemd service unit node_exporter] ***************************************************************
fatal: [localhost]: FAILED! => {
    "changed": false
}

MSG:

AnsibleError: template error while templating string: expected token '=', got '.'. String: {{ ansible_managed | comment }}

[Unit]
Description=Prometheus Node Exporter
After=network-online.target

[Service]
Type=simple
User={{ node_exporter_system_user }}
Group={{ node_exporter_system_group }}
ExecStart={{ node_exporter_binary_install_dir }}/node_exporter \
{% for collector in node_exporter_enabled_collectors -%}
{%   if not collector is mapping %}
    '--collector.{{ collector }}' \
{%   else -%}
{%     set name, options = (collector.items()|list)[0] -%}
    '--collector.{{ name }}' \
{%     for k,v in options|dictsort %}
    '--collector.{{ name }}.{{ k }}={{ v }}' \
{%     endfor -%}
{%   endif -%}
{% endfor -%}
{% for collector in node_exporter_disabled_collectors %}
    '--no-collector.{{ collector }}' \
{% endfor %}
{% if node_exporter_tls_server_config | length > 0 or node_exporter_http_server_config | length > 0 or node_exporter_basic_auth_users | length > 0 %}
    {% if node_exporter_version is version('1.5.0', '>=') %}
    '--web.config.file={{ node_exporter_config_dir }}/web_config.yml' \
    {% else %}
    '--web.config={{ node_exporter_config_dir }}/web_config.yml' \
    {% endif %}
{% endif %}
{% if node_exporter_web_disable_exporter_metrics %}
    '--web.disable-exporter-metrics' \
{% endif %}
{% if node_exporter_version is version('1.5.0', '>=') and
      node_exporter_web_listen_address is iterable and
      node_exporter_web_listen_address is not mapping and
      node_exporter_web_listen_address is not string %}
{%   for address in node_exporter_web_listen_address %}
    '--web.listen-address={{ address }}' \
{%   endfor %}
{% else %}
    '--web.listen-address={{ node_exporter_web_listen_address }}' \
{% endif %}
    '--web.telemetry-path={{ node_exporter_web_telemetry_path }}'

SyslogIdentifier=node_exporter
Restart=always
RestartSec=1
StartLimitInterval=0

{% set ns = namespace(protect_home = 'yes') %}
{% for m in ansible_mounts if m.mount.startswith('/home') %}
{%   set ns.protect_home = 'read-only' %}
{% endfor %}
{% if node_exporter_textfile_dir.startswith('/home') %}
{%   set ns.protect_home = 'read-only' %}
{% endif %}
ProtectHome={{ ns.protect_home }}
NoNewPrivileges=yes

{% if (ansible_facts.packages.systemd | first).version is version('232', '>=') %}
ProtectSystem=strict
ProtectControlGroups=true
ProtectKernelModules=true
ProtectKernelTunables=yes
{% else %}
ProtectSystem=full
{% endif %}

[Install]
WantedBy=multi-user.target

RUNNING HANDLER [prometheus.prometheus.node_exporter : Restart node_exporter] ******************************************************************

PLAY RECAP *************************************************************************************************************************************
localhost                  : ok=23   changed=4    unreachable=0    failed=1    skipped=11   rescued=0    ignored=0 `