summaryrefslogtreecommitdiff
path: root/src/Propellor/Property
diff options
context:
space:
mode:
Diffstat (limited to 'src/Propellor/Property')
-rw-r--r--src/Propellor/Property/Docker.hs39
-rw-r--r--src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs15
-rw-r--r--src/Propellor/Property/SiteSpecific/JoeySites.hs2
3 files changed, 41 insertions, 15 deletions
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