module B9.ExecEnv (
ExecEnv(..),
Resources(..),
noResources,
SharedDirectory(..),
CPUArch(..),
RamSize(..),
) where
import Control.Parallel.Strategies
import Data.Binary
import Data.Data
import Data.Hashable
import Data.Monoid
import B9.DiskImages
import GHC.Generics (Generic)
data ExecEnv = ExecEnv
{ envName :: String
, envImageMounts :: [Mounted Image]
, envSharedDirectories :: [SharedDirectory]
, envResources :: Resources
}
deriving (Read,Show,Typeable,Data,Eq,Generic)
instance Hashable ExecEnv
instance Binary ExecEnv
instance NFData ExecEnv
data SharedDirectory
= SharedDirectory FilePath
MountPoint
| SharedDirectoryRO FilePath
MountPoint
| SharedSources MountPoint
deriving (Read,Show,Typeable,Data,Eq,Generic)
instance Hashable SharedDirectory
instance Binary SharedDirectory
instance NFData SharedDirectory
data Resources = Resources
{ maxMemory :: RamSize
, cpuCount :: Int
, cpuArch :: CPUArch
} deriving (Eq,Read,Show,Typeable,Data,Generic)
instance Hashable Resources
instance Binary Resources
instance NFData Resources
instance Monoid Resources where
mempty = Resources mempty 1 mempty
mappend (Resources m c a) (Resources m' c' a') =
Resources (m <> m') (max c c') (a <> a')
noResources :: Resources
noResources = mempty
data CPUArch
= X86_64
| I386
deriving (Read,Show,Typeable,Data,Eq,Generic)
instance Hashable CPUArch
instance Binary CPUArch
instance NFData CPUArch
instance Monoid CPUArch where
mempty = I386
I386 `mappend` x = x
X86_64 `mappend` _ = X86_64
data RamSize
= RamSize Int
SizeUnit
| AutomaticRamSize
deriving (Eq,Read,Show,Ord,Typeable,Data,Generic)
instance Hashable RamSize
instance Binary RamSize
instance NFData RamSize
instance Monoid RamSize where
mempty = AutomaticRamSize
AutomaticRamSize `mappend` x = x
x `mappend` AutomaticRamSize = x
r `mappend` r' = max r r'