module B9.Vm
( VmScript(..)
, substVmScript
)
where
import Control.Parallel.Strategies
import Control.Eff
import Data.Binary
import Data.Data
import Data.Generics.Aliases hiding ( Generic )
import Data.Generics.Schemes
import Data.Hashable
import GHC.Generics ( Generic )
import B9.Environment
import B9.B9Error
import B9.Artifact.Content.StringTemplate
import B9.DiskImages
import B9.ExecEnv
import B9.ShellScript
data VmScript
= VmScript CPUArch
[SharedDirectory]
Script
| NoVmScript
deriving (Read, Show, Typeable, Data, Eq, Generic)
instance Hashable VmScript
instance Binary VmScript
instance NFData VmScript
substVmScript
:: forall e
. (Member EnvironmentReader e, Member ExcB9 e)
=> VmScript
-> Eff e VmScript
substVmScript = everywhereM gsubst
where
gsubst :: GenericM (Eff e)
gsubst = mkM substMountPoint `extM` substSharedDir `extM` substScript
substMountPoint NotMounted = pure NotMounted
substMountPoint (MountPoint x) = MountPoint <$> substStr x
substSharedDir (SharedDirectory fp mp) =
SharedDirectory <$> substStr fp <*> pure mp
substSharedDir (SharedDirectoryRO fp mp) =
SharedDirectoryRO <$> substStr fp <*> pure mp
substSharedDir s = pure s
substScript (In fp s ) = In <$> substStr fp <*> pure s
substScript (Run fp args) = Run <$> substStr fp <*> mapM substStr args
substScript (As fp s ) = As <$> substStr fp <*> pure s
substScript s = pure s