add karma role and fix lint errors
This commit is contained in:
16
roles/karma/.ansible-lint
Normal file
16
roles/karma/.ansible-lint
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
profile: production
|
||||||
|
strict: true
|
||||||
|
|
||||||
|
# Enable checking of loop variable prefixes in roles
|
||||||
|
loop_var_prefix: "^(__|{role}_)"
|
||||||
|
|
||||||
|
skip_list:
|
||||||
|
- var-naming[no-role-prefix]
|
||||||
|
|
||||||
|
warn_list:
|
||||||
|
- role-name[path]
|
||||||
|
- var-naming[no-role-prefix]
|
||||||
|
|
||||||
|
exclude_paths:
|
||||||
|
- .github/
|
||||||
2
roles/karma/.gitignore
vendored
Normal file
2
roles/karma/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.vscode
|
||||||
|
.idea
|
||||||
8
roles/karma/.yamllint
Normal file
8
roles/karma/.yamllint
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
rules:
|
||||||
|
brackets:
|
||||||
|
forbid: false
|
||||||
|
min-spaces-inside: 0
|
||||||
|
max-spaces-inside: 2
|
||||||
|
min-spaces-inside-empty: -1
|
||||||
|
max-spaces-inside-empty: 2
|
||||||
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
|
||||||
11
roles/karma/conda.dev.yml
Normal file
11
roles/karma/conda.dev.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
name: ansible-role-template
|
||||||
|
channels:
|
||||||
|
- conda-forge
|
||||||
|
dependencies:
|
||||||
|
- python~=3.12.0
|
||||||
|
- pip>=24.2
|
||||||
|
- actionlint
|
||||||
|
- pip:
|
||||||
|
- -r requirements.txt
|
||||||
|
- -r requirements.ci.txt
|
||||||
9
roles/karma/conda.prod.yml
Normal file
9
roles/karma/conda.prod.yml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
name: ansible-role-template
|
||||||
|
channels:
|
||||||
|
- conda-forge
|
||||||
|
dependencies:
|
||||||
|
- python~=3.12.0
|
||||||
|
- pip>=24.2
|
||||||
|
- pip:
|
||||||
|
- -r requirements.txt
|
||||||
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"
|
||||||
6
roles/karma/renovate.json
Normal file
6
roles/karma/renovate.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [
|
||||||
|
"config:recommended"
|
||||||
|
]
|
||||||
|
}
|
||||||
6
roles/karma/requirements.ci.txt
Normal file
6
roles/karma/requirements.ci.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
ansible-lint
|
||||||
|
molecule==24.12.0
|
||||||
|
molecule-plugins[docker]
|
||||||
|
docker~=7.1.0
|
||||||
|
requests==2.31.0 # pinned to the latest version not breaking Docker SDK
|
||||||
|
yamllint
|
||||||
1
roles/karma/requirements.txt
Normal file
1
roles/karma/requirements.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ansible~=11.3.0
|
||||||
3
roles/karma/requirements.yml
Normal file
3
roles/karma/requirements.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# requirements file
|
||||||
|
---
|
||||||
|
collections: []
|
||||||
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