-- | Functions defining zfs Properties. -- -- Copyright 2016 Evan Cofsky -- License: BSD 2-clause module Propellor.Property.ZFS.Properties ( zfsExists, zfsSetProperties ) where import Propellor.Base import Data.List (intercalate) import qualified Propellor.Property.ZFS.Process as ZP -- | Will ensure that a ZFS volume exists with the specified mount point. -- This requires the pool to exist as well, but we don't create pools yet. zfsExists :: ZFS -> Property NoInfo zfsExists z = let (p, a) = ZP.zfsCommand "create" [Nothing] z create = cmdProperty p a in check (not <$> ZP.zfsExists z) (create) `describe` (unwords ["Creating", zfsName z]) -- | Sets the given properties. Returns True if all were successfully changed, False if not. zfsSetProperties :: ZFS -> ZFSProperties -> Property NoInfo zfsSetProperties z setProperties = let spcmd :: String -> String -> (String, [String]) spcmd p v = ZP.zfsCommand "set" [Just (intercalate "=" [p, v]), Nothing] z setprop :: (String, String) -> Property NoInfo setprop (p, v) = check (ZP.zfsExists z) $ cmdProperty (fst (spcmd p v)) (snd (spcmd p v)) setall = combineProperties (unwords ["Setting properties on", zfsName z]) $ map setprop $ toPropertyList setProperties in setall `requires` zfsExists z