From e782cdfc64f9c3491f5f81101bd4e5e3de761eb8 Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Sun, 12 Jun 2016 12:02:47 +0900 Subject: bring IO code into propellor monad --- src/Propellor/Property/Reboot.hs | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/src/Propellor/Property/Reboot.hs b/src/Propellor/Property/Reboot.hs index 2d4319d9..aa762629 100644 --- a/src/Propellor/Property/Reboot.hs +++ b/src/Propellor/Property/Reboot.hs @@ -14,7 +14,6 @@ import Data.Version import Text.ParserCombinators.ReadP type KernelVersion = String -data KernelAvailable = Running | Installed | Unavailable now :: Property Linux now = tightenTargets $ cmdProperty "reboot" [] @@ -65,21 +64,15 @@ toDistroKernel = check (not <$> runningInstalledKernel) now toKernelNewerThan :: KernelVersion -> Property DebianLike toKernelNewerThan ver = property' ("reboot to kernel newer than " ++ ver) $ \w -> do - available <- liftIO $ newerKernelAvailable (readVersion ver) - case available of - Running -> noChange - Installed -> ensureProperty w now - Unavailable -> return FailedChange - -newerKernelAvailable :: Version -> IO KernelAvailable -newerKernelAvailable wantV = do - runningV <- readVersion <$> runningKernelVersion - installedV <- maximum . map readVersion <$> installedKernelVersions - if runningV >= wantV - then return Running - else if installedV >= wantV && runningV < wantV - then return Installed - else return Unavailable + let wantV = readVersion ver + runningV <- readVersion <$> liftIO runningKernelVersion + installedV <- maximum . map readVersion <$> + liftIO installedKernelVersions + if runningV >= wantV then noChange + else if installedV >= wantV && runningV < wantV + then ensureProperty w now + else error "newer kernel not installed" + >> return FailedChange runningInstalledKernel :: IO Bool runningInstalledKernel = do -- cgit v1.2.3