summaryrefslogtreecommitdiff
path: root/src/Propellor
diff options
context:
space:
mode:
authorJoey Hess2014-07-06 17:54:06 -0400
committerJoey Hess2014-07-06 17:54:06 -0400
commitcd37316dd5b512930bd9bce50617d4b16eee985a (patch)
treece7bd1bb970ae435b1fa16d99c30dff9bd7a4c7e /src/Propellor
parenteb39b45d618cacc48c8c25de1296802568aa0c26 (diff)
propigate required privdata fields out from docker containers to the hosts they're docked in
Diffstat (limited to 'src/Propellor')
-rw-r--r--src/Propellor/PrivData.hs5
-rw-r--r--src/Propellor/Property/Docker.hs15
2 files changed, 14 insertions, 6 deletions
diff --git a/src/Propellor/PrivData.hs b/src/Propellor/PrivData.hs
index e9e7e47f..d7d81a21 100644
--- a/src/Propellor/PrivData.hs
+++ b/src/Propellor/PrivData.hs
@@ -18,6 +18,7 @@ import qualified Data.Set as S
import Propellor.Types
import Propellor.Types.Info
import Propellor.Message
+import Propellor.Info
import Utility.Monad
import Utility.PartialPrelude
import Utility.Exception
@@ -62,6 +63,10 @@ withPrivData field context@(Context cname) mkprop = addinfo $ mkprop $ \a ->
return FailedChange
addinfo p = p { propertyInfo = propertyInfo p <> mempty { _privDataFields = S.singleton (field, context) } }
+addPrivDataField :: (PrivDataField, Context) -> Property
+addPrivDataField v = pureInfoProperty (show v) $
+ mempty { _privDataFields = S.singleton v }
+
{- Gets the requested field's value, in the specified context if it's
- available, from the host's local privdata cache. -}
getLocalPrivData :: PrivDataField -> Context -> IO (Maybe PrivData)
diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs
index 4d443986..4203d53d 100644
--- a/src/Propellor/Property/Docker.hs
+++ b/src/Propellor/Property/Docker.hs
@@ -87,8 +87,8 @@ cn2hn cn = cn ++ ".docker"
-- The container has its own Properties which are handled by running
-- propellor inside the container.
--
--- Additionally, the container can have DNS info, such as a CNAME.
--- These become info of the host(s) it's docked in.
+-- When the container's Properties include DNS info, such as a CNAME,
+-- that is propigated to the Info of the host(s) it's docked in.
--
-- Reverting this property ensures that the container is stopped and
-- removed.
@@ -97,7 +97,7 @@ docked
-> ContainerName
-> RevertableProperty
docked hosts cn = RevertableProperty
- ((maybe id exposeDnsInfos mhost) (go "docked" setup))
+ ((maybe id propigateInfo mhost) (go "docked" setup))
(go "undocked" teardown)
where
go desc a = property (desc ++ " " ++ cn) $ do
@@ -124,9 +124,12 @@ docked hosts cn = RevertableProperty
]
]
-exposeDnsInfos :: Host -> Property -> Property
-exposeDnsInfos (Host _ _ containerinfo) p = combineProperties (propertyDesc p) $
- p : map addDNS (S.toList $ _dns containerinfo)
+propigateInfo :: Host -> Property -> Property
+propigateInfo (Host _ _ containerinfo) p =
+ combineProperties (propertyDesc p) $ p : dnsprops ++ privprops
+ where
+ dnsprops = map addDNS (S.toList $ _dns containerinfo)
+ privprops = map addPrivDataField (S.toList $ _privDataFields containerinfo)
findContainer
:: Maybe Host