From 2fd17d628c380059f2f4c9faab1de413b99e8716 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 1 Apr 2014 12:37:57 -0400 Subject: fix 2 docker bugs --- Propellor/Property/Docker.hs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'Propellor') diff --git a/Propellor/Property/Docker.hs b/Propellor/Property/Docker.hs index cacff5ce..3e19db4f 100644 --- a/Propellor/Property/Docker.hs +++ b/Propellor/Property/Docker.hs @@ -99,7 +99,7 @@ hasContainer hn cn findcontainer = ensureContainer :: ContainerId -> Image -> [Containerized Property] -> IO Result ensureContainer cid image containerprops = do - l <- listRunningContainers + l <- listContainers Running if cid `elem` l then do runningident <- getrunningident @@ -111,7 +111,8 @@ ensureContainer cid image containerprops = do removeContainer cid go oldimage else do - removeContainer cid + whenM (elem cid <$> listContainers Stopped) $ + removeContainer cid go image where ident = ContainerIdent image cid runps @@ -199,14 +200,23 @@ commitContainer cid = catchMaybeIO $ takeWhile (/= '\n') <$> readProcess dockercmd ["commit", fromContainerId cid] +data ContainerStatus = Running | Stopped + deriving (Eq) + -- | Only lists propellor managed containers. -listRunningContainers :: IO [ContainerId] -listRunningContainers = +listContainers :: ContainerStatus -> IO [ContainerId] +listContainers status = catMaybes . map readish . catMaybes . map (lastMaybe . words) . lines - <$> readProcess dockercmd ["ps", "--no-trunc"] + <$> readProcess dockercmd ps + where + ps + | status == Stopped = baseps ++ ["--all"] + | otherwise = baseps + baseps = ["ps", "--no-trunc"] runProp :: String -> RunParam -> Containerized Property -runProp field val = Containerized [param] (Property param (return NoChange)) +runProp field val = + Containerized ["--" ++ param] (Property param (return NoChange)) where param = field++"="++val -- cgit v1.2.3