summaryrefslogtreecommitdiff
path: root/src/Propellor/Engine.hs
diff options
context:
space:
mode:
authorJoey Hess2015-10-16 14:20:13 -0400
committerJoey Hess2015-10-16 14:23:01 -0400
commite66b62f40bcb29ca62c905dabe87cc6e91a6bccd (patch)
treeab317c5bccecfb347c4dc4d9f122334532397fba /src/Propellor/Engine.hs
parente5b5a190b7de979cd889c92ecff530417534864e (diff)
Added Propellor.Property.Spin, which can be used to make a host be a controller of other hosts.
The hard part of this is avoiding loops of controllers. To make that work, a ControllerChain is passed to the host that's spun, and is added to the Info of the host being spun, where the controller property can check it to detect an avoid a loop. That needed an expansion of the CmdLine data type. I made the new ControlledRun only be used when there is a ControllerChain provided. This avoids breaking backwards compatability with old propellor deployments, as --spin still uses SimpleRun. Note: Making an old propellor deployment be controlled by a controller won't work until it's been updated to this commit, so it knows about the ControlledRun parameter. (Untested)
Diffstat (limited to 'src/Propellor/Engine.hs')
-rw-r--r--src/Propellor/Engine.hs11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/Propellor/Engine.hs b/src/Propellor/Engine.hs
index 0fdbb995..87fa4cd2 100644
--- a/src/Propellor/Engine.hs
+++ b/src/Propellor/Engine.hs
@@ -26,6 +26,8 @@ import Propellor.Types
import Propellor.Message
import Propellor.Exception
import Propellor.Info
+import Propellor.Types.Info
+import Propellor.Types.CmdLine
import Propellor.Property
import Utility.Exception
import Utility.PartialPrelude
@@ -33,9 +35,9 @@ import Utility.Monad
-- | Gets the Properties of a Host, and ensures them all,
-- with nice display of what's being done.
-mainProperties :: Host -> IO ()
-mainProperties host = do
- ret <- runPropellor host $
+mainProperties :: ControllerChain -> Host -> IO ()
+mainProperties cc host = do
+ ret <- runPropellor host' $
ensureProperties [ignoreInfo $ infoProperty "overall" (ensureProperties ps) mempty mempty]
h <- mkMessageHandle
whenConsole h $
@@ -45,7 +47,8 @@ mainProperties host = do
FailedChange -> exitWith (ExitFailure 1)
_ -> exitWith ExitSuccess
where
- ps = map ignoreInfo $ hostProperties host
+ ps = map ignoreInfo $ hostProperties host'
+ host' = addHostInfo host (InfoVal cc)
-- | Runs a Propellor action with the specified host.
--