From d324a3bc1d122527836d012078dcd632ebb78495 Mon Sep 17 00:00:00 2001 From: Félix Sipma Date: Fri, 1 Apr 2016 11:08:15 +0200 Subject: add Attic property --- src/Propellor/Property/Attic.hs | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/Propellor/Property/Attic.hs (limited to 'src/Propellor/Property/Attic.hs') diff --git a/src/Propellor/Property/Attic.hs b/src/Propellor/Property/Attic.hs new file mode 100644 index 00000000..f2e0cbf1 --- /dev/null +++ b/src/Propellor/Property/Attic.hs @@ -0,0 +1,48 @@ +-- | Maintainer: Félix Sipma + +module Propellor.Property.Attic where + +import Propellor.Base +import qualified Propellor.Property.Apt as Apt +import qualified Propellor.Property.Cron as Cron +import Data.List (intercalate) + +installed :: Property NoInfo +installed = Apt.installed ["attic"] + +repoExists :: FilePath -> IO Bool +repoExists repo = boolSystem "attic" [Param "list", File repo] + +backup :: [FilePath] -> FilePath -> Cron.Times -> [String] -> Property NoInfo +backup dirs backupdir crontimes extraargs = propertyList (backupdir ++ " attic backup") + [ installed + , check (not <$> repoExists backupdir) $ cmdProperty "/usr/bin/attic" initargs + , Cron.niceJob ("attic_backup" ++ backupdir) crontimes (User "root") "/" backupcmd + ] + where + initargs = + [ "init" + , backupdir + ] + backupcmd = intercalate ";" + [ createCommand + , pruneCommand + ] + createCommand = unwords $ + [ "/usr/bin/attic" + , "create" + , "--stats" + ] + ++ extraargs ++ + [ backupdir ++ "::" ++ "$(date --iso-8601=ns --utc)" + , unwords dirs + ] + pruneCommand = unwords + [ "/usr/bin/attic" + , "prune" + , backupdir + , "--keep-daily=7" + , "--keep-weekly=4" + , "--keep-monthly=6" + , "--keep-yearly=1" + ] -- cgit v1.2.3