summaryrefslogtreecommitdiff
path: root/src/Propellor
diff options
context:
space:
mode:
authorJoey Hess2015-01-21 23:21:24 -0400
committerJoey Hess2015-01-21 23:21:24 -0400
commitfa66cb49d668ca065324530ced05b72de0499e34 (patch)
treef7e325a3f9435fd51013b690269ba10ff7f849bb /src/Propellor
parent8556f94fbfd1f28757aa0f66c94e2493e92250b9 (diff)
Added journald configuration properties.
Diffstat (limited to 'src/Propellor')
-rw-r--r--src/Propellor/Property/Systemd/Journald.hs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/Propellor/Property/Systemd/Journald.hs b/src/Propellor/Property/Systemd/Journald.hs
new file mode 100644
index 00000000..e852ebd9
--- /dev/null
+++ b/src/Propellor/Property/Systemd/Journald.hs
@@ -0,0 +1,54 @@
+module Propellor.Property.Systemd.Journald where
+import Propellor
+import qualified Propellor.Property.Systemd as Systemd
+import qualified Propellor.Property.File as File
+import Utility.DataUnits
+
+-- | Configures journald, restarting it so the changes take effect.
+configured :: Systemd.Option -> String -> Property
+configured option value =
+ Systemd.configured "/etc/systemd/journald.conf" option value
+ `onChange` Systemd.restarted "systemd-journald"
+
+-- The string is parsed to get a data size.
+-- Examples: "100 megabytes" or "0.5tb"
+type DataSize = String
+
+configuredSize :: Systemd.Option -> DataSize -> Property
+configuredSize option s = case readSize dataUnits s of
+ Just sz -> configured option (systemdSizeUnits sz)
+ Nothing -> property ("unable to parse " ++ option ++ " data size " ++ s) noChange
+
+systemMaxUse :: DataSize -> Property
+systemMaxUse = configuredSize "SystemMaxUse"
+
+runtimeMaxUse :: DataSize -> Property
+runtimeMaxUse = configuredSize "RuntimeMaxUse"
+
+systemKeepFree :: DataSize -> Property
+systemKeepFree = configuredSize "SystemKeepFree"
+
+runtimeKeepFree :: DataSize -> Property
+runtimeKeepFree = configuredSize "RuntimeKeepFree"
+
+systemMaxFileSize :: DataSize -> Property
+systemMaxFileSize = configuredSize "SystemMaxFileSize"
+
+runtimeMaxFileSize :: DataSize -> Property
+runtimeMaxFileSize = configuredSize "RuntimeMaxFileSize"
+
+-- Generates size units as used in journald.conf.
+systemdSizeUnits :: Integer -> String
+systemdSizeUnits n = filter (/= ' ') (roughSize cfgfileunits True n)
+ where
+ cfgfileunits :: [Unit]
+ cfgfileunits =
+ [ Unit (p 6) "E" "exabyte"
+ , Unit (p 5) "P" "petabyte"
+ , Unit (p 4) "T" "terabyte"
+ , Unit (p 3) "G" "gigabyte"
+ , Unit (p 2) "M" "megabyte"
+ , Unit (p 1) "K" "kilobyte"
+ ]
+ p :: Integer -> Integer
+ p n = 1024^n