module BDCS.Export.Qcow2(qcow2Sink)
where
import Control.Monad.Except(MonadError)
import Control.Monad.Logger(MonadLoggerIO, logDebugN)
import Control.Monad.Trans(lift)
import Control.Monad.Trans.Control(MonadBaseControl)
import Control.Monad.Trans.Resource(MonadResource)
import Data.Conduit(Consumer, bracketP)
import System.Directory(removePathForcibly)
import System.FilePath(takeDirectory)
import System.IO.Temp(createTempDirectory)
import qualified BDCS.CS as CS
import BDCS.DB(Files)
import BDCS.Export.Directory(directorySink)
import BDCS.Export.Utils(runHacks, runTmpfiles)
import BDCS.Utils.Process(callProcessLogged)
qcow2Sink :: (MonadBaseControl IO m, MonadError String m, MonadLoggerIO m, MonadResource m) => FilePath -> Consumer (Files, CS.Object) m ()
qcow2Sink outPath =
bracketP (createTempDirectory (takeDirectory outPath) "export")
removePathForcibly
(\tmpDir -> do
logDebugN "Running tmpfiles"
lift $ runTmpfiles tmpDir
logDebugN "Exporting to directory"
directorySink tmpDir
logDebugN "Running standard hacks"
lift $ runHacks tmpDir
lift $ callProcessLogged "virt-make-fs" [tmpDir, outPath, "--format=qcow2", "--label=composer"]
)