From 548f0dd50b5d1afa9cc4c1e30d5b8ec1a782e094 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 1 Apr 2014 18:56:56 -0400 Subject: [PATCH] add a simpler version of config.hs --- config.hs | 3 +++ config.hs.simple | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ propellor.cabal | 1 + 3 files changed, 58 insertions(+) create mode 100644 config.hs.simple diff --git a/config.hs b/config.hs index 68732b8..0547e2c 100644 --- a/config.hs +++ b/config.hs @@ -1,5 +1,8 @@ -- | This is the main configuration file for Propellor, and is used to build -- the propellor program. +-- +-- This is the live config file used by propellor's author. +-- For a simpler starting point, see config.hs.simple. import Propellor import Propellor.CmdLine diff --git a/config.hs.simple b/config.hs.simple new file mode 100644 index 0000000..cfa1ff8 --- /dev/null +++ b/config.hs.simple @@ -0,0 +1,54 @@ +-- | This is the main configuration file for Propellor, and is used to build +-- the propellor program. + +import Propellor +import Propellor.CmdLine +import qualified Propellor.Property.File as File +import qualified Propellor.Property.Apt as Apt +import qualified Propellor.Property.Network as Network +import qualified Propellor.Property.Ssh as Ssh +import qualified Propellor.Property.Cron as Cron +import qualified Propellor.Property.Sudo as Sudo +import qualified Propellor.Property.User as User +import qualified Propellor.Property.Hostname as Hostname +import qualified Propellor.Property.Reboot as Reboot +import qualified Propellor.Property.Docker as Docker + +main :: IO () +main = defaultMain [host, Docker.containerProperties container] + +-- | This is where the system's HostName, either as returned by uname +-- or one specified on the command line, is converted into a list of +-- Properties for that system. +-- +-- Edit this to configure propellor! +host :: HostName -> Maybe [Property] +host hostname@"mybox.example.com" = Just + [ Apt.stdSourcesList Unstable + `onChange` Apt.upgrade + , Apt.unattendedUpgrades True + , Apt.installed ["etckeeper"] + , Apt.installed ["ssh"] + , User.hasSomePassword "root" + , Network.ipv6to4 + , Docker.docked container hostname "webserver" + `requires` File.dirExists "/var/www" + , Cron.runPropellor "30 * * * *" + ] +-- add more hosts here... +--host "foo.example.com" = +host _ = Nothing + +-- | This is where Docker containers are set up. A container +-- can vary by hostname where it's used, or be the same everywhere. +container :: HostName -> Docker.ContainerName -> Maybe (Docker.Container) +container _ "webserver" = Just $ Docker.containerFrom "joeyh/debian-unstable" + (image $ System (Debian Unstable) Amd64) + [ Docker.publish "80:80" + , Docker.volume "/var/www:/var/www" + , Docker.inside + [ serviceRunning "apache2" + `requires` Apt.installed ["apache2"] + ] + ] +container _ _ = Nothing diff --git a/propellor.cabal b/propellor.cabal index 1bb67b9..c199760 100644 --- a/propellor.cabal +++ b/propellor.cabal @@ -17,6 +17,7 @@ Extra-Source-Files: Makefile debian/changelog debian/README + config.hs.simple Synopsis: property-based host configuration management in haskell Description: Propellor enures that the system it's run in satisfies a list of