ansible: add alertmanager role

This commit is contained in:
ionutboangiu
2025-11-04 13:55:39 +02:00
committed by Dan Christian Bogos
parent 378e8fd000
commit 3a6d5dd090
4 changed files with 124 additions and 0 deletions

View File

@@ -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'

View File

@@ -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'

View File

@@ -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

View File

@@ -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