summaryrefslogtreecommitdiff
path: root/roles/storage/zfs/syncoid/templates/autosuspend.py.j2
diff options
context:
space:
mode:
Diffstat (limited to 'roles/storage/zfs/syncoid/templates/autosuspend.py.j2')
-rw-r--r--roles/storage/zfs/syncoid/templates/autosuspend.py.j234
1 files changed, 30 insertions, 4 deletions
diff --git a/roles/storage/zfs/syncoid/templates/autosuspend.py.j2 b/roles/storage/zfs/syncoid/templates/autosuspend.py.j2
index a6217ca0..9dc9bc52 100644
--- a/roles/storage/zfs/syncoid/templates/autosuspend.py.j2
+++ b/roles/storage/zfs/syncoid/templates/autosuspend.py.j2
@@ -119,12 +119,38 @@ class AutoSuspender(object):
except dbus.exceptions.DBusException as error:
print("ERR: %s" % error)
+ def spindown_disks(self, disks):
+ subprocess.run(["hdparm", "-y"] + disks)
+
+
+def print_usage():
+ print("usage: %s (system|disks) [ /dev/sda [ /dev/sdb [ ... ]]] " % sys.argv[0])
+
if __name__ == "__main__":
+ if len(sys.argv) < 2:
+ print_usage()
+ sys.exit(1)
+ mode = sys.argv[1]
+ disks = []
+ if mode not in ["system", "disks"]:
+ print_usage()
+ sys.exit(1)
+ if mode == "disks":
+ if len(sys.argv) < 3:
+ print_usage()
+ sys.exit(1)
+ else:
+ disks = sys.argv[2:]
+
s = AutoSuspender()
- print("checking if the system can be suspended:")
+ print("checking for suspend inhibitors:")
if s.check():
- print("trying to suspend system")
- s.suspend()
+ if mode == "system":
+ print("trying to suspend system")
+ s.suspend()
+ elif mode == "disks":
+ print("trying to spindown disks")
+ s.spindown_disks(disks)
else:
- print("not suspending system because at least one check failed.")
+ print("not suspending because at least one check failed.")