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