--- # Install and configure systemd_exporter for Prometheus monitoring. # Downloads the binary from GitHub releases and deploys a systemd service. # Linux only — systemd_exporter has no FreeBSD equivalent. - name: Create systemd_exporter group ansible.builtin.group: name: "{{ systemd_exporter_group }}" system: true state: present - name: Create systemd_exporter user ansible.builtin.user: name: "{{ systemd_exporter_user }}" group: "{{ systemd_exporter_group }}" system: true shell: /usr/sbin/nologin create_home: false - name: Check if systemd_exporter binary exists ansible.builtin.stat: path: /usr/local/bin/systemd_exporter register: systemd_exporter_bin - name: Get installed version ansible.builtin.command: /usr/local/bin/systemd_exporter --version register: systemd_exporter_installed_version changed_when: false failed_when: false when: systemd_exporter_bin.stat.exists - name: Set architecture fact ansible.builtin.set_fact: systemd_exporter_arch: >- {{ ansible_architecture | regex_replace('x86_64', 'amd64') | regex_replace('aarch64', 'arm64') }} - name: Set release and URL facts ansible.builtin.set_fact: systemd_exporter_release: >- systemd_exporter-{{ systemd_exporter_version }}.linux-{{ systemd_exporter_arch }} systemd_exporter_base_url: >- https://github.com/prometheus-community/systemd_exporter - name: Download and install systemd_exporter when: >- not systemd_exporter_bin.stat.exists or systemd_exporter_version not in (systemd_exporter_installed_version.stdout | default('')) block: - name: Download systemd_exporter tarball ansible.builtin.get_url: url: >- {{ systemd_exporter_base_url }}/releases/download/v{{ systemd_exporter_version }}/{{ systemd_exporter_release }}.tar.gz dest: /tmp/systemd_exporter.tar.gz mode: '0644' - name: Extract systemd_exporter binary ansible.builtin.unarchive: src: /tmp/systemd_exporter.tar.gz dest: /tmp remote_src: true - name: Install systemd_exporter binary ansible.builtin.copy: src: "/tmp/{{ systemd_exporter_release }}/systemd_exporter" dest: /usr/local/bin/systemd_exporter mode: '0755' owner: root group: root remote_src: true notify: Restart systemd_exporter - name: Clean up tarball ansible.builtin.file: path: "{{ item }}" state: absent loop: - /tmp/systemd_exporter.tar.gz - "/tmp/{{ systemd_exporter_release }}" - name: Deploy systemd_exporter service file ansible.builtin.template: src: systemd_exporter.service.j2 dest: /etc/systemd/system/systemd_exporter.service mode: '0644' notify: - Reload systemd - Restart systemd_exporter - name: Enable and start systemd_exporter ansible.builtin.service: name: systemd_exporter state: started enabled: true