From a4f04fcb02d76d9903c5bbc65827565bad6c2d8c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 20 Nov 2014 15:15:28 -0400 Subject: propellor spin --- src/Propellor/Engine.hs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/Propellor/Engine.hs') diff --git a/src/Propellor/Engine.hs b/src/Propellor/Engine.hs index 3fa9ffc0..0cbf6247 100644 --- a/src/Propellor/Engine.hs +++ b/src/Propellor/Engine.hs @@ -11,12 +11,15 @@ import "mtl" Control.Monad.Reader import Control.Exception (bracket) import System.PosixCompat import System.Posix.IO +import Data.Maybe import Propellor.Types import Propellor.Message import Propellor.Exception import Propellor.Info import Utility.Exception +import Utility.PartialPrelude +import Utility.Monad runPropellor :: Host -> Propellor a -> IO a runPropellor host a = runReaderT (runWithHost a) host @@ -62,3 +65,18 @@ onlyProcess lockfile a = bracket lock unlock (const a) return l unlock = closeFd alreadyrunning = error "Propellor is already running on this host!" + +-- | Reads and displays each line from the Handle, except for the last line +-- which is a Result. +processChainOutput :: Handle -> IO Result +processChainOutput h = go Nothing + where + go lastline = do + v <- catchMaybeIO (hGetLine h) + case v of + Nothing -> pure $ fromMaybe FailedChange $ + readish =<< lastline + Just s -> do + maybe noop putStrLn lastline + hFlush stdout + go (Just s) -- cgit v1.3-2-g0d8e From 3669bd61d0e15682ce25b9a82788b8d69f87d123 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 20 Nov 2014 16:07:57 -0400 Subject: propellor spin --- src/Propellor/Engine.hs | 2 +- src/Propellor/Property/Chroot.hs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'src/Propellor/Engine.hs') diff --git a/src/Propellor/Engine.hs b/src/Propellor/Engine.hs index 0cbf6247..969769ce 100644 --- a/src/Propellor/Engine.hs +++ b/src/Propellor/Engine.hs @@ -77,6 +77,6 @@ processChainOutput h = go Nothing Nothing -> pure $ fromMaybe FailedChange $ readish =<< lastline Just s -> do - maybe noop putStrLn lastline + maybe noop (\l -> unless (null l) (putStrLn l)) lastline hFlush stdout go (Just s) diff --git a/src/Propellor/Property/Chroot.hs b/src/Propellor/Property/Chroot.hs index 9ce9ddaf..ba7bf96c 100644 --- a/src/Propellor/Property/Chroot.hs +++ b/src/Propellor/Property/Chroot.hs @@ -109,6 +109,7 @@ chain hostlist hn loc = case findHostNoAlias hostlist hn of where go h = do changeWorkingDirectory localdir + forceConsole onlyProcess (provisioningLock loc) $ do r <- runPropellor h $ ensureProperties $ hostProperties h putStrLn $ "\n" ++ show r -- cgit v1.3-2-g0d8e