diff options
| author | Joey Hess <joey@kitenet.net> | 2014-10-10 13:45:43 -0400 |
|---|---|---|
| committer | Joey Hess <joey@kitenet.net> | 2014-10-10 13:47:41 -0400 |
| commit | df0c0e56cb60c7b00c1d1e715b990a9a1ca655ed (patch) | |
| tree | 77da98b538f1f43518c63bf09f98168d029a729d /src/Propellor | |
| parent | 0a34736d6afe8af548b717924b94fdb1ad34ff1e (diff) | |
Docker: Avoid committing container every time it's started up.
This was using a lot of disk space. Instead, start the container, and then
use the running container to check if docker is running it with the right
params. In the unlikely case that the params have changed, we still need to
commit the container and restart it. The common case of eg a reboot no
longer commits though.
Diffstat (limited to 'src/Propellor')
| -rw-r--r-- | src/Propellor/Property/Docker.hs | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index 65b65f5e..65a4a258 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -314,27 +314,33 @@ runningContainer :: ContainerId -> Image -> [RunParam] -> Property runningContainer cid@(ContainerId hn cn) image runps = containerDesc cid $ property "running" $ do l <- liftIO $ listContainers RunningContainers if cid `elem` l - then do - -- Check if the ident has changed; if so the - -- parameters of the container differ and it must - -- be restarted. - runningident <- liftIO $ getrunningident - if runningident == Just ident - then noChange - else do - liftIO $ print ("runningident", runningident, "vs", ident) - void $ liftIO $ stopContainer cid - restartcontainer + then checkident else ifM (liftIO $ elem cid <$> listContainers AllContainers) - ( restartcontainer + ( do + -- The container exists, but is not + -- running. Its parameters may have + -- changed, but we cannot tell without + -- starting it up first. + void $ liftIO $ startContainer cid + checkident , go image ) where ident = ContainerIdent image hn cn runps + -- Check if the ident has changed; if so the + -- parameters of the container differ and it must + -- be restarted. + checkident = do + runningident <- liftIO $ getrunningident + if runningident == Just ident + then noChange + else do + void $ liftIO $ stopContainer cid + restartcontainer + restartcontainer = do oldimage <- liftIO $ fromMaybe image <$> commitContainer cid - liftIO $ print ("restarting", oldimage) void $ liftIO $ removeContainer cid go oldimage @@ -435,6 +441,9 @@ provisionContainer cid = containerDesc cid $ property "provisioned" $ liftIO $ d stopContainer :: ContainerId -> IO Bool stopContainer cid = boolSystem dockercmd [Param "stop", Param $ fromContainerId cid ] +startContainer :: ContainerId -> IO Bool +startContainer cid = boolSystem dockercmd [Param "start", Param $ fromContainerId cid ] + stoppedContainer :: ContainerId -> Property stoppedContainer cid = containerDesc cid $ property desc $ ifM (liftIO $ elem cid <$> listContainers RunningContainers) |
