Merge pull request #31 from corvus-migratorius/add-karma

Add karma
This commit is contained in:
Fogucoco
2025-12-16 13:46:09 +03:00
committed by GitHub
16 changed files with 288 additions and 1 deletions

View File

@@ -11,6 +11,7 @@
- [dnsmasq](roles/dnsmasq/README.md)
- [grafana](roles/grafana/README.md)
- [ipmi_exporter](roles/ipmi_exporter/README.md)
- [karma](roles/karma/README.md)
- [mount_device](roles/mount_device/README.md)
- [prometheus](roles/prometheus/README.md)
- [smartctl_exporter](roles/smartctl_exporter/README.md)

View File

@@ -1,7 +1,7 @@
---
namespace: genlab
name: common
version: 0.12.0
version: 0.13.0
readme: README.md
authors:
- Alexander Gorelyshev (corvus-migratorius@proton.me)

2
roles/karma/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
.vscode
.idea

53
roles/karma/README.md Normal file
View File

@@ -0,0 +1,53 @@
genlab.karma
=========
This is the ansible role to install and configure Karma - alert dashboard for Prometheus Alertmanager (https://github.com/prymitive/karma)
------------
⚠️ Do not forget to update:
- `meta/main.yml`
- Conda/Mamba manifests
- this README =) including *the name at the top* and *maintainers*.
Requirements
------------
None
Role Variables
--------------
```yaml
karma_version: "0.121" - karma version
karma_user: karma - name of karma system user
karma_group: karma - name of karma system group
karma_dir: /etc/karma - path where to unpack karma
karma_config_dir: /etc/karma/conf - where to copy configuration file
config_source_dir: source - path to source dir with karma config on localhost
```
Dependencies
------------
None
Example Playbook
----------------
```yaml
roles:
- role: genlab.karma
karma_version: "0.121"
config_source_dir: "karma/"
karma_dir: "/etc/karma"
karma_config_dir: "/etc/karma/config"
```
License
-------
BSD
Author Information
------------------
corvus-migratorius@proton.me

View File

@@ -0,0 +1,7 @@
---
# Default variables for Karma role
karma_version: "0.121"
karma_user: karma
karma_group: karma
karma_dir: /etc/karma
karma_config_dir: /etc/karma/conf

View File

@@ -0,0 +1,7 @@
---
- name: "(Re)start and enable karma"
ansible.builtin.systemd_service:
name: karma.service
state: restarted
enabled: true
daemon_reload: true

17
roles/karma/meta/main.yml Normal file
View File

@@ -0,0 +1,17 @@
---
galaxy_info:
role_name: "karma"
namespace: genlab
author: "Alexander Gorelyshev"
company: "Genlab, LLC"
description: ""
license: "MIT"
min_ansible_version: "2.1"
platforms:
- name: "Ubuntu"
versions: ["focal", "jammy", "noble"]
galaxy_tags: [monitoring]
dependencies: []

View File

@@ -0,0 +1,9 @@
---
- name: Converge
hosts: all
gather_facts: true
become: true
roles:
- role: genlab.common.karma
karma_version: "0.121"
config_source_dir: molecule/default/

View File

@@ -0,0 +1,17 @@
alertmanager:
interval: 1m
servers:
- name: production
uri: http://localhost:9093
timeout: 20s
proxy: false
readonly: true
listen:
address: "0.0.0.0"
port: 8080
prefix: /
tls:
cert: ""
key: ""
cors:
allowedOrigins: []

View File

@@ -0,0 +1,27 @@
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: ubuntu
image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2404}-ansible:latest
pre_build_image: true
command: ${MOLECULE_DOCKER_COMMAND:-""}
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
privileged: true
provisioner:
name: ansible
verifier:
name: ansible
lint: |
set -e
yamllint .
ansible-lint .

View File

@@ -0,0 +1,35 @@
---
- name: Verify
hosts: all
gather_facts: false
any_errors_fatal: true
vars:
karma_version: "0.121"
tasks:
- name: "Check if Karma is installed"
changed_when: false
ansible.builtin.command: "karma --version"
register: karma_installed_version
- name: "Check Karma version"
ansible.builtin.assert:
that: "karma_installed_version.stdout is regex('{{ karma_version }}')"
success_msg: "Karma version {{ karma_version }} is installed and working"
fail_msg: "Karma version {{ karma_version }} is not installed or not working correctly"
# kics-scan ignore-block
- name: "Check if Karma is reachable"
ansible.builtin.uri:
url: "http://localhost:8080/health"
return_content: true
status_code: 200
method: GET
body_format: json
register: karma_health
- name: "Assert Karma health status"
ansible.builtin.assert:
that: "karma_health.content.strip() == 'Pong'"
success_msg: "Karma is healthy"
fail_msg: "Karma is not healthy"

View File

@@ -0,0 +1,10 @@
---
- name: Create karma configuration file
notify: "(Re)start and enable karma"
ansible.builtin.template:
src: "{{ config_source_dir }}/karma.conf"
dest: "{{ karma_config_dir }}/karma.conf"
owner: "{{ karma_user }}"
group: "{{ karma_group }}"
mode: '0640'

View File

@@ -0,0 +1,66 @@
---
- name: "Create Karma system group"
ansible.builtin.group:
name: "{{ karma_user }}"
system: true
state: present
- name: "Create karma system user"
ansible.builtin.user:
name: "{{ karma_user }}"
group: "{{ karma_group }}"
system: true
shell: "/sbin/nologin"
create_home: false
state: present
- name: "Install karma from binary"
block:
- name: "Check karma version"
changed_when: false
ansible.builtin.command:
cmd: "{{ karma_dir }}/karma-linux-amd64 --version"
register: karma_ver
- name: "Assert version correctness"
ansible.builtin.assert:
that: "karma_ver.stdout is regex('{{ karma_version }}')"
success_msg: "karma version {{ karma_version }} is installed and working"
fail_msg: "karma version {{ karma_version }} is not installed or not working correctly"
rescue:
- name: "Create karma directories"
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ karma_user }}"
group: "{{ karma_group }}"
mode: "0755"
with_items:
- "{{ karma_dir }}"
- "{{ karma_config_dir }}"
- name: "Unarchive karma tar file"
notify: "(Re)start and enable karma"
ansible.builtin.unarchive:
src: "https://github.com/prymitive/karma/releases/download/v{{ karma_version }}/karma-linux-amd64.tar.gz"
dest: "{{ karma_dir }}"
remote_src: true
- name: "Move karma binary"
ansible.builtin.copy:
src: "{{ karma_dir }}/karma-linux-amd64"
dest: "/usr/local/bin/karma"
mode: "0755"
owner: "{{ karma_user }}"
group: "{{ karma_group }}"
remote_src: true
- name: Create systemd service file
ansible.builtin.template:
src: karma.service.j2
dest: /etc/systemd/system/karma.service
owner: "{{ karma_user }}"
group: "{{ karma_group }}"
mode: '0644'

View File

@@ -0,0 +1,9 @@
---
- name: "Run installation tasks"
ansible.builtin.include_tasks: install.yml
- name: "Run configuration tasks"
ansible.builtin.include_tasks: configuration.yml
- name: "Flush handlers"
ansible.builtin.meta: "flush_handlers"

View File

@@ -0,0 +1,26 @@
[Unit]
Description=Karma - Alertmanager dashboard
After=network.target
Documentation=https://github.com/prymitive/karma
[Service]
Type=simple
User={{ karma_user }}
Group={{ karma_group }}
ExecStart=karma --config.file={{ karma_config_dir }}/karma.conf
Restart=always
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=karma
ProtectSystem=strict
NoNewPrivileges=true
PrivateTmp=true
ProtectKernelModules=true
ProtectControlGroups=true
ProtectKernelTunables=true
ProtectClock=yes
RestrictSUIDSGID=true
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1 @@
---