diff --git a/roles/alertmanager/README.md b/roles/alertmanager/README.md index 679d671..e7a5a66 100644 --- a/roles/alertmanager/README.md +++ b/roles/alertmanager/README.md @@ -13,14 +13,10 @@ None Role Variables -------------- -``` -alertmanager_version: 0.28.1 # version of Alertmanager (AM) +- `alertmanager_version`: desired Alertmanager version alertmanager_config_dir: "/etc/alertmanager/conf" # where to place AM configs alertmanager_storage_dir: "/var/lib/alertmanager" # path to AM storage -alertmanager_dir: "/etc/alertmanager" # where to install AM on target -alertmanager_user: "alertmanager" # system user name -alertmanager_group: "alertmanager" # system group name -config_source_dir: "./alertmanager" # path to config files on source +alertmanager_config_source_dir: "./alertmanager" # path to config files on source # Optional template_source_dir: "./templates" # path to template files on source diff --git a/roles/alertmanager/defaults/main.yml b/roles/alertmanager/defaults/main.yml index 4e14295..7993440 100644 --- a/roles/alertmanager/defaults/main.yml +++ b/roles/alertmanager/defaults/main.yml @@ -2,6 +2,3 @@ alertmanager_version: 0.28.1 alertmanager_config_dir: "/etc/alertmanager/conf" alertmanager_storage_dir: "/var/lib/alertmanager" -alertmanager_dir: "/etc/alertmanager" -alertmanager_user: alertmanager -alertmanager_group: alertmanager diff --git a/roles/alertmanager/molecule/default/converge.yml b/roles/alertmanager/molecule/default/converge.yml index 470c151..5aa6a6e 100644 --- a/roles/alertmanager/molecule/default/converge.yml +++ b/roles/alertmanager/molecule/default/converge.yml @@ -3,4 +3,4 @@ hosts: all roles: - role: genlab.common.alertmanager - config_source_dir: alertmanager + alertmanager_config_source_dir: alertmanager diff --git a/roles/alertmanager/tasks/configuration.yml b/roles/alertmanager/tasks/configuration.yml index f06c996..3b4ebcb 100644 --- a/roles/alertmanager/tasks/configuration.yml +++ b/roles/alertmanager/tasks/configuration.yml @@ -1,24 +1,24 @@ --- -- name: "Copy config file" +- name: "Configuration | Copy configuration files" notify: "(Re)start and enable Alertmanager" + with_fileglob: + - "{{ alertmanager_config_source_dir }}/*.yml" ansible.builtin.template: src: "{{ item }}" dest: "{{ alertmanager_config_dir }}/{{ item | basename }}" - owner: "{{ alertmanager_user }}" - group: "{{ alertmanager_group }}" + owner: alertmanager + group: alertmanager mode: "0660" - with_fileglob: - - "{{ config_source_dir }}/*.yml" -- name: "Copy templates if existed" +- name: "Configuration | Copy templates" notify: "(Re)start and enable Alertmanager" when: template_source_dir is defined + with_fileglob: + - "{{ template_source_dir }}/*.tmpl" ansible.builtin.copy: src: "{{ item }}" dest: "{{ alertmanager_config_dir }}/{{ item | basename }}" - owner: "{{ alertmanager_user }}" - group: "{{ alertmanager_group }}" + owner: alertmanager + group: alertmanager mode: "0660" - with_fileglob: - - "{{ template_source_dir }}/*.tmpl" diff --git a/roles/alertmanager/tasks/install.yml b/roles/alertmanager/tasks/install.yml index db0b8c6..b156bfb 100644 --- a/roles/alertmanager/tasks/install.yml +++ b/roles/alertmanager/tasks/install.yml @@ -1,85 +1,156 @@ --- -- name: "Create Alertmanager system group" - ansible.builtin.group: - name: "{{ alertmanager_user }}" - system: true - state: present - -- name: "Create Alertmanager system user" +- name: "Install | Create alertmanager system user" ansible.builtin.user: - name: "{{ alertmanager_user }}" - group: "{{ alertmanager_group }}" + name: "alertmanager" system: true shell: "/sbin/nologin" create_home: false state: present -- name: "Install Alertmanager from binary" +- name: "Install | Create directories {{ item }}" + with_items: + - "{{ alertmanager_config_dir }}" + - "{{ alertmanager_storage_dir }}" + ansible.builtin.file: + path: "{{ item }}" + state: directory + owner: "alertmanager" + group: "alertmanager" + mode: "0755" + +- name: "Install | Install the binaries" block: - - name: "Check Alertmanager version" + - name: "Install | Check alertmanager version" changed_when: false ansible.builtin.command: cmd: "alertmanager --version" register: alertmanager_ver - - name: "Assert version correctness" + - name: "Install | Assert version correctness" ansible.builtin.assert: that: "alertmanager_ver.stdout is regex('{{ alertmanager_version }}')" success_msg: "alertmanager version {{ alertmanager_version }} is installed and working" fail_msg: "alertmanager version {{ alertmanager_version }} is not installed or not working correctly" rescue: - - name: "Create Alertmanager directories '{{ item }}'" - ansible.builtin.file: - path: "{{ item }}" - state: directory - owner: "{{ alertmanager_user }}" - group: "{{ alertmanager_group }}" - mode: "0755" - with_items: - - "{{ alertmanager_config_dir }}" - - "{{ alertmanager_dir }}" - - "{{ alertmanager_storage_dir }}" - - - name: "Download Alertmanager binary" - ansible.builtin.get_url: - url: "https://github.com/prometheus/alertmanager/releases/download/v{{ alertmanager_version }}/\ - alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz" - dest: "/tmp/alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz" - owner: "{{ alertmanager_user }}" - group: "{{ alertmanager_group }}" - mode: "0644" - - - name: "Unpack Alertmanager binaries" + - name: "Install | Fetch and unpack the distribution" notify: "(Re)start and enable Alertmanager" ansible.builtin.unarchive: - src: "/tmp/alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz" - dest: "{{ alertmanager_dir }}" - creates: "{{ alertmanager_dir }}/alertmanager-{{ alertmanager_version }}.linux-amd64" + src: "https://github.com/prometheus/alertmanager/releases/download/v{{ alertmanager_version }}/\ + alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz" + dest: "/tmp" + creates: "/tmp/alertmanager-{{ alertmanager_version }}.linux-amd64" remote_src: true - - name: "Cleanup downloaded file" - ansible.builtin.file: - path: "/tmp/alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz" - state: absent - - - name: "Move official alertmanager and amtool binaries" - ansible.builtin.copy: - src: "{{ alertmanager_dir }}/alertmanager-{{ alertmanager_version }}.linux-amd64/{{ item }}" - dest: "/usr/local/bin/{{ item }}" - mode: "0755" - owner: "{{ alertmanager_user }}" - group: "{{ alertmanager_group }}" - remote_src: true + - name: "Install | Put the binaries under the PATH" with_items: - alertmanager - amtool + ansible.builtin.copy: + remote_src: true + src: "/tmp/alertmanager-{{ alertmanager_version }}.linux-amd64/{{ item }}" + dest: "/usr/bin/{{ item }}" + owner: "alertmanager" + group: "alertmanager" + mode: "0755" + - name: "Install | Clean up the downloads" + ansible.builtin.file: + path: "/tmp/alertmanager-{{ alertmanager_version }}.linux-amd64" + state: absent -- name: "Create systemd service unit" +- name: "Install | Create a systemd service unit" + notify: "(Re)start and enable Alertmanager" ansible.builtin.template: src: alertmanager.service.j2 dest: /etc/systemd/system/alertmanager.service - owner: "{{ alertmanager_user }}" - group: "{{ alertmanager_group }}" + owner: "alertmanager" + group: "alertmanager" mode: "0660" + + +# --- +# - name: "Create Alertmanager system group" +# ansible.builtin.group: +# name: "{{ alertmanager_user }}" +# system: true +# state: present + +# - name: "Create Alertmanager system user" +# ansible.builtin.user: +# name: "{{ alertmanager_user }}" +# group: "{{ alertmanager_group }}" +# system: true +# shell: "/sbin/nologin" +# create_home: false +# state: present + +# - name: "Install Alertmanager from binary" +# block: +# - name: "Check Alertmanager version" +# changed_when: false +# ansible.builtin.command: +# cmd: "alertmanager --version" +# register: alertmanager_ver + +# - name: "Assert version correctness" +# ansible.builtin.assert: +# that: "alertmanager_ver.stdout is regex('{{ alertmanager_version }}')" +# success_msg: "alertmanager version {{ alertmanager_version }} is installed and working" +# fail_msg: "alertmanager version {{ alertmanager_version }} is not installed or not working correctly" + +# rescue: +# - name: "Create Alertmanager directories '{{ item }}'" +# ansible.builtin.file: +# path: "{{ item }}" +# state: directory +# owner: "{{ alertmanager_user }}" +# group: "{{ alertmanager_group }}" +# mode: "0755" +# with_items: +# - "{{ alertmanager_config_dir }}" +# - "{{ alertmanager_dir }}" +# - "{{ alertmanager_storage_dir }}" + +# - name: "Download Alertmanager binary" +# ansible.builtin.get_url: +# url: "https://github.com/alertmanager/alertmanager/releases/download/v{{ alertmanager_version }}/\ +# alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz" +# dest: "/tmp/alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz" +# owner: "{{ alertmanager_user }}" +# group: "{{ alertmanager_group }}" +# mode: "0644" + +# - name: "Unpack Alertmanager binaries" +# notify: "(Re)start and enable Alertmanager" +# ansible.builtin.unarchive: +# src: "/tmp/alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz" +# dest: "{{ alertmanager_dir }}" +# creates: "{{ alertmanager_dir }}/alertmanager-{{ alertmanager_version }}.linux-amd64" +# remote_src: true + +# - name: "Cleanup downloaded file" +# ansible.builtin.file: +# path: "/tmp/alertmanager-{{ alertmanager_version }}.linux-amd64.tar.gz" +# state: absent + +# - name: "Move official alertmanager and amtool binaries" +# ansible.builtin.copy: +# src: "{{ alertmanager_dir }}/alertmanager-{{ alertmanager_version }}.linux-amd64/{{ item }}" +# dest: "/usr/local/bin/{{ item }}" +# mode: "0755" +# owner: "{{ alertmanager_user }}" +# group: "{{ alertmanager_group }}" +# remote_src: true +# with_items: +# - alertmanager +# - amtool + + +# - name: "Create systemd service unit" +# ansible.builtin.template: +# src: alertmanager.service.j2 +# dest: /etc/systemd/system/alertmanager.service +# owner: "{{ alertmanager_user }}" +# group: "{{ alertmanager_group }}" +# mode: "0660" diff --git a/roles/alertmanager/templates/alertmanager.service.j2 b/roles/alertmanager/templates/alertmanager.service.j2 index a85ae68..1b882cc 100644 --- a/roles/alertmanager/templates/alertmanager.service.j2 +++ b/roles/alertmanager/templates/alertmanager.service.j2 @@ -4,10 +4,10 @@ After=network.target Documentation="https://prometheus.io/docs/alerting/latest/alertmanager/" [Service] -User={{ alertmanager_user }} -Group={{ alertmanager_group }} +User=alertmanager +Group=alertmanager Type=simple -ExecStart=/usr/local/bin/alertmanager \ +ExecStart=/usr/bin/alertmanager \ --config.file={{ alertmanager_config_dir }}/alertmanager.yml \ --storage.path={{ alertmanager_storage_dir }} Restart=on-failure @@ -24,4 +24,4 @@ ProtectClock=yes RestrictSUIDSGID=true [Install] -WantedBy=multi-user.target \ No newline at end of file +WantedBy=multi-user.target