From 3a6d5dd0905034535626899ec34d44de480b3f58 Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Tue, 4 Nov 2025 13:55:39 +0200 Subject: [PATCH] ansible: add alertmanager role --- .../roles/alertmanager/defaults/main.yaml | 13 +++ .../roles/alertmanager/handlers/main.yaml | 8 ++ .../roles/alertmanager/tasks/main.yaml | 86 +++++++++++++++++++ .../templates/alertmanager.service.j2 | 17 ++++ 4 files changed, 124 insertions(+) create mode 100644 data/ansible/roles/alertmanager/defaults/main.yaml create mode 100644 data/ansible/roles/alertmanager/handlers/main.yaml create mode 100644 data/ansible/roles/alertmanager/tasks/main.yaml create mode 100644 data/ansible/roles/alertmanager/templates/alertmanager.service.j2 diff --git a/data/ansible/roles/alertmanager/defaults/main.yaml b/data/ansible/roles/alertmanager/defaults/main.yaml new file mode 100644 index 000000000..7b689eae2 --- /dev/null +++ b/data/ansible/roles/alertmanager/defaults/main.yaml @@ -0,0 +1,13 @@ +--- +alertmanager_version: 0.27.0 +alertmanager_user: alertmanager +alertmanager_install_dir: /opt/alertmanager +alertmanager_config_dir: /etc/alertmanager +alertmanager_data_dir: /var/lib/alertmanager + +alertmanager_web_listen_address: 0.0.0.0:9093 + +alertmanager_service_enabled: false +alertmanager_service_state: stopped + +alertmanager_config_file: '{{ alertmanager_install_dir }}/alertmanager.yml' diff --git a/data/ansible/roles/alertmanager/handlers/main.yaml b/data/ansible/roles/alertmanager/handlers/main.yaml new file mode 100644 index 000000000..2965e02ab --- /dev/null +++ b/data/ansible/roles/alertmanager/handlers/main.yaml @@ -0,0 +1,8 @@ +--- +- name: Restart alertmanager + become: true + ansible.builtin.systemd_service: + name: alertmanager + state: restarted + daemon_reload: true + when: alertmanager_service_state == 'started' diff --git a/data/ansible/roles/alertmanager/tasks/main.yaml b/data/ansible/roles/alertmanager/tasks/main.yaml new file mode 100644 index 000000000..174fa10ed --- /dev/null +++ b/data/ansible/roles/alertmanager/tasks/main.yaml @@ -0,0 +1,86 @@ +--- +- name: Create alertmanager user + become: true + ansible.builtin.user: + name: '{{ alertmanager_user }}' + state: present + system: true + createhome: no + +- name: Check current Alertmanager version + ansible.builtin.command: "{{ alertmanager_install_dir }}/alertmanager --version" + register: alertmanager_current_version + ignore_errors: true + changed_when: false + +- name: Remove existing Alertmanager installation if version differs + become: true + ansible.builtin.file: + path: "{{ alertmanager_install_dir }}" + state: absent + when: alertmanager_current_version.rc == 0 and alertmanager_version not in alertmanager_current_version.stdout + +- name: Create alertmanager directories + become: true + ansible.builtin.file: + path: '{{ item }}' + state: directory + owner: '{{ alertmanager_user }}' + group: '{{ alertmanager_user }}' + mode: '0755' + loop: + - '{{ alertmanager_config_dir }}' + - '{{ alertmanager_data_dir }}' + - '{{ alertmanager_install_dir }}' + +- name: Download and extract alertmanager + become: true + ansible.builtin.unarchive: + src: 'https://github.com/prometheus/alertmanager/releases/download/v{{ alertmanager_version }}/alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz' + dest: '{{ alertmanager_install_dir }}' + remote_src: true + owner: '{{ alertmanager_user }}' + group: '{{ alertmanager_user }}' + extra_opts: [--strip-components=1] + notify: Restart alertmanager + when: alertmanager_current_version.rc != 0 or alertmanager_version not in alertmanager_current_version.stdout + +- name: Handle alertmanager config file + block: + - name: Copy file (if not .j2) + become: true + ansible.builtin.copy: + src: '{{ alertmanager_config_file }}' + dest: '{{ alertmanager_config_dir }}/{{ alertmanager_config_file | basename }}' + owner: '{{ alertmanager_user }}' + group: '{{ alertmanager_user }}' + mode: '0644' + when: not alertmanager_config_file.endswith('.j2') + + - name: Template file (if .j2) + become: true + ansible.builtin.template: + src: '{{ alertmanager_config_file }}' + dest: '{{ alertmanager_config_dir }}/{{ alertmanager_config_file | basename | splitext | first }}' + owner: '{{ alertmanager_user }}' + group: '{{ alertmanager_user }}' + mode: '0644' + when: alertmanager_config_file.endswith('.j2') + when: alertmanager_config_file is defined + notify: Restart alertmanager + +- name: Create alertmanager systemd service file + become: true + ansible.builtin.template: + src: alertmanager.service.j2 + dest: /etc/systemd/system/alertmanager.service + mode: '0644' + notify: Restart alertmanager + +- name: Ensure alertmanager service is in desired state + become: true + ansible.builtin.systemd_service: + name: alertmanager + state: '{{ alertmanager_service_state }}' + enabled: '{{ alertmanager_service_enabled }}' + when: alertmanager_service_state == 'stopped' or alertmanager_service_enabled == false diff --git a/data/ansible/roles/alertmanager/templates/alertmanager.service.j2 b/data/ansible/roles/alertmanager/templates/alertmanager.service.j2 new file mode 100644 index 000000000..c2b88300d --- /dev/null +++ b/data/ansible/roles/alertmanager/templates/alertmanager.service.j2 @@ -0,0 +1,17 @@ +[Unit] +Description=Alertmanager +Wants=network-online.target +After=network-online.target + +[Service] +User={{ alertmanager_user }} +Group={{ alertmanager_user }} +Type=simple +ExecStart={{ alertmanager_install_dir }}/alertmanager \ + --config.file={{ alertmanager_config_dir }}/alertmanager.yml \ + --storage.path={{ alertmanager_data_dir }} \ + --web.listen-address={{ alertmanager_web_listen_address }} +Restart=always + +[Install] +WantedBy=multi-user.target