summaryrefslogtreecommitdiff
path: root/src/Propellor/Property/ZFS/Properties.hs
diff options
context:
space:
mode:
authorEvan Cofsky2016-02-26 10:20:21 -0600
committerEvan Cofsky2016-03-07 13:31:51 -0600
commit822694e790102efa2a5bb4a0c3d62c6fce1d4e87 (patch)
tree833ade451e379c641e9cf5de46cc81d02d8fefbc /src/Propellor/Property/ZFS/Properties.hs
parente8f36722bf23a19dcdd42a1c14ebaa40a2d73293 (diff)
FreeBSD Support including:
- Propellor bootstrapping - Basic pkg - Basic ZFS datasets and properties - Simple Poudriere configuration (regular and ZFS) - Poudriere jail creation FIXME: - Cron.hs: runPropellor needs the System, but hasn't yet gotten it. Reorganizing: - Remove FreeBSD.Process - Move ZFS up to Property - Add Info for Pkg.update/Pkg.upgrade - Move FreeBSD.md to doc so it'll show up automatically. - Merge the FreeBSD config with the other sample config. - Use Info to check Pkg updated/upgraded and Poudriere configured. - Warnings clean-up, move ZFS types to Propellor.Types. - Maintainer and license statements.
Diffstat (limited to 'src/Propellor/Property/ZFS/Properties.hs')
-rw-r--r--src/Propellor/Property/ZFS/Properties.hs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/Propellor/Property/ZFS/Properties.hs b/src/Propellor/Property/ZFS/Properties.hs
new file mode 100644
index 00000000..ba303bc3
--- /dev/null
+++ b/src/Propellor/Property/ZFS/Properties.hs
@@ -0,0 +1,37 @@
+-- | Functions defining zfs Properties.
+--
+-- Copyright 2016 Evan Cofsky <evan@theunixman.com>
+-- 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