summaryrefslogtreecommitdiff
path: root/src/Propellor
diff options
context:
space:
mode:
Diffstat (limited to 'src/Propellor')
-rw-r--r--src/Propellor/Property/Apt.hs8
-rw-r--r--src/Propellor/Property/Uwsgi.hs56
2 files changed, 64 insertions, 0 deletions
diff --git a/src/Propellor/Property/Apt.hs b/src/Propellor/Property/Apt.hs
index 2e913540..15c45629 100644
--- a/src/Propellor/Property/Apt.hs
+++ b/src/Propellor/Property/Apt.hs
@@ -297,3 +297,11 @@ aptKeyFile k = "/etc/apt/trusted.gpg.d" </> keyname k ++ ".gpg"
cacheCleaned :: Property NoInfo
cacheCleaned = trivial $ cmdProperty "apt-get" ["clean"]
`describe` "apt cache cleaned"
+
+-- | Add a foreign architecture to dpkg and apt.
+hasForeignArch :: String -> Property NoInfo
+hasForeignArch arch = check notAdded add
+ `describe` ("dpkg has foreign architecture " ++ arch)
+ where
+ notAdded = (not . elem arch . lines) <$> readProcess "dpkg" ["--print-foreign-architectures"]
+ add = cmdProperty "dpkg" ["--add-architecture", arch] `before` update
diff --git a/src/Propellor/Property/Uwsgi.hs b/src/Propellor/Property/Uwsgi.hs
new file mode 100644
index 00000000..d1cdb550
--- /dev/null
+++ b/src/Propellor/Property/Uwsgi.hs
@@ -0,0 +1,56 @@
+-- | Maintainer: FĂ©lix Sipma <felix+propellor@gueux.org>
+
+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]
+
+type AppName = String
+
+appEnabled :: AppName -> ConfigFile -> RevertableProperty
+appEnabled an cf = enable <!> disable
+ where
+ enable = check test prop
+ `describe` ("uwsgi app enabled " ++ an)
+ `requires` appAvailable an cf
+ `requires` installed
+ `onChange` reloaded
+ where
+ test = not <$> doesFileExist (appVal an)
+ prop = property "uwsgi app in place" $ makeChange $
+ createSymbolicLink target dir
+ target = appValRelativeCfg an
+ dir = appVal an
+ disable = trivial $ File.notPresent (appVal an)
+ `describe` ("uwsgi app disable" ++ an)
+ `requires` installed
+ `onChange` reloaded
+
+appAvailable :: AppName -> ConfigFile -> Property NoInfo
+appAvailable an cf = ("uwsgi app available " ++ an) ==>
+ appCfg an `File.hasContent` (comment : cf)
+ where
+ comment = "# deployed with propellor, do not modify"
+
+appCfg :: AppName -> FilePath
+appCfg an = "/etc/uwsgi/apps-available/" ++ an
+
+appVal :: AppName -> FilePath
+appVal an = "/etc/uwsgi/apps-enabled/" ++ an
+
+appValRelativeCfg :: AppName -> FilePath
+appValRelativeCfg an = "../apps-available/" ++ an
+
+installed :: Property NoInfo
+installed = Apt.installed ["uwsgi"]
+
+restarted :: Property NoInfo
+restarted = Service.restarted "uwsgi"
+
+reloaded :: Property NoInfo
+reloaded = Service.reloaded "uwsgi"