From 6530caab7f7fd631d17165462bcb4b029804c48d Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Tue, 7 Jan 2025 08:37:08 +0000
Subject: [PATCH] Set up smartmontools

Since we've added SMART alerts, we should install smartd as well.
As most testing happens in VMs, the SMART functionality will only
be enabled when testing==False.
---
 roles/float-base/handlers/main.yml        |  5 +++++
 roles/float-base/tasks/main.yml           |  3 +++
 roles/float-base/tasks/smart.yml          | 18 ++++++++++++++++++
 roles/float-base/templates/smartd.conf.j2 |  8 ++++++++
 4 files changed, 34 insertions(+)
 create mode 100644 roles/float-base/tasks/smart.yml
 create mode 100644 roles/float-base/templates/smartd.conf.j2

diff --git a/roles/float-base/handlers/main.yml b/roles/float-base/handlers/main.yml
index ac47fa5b..07b630b1 100644
--- a/roles/float-base/handlers/main.yml
+++ b/roles/float-base/handlers/main.yml
@@ -50,6 +50,11 @@
     name: osqueryd.service
     state: restarted
 
+- name: restart smartd
+  systemd:
+    name: smartd.service
+    state: restarted
+
 - name: reload firewall
   systemd:
     name: firewall.service
diff --git a/roles/float-base/tasks/main.yml b/roles/float-base/tasks/main.yml
index e47d2bb3..f090b873 100644
--- a/roles/float-base/tasks/main.yml
+++ b/roles/float-base/tasks/main.yml
@@ -94,6 +94,9 @@
 - include_tasks: ipmi.yml
   when: ipmi_device.stat.exists == true
 
+- include_tasks: smart.yml
+  when: "not (testing | default(True))"
+
 - include_tasks: systemd.yml
 
 # Finally run some cleanups.
diff --git a/roles/float-base/tasks/smart.yml b/roles/float-base/tasks/smart.yml
new file mode 100644
index 00000000..601348c8
--- /dev/null
+++ b/roles/float-base/tasks/smart.yml
@@ -0,0 +1,18 @@
+---
+
+- name: Install smartmontools
+  apt:
+    name: smartmontools
+    state: present
+
+- name: Configure smartd
+  template:
+    src: smartd.conf.j2
+    dest: /etc/smartd.conf
+  notify: restart smartd
+
+- name: Disable smartd emails
+  file:
+    path: /etc/smartmontools/run.d/10mail
+    state: absent
+
diff --git a/roles/float-base/templates/smartd.conf.j2 b/roles/float-base/templates/smartd.conf.j2
new file mode 100644
index 00000000..b25ab7a0
--- /dev/null
+++ b/roles/float-base/templates/smartd.conf.j2
@@ -0,0 +1,8 @@
+# Long tests once a month, on the 15th at 15.00
+# Short tests every Monday at 11.00
+DEFAULT -a -s (L/../15/./15|S/../../1/11) -m {{ alert_email | default('root') }} -M exec /usr/share/smartmontools/smartd-runner
+
+# Host specific configuration
+{{ smartd_extra_config | default('') }}
+
+DEVICESCAN {{ '-d nvme' if 'nvme0n1' in ansible_devices else '' }}
-- 
GitLab