From 6673b6014fdc04976b5bbd95187b28dcbf1a7e19 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 13 Oct 2014 15:05:18 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs index 056578a1..20ba7844 100644 --- a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs +++ b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs @@ -65,6 +65,7 @@ tree buildarch = combineProperties "gitannexbuilder tree" buildDepsApt :: Property buildDepsApt = combineProperties "gitannexbuilder build deps" [ Apt.buildDep ["git-annex"] + , Apt.installed ["liblockfile-simple-perl"] , buildDepsNoHaskellLibs , "git-annex source build deps installed" ==> Apt.buildDepIn builddir ] -- cgit v1.3-2-g0d8e From 158cbd0fbf414cbaede9b030edbf77a5890098a4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 14 Oct 2014 19:22:01 -0400 Subject: android chroot switched to jessie --- src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs index 20ba7844..d9dc114e 100644 --- a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs +++ b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs @@ -132,7 +132,7 @@ androidContainer dockerImage name setupgitannexdir gitannexdir = Docker.containe chrootsetup = scriptProperty [ "cd " ++ gitannexdir ++ " && ./standalone/android/buildchroot-inchroot" ] - osver = System (Debian (Stable "wheezy")) "i386" + osver = System (Debian Testing) "i386" -- once jessie is released, use: (Stable "jessie") -- armel builder has a companion container using amd64 that -- runs the build first to get TH splices. They need -- cgit v1.3-2-g0d8e From bf238a34ee3c72bd579deb8991fe7529b99bbe22 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 15 Oct 2014 00:49:39 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs index d9dc114e..8604cdf9 100644 --- a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs +++ b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs @@ -117,7 +117,7 @@ androidContainer dockerImage name setupgitannexdir gitannexdir = Docker.containe & User.accountFor builduser & File.dirExists gitbuilderdir & File.ownerGroup homedir builduser builduser - & buildDepsNoHaskellLibs + & buildDepsApt & flagFile chrootsetup ("/chrootsetup") `requires` setupgitannexdir & Docker.tweaked -- cgit v1.3-2-g0d8e From 8a6da9ff731e446a8e74befae1f8dc610cce6082 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 16 Oct 2014 12:13:55 -0400 Subject: full auto baybee! --- src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs index 8604cdf9..d480e024 100644 --- a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs +++ b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs @@ -114,17 +114,14 @@ androidContainer dockerImage name setupgitannexdir gitannexdir = Docker.containe & os osver & Apt.stdSourcesList & Apt.installed ["systemd"] + & Docker.tweaked & User.accountFor builduser & File.dirExists gitbuilderdir & File.ownerGroup homedir builduser builduser & buildDepsApt & flagFile chrootsetup ("/chrootsetup") `requires` setupgitannexdir - & Docker.tweaked - -- TODO: automate installing haskell libs - -- (Currently have to run - -- git-annex/standalone/android/install-haskell-packages - -- which is not fully automated.) + & flagFile haskellpkgsinstalled ("/haskellpkgsinstalled") where -- Use git-annex's android chroot setup script, which will install -- ghc-android and the NDK, all build deps, etc, in the home @@ -132,6 +129,9 @@ androidContainer dockerImage name setupgitannexdir gitannexdir = Docker.containe chrootsetup = scriptProperty [ "cd " ++ gitannexdir ++ " && ./standalone/android/buildchroot-inchroot" ] + haskellpkgsinstalled = userScriptProperty "builder" + [ "cd " ++ gitannexdir ++ " && ./install-haskell-packages" + ] osver = System (Debian Testing) "i386" -- once jessie is released, use: (Stable "jessie") -- armel builder has a companion container using amd64 that -- cgit v1.3-2-g0d8e From 0f1fcc24f89a7b8f8be1bcd71e800739d46b7912 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 16 Oct 2014 17:02:16 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 77af65fa..bd9e01e2 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -72,7 +72,7 @@ oldUseNetServer hosts = propertyList ("olduse.net server") oldUseNetShellBox :: Property oldUseNetShellBox = propertyList "olduse.net shellbox" [ oldUseNetInstalled "oldusenet" - , Service.running "oldusenet" + , Service.running "shellinabox" ] oldUseNetInstalled :: Apt.Package -> Property -- cgit v1.3-2-g0d8e From b971afeccd69c1f3b597c071fd77d1d5273bde6f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 17 Oct 2014 12:38:07 -0400 Subject: propellor spin --- privdata/privdata.gpg | 1491 +++++++++++++++++++++++++------------------------ 1 file changed, 746 insertions(+), 745 deletions(-) diff --git a/privdata/privdata.gpg b/privdata/privdata.gpg index 47484081..62fb3b9a 100644 --- a/privdata/privdata.gpg +++ b/privdata/privdata.gpg @@ -1,749 +1,750 @@ -----BEGIN PGP MESSAGE----- Version: GnuPG v1 -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 -79GkLJPqeFEOjKcDQw== -=jEhB +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 +qBLx2RNdk/20DARMGLTj28IMTS4X/w== +=sXBE -----END PGP MESSAGE----- -- cgit v1.3-2-g0d8e 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.3-2-g0d8e From 9d7a442182a1e0d526f96b422b87353eccc40ae3 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 02:36:08 -0400 Subject: propellor spin --- src/Propellor/Property/Docker.hs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index de3c64fb..b8e751d5 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -286,16 +286,16 @@ restart policy = runProp "restart" (serialize policy) 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 +-- | 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. +-- +-- 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 too many restarts. data RestartPolicy = NoRestart | RestartOnFailure (Maybe Int) | RestartAlways -- | A container is identified by its name, and the host -- cgit v1.3-2-g0d8e From 9e3485a13b11a464acaa96a4dc0b7cf177e5d102 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 02:41:47 -0400 Subject: propellor spin --- src/Propellor/Property/Docker.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index b8e751d5..428d2c20 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -161,7 +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 + -- & 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 -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From a0e4c872b6733cba1b539afa43c644103c14d63b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 02:50:50 -0400 Subject: propellor spin --- src/Propellor/Property/Docker.hs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index 428d2c20..120b51cf 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -161,7 +161,6 @@ 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 @@ -383,7 +382,13 @@ runningContainer cid@(ContainerId hn cn) image runps = containerDesc cid $ prope shim <- liftIO $ Shim.setup (localdir "propellor") (localdir shimdir cid) liftIO $ writeFile (identFile cid) (show ident) ensureProperty $ boolProperty "run" $ runContainer img - (runps ++ ["-i", "-d", "-t"]) + -- Restart by default so container comes up on + -- boot or when docker is upgraded. This is put + -- here, rather than adding a default Property + -- in mkContainer, to avoid changing the ident + -- of existing containers. Any restart property + -- will override it. + ("--restart=always" : runps ++ ["-i", "-d", "-t"]) [shim, "--docker", fromContainerId cid] -- | Called when propellor is running inside a docker container. -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From 93099b862768235d3f9936435f6f65292b8d9b7c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 03:18:52 -0400 Subject: bugfix --- debian/changelog | 8 ++++++++ src/Propellor/Property.hs | 2 +- src/Propellor/Property/Docker.hs | 3 ++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 012826bd..043ef508 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +propellor (0.9.1) UNRELEASED; urgency=medium + + * Docker: Add ability to control when containers restart. + * Docker: Defaut to always restarting containers, so they come back + up after reboots and docker daemon upgrades. + + -- Joey Hess Thu, 23 Oct 2014 03:05:22 -0400 + propellor (0.9.0) unstable; urgency=medium * Avoid encoding the current stable suite in propellor's code, diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index ce825192..87136042 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -135,7 +135,7 @@ host hn = Host hn [] mempty -- -- Can add Properties and RevertableProperties (&) :: IsProp p => Host -> p -> Host -(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p) +(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p) infixl 1 & diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index 120b51cf..358cc8c3 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -282,7 +282,7 @@ restart policy = runProp "restart" (serialize policy) where serialize NoRestart = "no" serialize (RestartOnFailure Nothing) = "on-failure" - serialize (RestartOnFailure n) = "on-failure:" ++ show n + serialize (RestartOnFailure (Just n)) = "on-failure:" ++ show n serialize RestartAlways = "always" -- | RestartAlways is the default for docker containers configured by @@ -388,6 +388,7 @@ runningContainer cid@(ContainerId hn cn) image runps = containerDesc cid $ prope -- in mkContainer, to avoid changing the ident -- of existing containers. Any restart property -- will override it. + -- This is a hack. TODO: Move to correct place. ("--restart=always" : runps ++ ["-i", "-d", "-t"]) [shim, "--docker", fromContainerId cid] -- cgit v1.3-2-g0d8e From 856a4c673cc890b1e2e5ee749bdc70ea6d7f1cb9 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 03:27:40 -0400 Subject: propellor spin --- debian/changelog | 2 +- src/Propellor/Property.hs | 8 ++++++++ src/Propellor/Property/Docker.hs | 22 +++++++++------------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/debian/changelog b/debian/changelog index 043ef508..9e90877d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,7 @@ propellor (0.9.1) UNRELEASED; urgency=medium * Docker: Add ability to control when containers restart. - * Docker: Defaut to always restarting containers, so they come back + * Docker: Default to always restarting containers, so they come back up after reboots and docker daemon upgrades. -- Joey Hess Thu, 23 Oct 2014 03:05:22 -0400 diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index 87136042..4b957317 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -145,6 +145,14 @@ h ! p = h & revert p infixl 1 ! +-- | Like (&), but adds the property as the first property of the host. +-- Normally, property order should not matter, but this is useful +-- when it does. +(&^) :: IsProp p => Host -> p -> Host +(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is) + +infixl 1 &^ + -- Changes the action that is performed to satisfy a property. adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property adjustProperty p f = p { propertySatisfy = f (propertySatisfy p) } diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index 358cc8c3..b717fe19 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -19,7 +19,6 @@ module Propellor.Property.Docker ( -- * Container configuration dns, hostname, - name, publish, expose, user, @@ -156,10 +155,14 @@ mkContainer cid@(ContainerId hn _cn) h = Container where info = _dockerinfo $ hostInfo h' h' = h - -- expose propellor directory inside the container + -- Restart by default so container comes up on + -- boot or when docker is upgraded. + &^ restart RestartAlways + -- Expose propellor directory inside the container. & volume (localdir++":"++localdir) - -- name the container in a predictable way so we - -- and the user can easily find it later + -- Name the container in a predictable way so we + -- and the user can easily find it later. This property + -- comes last, so it cannot be overridden. & name (fromContainerId cid) -- | Causes *any* docker images that are not in use by running containers to @@ -219,7 +222,7 @@ dns = runProp "dns" hostname :: String -> Property hostname = runProp "hostname" --- | Set name for container. (Normally done automatically.) +-- | Set name of container. name :: String -> Property name = runProp "name" @@ -382,14 +385,7 @@ runningContainer cid@(ContainerId hn cn) image runps = containerDesc cid $ prope shim <- liftIO $ Shim.setup (localdir "propellor") (localdir shimdir cid) liftIO $ writeFile (identFile cid) (show ident) ensureProperty $ boolProperty "run" $ runContainer img - -- Restart by default so container comes up on - -- boot or when docker is upgraded. This is put - -- here, rather than adding a default Property - -- in mkContainer, to avoid changing the ident - -- of existing containers. Any restart property - -- will override it. - -- This is a hack. TODO: Move to correct place. - ("--restart=always" : runps ++ ["-i", "-d", "-t"]) + (runps ++ ["-i", "-d", "-t"]) [shim, "--docker", fromContainerId cid] -- | Called when propellor is running inside a docker container. -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From fd0670def7fd2f384cb94a3667e497df9bea19af Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 03:38:50 -0400 Subject: todo --- doc/todo/docker_todo_list.mdwn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/todo/docker_todo_list.mdwn b/doc/todo/docker_todo_list.mdwn index 1321445d..72ded426 100644 --- a/doc/todo/docker_todo_list.mdwn +++ b/doc/todo/docker_todo_list.mdwn @@ -1,3 +1,5 @@ * There is no way for a property of a docker container to require some property be met outside the container. For example, some servers need ntp installed for a good date source. +* The SimpleSh was added before `docker exec` existed, and could probably + be eliminated by using that. -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From 7637ea0af9ff4056cbdc16f25016785442d4b97e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:23:25 -0400 Subject: propellor spin --- debian/changelog | 2 +- src/Propellor/Property.hs | 10 +--------- src/Propellor/Property/Docker.hs | 22 +++++++++++++--------- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9e90877d..043ef508 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,7 @@ propellor (0.9.1) UNRELEASED; urgency=medium * Docker: Add ability to control when containers restart. - * Docker: Default to always restarting containers, so they come back + * Docker: Defaut to always restarting containers, so they come back up after reboots and docker daemon upgrades. -- Joey Hess Thu, 23 Oct 2014 03:05:22 -0400 diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index 4b957317..ce825192 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -135,7 +135,7 @@ host hn = Host hn [] mempty -- -- Can add Properties and RevertableProperties (&) :: IsProp p => Host -> p -> Host -(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p) +(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p) infixl 1 & @@ -145,14 +145,6 @@ h ! p = h & revert p infixl 1 ! --- | Like (&), but adds the property as the first property of the host. --- Normally, property order should not matter, but this is useful --- when it does. -(&^) :: IsProp p => Host -> p -> Host -(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is) - -infixl 1 &^ - -- Changes the action that is performed to satisfy a property. adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property adjustProperty p f = p { propertySatisfy = f (propertySatisfy p) } diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index b717fe19..358cc8c3 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -19,6 +19,7 @@ module Propellor.Property.Docker ( -- * Container configuration dns, hostname, + name, publish, expose, user, @@ -155,14 +156,10 @@ mkContainer cid@(ContainerId hn _cn) h = Container where info = _dockerinfo $ hostInfo h' h' = h - -- Restart by default so container comes up on - -- boot or when docker is upgraded. - &^ restart RestartAlways - -- Expose propellor directory inside the container. + -- expose propellor directory inside the container & volume (localdir++":"++localdir) - -- Name the container in a predictable way so we - -- and the user can easily find it later. This property - -- comes last, so it cannot be overridden. + -- name the container in a predictable way so we + -- and the user can easily find it later & name (fromContainerId cid) -- | Causes *any* docker images that are not in use by running containers to @@ -222,7 +219,7 @@ dns = runProp "dns" hostname :: String -> Property hostname = runProp "hostname" --- | Set name of container. +-- | Set name for container. (Normally done automatically.) name :: String -> Property name = runProp "name" @@ -385,7 +382,14 @@ runningContainer cid@(ContainerId hn cn) image runps = containerDesc cid $ prope shim <- liftIO $ Shim.setup (localdir "propellor") (localdir shimdir cid) liftIO $ writeFile (identFile cid) (show ident) ensureProperty $ boolProperty "run" $ runContainer img - (runps ++ ["-i", "-d", "-t"]) + -- Restart by default so container comes up on + -- boot or when docker is upgraded. This is put + -- here, rather than adding a default Property + -- in mkContainer, to avoid changing the ident + -- of existing containers. Any restart property + -- will override it. + -- This is a hack. TODO: Move to correct place. + ("--restart=always" : runps ++ ["-i", "-d", "-t"]) [shim, "--docker", fromContainerId cid] -- | Called when propellor is running inside a docker container. -- cgit v1.3-2-g0d8e From 5bfeb3f9aad1108907544deb0b04ccc58b5614c0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:25:07 -0400 Subject: Revert "propellor spin" This reverts commit 7637ea0af9ff4056cbdc16f25016785442d4b97e. --- debian/changelog | 2 +- src/Propellor/Property.hs | 10 +++++++++- src/Propellor/Property/Docker.hs | 22 +++++++++------------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/debian/changelog b/debian/changelog index 043ef508..9e90877d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,7 @@ propellor (0.9.1) UNRELEASED; urgency=medium * Docker: Add ability to control when containers restart. - * Docker: Defaut to always restarting containers, so they come back + * Docker: Default to always restarting containers, so they come back up after reboots and docker daemon upgrades. -- Joey Hess Thu, 23 Oct 2014 03:05:22 -0400 diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index ce825192..4b957317 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -135,7 +135,7 @@ host hn = Host hn [] mempty -- -- Can add Properties and RevertableProperties (&) :: IsProp p => Host -> p -> Host -(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p) +(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p) infixl 1 & @@ -145,6 +145,14 @@ h ! p = h & revert p infixl 1 ! +-- | Like (&), but adds the property as the first property of the host. +-- Normally, property order should not matter, but this is useful +-- when it does. +(&^) :: IsProp p => Host -> p -> Host +(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is) + +infixl 1 &^ + -- Changes the action that is performed to satisfy a property. adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property adjustProperty p f = p { propertySatisfy = f (propertySatisfy p) } diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index 358cc8c3..b717fe19 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -19,7 +19,6 @@ module Propellor.Property.Docker ( -- * Container configuration dns, hostname, - name, publish, expose, user, @@ -156,10 +155,14 @@ mkContainer cid@(ContainerId hn _cn) h = Container where info = _dockerinfo $ hostInfo h' h' = h - -- expose propellor directory inside the container + -- Restart by default so container comes up on + -- boot or when docker is upgraded. + &^ restart RestartAlways + -- Expose propellor directory inside the container. & volume (localdir++":"++localdir) - -- name the container in a predictable way so we - -- and the user can easily find it later + -- Name the container in a predictable way so we + -- and the user can easily find it later. This property + -- comes last, so it cannot be overridden. & name (fromContainerId cid) -- | Causes *any* docker images that are not in use by running containers to @@ -219,7 +222,7 @@ dns = runProp "dns" hostname :: String -> Property hostname = runProp "hostname" --- | Set name for container. (Normally done automatically.) +-- | Set name of container. name :: String -> Property name = runProp "name" @@ -382,14 +385,7 @@ runningContainer cid@(ContainerId hn cn) image runps = containerDesc cid $ prope shim <- liftIO $ Shim.setup (localdir "propellor") (localdir shimdir cid) liftIO $ writeFile (identFile cid) (show ident) ensureProperty $ boolProperty "run" $ runContainer img - -- Restart by default so container comes up on - -- boot or when docker is upgraded. This is put - -- here, rather than adding a default Property - -- in mkContainer, to avoid changing the ident - -- of existing containers. Any restart property - -- will override it. - -- This is a hack. TODO: Move to correct place. - ("--restart=always" : runps ++ ["-i", "-d", "-t"]) + (runps ++ ["-i", "-d", "-t"]) [shim, "--docker", fromContainerId cid] -- | Called when propellor is running inside a docker container. -- cgit v1.3-2-g0d8e From 80f5b53f1b7fdc876d5e45df68c29f53bd9666b2 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:26:05 -0400 Subject: propellor spin --- debian/changelog | 8 -------- doc/todo/docker_todo_list.mdwn | 2 -- src/Propellor/Property.hs | 10 +--------- src/Propellor/Property/Docker.hs | 30 ++++++++++++++---------------- 4 files changed, 15 insertions(+), 35 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9e90877d..012826bd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,3 @@ -propellor (0.9.1) UNRELEASED; urgency=medium - - * Docker: Add ability to control when containers restart. - * Docker: Default to always restarting containers, so they come back - up after reboots and docker daemon upgrades. - - -- Joey Hess Thu, 23 Oct 2014 03:05:22 -0400 - propellor (0.9.0) unstable; urgency=medium * Avoid encoding the current stable suite in propellor's code, diff --git a/doc/todo/docker_todo_list.mdwn b/doc/todo/docker_todo_list.mdwn index 72ded426..1321445d 100644 --- a/doc/todo/docker_todo_list.mdwn +++ b/doc/todo/docker_todo_list.mdwn @@ -1,5 +1,3 @@ * There is no way for a property of a docker container to require some property be met outside the container. For example, some servers need ntp installed for a good date source. -* The SimpleSh was added before `docker exec` existed, and could probably - be eliminated by using that. diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index 4b957317..ce825192 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -135,7 +135,7 @@ host hn = Host hn [] mempty -- -- Can add Properties and RevertableProperties (&) :: IsProp p => Host -> p -> Host -(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p) +(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p) infixl 1 & @@ -145,14 +145,6 @@ h ! p = h & revert p infixl 1 ! --- | Like (&), but adds the property as the first property of the host. --- Normally, property order should not matter, but this is useful --- when it does. -(&^) :: IsProp p => Host -> p -> Host -(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is) - -infixl 1 &^ - -- Changes the action that is performed to satisfy a property. adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property adjustProperty p f = p { propertySatisfy = f (propertySatisfy p) } diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index b717fe19..de3c64fb 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -19,6 +19,7 @@ module Propellor.Property.Docker ( -- * Container configuration dns, hostname, + name, publish, expose, user, @@ -155,15 +156,12 @@ mkContainer cid@(ContainerId hn _cn) h = Container where info = _dockerinfo $ hostInfo h' h' = h - -- Restart by default so container comes up on - -- boot or when docker is upgraded. - &^ restart RestartAlways - -- Expose propellor directory inside the container. + -- expose propellor directory inside the container & volume (localdir++":"++localdir) - -- Name the container in a predictable way so we - -- and the user can easily find it later. This property - -- comes last, so it cannot be overridden. + -- 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 @@ -222,7 +220,7 @@ dns = runProp "dns" hostname :: String -> Property hostname = runProp "hostname" --- | Set name of container. +-- | Set name for container. (Normally done automatically.) name :: String -> Property name = runProp "name" @@ -285,19 +283,19 @@ restart policy = runProp "restart" (serialize policy) where serialize NoRestart = "no" serialize (RestartOnFailure Nothing) = "on-failure" - serialize (RestartOnFailure (Just n)) = "on-failure:" ++ show n + serialize (RestartOnFailure n) = "on-failure:" ++ show n serialize RestartAlways = "always" --- | 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. --- --- NoRestart makes docker not restart a container when it exits +-- | 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 too many restarts. +-- 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 -- cgit v1.3-2-g0d8e From 45ce3a5e8ccf90e357dbaf6e0152daa4de88b7fd Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:28:10 -0400 Subject: propellor spin --- config-joey.hs | 2 +- src/Propellor/Property/Docker.hs | 26 +------------------------- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/config-joey.hs b/config-joey.hs index 9d54b512..3bf01114 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 "test" + ! Docker.docked hosts "webserver" clam :: Host clam = standardSystem "clam.kitenet.net" Unstable "amd64" diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index de3c64fb..8c2f3701 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -30,8 +30,6 @@ module Propellor.Property.Docker ( cpuShares, link, ContainerAlias, - restart, - RestartPolicy(..), -- * Internal use chain, ) where @@ -152,7 +150,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 (\mkparam -> mkparam hn) (_dockerRunParams info)) + <*> pure (map (\a -> a hn) (_dockerRunParams info)) where info = _dockerinfo $ hostInfo h' h' = h @@ -161,7 +159,6 @@ 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 @@ -277,27 +274,6 @@ 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.3-2-g0d8e From bbec7021f84766d5a783c1f320066b27e04a225b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:31:00 -0400 Subject: Revert "propellor spin" This reverts commit 45ce3a5e8ccf90e357dbaf6e0152daa4de88b7fd. --- 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.3-2-g0d8e -- cgit v1.3-2-g0d8e From bdf3e37066a2f01eac7411b77a3b26e3796f5d65 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:33:00 -0400 Subject: Revert "propellor spin" This reverts commit 80f5b53f1b7fdc876d5e45df68c29f53bd9666b2. --- debian/changelog | 8 ++++++++ doc/todo/docker_todo_list.mdwn | 2 ++ src/Propellor/Property.hs | 10 +++++++++- src/Propellor/Property/Docker.hs | 30 ++++++++++++++++-------------- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/debian/changelog b/debian/changelog index 012826bd..9e90877d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +propellor (0.9.1) UNRELEASED; urgency=medium + + * Docker: Add ability to control when containers restart. + * Docker: Default to always restarting containers, so they come back + up after reboots and docker daemon upgrades. + + -- Joey Hess Thu, 23 Oct 2014 03:05:22 -0400 + propellor (0.9.0) unstable; urgency=medium * Avoid encoding the current stable suite in propellor's code, diff --git a/doc/todo/docker_todo_list.mdwn b/doc/todo/docker_todo_list.mdwn index 1321445d..72ded426 100644 --- a/doc/todo/docker_todo_list.mdwn +++ b/doc/todo/docker_todo_list.mdwn @@ -1,3 +1,5 @@ * There is no way for a property of a docker container to require some property be met outside the container. For example, some servers need ntp installed for a good date source. +* The SimpleSh was added before `docker exec` existed, and could probably + be eliminated by using that. diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index ce825192..4b957317 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -135,7 +135,7 @@ host hn = Host hn [] mempty -- -- Can add Properties and RevertableProperties (&) :: IsProp p => Host -> p -> Host -(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p) +(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p) infixl 1 & @@ -145,6 +145,14 @@ h ! p = h & revert p infixl 1 ! +-- | Like (&), but adds the property as the first property of the host. +-- Normally, property order should not matter, but this is useful +-- when it does. +(&^) :: IsProp p => Host -> p -> Host +(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is) + +infixl 1 &^ + -- Changes the action that is performed to satisfy a property. adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property adjustProperty p f = p { propertySatisfy = f (propertySatisfy p) } diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index de3c64fb..b717fe19 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -19,7 +19,6 @@ module Propellor.Property.Docker ( -- * Container configuration dns, hostname, - name, publish, expose, user, @@ -156,12 +155,15 @@ mkContainer cid@(ContainerId hn _cn) h = Container where info = _dockerinfo $ hostInfo h' h' = h - -- expose propellor directory inside the container + -- Restart by default so container comes up on + -- boot or when docker is upgraded. + &^ restart RestartAlways + -- Expose propellor directory inside the container. & volume (localdir++":"++localdir) - -- name the container in a predictable way so we - -- and the user can easily find it later + -- Name the container in a predictable way so we + -- and the user can easily find it later. This property + -- comes last, so it cannot be overridden. & 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 @@ -220,7 +222,7 @@ dns = runProp "dns" hostname :: String -> Property hostname = runProp "hostname" --- | Set name for container. (Normally done automatically.) +-- | Set name of container. name :: String -> Property name = runProp "name" @@ -283,19 +285,19 @@ restart policy = runProp "restart" (serialize policy) where serialize NoRestart = "no" serialize (RestartOnFailure Nothing) = "on-failure" - serialize (RestartOnFailure n) = "on-failure:" ++ show n + serialize (RestartOnFailure (Just 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 +-- | 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. +-- +-- 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 too many restarts. data RestartPolicy = NoRestart | RestartOnFailure (Maybe Int) | RestartAlways -- | A container is identified by its name, and the host -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From ac7b182b5a0f3711414757d05bb461385516e700 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:36:06 -0400 Subject: propellor spin --- src/Propellor/Property.hs | 10 +--------- src/Propellor/Property/Docker.hs | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index 4b957317..ce825192 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -135,7 +135,7 @@ host hn = Host hn [] mempty -- -- Can add Properties and RevertableProperties (&) :: IsProp p => Host -> p -> Host -(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p) +(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p) infixl 1 & @@ -145,14 +145,6 @@ h ! p = h & revert p infixl 1 ! --- | Like (&), but adds the property as the first property of the host. --- Normally, property order should not matter, but this is useful --- when it does. -(&^) :: IsProp p => Host -> p -> Host -(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is) - -infixl 1 &^ - -- Changes the action that is performed to satisfy a property. adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property adjustProperty p f = p { propertySatisfy = f (propertySatisfy p) } diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index b717fe19..0e71acd3 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -157,7 +157,7 @@ mkContainer cid@(ContainerId hn _cn) h = Container h' = h -- Restart by default so container comes up on -- boot or when docker is upgraded. - &^ restart RestartAlways + -- &^ restart RestartAlways -- Expose propellor directory inside the container. & volume (localdir++":"++localdir) -- Name the container in a predictable way so we -- cgit v1.3-2-g0d8e From 8d353813bf1e4d0c64f33cf2beed0938eeca92b4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:39:29 -0400 Subject: Revert "propellor spin" This reverts commit ac7b182b5a0f3711414757d05bb461385516e700. --- src/Propellor/Property.hs | 10 +++++++++- src/Propellor/Property/Docker.hs | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index ce825192..4b957317 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -135,7 +135,7 @@ host hn = Host hn [] mempty -- -- Can add Properties and RevertableProperties (&) :: IsProp p => Host -> p -> Host -(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p) +(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p) infixl 1 & @@ -145,6 +145,14 @@ h ! p = h & revert p infixl 1 ! +-- | Like (&), but adds the property as the first property of the host. +-- Normally, property order should not matter, but this is useful +-- when it does. +(&^) :: IsProp p => Host -> p -> Host +(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is) + +infixl 1 &^ + -- Changes the action that is performed to satisfy a property. adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property adjustProperty p f = p { propertySatisfy = f (propertySatisfy p) } diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index 0e71acd3..b717fe19 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -157,7 +157,7 @@ mkContainer cid@(ContainerId hn _cn) h = Container h' = h -- Restart by default so container comes up on -- boot or when docker is upgraded. - -- &^ restart RestartAlways + &^ restart RestartAlways -- Expose propellor directory inside the container. & volume (localdir++":"++localdir) -- Name the container in a predictable way so we -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From 26bef2486d27b2cde6feda633c6a7509675a3fe5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:42:34 -0400 Subject: Revert "Revert "propellor spin"" This reverts commit 8d353813bf1e4d0c64f33cf2beed0938eeca92b4. --- src/Propellor/Property.hs | 10 +--------- src/Propellor/Property/Docker.hs | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index 4b957317..ce825192 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -135,7 +135,7 @@ host hn = Host hn [] mempty -- -- Can add Properties and RevertableProperties (&) :: IsProp p => Host -> p -> Host -(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p) +(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p) infixl 1 & @@ -145,14 +145,6 @@ h ! p = h & revert p infixl 1 ! --- | Like (&), but adds the property as the first property of the host. --- Normally, property order should not matter, but this is useful --- when it does. -(&^) :: IsProp p => Host -> p -> Host -(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is) - -infixl 1 &^ - -- Changes the action that is performed to satisfy a property. adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property adjustProperty p f = p { propertySatisfy = f (propertySatisfy p) } diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index b717fe19..0e71acd3 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -157,7 +157,7 @@ mkContainer cid@(ContainerId hn _cn) h = Container h' = h -- Restart by default so container comes up on -- boot or when docker is upgraded. - &^ restart RestartAlways + -- &^ restart RestartAlways -- Expose propellor directory inside the container. & volume (localdir++":"++localdir) -- Name the container in a predictable way so we -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From e6924a894d32697747795bd78d7ee1cad92af5a7 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:46:15 -0400 Subject: Revert "Revert "Revert "propellor spin""" This reverts commit 26bef2486d27b2cde6feda633c6a7509675a3fe5. --- src/Propellor/Property.hs | 10 +++++++++- src/Propellor/Property/Docker.hs | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index ce825192..4b957317 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -135,7 +135,7 @@ host hn = Host hn [] mempty -- -- Can add Properties and RevertableProperties (&) :: IsProp p => Host -> p -> Host -(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p) +(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p) infixl 1 & @@ -145,6 +145,14 @@ h ! p = h & revert p infixl 1 ! +-- | Like (&), but adds the property as the first property of the host. +-- Normally, property order should not matter, but this is useful +-- when it does. +(&^) :: IsProp p => Host -> p -> Host +(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is) + +infixl 1 &^ + -- Changes the action that is performed to satisfy a property. adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property adjustProperty p f = p { propertySatisfy = f (propertySatisfy p) } diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index 0e71acd3..b717fe19 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -157,7 +157,7 @@ mkContainer cid@(ContainerId hn _cn) h = Container h' = h -- Restart by default so container comes up on -- boot or when docker is upgraded. - -- &^ restart RestartAlways + &^ restart RestartAlways -- Expose propellor directory inside the container. & volume (localdir++":"++localdir) -- Name the container in a predictable way so we -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From 857fedc06e18ee3a0fc5099ec692812072574437 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:55:41 -0400 Subject: propellor spin --- config-joey.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-joey.hs b/config-joey.hs index 9d54b512..992a8b4e 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 "test" + -- & Docker.docked hosts "test" clam :: Host clam = standardSystem "clam.kitenet.net" Unstable "amd64" -- cgit v1.3-2-g0d8e From b08cd1040f62dd9af340cb793e45d600c5855b08 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 11:57:13 -0400 Subject: propellor spin --- config-joey.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-joey.hs b/config-joey.hs index 992a8b4e..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 "test" + & Docker.docked hosts "test" clam :: Host clam = standardSystem "clam.kitenet.net" Unstable "amd64" -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From 73a75cbefc242133b921fe7314e596ea12bdfbea Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 12:11:07 -0400 Subject: Fix loop when a docker host that does not exist was docked. The problem is it fell back to looking for an alias for the bad hostname, but to get the aliases, it needs to know which hosts are docked where, so looped. --- debian/changelog | 1 + src/Propellor/Info.hs | 5 ++++- src/Propellor/Property/Docker.hs | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9e90877d..69a580b0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,7 @@ propellor (0.9.1) UNRELEASED; urgency=medium * Docker: Add ability to control when containers restart. * Docker: Default to always restarting containers, so they come back up after reboots and docker daemon upgrades. + * Fix loop when a docker host that does not exist was docked. -- Joey Hess Thu, 23 Oct 2014 03:05:22 -0400 diff --git a/src/Propellor/Info.hs b/src/Propellor/Info.hs index 1b89c008..f44d1de3 100644 --- a/src/Propellor/Info.hs +++ b/src/Propellor/Info.hs @@ -80,7 +80,10 @@ aliasMap = M.fromList . concat . map (\h -> map (\aka -> (aka, h)) $ S.toList $ _aliases $ hostInfo h) findHost :: [Host] -> HostName -> Maybe Host -findHost l hn = maybe (findAlias l hn) Just (M.lookup hn (hostMap l)) +findHost l hn = maybe (findAlias l hn) Just (findHostNoAlias l hn) + +findHostNoAlias :: [Host] -> HostName -> Maybe Host +findHostNoAlias l hn = M.lookup hn (hostMap l) findAlias :: [Host] -> HostName -> Maybe Host findAlias l hn = M.lookup hn (aliasMap l) diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index b717fe19..c91530c3 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -107,7 +107,7 @@ docked hosts cn = RevertableProperty let cid = ContainerId hn cn ensureProperties [findContainer mhost cid cn $ a cid] - mhost = findHost hosts (cn2hn cn) + mhost = findHostNoAlias hosts (cn2hn cn) setup cid (Container image runparams) = provisionContainer cid -- cgit v1.3-2-g0d8e -- cgit v1.3-2-g0d8e From f5b5159f76ef20a5dcf190e6f3d92bea8aae69e1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 12:28:33 -0400 Subject: don't need RestartPolicy data type; simplify --- src/Propellor/Property/Docker.hs | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs index c91530c3..d9d5f191 100644 --- a/src/Propellor/Property/Docker.hs +++ b/src/Propellor/Property/Docker.hs @@ -29,8 +29,9 @@ module Propellor.Property.Docker ( cpuShares, link, ContainerAlias, - restart, - RestartPolicy(..), + restartAlways, + restartOnFailure, + restartNever, -- * Internal use chain, ) where @@ -157,7 +158,7 @@ mkContainer cid@(ContainerId hn _cn) h = Container h' = h -- Restart by default so container comes up on -- boot or when docker is upgraded. - &^ restart RestartAlways + &^ restartAlways -- Expose propellor directory inside the container. & volume (localdir++":"++localdir) -- Name the container in a predictable way so we @@ -279,26 +280,24 @@ 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 (Just n)) = "on-failure:" ++ show n - serialize RestartAlways = "always" - --- | RestartAlways is the default for docker containers configured by +-- | This property is enabled by 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. --- --- NoRestart makes docker not restart a container when it exits +restartAlways :: Property +restartAlways = runProp "restart" "always" + +-- | Docker will restart the container if it exits nonzero. +-- If a number is provided, it will be restarted only up to that many +-- times. +restartOnFailure :: Maybe Int -> Property +restartOnFailure Nothing = runProp "restart" "on-failure" +restartOnFailure (Just n) = runProp "restart" ("on-failure:" ++ show n) + +-- | 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 too many restarts. -data RestartPolicy = NoRestart | RestartOnFailure (Maybe Int) | RestartAlways +restartNever :: Property +restartNever = runProp "restart" "no" -- | A container is identified by its name, and the host -- on which it's deployed. -- cgit v1.3-2-g0d8e From 2b320d2bd93cbecd412af48d3bcfa348ba3fe453 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2014 13:26:51 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs index d480e024..901eba2e 100644 --- a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs +++ b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs @@ -130,7 +130,7 @@ androidContainer dockerImage name setupgitannexdir gitannexdir = Docker.containe [ "cd " ++ gitannexdir ++ " && ./standalone/android/buildchroot-inchroot" ] haskellpkgsinstalled = userScriptProperty "builder" - [ "cd " ++ gitannexdir ++ " && ./install-haskell-packages" + [ "cd " ++ gitannexdir ++ " && ./standalone/android/install-haskell-packages" ] osver = System (Debian Testing) "i386" -- once jessie is released, use: (Stable "jessie") -- cgit v1.3-2-g0d8e From b5ab8a7f9fedc283cd561b8a414748ecee3868fd Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 24 Oct 2014 09:57:52 -0400 Subject: prep release --- config-joey.hs | 1 - debian/changelog | 4 ++-- propellor.cabal | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/config-joey.hs b/config-joey.hs index 9d54b512..fb90651e 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -53,7 +53,6 @@ darkstar = host "darkstar.kitenet.net" & Apt.buildDep ["git-annex"] `period` Daily & Docker.configured ! Docker.docked hosts "android-git-annex" - & Docker.docked hosts "test" clam :: Host clam = standardSystem "clam.kitenet.net" Unstable "amd64" diff --git a/debian/changelog b/debian/changelog index 69a580b0..c580b3ba 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,11 @@ -propellor (0.9.1) UNRELEASED; urgency=medium +propellor (0.9.1) unstable; urgency=medium * Docker: Add ability to control when containers restart. * Docker: Default to always restarting containers, so they come back up after reboots and docker daemon upgrades. * Fix loop when a docker host that does not exist was docked. - -- Joey Hess Thu, 23 Oct 2014 03:05:22 -0400 + -- Joey Hess Fri, 24 Oct 2014 09:57:31 -0400 propellor (0.9.0) unstable; urgency=medium diff --git a/propellor.cabal b/propellor.cabal index 5843894e..282a5e04 100644 --- a/propellor.cabal +++ b/propellor.cabal @@ -1,5 +1,5 @@ Name: propellor -Version: 0.9.0 +Version: 0.9.1 Cabal-Version: >= 1.6 License: BSD3 Maintainer: Joey Hess -- cgit v1.3-2-g0d8e