From fbba9639d6d5b65d62aefe6d716e018c1a67e6c0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 02:34:42 -0400 Subject: propellor spin --- config-joey.hs | 2 +- src/Propellor/Property/Docker.hs | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/config-joey.hs b/config-joey.hs index 3bf01114..9d54b512 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -53,7 +53,7 @@ darkstar = host "darkstar.kitenet.net" & Apt.buildDep ["git-annex"] `period` Daily & Docker.configured ! Docker.docked hosts "android-git-annex" - ! Docker.docked hosts "webserver" + & Docker.docked hosts "test" clam :: Host clam = standardSystem "clam.kitenet.net" Unstable "amd64" diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index 8c2f3701..de3c64fb 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -30,6 +30,8 @@ module Propellor.Property.Docker ( cpuShares, link, ContainerAlias, + restart, + RestartPolicy(..), -- * Internal use chain, ) where @@ -150,7 +152,7 @@ findContainer mhost cid cn mk = case mhost of mkContainer :: ContainerId -> Host -> Maybe Container mkContainer cid@(ContainerId hn _cn) h = Container <$> fromVal (_dockerImage info) - <*> pure (map (\a -> a hn) (_dockerRunParams info)) + <*> pure (map (\mkparam -> mkparam hn) (_dockerRunParams info)) where info = _dockerinfo $ hostInfo h' h' = h @@ -159,6 +161,7 @@ mkContainer cid@(ContainerId hn _cn) h = Container -- name the container in a predictable way so we -- and the user can easily find it later & name (fromContainerId cid) + & restart RestartAlways -- | Causes *any* docker images that are not in use by running containers to -- be deleted. And deletes any containers that propellor has set up @@ -274,6 +277,27 @@ link linkwith calias = genProp "link" $ \hn -> -- Each container has its own alias namespace. type ContainerAlias = String +-- | Restart policy to apply when a container exits. +restart :: RestartPolicy -> Property +restart policy = runProp "restart" (serialize policy) + where + serialize NoRestart = "no" + serialize (RestartOnFailure Nothing) = "on-failure" + serialize (RestartOnFailure n) = "on-failure:" ++ show n + serialize RestartAlways = "always" + +-- | NoRestart makes docker not restart a container when it exits +-- Note that this includes not restarting it on boot! +-- +-- RestartOnFailure will restart the container if it exits nonzero. +-- A max-retry value can be provided to prevent repeated restarts. +-- +-- RestartAlways is the default for docker containers configured by +-- propellor; as well as keeping badly behaved containers running, +-- it ensures that containers get started back up after reboot or +-- after docker is upgraded. +data RestartPolicy = NoRestart | RestartOnFailure (Maybe Int) | RestartAlways + -- | A container is identified by its name, and the host -- on which it's deployed. data ContainerId = ContainerId HostName ContainerName -- cgit v1.2.3