From 29442f222ec2342c6dea7036e80e15eefa4158c0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 6 Dec 2014 13:21:19 -0400 Subject: Reboot.atEnd --- src/Propellor/Property/Reboot.hs | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'src/Propellor/Property/Reboot.hs') diff --git a/src/Propellor/Property/Reboot.hs b/src/Propellor/Property/Reboot.hs index 25e53159..3a725838 100644 --- a/src/Propellor/Property/Reboot.hs +++ b/src/Propellor/Property/Reboot.hs @@ -1,7 +1,29 @@ module Propellor.Property.Reboot where import Propellor +import Utility.SafeCommand -now :: Property -now = cmdProperty "reboot" [] - `describe` "reboot now" +-- | Schedules a reboot at the end of the current propellor run. +-- +-- The Result code of the endire propellor run can be checked; +-- the reboot proceeds only if the function returns True. +-- +-- The reboot can be forced to run, which bypasses the init system. Useful +-- if the init system might not be running for some reason. +atEnd :: Bool -> (Result -> Bool) -> Property +atEnd force resultok = property "scheduled reboot at end of propellor run" $ do + endAction "rebooting" atend + return NoChange + where + atend r + | resultok r = liftIO $ + ifM (boolSystem "reboot" rebootparams) + ( return MadeChange + , return FailedChange + ) + | otherwise = do + warningMessage "Not rebooting, due to status of propellor run." + return FailedChange + rebootparams + | force = [Param "--force"] + | otherwise = [] -- cgit v1.3-2-g0d8e From bdbf787e2cf1123429491da5f06f46a8dc8774f6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 6 Dec 2014 13:32:53 -0400 Subject: keep and use Reboot.now --- src/Propellor/Property/HostingProvider/DigitalOcean.hs | 6 +++--- src/Propellor/Property/Reboot.hs | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src/Propellor/Property/Reboot.hs') diff --git a/src/Propellor/Property/HostingProvider/DigitalOcean.hs b/src/Propellor/Property/HostingProvider/DigitalOcean.hs index 32165d48..4d2534ec 100644 --- a/src/Propellor/Property/HostingProvider/DigitalOcean.hs +++ b/src/Propellor/Property/HostingProvider/DigitalOcean.hs @@ -5,6 +5,7 @@ module Propellor.Property.HostingProvider.DigitalOcean ( import Propellor import qualified Propellor.Property.Apt as Apt import qualified Propellor.Property.File as File +import qualified Propellor.Property.Reboot as Reboot import Data.List @@ -24,9 +25,8 @@ distroKernel = propertyList "digital ocean distro kernel hack" [ "LOAD_KEXEC=true" , "USE_GRUB_CONFIG=true" ] `describe` "kexec configured" - , check (not <$> runningInstalledKernel) - (cmdProperty "reboot" []) - `describe` "running installed kernel" + , check (not <$> runningInstalledKernel) Reboot.now + `describe` "running installed kernel" ] runningInstalledKernel :: IO Bool diff --git a/src/Propellor/Property/Reboot.hs b/src/Propellor/Property/Reboot.hs index 3a725838..c2628689 100644 --- a/src/Propellor/Property/Reboot.hs +++ b/src/Propellor/Property/Reboot.hs @@ -3,6 +3,10 @@ module Propellor.Property.Reboot where import Propellor import Utility.SafeCommand +now :: Property +now = cmdProperty "reboot" [] + `describe` "reboot now" + -- | Schedules a reboot at the end of the current propellor run. -- -- The Result code of the endire propellor run can be checked; -- cgit v1.3-2-g0d8e