propellor/config-simple.hs

54 lines
1.9 KiB
Haskell
Raw Normal View History

2014-04-01 22:56:56 +00:00
-- | This is the main configuration file for Propellor, and is used to build
-- the propellor program.
import Propellor
import Propellor.CmdLine
2014-04-09 04:54:27 +00:00
import Propellor.Property.Scheduled
2014-04-01 22:56:56 +00:00
import qualified Propellor.Property.File as File
import qualified Propellor.Property.Apt as Apt
import qualified Propellor.Property.Network as Network
2014-04-04 05:16:16 +00:00
--import qualified Propellor.Property.Ssh as Ssh
2014-04-01 22:56:56 +00:00
import qualified Propellor.Property.Cron as Cron
2014-04-04 05:16:16 +00:00
--import qualified Propellor.Property.Sudo as Sudo
2014-04-01 22:56:56 +00:00
import qualified Propellor.Property.User as User
2014-04-04 05:16:16 +00:00
--import qualified Propellor.Property.Hostname as Hostname
--import qualified Propellor.Property.Reboot as Reboot
--import qualified Propellor.Property.Tor as Tor
2014-04-01 22:56:56 +00:00
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]
2014-04-02 16:13:39 +00:00
host hostname@"mybox.example.com" = Just $ props
& Apt.stdSourcesList Unstable
2014-04-01 22:56:56 +00:00
`onChange` Apt.upgrade
2014-04-02 16:13:39 +00:00
& Apt.unattendedUpgrades
& Apt.installed ["etckeeper"]
& Apt.installed ["ssh"]
& User.hasSomePassword "root"
& Network.ipv6to4
2014-04-03 03:17:41 +00:00
& File.dirExists "/var/www"
2014-04-02 16:13:39 +00:00
& Docker.docked container hostname "webserver"
2014-04-09 04:54:27 +00:00
& Docker.garbageCollected `period` Daily
2014-04-02 16:13:39 +00:00
& Cron.runPropellor "30 * * * *"
2014-04-01 22:56:56 +00:00
-- 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"
[ Docker.publish "80:80"
, Docker.volume "/var/www:/var/www"
2014-04-02 16:13:39 +00:00
, Docker.inside $ props
2014-04-08 23:31:03 +00:00
& Apt.serviceInstalledRunning "apache2"
2014-04-01 22:56:56 +00:00
]
container _ _ = Nothing