summaryrefslogtreecommitdiff
path: root/src/Propellor/Engine.hs
diff options
context:
space:
mode:
authorJoey Hess2014-12-07 17:09:55 -0400
committerJoey Hess2014-12-07 17:09:55 -0400
commit42a0c832483296fb111279fc3512a3dfd44f2089 (patch)
tree328c20c8a34e908806d240ec2dd5a02437c8df6b /src/Propellor/Engine.hs
parent5a932c382d4cbe65957eb0d3ebe4a9319d8dfd14 (diff)
Display a warning when ensureProperty is used on a property which has Info and is so prevented from propigating it.
Would much rather a type-based fixed, but this is all I have for now.
Diffstat (limited to 'src/Propellor/Engine.hs')
-rw-r--r--src/Propellor/Engine.hs32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/Propellor/Engine.hs b/src/Propellor/Engine.hs
index aa2ea4a3..dc8b2bc5 100644
--- a/src/Propellor/Engine.hs
+++ b/src/Propellor/Engine.hs
@@ -1,6 +1,14 @@
{-# LANGUAGE PackageImports #-}
-module Propellor.Engine where
+module Propellor.Engine (
+ mainProperties,
+ runPropellor,
+ ensureProperty,
+ ensureProperties,
+ fromHost,
+ onlyProcess,
+ processChainOutput,
+) where
import System.Exit
import System.IO
@@ -15,6 +23,7 @@ import System.FilePath
import System.Directory
import Propellor.Types
+import Propellor.Types.Empty
import Propellor.Message
import Propellor.Exception
import Propellor.Info
@@ -27,7 +36,7 @@ import Utility.Monad
mainProperties :: Host -> IO ()
mainProperties host = do
ret <- runPropellor host $
- ensureProperties [Property "overall" (ensureProperties $ hostProperties host) mempty]
+ ensureProperties [Property "overall" (ensurePropertiesWith ensureProperty' $ hostProperties host) mempty]
h <- mkMessageHandle
whenConsole h $
setTitle "propellor: done"
@@ -57,18 +66,27 @@ runEndAction host res (EndAction desc a) = actionMessageOn (hostName host) desc
--
-- Note that any info of the Property is not propigated out to
-- the enclosing Property, and so will not be available for propellor to
--- use.
+-- use. A warning message will be printed if this is detected.
ensureProperty :: Property -> Propellor Result
-ensureProperty = catchPropellor . propertySatisfy
+ensureProperty p = do
+ unless (isEmpty (getInfo p)) $
+ warningMessage $ "ensureProperty called on " ++ show p ++ "; will not propigate its info: " ++ show (getInfo p)
+ ensureProperty' p
+
+ensureProperty' :: Property -> Propellor Result
+ensureProperty' = catchPropellor . propertySatisfy
-- | Ensures a list of Properties, with a display of each as it runs.
ensureProperties :: [Property] -> Propellor Result
-ensureProperties ps = ensure ps NoChange
+ensureProperties = ensurePropertiesWith ensureProperty
+
+ensurePropertiesWith :: (Property -> Propellor Result) -> [Property] -> Propellor Result
+ensurePropertiesWith a ps = ensure ps NoChange
where
ensure [] rs = return rs
- ensure (l:ls) rs = do
+ ensure (p:ls) rs = do
hn <- asks hostName
- r <- actionMessageOn hn (propertyDesc l) (ensureProperty l)
+ r <- actionMessageOn hn (propertyDesc p) (a p)
ensure ls (r <> rs)
-- | Lifts an action into a different host.