@@ -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)
|
||||
|
||||
@@ -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
2
roles/karma/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.vscode
|
||||
.idea
|
||||
53
roles/karma/README.md
Normal file
53
roles/karma/README.md
Normal 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
|
||||
7
roles/karma/defaults/main.yml
Normal file
7
roles/karma/defaults/main.yml
Normal 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
|
||||
7
roles/karma/handlers/main.yml
Normal file
7
roles/karma/handlers/main.yml
Normal 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
17
roles/karma/meta/main.yml
Normal 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: []
|
||||
9
roles/karma/molecule/default/converge.yml
Normal file
9
roles/karma/molecule/default/converge.yml
Normal 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/
|
||||
17
roles/karma/molecule/default/karma.conf
Normal file
17
roles/karma/molecule/default/karma.conf
Normal 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: []
|
||||
27
roles/karma/molecule/default/molecule.yml
Normal file
27
roles/karma/molecule/default/molecule.yml
Normal 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 .
|
||||
35
roles/karma/molecule/default/verify.yml
Normal file
35
roles/karma/molecule/default/verify.yml
Normal 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"
|
||||
10
roles/karma/tasks/configuration.yml
Normal file
10
roles/karma/tasks/configuration.yml
Normal 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'
|
||||
66
roles/karma/tasks/install.yml
Normal file
66
roles/karma/tasks/install.yml
Normal 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'
|
||||
9
roles/karma/tasks/main.yml
Normal file
9
roles/karma/tasks/main.yml
Normal 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"
|
||||
26
roles/karma/templates/karma.service.j2
Normal file
26
roles/karma/templates/karma.service.j2
Normal 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
|
||||
1
roles/karma/vars/main.yml
Normal file
1
roles/karma/vars/main.yml
Normal file
@@ -0,0 +1 @@
|
||||
---
|
||||
Reference in New Issue
Block a user