summaryrefslogtreecommitdiff
path: root/src/Propellor/Property/Reboot.hs
diff options
context:
space:
mode:
authorSean Whitton2016-06-12 12:02:47 +0900
committerSean Whitton2016-06-12 12:02:47 +0900
commite782cdfc64f9c3491f5f81101bd4e5e3de761eb8 (patch)
treecc7af6467eef3fce72d503ba8a220f36dd1aef26 /src/Propellor/Property/Reboot.hs
parent5a671a0841a8557e569f82748eb1eabb01b6c42e (diff)
bring IO code into propellor monad
Diffstat (limited to 'src/Propellor/Property/Reboot.hs')
-rw-r--r--src/Propellor/Property/Reboot.hs25
1 files 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