From b0e04b51324417e1c7f30c1c9526288fc288f186 Mon Sep 17 00:00:00 2001 From: Félix Sipma Date: Thu, 8 Oct 2015 08:56:32 +0200 Subject: add basic Uwsgi module Signed-off-by: Félix Sipma --- propellor.cabal | 1 + src/Propellor/Property/Uwsgi.hs | 54 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/Propellor/Property/Uwsgi.hs diff --git a/propellor.cabal b/propellor.cabal index d2e2e0c6..32f3772d 100644 --- a/propellor.cabal +++ b/propellor.cabal @@ -116,6 +116,7 @@ Library Propellor.Property.Tor Propellor.Property.Unbound Propellor.Property.User + Propellor.Property.Uwsgi Propellor.Property.HostingProvider.CloudAtCost Propellor.Property.HostingProvider.DigitalOcean Propellor.Property.HostingProvider.Linode diff --git a/src/Propellor/Property/Uwsgi.hs b/src/Propellor/Property/Uwsgi.hs new file mode 100644 index 00000000..b1b567b4 --- /dev/null +++ b/src/Propellor/Property/Uwsgi.hs @@ -0,0 +1,54 @@ +-- | Maintainer: Félix Sipma + +module Propellor.Property.Uwsgi where + +import Propellor +import qualified Propellor.Property.File as File +import qualified Propellor.Property.Apt as Apt +import qualified Propellor.Property.Service as Service +import System.Posix.Files + +type ConfigFile = [String] + +appEnabled :: HostName -> ConfigFile -> RevertableProperty +appEnabled hn cf = enable disable + where + enable = check test prop + `describe` ("uwsgi app enabled " ++ hn) + `requires` appAvailable hn cf + `requires` installed + `onChange` reloaded + where + test = not <$> doesFileExist (appVal hn) + prop = property "uwsgi app in place" $ makeChange $ + createSymbolicLink target dir + target = appValRelativeCfg hn + dir = appVal hn + disable = trivial $ File.notPresent (appVal hn) + `describe` ("uwsgi app disable" ++ hn) + `requires` installed + `onChange` reloaded + +appAvailable :: HostName -> ConfigFile -> Property NoInfo +appAvailable hn cf = ("uwsgi app available " ++ hn) ==> + appCfg hn `File.hasContent` (comment : cf) + where + comment = "# deployed with propellor, do not modify" + +appCfg :: HostName -> FilePath +appCfg hn = "/etc/uwsgi/apps-available/" ++ hn + +appVal :: HostName -> FilePath +appVal hn = "/etc/uwsgi/apps-enabled/" ++ hn + +appValRelativeCfg :: HostName -> FilePath +appValRelativeCfg hn = "../apps-available/" ++ hn + +installed :: Property NoInfo +installed = Apt.installed ["uwsgi"] + +restarted :: Property NoInfo +restarted = Service.restarted "uwsgi" + +reloaded :: Property NoInfo +reloaded = Service.reloaded "uwsgi" -- cgit v1.2.3