diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Propellor/Info.hs | 5 | ||||
| -rw-r--r-- | src/Propellor/Property.hs | 10 | ||||
| -rw-r--r-- | src/Propellor/Property/Docker.hs | 39 | ||||
| -rw-r--r-- | src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs | 15 | ||||
| -rw-r--r-- | src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 |
5 files changed, 54 insertions, 17 deletions
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.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 8c2f3701..d9d5f191 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, @@ -30,6 +29,9 @@ module Propellor.Property.Docker ( cpuShares, link, ContainerAlias, + restartAlways, + restartOnFailure, + restartNever, -- * Internal use chain, ) where @@ -106,7 +108,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 @@ -150,14 +152,18 @@ 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 - -- expose propellor directory inside the container + -- Restart by default so container comes up on + -- boot or when docker is upgraded. + &^ 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 @@ -217,7 +223,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" @@ -274,6 +280,25 @@ link linkwith calias = genProp "link" $ \hn -> -- Each container has its own alias namespace. type ContainerAlias = String +-- | 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. +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! +restartNever :: Property +restartNever = runProp "restart" "no" + -- | A container is identified by its name, and the host -- on which it's deployed. data ContainerId = ContainerId HostName ContainerName diff --git a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs index 056578a1..901eba2e 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 ] @@ -113,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 - & buildDepsNoHaskellLibs + & 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 @@ -131,7 +129,10 @@ androidContainer dockerImage name setupgitannexdir gitannexdir = Docker.containe chrootsetup = scriptProperty [ "cd " ++ gitannexdir ++ " && ./standalone/android/buildchroot-inchroot" ] - osver = System (Debian (Stable "wheezy")) "i386" + haskellpkgsinstalled = userScriptProperty "builder" + [ "cd " ++ gitannexdir ++ " && ./standalone/android/install-haskell-packages" + ] + 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 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 |
