feat(smartctl): add smartctl exporter

This commit is contained in:
il
2026-06-30 15:57:29 +09:00
parent 88e85fff56
commit 3c8469e604
19 changed files with 713 additions and 114 deletions
@@ -1,19 +1,10 @@
---
- name: Check rclone installation
ansible.builtin.shell: |
command -v rclone
changed_when: false
failed_when: false
register: "is_rclone_installed"
ignore_errors: true
- name: Install rclone
ansible.builtin.apt:
name:
- "rclone"
state: "present"
become: true
when: is_rclone_installed.rc != 0
- name: Create rclone config directory
ansible.builtin.file:
@@ -1,19 +1,10 @@
---
- name: Check nftables installation
ansible.builtin.shell: |
command -v nft
become: true # nftables is located in /usr/sbin, which means root permission is needed.
changed_when: false
failed_when: false
register: "is_nftables_installed"
ignore_errors: true
- name: Install nftables
ansible.builtin.apt:
name: "nftables"
name:
- "nftables"
state: "present"
become: true
when: is_nftables_installed.rc != 0
- name: Enable nftables.service
ansible.builtin.systemd:
@@ -1,36 +1,18 @@
---
- name: Check crowdsec installed
ansible.builtin.shell: |
command -v crowdsec
changed_when: false
failed_when: false
register: "is_crowdsec_installed"
ignore_errors: true
- name: Check crowdsec bouncer installed
ansible.builtin.shell: |
command -v crowdsec-firewall-bouncer
when: node['name'] == "fw"
changed_when: false
failed_when: false
register: "is_crowdsec_bouncer_installed"
ignore_errors: true
- name: Install crowdsec
ansible.builtin.apt:
name: "crowdsec"
name:
- "crowdsec"
state: "present"
become: true
when: is_crowdsec_installed.rc != 0
- name: Install crowdsec bouncers
ansible.builtin.apt:
name: "crowdsec-firewall-bouncer"
name:
- "crowdsec-firewall-bouncer"
state: "present"
become: true
when:
- node['name'] == "fw"
- is_crowdsec_bouncer_installed.rc != 0
when: node['name'] == "fw"
- name: Set acquis.d list for bouncer
ansible.builtin.set_fact:
@@ -132,7 +114,7 @@
- name: Set goal machines' name
ansible.builtin.set_fact:
machines_name: ["fw", "vmm", "bk", "infra", "auth", "app"]
machines_name: "{{ services['crowdsec']['sub']['machines'] | list }}"
no_log: true
- name: Prune unknown (random) machines
@@ -170,7 +152,7 @@
- name: Set bouncers' name
ansible.builtin.set_fact:
bouncers_name: ["fw", "caddy"]
bouncers_name: "{{ services['crowdsec']['sub']['bouncers'] | list }}"
- name: Register Firewall Bouncer to LAPI
ansible.builtin.command: |
@@ -52,6 +52,7 @@
deb: "/var/cache/apt/archives/kopia-{{ version['packages']['kopia'] }}.deb"
state: "present"
become: true
notify: "notification_restart_kopia_server"
- name: Deploy kopia env
ansible.builtin.template:
@@ -1,12 +1,4 @@
---
- name: Check podman installation
ansible.builtin.shell: |
command -v podman
changed_when: false
failed_when: false
register: "is_podman_installed"
ignore_errors: true
- name: Create container directory
ansible.builtin.file:
path: "{{ node['home_path'] }}/containers"
@@ -54,4 +46,3 @@
- "podman"
state: "present"
become: true
when: is_podman_installed.rc != 0
+2 -11
View File
@@ -1,19 +1,10 @@
---
- name: Check bind9 installation
ansible.builtin.shell: |
command -v named
become: true # named is located in /usr/sbin, which means root permission is needed.
changed_when: false
failed_when: false
register: "is_bind_installed"
ignore_errors: true
- name: Install bind9
ansible.builtin.apt:
name: "bind9"
name:
- "bind9"
state: "present"
become: true
when: is_bind_installed.rc != 0
- name: Deploy acme.key
ansible.builtin.copy:
@@ -1,18 +1,10 @@
---
- name: Check chrnoy installation
ansible.builtin.shell: |
command -v chronyc
changed_when: false
failed_when: false
register: "is_chrony_installed"
ignore_errors: true
- name: Install chrony
ansible.builtin.apt:
name: "chrony"
name:
- "chrony"
state: "present"
become: true
when: is_chrony_installed.rc != 0
- name: Deploy local acl file
ansible.builtin.template:
@@ -1,20 +1,10 @@
---
- name: Check Kea dhcp4 installation
ansible.builtin.shell: |
command -v kea-dhcp4
become: true # kea-dhcp4 is located in /usr/sbin, which means root permission is needed.
changed_when: false
failed_when: false
register: "is_kea4_installed"
ignore_errors: true
- name: Install kea dhcp 4
ansible.builtin.apt:
name:
- "kea-dhcp4-server"
state: "present"
become: true
when: is_kea4_installed.rc != 0
- name: Deploy kea dhcp4 conf
ansible.builtin.template:
@@ -1,12 +1,4 @@
---
- name: Check suricata installation
ansible.builtin.shell: |
command -v suricata
changed_when: false
failed_when: false
register: "is_suricata_installed"
ignore_errors: true
- name: Install suricata
ansible.builtin.apt:
name:
@@ -14,7 +6,6 @@
- "suricata-update"
state: "present"
become: true
when: is_suricata_installed.rc != 0
- name: Deploy suricata-update service files
ansible.builtin.copy:
+2 -10
View File
@@ -1,18 +1,10 @@
---
- name: Check btrfs installation
ansible.builtin.shell: |
command -v btrfs
become: true # btrfs is located in /usr/sbin, which means root permission is needed.
changed_when: false
failed_when: false
register: "is_btrfs_installed"
- name: Install btrfs
ansible.builtin.apt:
name: "btrfs-progs"
name:
- "btrfs-progs"
state: "present"
become: true
when: is_btrfs_installed.rc != 0
- name: Mount data disk
block:
@@ -0,0 +1,47 @@
---
- name: Install smartmontools
ansible.builtin.apt:
name:
- "smartmontools"
- "jq"
state: "present"
become: true
- name: Create SMART metric result directory
ansible.builtin.file:
path: "/etc/smartctl-exporter"
state: "directory"
owner: "root"
group: "root"
mode: "0755"
become: true
- name: Deploy smart_metric_generator script
ansible.builtin.copy:
src: "{{ hostvars['console']['node']['config_path'] }}/services/systemd/vmm/smart_metric/smart_metric_generator.sh"
dest: "/usr/local/sbin"
owner: "root"
group: "root"
mode: "0711"
become: true
- name: Deploy smart_metric_generator service files
ansible.builtin.template:
src: "{{ hostvars['console']['node']['config_path'] }}/services/systemd/vmm/smart_metric/{{ item }}.j2"
dest: "/etc/systemd/system/{{ item }}"
owner: "root"
group: "root"
mode: "0600"
validate: "/usr/bin/systemd-analyze verify %s"
loop:
- "smart_metric_generator.service"
- "smart_metric_generator.timer"
become: true
- name: Register smart_metric_generator timer
ansible.builtin.systemd:
name: "smart_metric_generator.timer"
state: "started"
enabled: true
daemon_reload: true
become: true