b9-1.0.0: src/lib/B9/Docker.hs
-- | Implementation of an execution environment that uses /docker/.
module B9.Docker
( Docker (..),
)
where
import B9.B9Config
( ContainerCapability,
dockerConfigs,
getB9Config,
)
import B9.B9Config.Docker as X
import B9.B9Exec
import B9.BuildInfo
import B9.Container
import B9.DiskImages
import B9.ExecEnv
import B9.ShellScript
import Control.Lens (view)
import Control.Monad.IO.Class
( MonadIO,
liftIO,
)
import Data.Char (toLower)
import System.Directory
import System.FilePath
import System.IO.B9Extras
( UUID (),
randomUUID,
)
import Text.Printf (printf)
newtype Docker = Docker DockerConfig
instance Backend Docker where
getBackendConfig _ =
fmap Docker . view dockerConfigs <$> getB9Config
-- supportedImageTypes :: proxy config -> [ImageType]
supportedImageTypes _ = [Raw]
-- runInEnvironment ::
-- forall e.
-- (Member BuildInfoReader e, CommandIO e) =>
-- config ->
-- ExecEnv ->
-- Script ->
-- Eff e Bool
runInEnvironment (Docker dcfg) env scriptIn = do
if emptyScript scriptIn
then return True
else do error "TODO"
-- where
-- setUp = do
-- buildId <- getBuildId
-- buildBaseDir <- getBuildDir
-- uuid <- randomUUID
-- let scriptDirHost = buildDir </> "init-script"
-- scriptDirGuest = "/" ++ buildId
-- domainFile = buildBaseDir </> uuid' <.> domainConfig
-- mkDomain =
-- createDomain cfgIn env buildId uuid' scriptDirHost scriptDirGuest
-- uuid' = printf "%U" uuid
-- setupEnv =
-- Begin
-- [ Run "export" ["HOME=/root"],
-- Run "export" ["USER=root"],
-- Run "source" ["/etc/profile"]
-- ]
-- script = Begin [setupEnv, scriptIn, successMarkerCmd scriptDirGuest]
-- buildDir = buildBaseDir </> uuid'
-- liftIO $ do
-- createDirectoryIfMissing True scriptDirHost
-- writeSh (scriptDirHost </> initScript) script
-- domain <- mkDomain
-- writeFile domainFile domain
-- return $ Context scriptDirHost uuid domainFile cfgIn