module Propellor.Property.ZFS.Process where
import Propellor.Base
import Utility.Split
import Data.List
zfsGetProperties :: ZFS -> IO ZFSProperties
zfsGetProperties :: ZFS -> IO ZFSProperties
zfsGetProperties z :: ZFS
z =
let plist :: [[Char]] -> ZFSProperties
plist = [([Char], [Char])] -> ZFSProperties
fromPropertyList ([([Char], [Char])] -> ZFSProperties)
-> ([[Char]] -> [([Char], [Char])]) -> [[Char]] -> ZFSProperties
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([[Char]] -> ([Char], [Char])) -> [[[Char]]] -> [([Char], [Char])]
forall a b. (a -> b) -> [a] -> [b]
map (\(_:k :: [Char]
k:v :: [Char]
v:_) -> ([Char]
k, [Char]
v)) ([[[Char]]] -> [([Char], [Char])])
-> ([[Char]] -> [[[Char]]]) -> [[Char]] -> [([Char], [Char])]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (([Char] -> [[Char]]) -> [[Char]] -> [[[Char]]]
forall a b. (a -> b) -> [a] -> [b]
map ([Char] -> [Char] -> [[Char]]
forall a. Eq a => [a] -> [a] -> [[a]]
split "\t"))
in [[Char]] -> ZFSProperties
plist ([[Char]] -> ZFSProperties) -> IO [[Char]] -> IO ZFSProperties
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Maybe [Char]] -> ZFS -> IO [[Char]]
runZfs "get" [[Char] -> Maybe [Char]
forall a. a -> Maybe a
Just "-H", [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just "-p", [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just "all"] ZFS
z
zfsExists :: ZFS -> IO Bool
zfsExists :: ZFS -> IO Bool
zfsExists z :: ZFS
z = (Bool -> Bool) -> [Bool] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any Bool -> Bool
forall a. a -> a
id ([Bool] -> Bool) -> ([[Char]] -> [Bool]) -> [[Char]] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> Bool) -> [[Char]] -> [Bool]
forall a b. (a -> b) -> [a] -> [b]
map ([Char] -> [Char] -> Bool
forall a. Eq a => [a] -> [a] -> Bool
isInfixOf (ZFS -> [Char]
zfsName ZFS
z))
([[Char]] -> Bool) -> IO [[Char]] -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [Maybe [Char]] -> ZFS -> IO [[Char]]
runZfs "list" [[Char] -> Maybe [Char]
forall a. a -> Maybe a
Just "-H"] ZFS
z
runZfs :: String -> [Maybe String] -> ZFS -> IO [String]
runZfs :: [Char] -> [Maybe [Char]] -> ZFS -> IO [[Char]]
runZfs cmd :: [Char]
cmd args :: [Maybe [Char]]
args z :: ZFS
z = [Char] -> [[Char]]
lines ([Char] -> [[Char]]) -> IO [Char] -> IO [[Char]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Char] -> [[Char]] -> IO [Char])
-> ([Char], [[Char]]) -> IO [Char]
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry [Char] -> [[Char]] -> IO [Char]
readProcess ([Char] -> [Maybe [Char]] -> ZFS -> ([Char], [[Char]])
zfsCommand [Char]
cmd [Maybe [Char]]
args ZFS
z)
zfsCommand :: String -> [Maybe String] -> ZFS -> (String, [String])
zfsCommand :: [Char] -> [Maybe [Char]] -> ZFS -> ([Char], [[Char]])
zfsCommand cmd :: [Char]
cmd args :: [Maybe [Char]]
args z :: ZFS
z = ("zfs", [Char]
cmd[Char] -> [[Char]] -> [[Char]]
forall a. a -> [a] -> [a]
:((Maybe [Char] -> [Char]) -> [Maybe [Char]] -> [[Char]]
forall a b. (a -> b) -> [a] -> [b]
map ([Char] -> ([Char] -> [Char]) -> Maybe [Char] -> [Char]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (ZFS -> [Char]
zfsName ZFS
z) [Char] -> [Char]
forall a. a -> a
id) [Maybe [Char]]
args))