module Propellor.Property.Journald where import Propellor.Base import qualified Propellor.Property.Systemd as Systemd import Utility.DataUnits -- | Configures journald, restarting it so the changes take effect. configured :: Systemd.Option -> String -> Property Linux 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 Linux configuredSize option s = case readSize dataUnits s of Just sz -> configured option (systemdSizeUnits sz) Nothing -> property ("unable to parse " ++ option ++ " data size " ++ s) $ return FailedChange systemMaxUse :: DataSize -> Property Linux systemMaxUse = configuredSize "SystemMaxUse" runtimeMaxUse :: DataSize -> Property Linux runtimeMaxUse = configuredSize "RuntimeMaxUse" systemKeepFree :: DataSize -> Property Linux systemKeepFree = configuredSize "SystemKeepFree" runtimeKeepFree :: DataSize -> Property Linux runtimeKeepFree = configuredSize "RuntimeKeepFree" systemMaxFileSize :: DataSize -> Property Linux systemMaxFileSize = configuredSize "SystemMaxFileSize" runtimeMaxFileSize :: DataSize -> Property Linux runtimeMaxFileSize = configuredSize "RuntimeMaxFileSize" -- Generates size units as used in journald.conf. systemdSizeUnits :: Integer -> String systemdSizeUnits sz = filter (/= ' ') (roughSize cfgfileunits True sz) 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