feat(alertmanager_receiver): add role
This commit is contained in:
7
playbooks/alertmanager_receiver.yml
Normal file
7
playbooks/alertmanager_receiver.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
- name: Deploy matrix-alertmanager-receiver
|
||||
hosts: "{{ matrix_alertmanager_receiver_hosts | default('matrix_alertmanager_receiver') }}"
|
||||
become: "{{ matrix_alertmanager_receiver_become | default(false) }}"
|
||||
gather_facts: "{{ matrix_alertmanager_receiver_gather_facts | default(false) }}"
|
||||
roles:
|
||||
- role: finallycoffee.matrix.alertmanager_receiver
|
17
roles/alertmanager-receiver/README.md
Normal file
17
roles/alertmanager-receiver/README.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# `finallycoffee.matrix.alertmanager_receiver` ansible role
|
||||
|
||||
This ansible role deploys and configures
|
||||
[`matrix-alertmanager-receiver`](https://github.com/metio/matrix-alertmanager-receiver),
|
||||
a fork of [https://git.sr.ht/~fnux/matrix-alertmanager-receiver] with more features.
|
||||
For futher information, see [the project's `README`](https://github.com/metio/matrix-alertmanager-receiver?tab=readme-ov-file#matrix-alertmanager-receiver-).
|
||||
|
||||
## Configuration
|
||||
|
||||
### Required configuration
|
||||
|
||||
The following variables *must* be populated or else the role will be unable to
|
||||
set up the service successfully:
|
||||
|
||||
- `alertmanager_receiver_config_matrix_homeserver_url` - matrix homeserver URL
|
||||
- `alertmanager_receiver_config_matrix_user_id` - full userid (`@user:instance.tld`)
|
||||
- `alertmanager_receiver_config_matrix_access_token` - access token for that user
|
51
roles/alertmanager-receiver/defaults/main/config.yml
Normal file
51
roles/alertmanager-receiver/defaults/main/config.yml
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
alertmanager_receiver_config_http_address: 127.0.0.1
|
||||
alertmanager_receiver_config_http_port: 12345
|
||||
alertmanager_receiver_config_http_alerts_path_prefix: "/alerts"
|
||||
alertmanager_receiver_config_http_metrics_path: "/metrics"
|
||||
alertmanager_receiver_config_http_metric_enabled: true
|
||||
alertmanager_receiver_config_http_basic_username: "alertmanager"
|
||||
alertmanager_receiver_config_http_basic_password: ~
|
||||
alertmanager_receiver_config_http:
|
||||
address: "{{ alertmanager_receiver_config_http_address }}"
|
||||
port: "{{ alertmanager_receiver_config_http_port }}"
|
||||
"alerts-path-prefix": "{{ alertmanager_receiver_config_http_alerts_path_prefix }}"
|
||||
"metrics-path": "{{ alertmanager_receiver_config_http_metrics_path }}"
|
||||
"metrics-enabled": "{{ alertmanager_receiver_config_http_metric_enabled }}"
|
||||
"basic-username": "{{ alertmanager_receiver_config_http_basic_username }}"
|
||||
"basic-password": "{{ alertmanager_receiver_config_http_basic_password }}"
|
||||
alertmanager_receiver_config_matrix_homeserver_url: ~
|
||||
alertmanager_receiver_config_matrix_user_id: ~
|
||||
alertmanager_receiver_config_matrix_access_token: ~
|
||||
alertmanager_receiver_config_matrix_proxy: ""
|
||||
alertmanager_receiver_config_matrix_room_mapping: {}
|
||||
alertmanager_receiver_config_matrix:
|
||||
"homeserver-url": "{{ alertmanager_receiver_config_matrix_homeserver_url }}"
|
||||
"user-id": "{{ alertmanager_receiver_config_matrix_user_id }}"
|
||||
"access-token": "{{ alertmanager_receiver_config_matrix_access_token }}"
|
||||
proxy: "{{ alertmanager_receiver_config_matrix_proxy }}"
|
||||
"room-mapping": "{{ alertmanager_receiver_config_matrix_room_mapping }}"
|
||||
alertmanager_receiver_config_templating_external_url_mapping: {}
|
||||
alertmanager_receiver_config_templating_generator_url_mapping: {}
|
||||
alertmanager_receiver_config_templating_computed_values: >-2
|
||||
{{ alertmanager_receiver_config_templating_computed_values_default }}
|
||||
alertmanager_receiver_config_templating_firing_template: >-2
|
||||
{{ alertmanager_receiver_config_templating_firing_template_default }}
|
||||
alertmanager_receiver_config_templating_resolved_template: >-2
|
||||
{{ alertmanager_receiver_config_templating_resolved_template_default }}
|
||||
alertmanager_receiver_config_templating:
|
||||
"external-url-mapping": >-2
|
||||
{{ alertmanager_receiver_config_templating_external_url_mapping }}
|
||||
"generator-url-mapping": >-2
|
||||
{{ alertmanager_receiver_config_templating_generator_url_mapping }}
|
||||
"computed-values": "{{ alertmanager_receiver_config_templating_computed_values }}"
|
||||
"firing-template": "{{ alertmanager_receiver_config_templating_firing_template }}"
|
||||
"resolved-template": "{{ alertmanager_receiver_config_templating_resolved_template }}"
|
||||
alertmanager_receiver_default_config:
|
||||
http: "{{ alertmanager_receiver_config_http }}"
|
||||
matrix: "{{ alertmanager_receiver_config_matrix }}"
|
||||
templating: "{{ alertmanager_receiver_config_templating }}"
|
||||
alertmanager_receiver_config: {}
|
||||
alertmanager_receiver_merged_config: >-2
|
||||
{{ (alertmanager_receiver_default_config | default({})
|
||||
| combine(alertmanager_receiver_config | default({}), recursive=True) }}
|
9
roles/alertmanager-receiver/defaults/main/main.yml
Normal file
9
roles/alertmanager-receiver/defaults/main/main.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
alertmanager_receiver_user: "matrix-alertmanager-receiver"
|
||||
alertmanager_receiver_version: "2025.8.6"
|
||||
alertmanager_receiver_config_file_path: "/etc/matrix-alertmanager-receiver/config.yaml"
|
||||
alertmanager_receiver_config_path: >-2
|
||||
{{ alertmanager_receiver_config_file_path | dirname }}
|
||||
|
||||
alertmanager_receiver_state: present
|
||||
alertmanager_receiver_deployment_method: docker
|
47
roles/alertmanager-receiver/defaults/main/templates.yml
Normal file
47
roles/alertmanager-receiver/defaults/main/templates.yml
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
alertmanager_receiver_config_templating_computed_values_default:
|
||||
- values: # always set 'color' to 'yellow'
|
||||
color: yellow
|
||||
- values: # set 'color' to 'orange' when alert label 'severity' is 'warning'
|
||||
color: orange
|
||||
when-matching-labels:
|
||||
severity: warning
|
||||
- values: # set 'color' to 'red' when alert label 'severity' is 'critical'
|
||||
color: red
|
||||
when-matching-labels:
|
||||
severity: critical
|
||||
- values: # set 'color' to 'green' when alert status is 'resolved'
|
||||
color: green
|
||||
when-matching-status: resolved
|
||||
|
||||
alertmanager_receiver_config_templating_firing_template_default: |+2
|
||||
<p>
|
||||
<strong><font color="{{ .ComputedValues.color }}">{{ .Alert.Status | ToUpper }}</font></strong>
|
||||
{{ if .Alert.Labels.name }}
|
||||
{{ .Alert.Labels.name }}
|
||||
{{ else if .Alert.Labels.alertname }}
|
||||
{{ .Alert.Labels.alertname }}
|
||||
{{ end }}
|
||||
>>
|
||||
{{ if .Alert.Labels.severity }}
|
||||
{{ .Alert.Labels.severity | ToUpper }}:
|
||||
{{ end }}
|
||||
{{ if .Alert.Annotations.description }}
|
||||
{{ .Alert.Annotations.description }}
|
||||
{{ else if .Alert.Annotations.summary }}
|
||||
{{ .Alert.Annotations.summary }}
|
||||
{{ end }}
|
||||
>>
|
||||
{{ if .Alert.Annotations.runbook }}
|
||||
<a href="{{ .Alert.Annotations.runbook }}">Runbook</a> |
|
||||
{{ end }}
|
||||
{{ if .Alert.Annotations.dashboard }}
|
||||
<a href="{{ .Alert.Annotations.dashboard }}">Dashboard</a> |
|
||||
{{ end }}
|
||||
<a href="{{ .SilenceURL }}">Silence</a>
|
||||
</p>
|
||||
|
||||
alertmanager_receiver_config_templating_resolved_template_default: |+2
|
||||
<strong>
|
||||
<font color="{{ .ComputedValues.color }}">{{ .Alert.Status | ToUpper }}</font>
|
||||
</strong>{{ .Alert.Labels.name }}
|
16
roles/alertmanager-receiver/tasks/check.yml
Normal file
16
roles/alertmanager-receiver/tasks/check.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
- name: Ensure valid alertmanager_receiver_state
|
||||
ansible.builtin.fail:
|
||||
msg: >-2
|
||||
Unsupported value '{{ alertmanager_receiver_state }}' for
|
||||
alertmanager_receiver_state. Supported values are
|
||||
{{ alertmanager_receiver_states | map(quote) | join(', ')
|
||||
when: alertmanager_receiver_state not in alertmanager_receiver_states
|
||||
|
||||
- name: Ensure valid alertmanager_receiver_deployment_method
|
||||
ansible.builtin.fail:
|
||||
msg: >-2
|
||||
Unsupported value '{{ alertmanager_receiver_deployment_method }}' for
|
||||
alertmanager_receiver_deployment_method. Supported values are
|
||||
{{ alertmanager_receiver_deployment_methods | map(quote) | join(', ')
|
||||
when: alertmanager_receiver_deployment_method not in alertmanager_receiver_deployment_methods
|
12
roles/alertmanager-receiver/tasks/configure.yml
Normal file
12
roles/alertmanager-receiver/tasks/configure.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
- name: Ensure configuration folder '{{ alertmanager_receiver_config_path }}' is {{ alertmanager_receiver_state }}
|
||||
ansible.builtin.file:
|
||||
path: "{{ alertmanager_receiver_config_path }}"
|
||||
state: >-2
|
||||
{{ (alertmanager_receiver_state == 'present') | ternary('directory', 'absent') }}
|
||||
|
||||
- name: Ensure configuration file '{{ alertmanager_receiver_config_file_path }}' is written
|
||||
ansible.builtin.copy:
|
||||
dest: "{{ alertmanager_receiver_config_file_path }}"
|
||||
content: "{{ alertmanager_receiver_merged_config | to_nice_yaml(indent=2, width=200) }}"
|
||||
when: alertmanager_receiver_state == 'present'
|
0
roles/alertmanager-receiver/tasks/deploy-docker.yml
Normal file
0
roles/alertmanager-receiver/tasks/deploy-docker.yml
Normal file
12
roles/alertmanager-receiver/tasks/main.yml
Normal file
12
roles/alertmanager-receiver/tasks/main.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
- name: Ensure preconditions are met
|
||||
ansible.builtin.include_taks:
|
||||
file: "check.yml"
|
||||
|
||||
- name: Ensure configuration is up to date
|
||||
ansible.builtin.include_taks:
|
||||
file: "configure.yml"
|
||||
|
||||
- name: Deploy using {{ alertmanager_receiver_deployment_method }}
|
||||
ansible.builtin.include_tasks:
|
||||
file: "deploy-{{ alertmanager_receiver_deployment_method }}.yml"
|
6
roles/alertmanager-receiver/vars/main.yml
Normal file
6
roles/alertmanager-receiver/vars/main.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
alertmanager_receiver_states:
|
||||
- "present"
|
||||
- "absent"
|
||||
alertmanager_receiver_deployment_methods:
|
||||
- "docker"
|
Reference in New Issue
Block a user