{-# LANGUAGE DeriveDataTypeable #-} module Propellor.Types.Chroot where import Propellor.Types import Propellor.Types.Empty import Propellor.Types.Info import qualified Data.Semigroup as Sem import qualified Data.Map as M import Data.Monoid import Prelude data ChrootInfo = ChrootInfo { _chroots :: M.Map FilePath Host , _chrootCfg :: ChrootCfg } deriving (Show, Typeable) instance IsInfo ChrootInfo where propagateInfo _ = PropagateInfo False instance Sem.Semigroup ChrootInfo where old <> new = ChrootInfo { _chroots = M.union (_chroots old) (_chroots new) , _chrootCfg = _chrootCfg old <> _chrootCfg new } instance Monoid ChrootInfo where mempty = ChrootInfo mempty mempty mappend = (Sem.<>) instance Empty ChrootInfo where isEmpty i = and [ isEmpty (_chroots i) , isEmpty (_chrootCfg i) ] data ChrootCfg = NoChrootCfg | SystemdNspawnCfg [(String, Bool)] deriving (Show, Eq) instance Sem.Semigroup ChrootCfg where v <> NoChrootCfg = v NoChrootCfg <> v = v SystemdNspawnCfg l1 <> SystemdNspawnCfg l2 = SystemdNspawnCfg (l1 <> l2) instance Monoid ChrootCfg where mempty = NoChrootCfg mappend = (Sem.<>) instance Empty ChrootCfg where isEmpty c= c == NoChrootCfg