propellor spin

This commit is contained in:
Joey Hess 2014-04-02 00:52:39 -04:00
parent 845162a2b1
commit 6f032f7ee3
Failed to extract signature
3 changed files with 47 additions and 17 deletions

View File

@ -44,15 +44,42 @@ docked
-> HostName
-> ContainerName
-> Property
docked findcontainer hn cn =
case findcontainer hn cn of
Nothing -> containerDesc cid $ Property "" $ do
warningMessage $ "missing definition for docker container \"" ++ fromContainerId cid
return FailedChange
Just (Container image containerprops) ->
provisionContainer cid
`requires`
runningContainer cid image containerprops
docked findc hn cn = findContainer findc hn cn $
\(Container image containerprops) ->
provisionContainer cid
`requires`
runningContainer cid image containerprops
where
cid = ContainerId hn cn
-- | Ensures that a docker container is no longer running.
unDocked
:: (HostName -> ContainerName -> Maybe (Container))
-> HostName
-> ContainerName
-> Property
unDocked findc hn cn = findContainer findc hn cn $
\(Container image _containerprops) ->
Property ("undocked " ++ fromContainerId cid) $
report <$> mapM id
[ stopContainer cid
, removeContainer cid
, removeImage image
]
where
cid = ContainerId hn cn
findContainer
:: (HostName -> ContainerName -> Maybe (Container))
-> HostName
-> ContainerName
-> (Container -> Property)
-> Property
findContainer findc hn cn mk = case findc hn cn of
Nothing -> containerDesc (ContainerId hn cn) $ Property "" $ do
warningMessage $ "missing definition for docker container \"" ++ fromContainerId cid
return FailedChange
Just container -> mk container
where
cid = ContainerId hn cn
@ -72,9 +99,6 @@ garbageCollected = propertyList "docker garbage collected"
report <$> (mapM removeContainer =<< listContainers AllContainers)
gcimages = Property "docker images garbage collected" $ do
report <$> (mapM removeImage =<< listImages)
report rmed
| or rmed = MadeChange
| otherwise = NoChange
-- | Pass to defaultMain to add docker containers.
-- You need to provide the function mapping from
@ -392,3 +416,9 @@ readIdentFile cid = fromMaybe (error "bad ident in identFile")
dockercmd :: String
dockercmd = "docker.io"
report :: [Bool] -> Result
report rmed
| or rmed = MadeChange
| otherwise = NoChange

View File

@ -48,10 +48,10 @@ class ActionResult a where
instance ActionResult Bool where
getActionResult False = ("failed", Vivid, Red)
getActionResult True = ("ok", Dull, Green)
getActionResult True = ("done", Dull, Green)
instance ActionResult Result where
getActionResult NoChange = ("unchanged", Dull, Green)
getActionResult NoChange = ("ok", Dull, Green)
getActionResult MadeChange = ("done", Vivid, Green)
getActionResult FailedChange = ("failed", Vivid, Red)

View File

@ -44,7 +44,7 @@ host hostname@"clam.kitenet.net" = Just
, File.dirExists "/var/www"
--, Docker.docked container hostname "webserver"
, Docker.garbageCollected
, Docker.docked container hostname "amd64-git-annex-builder"
, Docker.unDocked container hostname "amd64-git-annex-builder"
, Apt.installed ["git-annex", "mtr"]
-- Should come last as it reboots.
, Apt.installed ["systemd-sysv"] `onChange` Reboot.now
@ -54,8 +54,8 @@ host hostname@"orca.kitenet.net" = Just
, standardSystem Unstable
, Apt.unattendedUpgrades True
, Docker.configured
, Docker.docked container hostname "amd64-git-annex-builder"
, Docker.docked container hostname "i386-git-annex-builder"
, Docker.unDocked container hostname "amd64-git-annex-builder"
, Docker.unDocked container hostname "i386-git-annex-builder"
, Docker.garbageCollected
]
-- add more hosts here...