From a6e712a6457638a3ea8c653357d06fd4fbb3d5f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Sipma?= Date: Thu, 30 Oct 2014 21:10:23 +0100 Subject: [PATCH] basic nginx support --- propellor.cabal | 1 + src/Propellor/Property/Nginx.hs | 47 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/Propellor/Property/Nginx.hs diff --git a/propellor.cabal b/propellor.cabal index 282a5e0..c63bed3 100644 --- a/propellor.cabal +++ b/propellor.cabal @@ -82,6 +82,7 @@ Library Propellor.Property.Gpg Propellor.Property.Grub Propellor.Property.Network + Propellor.Property.Nginx Propellor.Property.Obnam Propellor.Property.OpenId Propellor.Property.Postfix diff --git a/src/Propellor/Property/Nginx.hs b/src/Propellor/Property/Nginx.hs new file mode 100644 index 0000000..97792fc --- /dev/null +++ b/src/Propellor/Property/Nginx.hs @@ -0,0 +1,47 @@ +module Propellor.Property.Nginx where + +import Propellor +import qualified Propellor.Property.File as File +import qualified Propellor.Property.Apt as Apt +import qualified Propellor.Property.Service as Service + +type ConfigFile = [String] + +siteEnabled :: HostName -> ConfigFile -> RevertableProperty +siteEnabled hn cf = RevertableProperty enable disable + where + enable = trivial (cmdProperty "ln" ["-s", siteValRelativeCfg hn, siteVal hn]) + `describe` ("nginx site enabled " ++ hn) + `requires` siteAvailable hn cf + `requires` installed + `onChange` reloaded + disable = trivial $ + ("nginx site disabled " ++ hn) ==> + File.notPresent (siteCfg hn) + `onChange` cmdProperty "rm" [siteVal hn] + `requires` installed + `onChange` reloaded + +siteAvailable :: HostName -> ConfigFile -> Property +siteAvailable hn cf = ("nginx site available " ++ hn) ==> + siteCfg hn `File.hasContent` (comment : cf) + where + comment = "# deployed with propellor, do not modify" + +siteCfg :: HostName -> FilePath +siteCfg hn = "/etc/nginx/sites-available/" ++ hn + +siteVal :: HostName -> FilePath +siteVal hn = "/etc/nginx/sites-enabled/" ++ hn + +siteValRelativeCfg :: HostName -> FilePath +siteValRelativeCfg hn = "../sites-available/" ++ hn + +installed :: Property +installed = Apt.installed ["nginx"] + +restarted :: Property +restarted = Service.restarted "nginx" + +reloaded :: Property +reloaded = Service.reloaded "nginx"