summaryrefslogtreecommitdiff
path: root/cloudinit/distros/alpine.py
diff options
context:
space:
mode:
authorEmmanuel Thomé <Emmanuel.Thome@inria.fr>2020-09-15 21:51:52 +0200
committerGitHub <noreply@github.com>2020-09-15 15:51:52 -0400
commit6d332e5c8dbfb6521a530b1fa49d73da51efff96 (patch)
tree501e0dfcead71b501f1a1be1fc08df7c988975d4 /cloudinit/distros/alpine.py
parent839016e3014d783354bc380799d914ff81ee4efa (diff)
downloadvyos-cloud-init-6d332e5c8dbfb6521a530b1fa49d73da51efff96.tar.gz
vyos-cloud-init-6d332e5c8dbfb6521a530b1fa49d73da51efff96.zip
create a shutdown_command method in distro classes (#567)
Under FreeBSD, we want to use "shutdown -p" for poweroff. Alpine Linux also has some specificities. We choose to define a method that returns the shutdown command line to use, rather than a method that actually does the shutdown. This makes it easier to have the tests in test_handler_power_state do their verifications. Two tests are added for the special behaviours that are known so far.
Diffstat (limited to 'cloudinit/distros/alpine.py')
-rw-r--r--cloudinit/distros/alpine.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/cloudinit/distros/alpine.py b/cloudinit/distros/alpine.py
index e42443fc..e92ff3fb 100644
--- a/cloudinit/distros/alpine.py
+++ b/cloudinit/distros/alpine.py
@@ -162,4 +162,30 @@ class Distro(distros.Distro):
return self._preferred_ntp_clients
+ def shutdown_command(self, mode='poweroff', delay='now', message=None):
+ # called from cc_power_state_change.load_power_state
+ # Alpine has halt/poweroff/reboot, with the following specifics:
+ # - we use them rather than the generic "shutdown"
+ # - delay is given with "-d [integer]"
+ # - the integer is in seconds, cannot be "now", and takes no "+"
+ # - no message is supported (argument ignored, here)
+
+ command = [mode, "-d"]
+
+ # Convert delay from minutes to seconds, as Alpine's
+ # halt/poweroff/reboot commands take seconds rather than minutes.
+ if delay == "now":
+ # Alpine's commands do not understand "now".
+ command += ['0']
+ else:
+ try:
+ command.append(str(int(delay) * 60))
+ except ValueError as e:
+ raise TypeError(
+ "power_state[delay] must be 'now' or '+m' (minutes)."
+ " found '%s'." % (delay,)
+ ) from e
+
+ return command
+
# vi: ts=4 expandtab