-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A tool and library for building virtual machine images. -- -- Build virtual machine images for vm-deployments; resize, un-partition, -- create from scratch or convert disk image files in a variety of -- formats; assemble and generate all associated files from templates and -- regular files. VM images can further be modifed through scripts, which -- are executed in LXC containers into which the vm-images as well as -- arbitrary directories from the host are mounted. All assembled files -- can also be accessed by vm build scripts through a special directory -- mounted in the build container, and/or can be written to directories, -- ISO- or VFAT-images. The ISO/VFAT images that B9 creates are -- compatible to 'cloud-init's NoCloud data source; B9 is also -- very well suited for compiling in a containerized environment. For -- these applications, the images can be marked as Transient to -- indicate no further interest in the VM-image itself, and B9 will -- discard them after the build. B9 will never over-write source files, -- not even large vm-image files - there is no intended way to modify a -- source vm-image file 'in-place'. B9 operates in random build -- directories, which are discarded when the build exists. @package b9 @version 0.5.21 -- | Utility module to extract a primary partition from an MBR partition on -- a raw image file. module B9.MBR getPartition :: Int -> FilePath -> IO (Word64, Word64) data PrimaryPartition PrimaryPartition :: !Word8 -> !CHS -> !Word8 -> !CHS -> !Word32 -> !Word32 -> PrimaryPartition [primPartStatus] :: PrimaryPartition -> !Word8 [primPartChsStart] :: PrimaryPartition -> !CHS [primPartPartType] :: PrimaryPartition -> !Word8 [primPartChsEnd] :: PrimaryPartition -> !CHS [primPartLbaStart] :: PrimaryPartition -> !Word32 [primPartSectors] :: PrimaryPartition -> !Word32 data MBR MBR :: !PrimaryPartition -> !PrimaryPartition -> !PrimaryPartition -> !PrimaryPartition -> MBR [mbrPart1] :: MBR -> !PrimaryPartition [mbrPart2] :: MBR -> !PrimaryPartition [mbrPart3] :: MBR -> !PrimaryPartition [mbrPart4] :: MBR -> !PrimaryPartition data CHS CHS :: !Word8 -> !Word8 -> !Word8 -> CHS [chsH] :: CHS -> !Word8 [chs_CUpper2_S] :: CHS -> !Word8 [chs_CLower8] :: CHS -> !Word8 instance GHC.Show.Show B9.MBR.MBR instance GHC.Show.Show B9.MBR.PrimaryPartition instance GHC.Show.Show B9.MBR.CHS -- | Function to find the file offsets of primary partitions in raw disk -- images. Currently only MBR partitions are supported. See MBR module B9.PartitionTable getPartition :: Int -> FilePath -> IO (Word64, Word64, Word64) -- | Some QuickCheck utility functions. module B9.QCUtil arbitraryEnv :: Arbitrary a => Gen [(String, a)] halfSize :: Gen a -> Gen a smaller :: Gen a -> Gen a arbitraryFilePath :: Gen FilePath arbitraryLetter :: Gen Char arbitraryLetterUpper :: Gen Char arbitraryLetterLower :: Gen Char arbitraryDigit :: Gen Char -- | Erlang term parser and pretty printer. module B9.Content.ErlTerms -- | Parse a subset of valid Erlang terms. It parses no maps and binaries -- are restricted to either empty binaries or binaries with a string. The -- input encoding must be restricted to ascii compatible 8-bit characters -- (e.g. latin-1 or UTF8). parseErlTerm :: String -> ByteString -> Either String SimpleErlangTerm -- | Convert an abstract Erlang term to a pretty byte string preserving the -- encoding. renderErlTerm :: SimpleErlangTerm -> ByteString -- | Simplified Erlang term representation. data SimpleErlangTerm ErlString :: String -> SimpleErlangTerm ErlFloat :: Double -> SimpleErlangTerm ErlNatural :: Integer -> SimpleErlangTerm ErlAtom :: String -> SimpleErlangTerm ErlChar :: Char -> SimpleErlangTerm ErlBinary :: String -> SimpleErlangTerm ErlList :: [SimpleErlangTerm] -> SimpleErlangTerm ErlTuple :: [SimpleErlangTerm] -> SimpleErlangTerm arbitraryErlSimpleAtom :: Gen SimpleErlangTerm arbitraryErlString :: Gen SimpleErlangTerm arbitraryErlNumber :: Gen SimpleErlangTerm arbitraryErlNatural :: Gen SimpleErlangTerm arbitraryErlFloat :: Gen SimpleErlangTerm arbitraryErlNameChar :: Gen Char instance GHC.Generics.Generic B9.Content.ErlTerms.SimpleErlangTerm instance Data.Data.Data B9.Content.ErlTerms.SimpleErlangTerm instance GHC.Show.Show B9.Content.ErlTerms.SimpleErlangTerm instance GHC.Read.Read B9.Content.ErlTerms.SimpleErlangTerm instance GHC.Classes.Ord B9.Content.ErlTerms.SimpleErlangTerm instance GHC.Classes.Eq B9.Content.ErlTerms.SimpleErlangTerm instance Data.Hashable.Class.Hashable B9.Content.ErlTerms.SimpleErlangTerm instance Data.Binary.Class.Binary B9.Content.ErlTerms.SimpleErlangTerm instance Control.DeepSeq.NFData B9.Content.ErlTerms.SimpleErlangTerm instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.ErlTerms.SimpleErlangTerm -- | Definition of Script and functions to convert Scripts to -- bash scripts. module B9.ShellScript -- | Convert script to bash-shell-script written to file -- and make file executable. writeSh :: FilePath -> Script -> IO () renderScript :: Script -> String -- | Check if a script has the same effect as NoOP emptyScript :: Script -> Bool data CmdVerbosity Debug :: CmdVerbosity Verbose :: CmdVerbosity OnlyStdErr :: CmdVerbosity Quiet :: CmdVerbosity data Cwd Cwd :: FilePath -> Cwd NoCwd :: Cwd data User User :: String -> User NoUser :: User data Script In :: FilePath -> [Script] -> Script As :: String -> [Script] -> Script IgnoreErrors :: Bool -> [Script] -> Script Verbosity :: CmdVerbosity -> [Script] -> Script Begin :: [Script] -> Script Run :: FilePath -> [String] -> Script NoOP :: Script instance GHC.Generics.Generic B9.ShellScript.Ctx instance GHC.Classes.Eq B9.ShellScript.Ctx instance Data.Data.Data B9.ShellScript.Ctx instance GHC.Read.Read B9.ShellScript.Ctx instance GHC.Show.Show B9.ShellScript.Ctx instance GHC.Generics.Generic B9.ShellScript.Cmd instance GHC.Classes.Eq B9.ShellScript.Cmd instance Data.Data.Data B9.ShellScript.Cmd instance GHC.Read.Read B9.ShellScript.Cmd instance GHC.Show.Show B9.ShellScript.Cmd instance GHC.Generics.Generic B9.ShellScript.User instance GHC.Classes.Eq B9.ShellScript.User instance Data.Data.Data B9.ShellScript.User instance GHC.Read.Read B9.ShellScript.User instance GHC.Show.Show B9.ShellScript.User instance GHC.Generics.Generic B9.ShellScript.Cwd instance GHC.Classes.Eq B9.ShellScript.Cwd instance Data.Data.Data B9.ShellScript.Cwd instance GHC.Read.Read B9.ShellScript.Cwd instance GHC.Show.Show B9.ShellScript.Cwd instance GHC.Generics.Generic B9.ShellScript.Script instance GHC.Classes.Eq B9.ShellScript.Script instance Data.Data.Data B9.ShellScript.Script instance GHC.Read.Read B9.ShellScript.Script instance GHC.Show.Show B9.ShellScript.Script instance GHC.Generics.Generic B9.ShellScript.CmdVerbosity instance GHC.Classes.Eq B9.ShellScript.CmdVerbosity instance Data.Data.Data B9.ShellScript.CmdVerbosity instance GHC.Read.Read B9.ShellScript.CmdVerbosity instance GHC.Show.Show B9.ShellScript.CmdVerbosity instance Data.Hashable.Class.Hashable B9.ShellScript.Script instance Data.Binary.Class.Binary B9.ShellScript.Script instance Control.DeepSeq.NFData B9.ShellScript.Script instance GHC.Base.Monoid B9.ShellScript.Script instance Data.Hashable.Class.Hashable B9.ShellScript.Cmd instance Data.Binary.Class.Binary B9.ShellScript.Cmd instance Control.DeepSeq.NFData B9.ShellScript.Cmd instance Data.Hashable.Class.Hashable B9.ShellScript.CmdVerbosity instance Data.Binary.Class.Binary B9.ShellScript.CmdVerbosity instance Control.DeepSeq.NFData B9.ShellScript.CmdVerbosity instance Data.Hashable.Class.Hashable B9.ShellScript.Cwd instance Data.Binary.Class.Binary B9.ShellScript.Cwd instance Control.DeepSeq.NFData B9.ShellScript.Cwd instance Data.Hashable.Class.Hashable B9.ShellScript.User instance Data.Binary.Class.Binary B9.ShellScript.User instance Control.DeepSeq.NFData B9.ShellScript.User instance Data.Hashable.Class.Hashable B9.ShellScript.Ctx instance Data.Binary.Class.Binary B9.ShellScript.Ctx instance Control.DeepSeq.NFData B9.ShellScript.Ctx -- | Data types that describe all B9 relevant elements of virtual machine -- disk images. module B9.DiskImages -- | Build target for disk images; the destination, format and size of the -- image to generate, as well as how to create or obtain the image before -- a VmScript is executed with the image mounted at a -- MountPoint. data ImageTarget ImageTarget :: ImageDestination -> ImageSource -> MountPoint -> ImageTarget -- | A mount point or NotMounted data MountPoint MountPoint :: FilePath -> MountPoint NotMounted :: MountPoint -- | The destination of an image. data ImageDestination -- | Create the image and some meta data so that other builds can use them -- as ImageSources via From. Share :: String -> ImageType -> ImageResize -> ImageDestination -- | DEPRECATED Export a raw image that can directly be booted. LiveInstallerImage :: String -> FilePath -> ImageResize -> ImageDestination -- | Write an image file to the path in the first argument., possible -- resizing it, LocalFile :: Image -> ImageResize -> ImageDestination -- | Do not export the image. Usefule if the main objective of the b9 build -- is not an image file, but rather some artifact produced by executing -- by a containerize build. Transient :: ImageDestination -- | Specification of how the image to build is obtained. data ImageSource -- | Create an empty image file having a file system label (first -- parameter), a file system type (e.g. Ext4) and an -- ImageSize EmptyImage :: String -> FileSystem -> ImageType -> ImageSize -> ImageSource -- | DEPRECATED CopyOnWrite :: Image -> ImageSource -- | Clone an existing image file; if the image file contains partitions, -- select the partition to use, b9 will extract that partition by reading -- the offset of the partition from the partition table and extract it -- using dd. SourceImage :: Image -> Partition -> ImageResize -> ImageSource -- | Use an image previously shared by via Share. From :: String -> ImageResize -> ImageSource -- | The partition to extract. data Partition -- | There is no partition table on the image NoPT :: Partition -- | Extract partition n n must be in 0..3 Partition :: Int -> Partition -- | A vm disk image file consisting of a path to the image file, and the -- type and file system. data Image Image :: FilePath -> ImageType -> FileSystem -> Image -- | An image type defines the actual file format of a file -- containing file systems. These are like virtual harddrives data ImageType Raw :: ImageType QCow2 :: ImageType Vmdk :: ImageType -- | The file systems that b9 can use and convert. data FileSystem NoFileSystem :: FileSystem Ext4 :: FileSystem ISO9660 :: FileSystem VFAT :: FileSystem -- | A data type for image file or file system size; instead of passing -- Ints around this also captures a size unit so that the -- Int can be kept small data ImageSize ImageSize :: Int -> SizeUnit -> ImageSize -- | Enumeration of size multipliers. The exact semantics may vary -- depending on what external tools look at these. E.g. the size unit is -- convert to a size parameter of the qemu-img command line -- tool. data SizeUnit B :: SizeUnit KB :: SizeUnit MB :: SizeUnit GB :: SizeUnit -- | How to resize an image file. data ImageResize -- | Resize the image but not the file system. Note that a file -- system contained in the image file might be corrupted by this -- operation. To not only resize the image file but also the fil system -- contained in it, use Resize. ResizeImage :: ImageSize -> ImageResize -- | Resize an image and the contained file system. Resize :: ImageSize -> ImageResize -- | Resize an image and the contained file system to the smallest size to -- fit the contents of the file system. ShrinkToMinimum :: ImageResize -- | Do not change the image size. KeepSize :: ImageResize -- | A type alias that indicates that something of type a is mount -- at a MountPoint type Mounted a = (a, MountPoint) -- | SharedImage holds all data necessary to describe an -- instance of a shared image identified by a -- SharedImageName. Shared images are stored in -- Repositorys. data SharedImage SharedImage :: SharedImageName -> SharedImageDate -> SharedImageBuildId -> ImageType -> FileSystem -> SharedImage -- | The name of the image is the de-facto identifier for push, pull, -- From and Share. B9 always selects the newest version the -- shared image identified by that name when using a shared image as an -- ImageSource. This is a wrapper around a string that identifies -- a SharedImage newtype SharedImageName SharedImageName :: String -> SharedImageName -- | The exact time that build job started. This is a wrapper around -- a string contains the build date of a SharedImage; this is -- purely additional convenience and typesafety newtype SharedImageDate SharedImageDate :: String -> SharedImageDate -- | Every B9 build running in a B9Monad contains a random unique -- id that is generated once per build (no matter how many artifacts are -- created in that build) This field contains the build id of the build -- that created the shared image instance. This is A wrapper around a -- string contains the build id of a SharedImage; this is purely -- additional convenience and typesafety newtype SharedImageBuildId SharedImageBuildId :: String -> SharedImageBuildId -- | Shared images are orderd by name, build date and build id -- | Return the name of the file corresponding to an Image imageFileName :: Image -> FilePath -- | Return the ImageType of an Image imageImageType :: Image -> ImageType -- | Return the files generated for a LocalFile or a -- LiveInstallerImage; SharedImage and Transient are -- treated like they have no ouput files because the output files are -- manged by B9. getImageDestinationOutputFiles :: ImageTarget -> [FilePath] -- | Return the name of a shared image, if the ImageDestination is a -- Share destination imageDestinationSharedImageName :: ImageDestination -> Maybe SharedImageName -- | Return the name of a shared source image, if the ImageSource is -- a From source imageSourceSharedImageName :: ImageSource -> Maybe SharedImageName -- | Get the ImageDestination of an ImageTarget itImageDestination :: ImageTarget -> ImageDestination -- | Get the ImageSource of an ImageTarget itImageSource :: ImageTarget -> ImageSource -- | Get the MountPoint of an ImageTarget itImageMountPoint :: ImageTarget -> MountPoint -- | Return true if a Partition parameter is actually refering to a -- partition, false if it is NoPT isPartitioned :: Partition -> Bool -- | Return the Partition index or throw a runtime error if aplied -- to NoPT getPartition :: Partition -> Int -- | Return the file name extension of an image file with a specific image -- format. imageFileExtension :: ImageType -> String -- | Change the image file format and also rename the image file name to -- have the appropriate file name extension. See -- imageFileExtension and replaceExtension changeImageFormat :: ImageType -> Image -> Image changeImageDirectory :: FilePath -> Image -> Image getImageSourceImageType :: ImageSource -> Maybe ImageType -- | Return the name of a shared image. siName :: SharedImage -> SharedImageName -- | Return the date of a shared image. siDate :: SharedImage -> SharedImageDate -- | Return the build id of a shared image. siBuildId :: SharedImage -> SharedImageBuildId -- | Print the contents of the shared image in one line prettyPrintSharedImages :: [SharedImage] -> String -- | Return the disk image of an sharedImage sharedImageImage :: SharedImage -> Image -- | Calculate the path to the text file holding the serialized -- SharedImage relative to the directory of shared images in a -- repository. sharedImageFileName :: SharedImage -> FilePath sharedImagesRootDirectory :: FilePath sharedImageFileExtension :: String -- | The internal image type to use as best guess when dealing with a -- From value. sharedImageDefaultImageType :: ImageType -- | Use a QCow2 image with an Ext4 file system transientCOWImage :: FilePath -> FilePath -> ImageTarget -- | Use a shared image transientSharedImage :: SharedImageName -> FilePath -> ImageTarget -- | Use a shared image transientLocalImage :: FilePath -> FilePath -> ImageTarget -- | Share a QCow2 image with Ext4 fs shareCOWImage :: FilePath -> SharedImageName -> FilePath -> ImageTarget -- | Share an image based on a shared image shareSharedImage :: SharedImageName -> SharedImageName -> FilePath -> ImageTarget -- | Share a QCow2 image with Ext4 fs shareLocalImage :: FilePath -> SharedImageName -> FilePath -> ImageTarget -- | Export a QCow2 image with Ext4 fs cowToliveInstallerImage :: String -> FilePath -> FilePath -> FilePath -> ImageTarget -- | Export a QCow2 image file with Ext4 fs as a local file cowToLocalImage :: FilePath -> FilePath -> FilePath -> ImageTarget -- | Export a QCow2 image file with Ext4 fs as a local file localToLocalImage :: FilePath -> FilePath -> FilePath -> ImageTarget -- | Create a local image file from the contents of the first partition of -- a local QCow2 image. partition1ToLocalImage :: FilePath -> FilePath -> FilePath -> ImageTarget -- | Split any image target into two image targets, one for creating an -- intermediate shared image and one from the intermediate shared image -- to the output image. splitToIntermediateSharedImage :: ImageTarget -> SharedImageName -> (ImageTarget, ImageTarget) arbitrarySharedImageName :: Gen String instance GHC.Generics.Generic B9.DiskImages.SharedImage instance Data.Data.Data B9.DiskImages.SharedImage instance GHC.Show.Show B9.DiskImages.SharedImage instance GHC.Read.Read B9.DiskImages.SharedImage instance GHC.Classes.Eq B9.DiskImages.SharedImage instance Control.DeepSeq.NFData B9.DiskImages.SharedImageBuildId instance Data.Binary.Class.Binary B9.DiskImages.SharedImageBuildId instance Data.Hashable.Class.Hashable B9.DiskImages.SharedImageBuildId instance Data.Data.Data B9.DiskImages.SharedImageBuildId instance GHC.Show.Show B9.DiskImages.SharedImageBuildId instance GHC.Read.Read B9.DiskImages.SharedImageBuildId instance GHC.Classes.Ord B9.DiskImages.SharedImageBuildId instance GHC.Classes.Eq B9.DiskImages.SharedImageBuildId instance Control.DeepSeq.NFData B9.DiskImages.SharedImageDate instance Data.Binary.Class.Binary B9.DiskImages.SharedImageDate instance Data.Hashable.Class.Hashable B9.DiskImages.SharedImageDate instance Data.Data.Data B9.DiskImages.SharedImageDate instance GHC.Show.Show B9.DiskImages.SharedImageDate instance GHC.Read.Read B9.DiskImages.SharedImageDate instance GHC.Classes.Ord B9.DiskImages.SharedImageDate instance GHC.Classes.Eq B9.DiskImages.SharedImageDate instance Control.DeepSeq.NFData B9.DiskImages.SharedImageName instance Data.Binary.Class.Binary B9.DiskImages.SharedImageName instance Data.Hashable.Class.Hashable B9.DiskImages.SharedImageName instance Data.Data.Data B9.DiskImages.SharedImageName instance GHC.Show.Show B9.DiskImages.SharedImageName instance GHC.Read.Read B9.DiskImages.SharedImageName instance GHC.Classes.Ord B9.DiskImages.SharedImageName instance GHC.Classes.Eq B9.DiskImages.SharedImageName instance GHC.Generics.Generic B9.DiskImages.ImageTarget instance GHC.Classes.Eq B9.DiskImages.ImageTarget instance Data.Data.Data B9.DiskImages.ImageTarget instance GHC.Show.Show B9.DiskImages.ImageTarget instance GHC.Read.Read B9.DiskImages.ImageTarget instance GHC.Generics.Generic B9.DiskImages.ImageDestination instance GHC.Classes.Eq B9.DiskImages.ImageDestination instance Data.Data.Data B9.DiskImages.ImageDestination instance GHC.Show.Show B9.DiskImages.ImageDestination instance GHC.Read.Read B9.DiskImages.ImageDestination instance GHC.Generics.Generic B9.DiskImages.ImageSource instance GHC.Classes.Eq B9.DiskImages.ImageSource instance Data.Data.Data B9.DiskImages.ImageSource instance GHC.Read.Read B9.DiskImages.ImageSource instance GHC.Show.Show B9.DiskImages.ImageSource instance GHC.Generics.Generic B9.DiskImages.ImageResize instance Data.Data.Data B9.DiskImages.ImageResize instance GHC.Read.Read B9.DiskImages.ImageResize instance GHC.Show.Show B9.DiskImages.ImageResize instance GHC.Classes.Eq B9.DiskImages.ImageResize instance GHC.Generics.Generic B9.DiskImages.ImageSize instance Data.Data.Data B9.DiskImages.ImageSize instance GHC.Read.Read B9.DiskImages.ImageSize instance GHC.Show.Show B9.DiskImages.ImageSize instance GHC.Classes.Eq B9.DiskImages.ImageSize instance GHC.Generics.Generic B9.DiskImages.SizeUnit instance Data.Data.Data B9.DiskImages.SizeUnit instance GHC.Classes.Ord B9.DiskImages.SizeUnit instance GHC.Read.Read B9.DiskImages.SizeUnit instance GHC.Show.Show B9.DiskImages.SizeUnit instance GHC.Classes.Eq B9.DiskImages.SizeUnit instance GHC.Generics.Generic B9.DiskImages.Image instance Data.Data.Data B9.DiskImages.Image instance GHC.Read.Read B9.DiskImages.Image instance GHC.Show.Show B9.DiskImages.Image instance GHC.Classes.Eq B9.DiskImages.Image instance GHC.Generics.Generic B9.DiskImages.FileSystem instance Data.Data.Data B9.DiskImages.FileSystem instance GHC.Read.Read B9.DiskImages.FileSystem instance GHC.Show.Show B9.DiskImages.FileSystem instance GHC.Classes.Eq B9.DiskImages.FileSystem instance GHC.Generics.Generic B9.DiskImages.ImageType instance GHC.Show.Show B9.DiskImages.ImageType instance Data.Data.Data B9.DiskImages.ImageType instance GHC.Read.Read B9.DiskImages.ImageType instance GHC.Classes.Eq B9.DiskImages.ImageType instance GHC.Generics.Generic B9.DiskImages.Partition instance Data.Data.Data B9.DiskImages.Partition instance GHC.Read.Read B9.DiskImages.Partition instance GHC.Show.Show B9.DiskImages.Partition instance GHC.Classes.Eq B9.DiskImages.Partition instance GHC.Generics.Generic B9.DiskImages.MountPoint instance GHC.Classes.Eq B9.DiskImages.MountPoint instance Data.Data.Data B9.DiskImages.MountPoint instance GHC.Read.Read B9.DiskImages.MountPoint instance GHC.Show.Show B9.DiskImages.MountPoint instance Data.Hashable.Class.Hashable B9.DiskImages.ImageTarget instance Data.Binary.Class.Binary B9.DiskImages.ImageTarget instance Control.DeepSeq.NFData B9.DiskImages.ImageTarget instance Data.Hashable.Class.Hashable B9.DiskImages.MountPoint instance Data.Binary.Class.Binary B9.DiskImages.MountPoint instance Control.DeepSeq.NFData B9.DiskImages.MountPoint instance Data.Hashable.Class.Hashable B9.DiskImages.ImageDestination instance Data.Binary.Class.Binary B9.DiskImages.ImageDestination instance Control.DeepSeq.NFData B9.DiskImages.ImageDestination instance Data.Hashable.Class.Hashable B9.DiskImages.ImageSource instance Data.Binary.Class.Binary B9.DiskImages.ImageSource instance Control.DeepSeq.NFData B9.DiskImages.ImageSource instance Data.Hashable.Class.Hashable B9.DiskImages.Partition instance Data.Binary.Class.Binary B9.DiskImages.Partition instance Control.DeepSeq.NFData B9.DiskImages.Partition instance Data.Hashable.Class.Hashable B9.DiskImages.Image instance Data.Binary.Class.Binary B9.DiskImages.Image instance Control.DeepSeq.NFData B9.DiskImages.Image instance Data.Hashable.Class.Hashable B9.DiskImages.ImageType instance Data.Binary.Class.Binary B9.DiskImages.ImageType instance Control.DeepSeq.NFData B9.DiskImages.ImageType instance Data.Hashable.Class.Hashable B9.DiskImages.FileSystem instance Data.Binary.Class.Binary B9.DiskImages.FileSystem instance Control.DeepSeq.NFData B9.DiskImages.FileSystem instance Data.Hashable.Class.Hashable B9.DiskImages.ImageSize instance Data.Binary.Class.Binary B9.DiskImages.ImageSize instance Control.DeepSeq.NFData B9.DiskImages.ImageSize instance Data.Hashable.Class.Hashable B9.DiskImages.SizeUnit instance Data.Binary.Class.Binary B9.DiskImages.SizeUnit instance Control.DeepSeq.NFData B9.DiskImages.SizeUnit instance Data.Hashable.Class.Hashable B9.DiskImages.ImageResize instance Data.Binary.Class.Binary B9.DiskImages.ImageResize instance Control.DeepSeq.NFData B9.DiskImages.ImageResize instance Data.Hashable.Class.Hashable B9.DiskImages.SharedImage instance Data.Binary.Class.Binary B9.DiskImages.SharedImage instance Control.DeepSeq.NFData B9.DiskImages.SharedImage instance GHC.Classes.Ord B9.DiskImages.SharedImage instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.ImageTarget instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.ImageSource instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.ImageDestination instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.MountPoint instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.ImageResize instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.Partition instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.Image instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.FileSystem instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.ImageType instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.ImageSize instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.SizeUnit instance Test.QuickCheck.Arbitrary.Arbitrary B9.DiskImages.SharedImageName -- | Data types describing the execution environment of virtual machine -- builds. ExecEnv, Resources and SharedDirectory -- describe how B9.LibVirtLXC should configure and execute build -- scripts, as defined in B9.ShellScript and B9.Vm. module B9.ExecEnv data ExecEnv ExecEnv :: String -> [Mounted Image] -> [SharedDirectory] -> Resources -> ExecEnv [envName] :: ExecEnv -> String [envImageMounts] :: ExecEnv -> [Mounted Image] [envSharedDirectories] :: ExecEnv -> [SharedDirectory] [envResources] :: ExecEnv -> Resources data Resources Resources :: RamSize -> Int -> CPUArch -> Resources [maxMemory] :: Resources -> RamSize [cpuCount] :: Resources -> Int [cpuArch] :: Resources -> CPUArch noResources :: Resources data SharedDirectory SharedDirectory :: FilePath -> MountPoint -> SharedDirectory SharedDirectoryRO :: FilePath -> MountPoint -> SharedDirectory SharedSources :: MountPoint -> SharedDirectory data CPUArch X86_64 :: CPUArch I386 :: CPUArch data RamSize RamSize :: Int -> SizeUnit -> RamSize AutomaticRamSize :: RamSize instance GHC.Generics.Generic B9.ExecEnv.ExecEnv instance GHC.Classes.Eq B9.ExecEnv.ExecEnv instance Data.Data.Data B9.ExecEnv.ExecEnv instance GHC.Show.Show B9.ExecEnv.ExecEnv instance GHC.Read.Read B9.ExecEnv.ExecEnv instance GHC.Generics.Generic B9.ExecEnv.Resources instance Data.Data.Data B9.ExecEnv.Resources instance GHC.Show.Show B9.ExecEnv.Resources instance GHC.Read.Read B9.ExecEnv.Resources instance GHC.Classes.Eq B9.ExecEnv.Resources instance GHC.Generics.Generic B9.ExecEnv.RamSize instance Data.Data.Data B9.ExecEnv.RamSize instance GHC.Classes.Ord B9.ExecEnv.RamSize instance GHC.Show.Show B9.ExecEnv.RamSize instance GHC.Read.Read B9.ExecEnv.RamSize instance GHC.Classes.Eq B9.ExecEnv.RamSize instance GHC.Generics.Generic B9.ExecEnv.CPUArch instance GHC.Classes.Eq B9.ExecEnv.CPUArch instance Data.Data.Data B9.ExecEnv.CPUArch instance GHC.Show.Show B9.ExecEnv.CPUArch instance GHC.Read.Read B9.ExecEnv.CPUArch instance GHC.Generics.Generic B9.ExecEnv.SharedDirectory instance GHC.Classes.Eq B9.ExecEnv.SharedDirectory instance Data.Data.Data B9.ExecEnv.SharedDirectory instance GHC.Show.Show B9.ExecEnv.SharedDirectory instance GHC.Read.Read B9.ExecEnv.SharedDirectory instance Data.Hashable.Class.Hashable B9.ExecEnv.ExecEnv instance Data.Binary.Class.Binary B9.ExecEnv.ExecEnv instance Control.DeepSeq.NFData B9.ExecEnv.ExecEnv instance Data.Hashable.Class.Hashable B9.ExecEnv.SharedDirectory instance Data.Binary.Class.Binary B9.ExecEnv.SharedDirectory instance Control.DeepSeq.NFData B9.ExecEnv.SharedDirectory instance Data.Hashable.Class.Hashable B9.ExecEnv.Resources instance Data.Binary.Class.Binary B9.ExecEnv.Resources instance Control.DeepSeq.NFData B9.ExecEnv.Resources instance GHC.Base.Monoid B9.ExecEnv.Resources instance Data.Hashable.Class.Hashable B9.ExecEnv.CPUArch instance Data.Binary.Class.Binary B9.ExecEnv.CPUArch instance Control.DeepSeq.NFData B9.ExecEnv.CPUArch instance GHC.Base.Monoid B9.ExecEnv.CPUArch instance Data.Hashable.Class.Hashable B9.ExecEnv.RamSize instance Data.Binary.Class.Binary B9.ExecEnv.RamSize instance Control.DeepSeq.NFData B9.ExecEnv.RamSize instance GHC.Base.Monoid B9.ExecEnv.RamSize -- | Extensions to ConfigFile and utility functions for dealing with -- configuration in general and reading/writing files. module B9.ConfigUtils allOn :: (a -> Maybe Bool) -> a -> a -> Maybe Bool lastOn :: (a -> Maybe b) -> a -> a -> Maybe b data SystemPath Path :: FilePath -> SystemPath InHomeDir :: FilePath -> SystemPath InB9UserDir :: FilePath -> SystemPath InTempDir :: FilePath -> SystemPath resolve :: MonadIO m => SystemPath -> m FilePath ensureDir :: MonadIO m => FilePath -> m () readIniFile :: MonadIO m => SystemPath -> m ConfigParser getOptionM :: (Get_C a, Read a) => ConfigParser -> SectionSpec -> OptionSpec -> Maybe a getOption :: (Get_C a, Monoid a) => ConfigParser -> SectionSpec -> OptionSpec -> a getOptionOr :: (Get_C a, Read a) => ConfigParser -> SectionSpec -> OptionSpec -> a -> a data IniFileException IniFileException :: FilePath -> CPError -> IniFileException newtype UUID UUID :: (Word32, Word16, Word16, Word16, Word32, Word16) -> UUID randomUUID :: MonadIO m => m UUID tell :: (MonadIO m, Show a) => FilePath -> a -> m () consult :: (MonadIO m, Read a) => FilePath -> m a -- | Get all files from dir that is get ONLY files not directories getDirectoryFiles :: MonadIO m => FilePath -> m [FilePath] maybeConsult :: (MonadIO m, Read a) => Maybe FilePath -> a -> m a maybeConsultSystemPath :: (MonadIO m, Read a) => Maybe SystemPath -> a -> m a instance GHC.Classes.Ord B9.ConfigUtils.UUID instance GHC.Classes.Eq B9.ConfigUtils.UUID instance GHC.Show.Show B9.ConfigUtils.UUID instance GHC.Read.Read B9.ConfigUtils.UUID instance GHC.Show.Show B9.ConfigUtils.IniFileException instance GHC.Show.Show B9.ConfigUtils.ReaderException instance Data.Data.Data B9.ConfigUtils.SystemPath instance GHC.Show.Show B9.ConfigUtils.SystemPath instance GHC.Read.Read B9.ConfigUtils.SystemPath instance GHC.Classes.Eq B9.ConfigUtils.SystemPath instance GHC.Exception.Exception B9.ConfigUtils.ReaderException instance GHC.Exception.Exception B9.ConfigUtils.IniFileException instance Text.Printf.PrintfArg B9.ConfigUtils.UUID -- | B9 has a concept of SharedImaged. Shared images can be pulled -- and pushed to/from remote locations via rsync+ssh. B9 also maintains a -- local cache; the whole thing is supposed to be build-server-safe, that -- means no two builds shall interfere with each other. This is -- accomplished by refraining from automatic cache updates from/to remote -- repositories. module B9.Repository data RemoteRepo RemoteRepo :: String -> FilePath -> SshPrivKey -> SshRemoteHost -> SshRemoteUser -> RemoteRepo remoteRepoRepoId :: RemoteRepo -> String newtype RepoCache RepoCache :: FilePath -> RepoCache newtype SshPrivKey SshPrivKey :: FilePath -> SshPrivKey newtype SshRemoteHost SshRemoteHost :: (String, Int) -> SshRemoteHost newtype SshRemoteUser SshRemoteUser :: String -> SshRemoteUser -- | Initialize the local repository cache directory. initRepoCache :: MonadIO m => SystemPath -> m RepoCache -- | Initialize the repository; load the corresponding settings from the -- config file, check that the priv key exists and create the -- correspondig cache directory. initRemoteRepo :: MonadIO m => RepoCache -> RemoteRepo -> m RemoteRepo -- | Empty the repository; load the corresponding settings from the config -- file, check that the priv key exists and create the correspondig cache -- directory. cleanRemoteRepo :: MonadIO m => RepoCache -> RemoteRepo -> m () -- | Check for existance of priv-key and make it an absolute path. remoteRepoCheckSshPrivKey :: MonadIO m => RemoteRepo -> m RemoteRepo -- | Return the cache directory for a remote repository relative to the -- root cache dir. remoteRepoCacheDir :: RepoCache -> String -> FilePath -- | Return the local repository directory. localRepoDir :: RepoCache -> FilePath -- | Persist a repo to a configuration file. writeRemoteRepoConfig :: RemoteRepo -> ConfigParser -> Either CPError ConfigParser getConfiguredRemoteRepos :: ConfigParser -> [RemoteRepo] -- | Load a repository from a configuration file that has been written by -- writeRepositoryToB9Config. lookupRemoteRepo :: [RemoteRepo] -> String -> Maybe RemoteRepo instance Data.Data.Data B9.Repository.RemoteRepo instance GHC.Show.Show B9.Repository.RemoteRepo instance GHC.Read.Read B9.Repository.RemoteRepo instance Data.Data.Data B9.Repository.SshRemoteUser instance GHC.Show.Show B9.Repository.SshRemoteUser instance GHC.Read.Read B9.Repository.SshRemoteUser instance Data.Data.Data B9.Repository.SshRemoteHost instance GHC.Show.Show B9.Repository.SshRemoteHost instance GHC.Read.Read B9.Repository.SshRemoteHost instance Data.Data.Data B9.Repository.SshPrivKey instance GHC.Show.Show B9.Repository.SshPrivKey instance GHC.Read.Read B9.Repository.SshPrivKey instance Data.Data.Data B9.Repository.RepoCache instance GHC.Show.Show B9.Repository.RepoCache instance GHC.Read.Read B9.Repository.RepoCache -- | Utility functions based on Template to offer $var -- variable expansion in string throughout a B9 artifact. module B9.Content.StringTemplate subst :: [(String, String)] -> String -> String substE :: [(String, String)] -> String -> Either String String substEB :: [(String, String)] -> ByteString -> Either String ByteString substFile :: MonadIO m => [(String, String)] -> FilePath -> FilePath -> m () substPath :: [(String, String)] -> SystemPath -> SystemPath readTemplateFile :: (MonadIO m, MonadReader Environment m) => SourceFile -> m ByteString -- | A wrapper around a file path and a flag indicating if template -- variable expansion should be performed when reading the file contents. data SourceFile Source :: SourceFileConversion -> FilePath -> SourceFile data SourceFileConversion NoConversion :: SourceFileConversion ExpandVariables :: SourceFileConversion newtype Environment Environment :: [(String, String)] -> Environment withEnvironment :: [(String, String)] -> ReaderT Environment m a -> m a instance Data.Binary.Class.Binary B9.Content.StringTemplate.Environment instance Data.Hashable.Class.Hashable B9.Content.StringTemplate.Environment instance Control.DeepSeq.NFData B9.Content.StringTemplate.Environment instance GHC.Classes.Eq B9.Content.StringTemplate.Environment instance Data.Data.Data B9.Content.StringTemplate.Environment instance GHC.Show.Show B9.Content.StringTemplate.Environment instance GHC.Read.Read B9.Content.StringTemplate.Environment instance GHC.Generics.Generic B9.Content.StringTemplate.SourceFile instance GHC.Classes.Eq B9.Content.StringTemplate.SourceFile instance Data.Data.Data B9.Content.StringTemplate.SourceFile instance GHC.Show.Show B9.Content.StringTemplate.SourceFile instance GHC.Read.Read B9.Content.StringTemplate.SourceFile instance GHC.Generics.Generic B9.Content.StringTemplate.SourceFileConversion instance GHC.Classes.Eq B9.Content.StringTemplate.SourceFileConversion instance Data.Data.Data B9.Content.StringTemplate.SourceFileConversion instance GHC.Show.Show B9.Content.StringTemplate.SourceFileConversion instance GHC.Read.Read B9.Content.StringTemplate.SourceFileConversion instance Data.Hashable.Class.Hashable B9.Content.StringTemplate.SourceFile instance Data.Binary.Class.Binary B9.Content.StringTemplate.SourceFile instance Control.DeepSeq.NFData B9.Content.StringTemplate.SourceFile instance Data.Hashable.Class.Hashable B9.Content.StringTemplate.SourceFileConversion instance Data.Binary.Class.Binary B9.Content.StringTemplate.SourceFileConversion instance Control.DeepSeq.NFData B9.Content.StringTemplate.SourceFileConversion instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.StringTemplate.SourceFile -- | Definition of VmScript an artifact encapsulating several -- virtual machines disk images that can be mounted in an execution -- environment like B9.LibVirtLXC. A VmScript is embedded -- by in an ArtifactGenerator. module B9.Vm -- | Describe a virtual machine, i.e. a set up disk images to create and a -- shell script to put things together. data VmScript VmScript :: CPUArch -> [SharedDirectory] -> Script -> VmScript NoVmScript :: VmScript substVmScript :: [(String, String)] -> VmScript -> VmScript instance GHC.Generics.Generic B9.Vm.VmScript instance GHC.Classes.Eq B9.Vm.VmScript instance Data.Data.Data B9.Vm.VmScript instance GHC.Show.Show B9.Vm.VmScript instance GHC.Read.Read B9.Vm.VmScript instance Data.Hashable.Class.Hashable B9.Vm.VmScript instance Data.Binary.Class.Binary B9.Vm.VmScript instance Control.DeepSeq.NFData B9.Vm.VmScript -- | Static B9 configuration. Read, write and merge configurable -- properties. The properties are independent of specific build targets. module B9.B9Config data B9Config B9Config :: Maybe LogLevel -> Maybe FilePath -> Maybe FilePath -> Bool -> ExecEnvType -> Maybe FilePath -> BuildVariables -> Bool -> Maybe SystemPath -> Maybe String -> Bool -> B9Config [verbosity] :: B9Config -> Maybe LogLevel [logFile] :: B9Config -> Maybe FilePath [buildDirRoot] :: B9Config -> Maybe FilePath [keepTempDirs] :: B9Config -> Bool [execEnvType] :: B9Config -> ExecEnvType [profileFile] :: B9Config -> Maybe FilePath [envVars] :: B9Config -> BuildVariables [uniqueBuildDirs] :: B9Config -> Bool [repositoryCache] :: B9Config -> Maybe SystemPath [repository] :: B9Config -> Maybe String [interactive] :: B9Config -> Bool defaultB9ConfigFile :: SystemPath defaultRepositoryCache :: SystemPath defaultB9Config :: B9Config getB9ConfigFile :: MonadIO m => Maybe SystemPath -> m FilePath writeB9Config :: MonadIO m => Maybe SystemPath -> ConfigParser -> m () writeInitialB9Config :: MonadIO m => Maybe SystemPath -> B9Config -> ConfigParser -> m () readB9Config :: MonadIO m => Maybe SystemPath -> m ConfigParser parseB9Config :: ConfigParser -> Either String B9Config data LogLevel LogTrace :: LogLevel LogDebug :: LogLevel LogInfo :: LogLevel LogError :: LogLevel LogNothing :: LogLevel data ExecEnvType LibVirtLXC :: ExecEnvType type BuildVariables = [(String, String)] instance GHC.Show.Show B9.B9Config.B9Config instance GHC.Read.Read B9.B9Config.LogLevel instance GHC.Classes.Ord B9.B9Config.LogLevel instance GHC.Show.Show B9.B9Config.LogLevel instance GHC.Classes.Eq B9.B9Config.LogLevel instance GHC.Read.Read B9.B9Config.ExecEnvType instance GHC.Classes.Ord B9.B9Config.ExecEnvType instance GHC.Show.Show B9.B9Config.ExecEnvType instance GHC.Classes.Eq B9.B9Config.ExecEnvType instance GHC.Base.Monoid B9.B9Config.B9Config -- | Definition of the B9 monad. It encapsulates logging, very basic -- command execution profiling, a reader for the B9.B9Config and -- access to the current build id, the current build directory and the -- artifact to build. -- -- This module is used by the _effectful_ functions in this library. module B9.B9Monad data B9 a run :: ConfigParser -> B9Config -> B9 a -> IO a traceL :: String -> B9 () dbgL :: String -> B9 () infoL :: String -> B9 () errorL :: String -> B9 () getConfigParser :: B9 ConfigParser getConfig :: B9 B9Config getBuildId :: B9 FilePath getBuildDate :: B9 String getBuildDir :: B9 FilePath getExecEnvType :: B9 ExecEnvType getSelectedRemoteRepo :: B9 (Maybe RemoteRepo) getRemoteRepos :: B9 [RemoteRepo] getRepoCache :: B9 RepoCache cmd :: String -> B9 () instance Control.Monad.State.Class.MonadState B9.B9Monad.BuildState B9.B9Monad.B9 instance GHC.Base.Monad B9.B9Monad.B9 instance GHC.Base.Applicative B9.B9Monad.B9 instance GHC.Base.Functor B9.B9Monad.B9 instance GHC.Show.Show B9.B9Monad.ProfilingEntry instance GHC.Classes.Eq B9.B9Monad.ProfilingEntry instance Control.Monad.IO.Class.MonadIO B9.B9Monad.B9 -- | Effectful functions executing shared image respository operations. See -- B9.Repository module B9.RepositoryIO -- | Find files which are in subDir and match glob in the -- repository cache. NOTE: This operates on the repository cache, but -- does not enforce a repository cache update. repoSearch :: FilePath -> FilePathGlob -> B9 [(Repository, [FilePath])] -- | Push a file from the cache to a remote repository pushToRepo :: RemoteRepo -> FilePath -> FilePath -> B9 () -- | Pull a file from a remote repository to cache pullFromRepo :: RemoteRepo -> FilePath -> FilePath -> B9 () -- | Push a file from the cache to a remote repository pullGlob :: FilePath -> FilePathGlob -> RemoteRepo -> B9 () data Repository Cache :: Repository Remote :: String -> Repository -- | Convert a RemoteRepo down to a mere Repository toRemoteRepository :: RemoteRepo -> Repository -- | Express a pattern for file paths, used when searching repositories. data FilePathGlob FileExtension :: String -> FilePathGlob instance GHC.Show.Show B9.RepositoryIO.Repository instance GHC.Read.Read B9.RepositoryIO.Repository instance GHC.Classes.Ord B9.RepositoryIO.Repository instance GHC.Classes.Eq B9.RepositoryIO.Repository -- | Effectful functions that create and convert disk image files. module B9.DiskImageBuilder -- | Create an image from an image source. The destination image must have -- a compatible image type and filesystem. The directory of the image -- MUST be present and the image file itself MUST NOT alredy exist. materializeImageSource :: ImageSource -> Image -> B9 () -- | Replace $... variables inside an ImageTarget substImageTarget :: [(String, String)] -> ImageTarget -> ImageTarget -- | Return all valid image types sorted by preference. preferredDestImageTypes :: ImageSource -> B9 [ImageType] preferredSourceImageTypes :: ImageDestination -> [ImageType] -- | Resolve an ImageSource to an Image. Note however that this -- source will may not exist as is the case for EmptyImage. resolveImageSource :: ImageSource -> B9 Image createDestinationImage :: Image -> ImageDestination -> B9 () -- | Resize an image, including the file system inside the image. resizeImage :: ImageResize -> Image -> B9 () -- | Import a disk image from some external source into the build directory -- if necessary convert the image. importImage :: Image -> Image -> B9 () -- | Export a disk image from the build directory; if necessary convert the -- image. exportImage :: Image -> Image -> B9 () -- | Export a disk image from the build directory; if necessary convert the -- image. exportAndRemoveImage :: Image -> Image -> B9 () -- | Convert an image in the build directory to another format and return -- the new image. convertImage :: Image -> Image -> B9 () -- | Publish an sharedImage made from an image and image meta data to the -- configured repository shareImage :: Image -> SharedImageName -> B9 SharedImage ensureAbsoluteImageDirExists :: Image -> IO Image -- | Publish the latest version of a shared image identified by name to the -- selected repository from the cache. pushSharedImageLatestVersion :: SharedImageName -> B9 () -- | Find shared images and the associated repos from two predicates. The -- result is the concatenated result of the sorted shared images -- satisfying imgPred. lookupSharedImages :: (Repository -> Bool) -> (SharedImage -> Bool) -> B9 [(Repository, SharedImage)] -- | Return a list of all existing sharedImages from cached repositories. getSharedImages :: B9 [(Repository, [SharedImage])] -- | Return the path to the sub directory in the cache that contains files -- of shared images. getSharedImagesCacheDir :: B9 FilePath -- | Return either all remote repos or just the single selected repo. getSelectedRepos :: B9 [RemoteRepo] -- | Pull metadata files from all remote repositories. pullRemoteRepos :: B9 () -- | Pull the latest version of an image, either from the selected remote -- repo or from the repo that has the latest version. pullLatestImage :: SharedImageName -> B9 Bool -- | B9 produces not only VM-Images but also text documents such as -- configuration files required by virtual machines. This module is about -- creating and merging files containing parsable syntactic structures, -- such as most configuration files do. -- -- Imagine you would want to create a cloud-init 'user-data' file from a -- set of 'user-data' snippets which each are valid 'user-data' files in -- yaml syntax and e.g. a write_files section. Now the goal is, -- for b9 to be able to merge these snippets into one, such that all -- writefiles sections are combined into a single writefile section. -- Another example is OTP/Erlang sys.config files. This type class is the -- greatest commonon denominator of types describing a syntax that can be -- parsed, concatenated e.g. like in the above example and rendered. The -- actual concatenation operation is the append from Monoid, i.e. like -- monoid but without the need for an empty element. module B9.Content.AST -- | Types of values that can be parsedrendered fromto -- ByteStrings. This class is used as basis for the -- ASTish class. class (Semigroup a) => ConcatableSyntax a decodeSyntax :: ConcatableSyntax a => FilePath -> ByteString -> Either String a encodeSyntax :: ConcatableSyntax a => a -> ByteString -- | Types of values that describe content, that can be created from an -- AST. class (ConcatableSyntax a) => ASTish a fromAST :: (ASTish a, CanRender c) => AST c a -> ReaderT Environment B9 a -- | Describe how to create structured content that has a tree-like -- syntactic structure, e.g. yaml, JSON and erlang-proplists. The first -- parameter defines a context into which the AST is -- embeded, e.g. B9.Content.Generator.Content'. The second parameter -- defines a specifix syntax, e.g ErlangPropList that the -- AST value generates. data AST c a -- | Create an object similar to a Json object. ASTObj :: [(String, AST c a)] -> AST c a -- | An array. ASTArr :: [AST c a] -> AST c a -- | Merge the nested elements, this is a very powerful tool that allows to -- combine ASTMerge :: [AST c a] -> AST c a ASTEmbed :: c -> AST c a ASTString :: String -> AST c a ASTParse :: SourceFile -> AST c a AST :: a -> AST c a -- | Types of values that can be rendered into a ByteString class CanRender c render :: CanRender c => c -> ReaderT Environment B9 ByteString instance GHC.Generics.Generic (B9.Content.AST.AST c a) instance (GHC.Classes.Eq c, GHC.Classes.Eq a) => GHC.Classes.Eq (B9.Content.AST.AST c a) instance (Data.Data.Data c, Data.Data.Data a) => Data.Data.Data (B9.Content.AST.AST c a) instance (GHC.Show.Show c, GHC.Show.Show a) => GHC.Show.Show (B9.Content.AST.AST c a) instance (GHC.Read.Read c, GHC.Read.Read a) => GHC.Read.Read (B9.Content.AST.AST c a) instance B9.Content.AST.ConcatableSyntax Data.ByteString.Internal.ByteString instance (Data.Hashable.Class.Hashable c, Data.Hashable.Class.Hashable a) => Data.Hashable.Class.Hashable (B9.Content.AST.AST c a) instance (Data.Binary.Class.Binary c, Data.Binary.Class.Binary a) => Data.Binary.Class.Binary (B9.Content.AST.AST c a) instance (Control.DeepSeq.NFData c, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (B9.Content.AST.AST c a) instance (Test.QuickCheck.Arbitrary.Arbitrary c, Test.QuickCheck.Arbitrary.Arbitrary a) => Test.QuickCheck.Arbitrary.Arbitrary (B9.Content.AST.AST c a) -- | A wrapper around erlang and yaml syntax with a proplist-like behaviour -- in the ConcatableSyntax instances module B9.Content.ErlangPropList -- | A wrapper type around erlang terms with a Semigroup instance useful -- for combining sys.config files with OTP-application configurations in -- a list of the form of a proplist. data ErlangPropList ErlangPropList :: SimpleErlangTerm -> ErlangPropList instance GHC.Generics.Generic B9.Content.ErlangPropList.ErlangPropList instance Data.Data.Data B9.Content.ErlangPropList.ErlangPropList instance GHC.Show.Show B9.Content.ErlangPropList.ErlangPropList instance GHC.Classes.Eq B9.Content.ErlangPropList.ErlangPropList instance GHC.Read.Read B9.Content.ErlangPropList.ErlangPropList instance Data.Hashable.Class.Hashable B9.Content.ErlangPropList.ErlangPropList instance Data.Binary.Class.Binary B9.Content.ErlangPropList.ErlangPropList instance Control.DeepSeq.NFData B9.Content.ErlangPropList.ErlangPropList instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.ErlangPropList.ErlangPropList instance Data.Semigroup.Semigroup B9.Content.ErlangPropList.ErlangPropList instance B9.Content.AST.ConcatableSyntax B9.Content.ErlangPropList.ErlangPropList instance B9.Content.AST.ASTish B9.Content.ErlangPropList.ErlangPropList -- | A wrapper around erlang and yaml syntax with a proplist-like behaviour -- in the ConcatableSyntax instances module B9.Content.YamlObject -- | A wrapper type around yaml values with a Semigroup instance useful for -- combining yaml documents describing system configuration like e.g. -- user-data. data YamlObject YamlObject :: Value -> YamlObject instance GHC.Generics.Generic B9.Content.YamlObject.YamlObject instance Data.Data.Data B9.Content.YamlObject.YamlObject instance GHC.Classes.Eq B9.Content.YamlObject.YamlObject instance Data.Hashable.Class.Hashable B9.Content.YamlObject.YamlObject instance Data.Binary.Class.Binary B9.Content.YamlObject.YamlObject instance Control.DeepSeq.NFData B9.Content.YamlObject.YamlObject instance Data.Binary.Class.Binary Data.Aeson.Types.Internal.Value instance GHC.Read.Read B9.Content.YamlObject.YamlObject instance GHC.Show.Show B9.Content.YamlObject.YamlObject instance Data.Semigroup.Semigroup B9.Content.YamlObject.YamlObject instance B9.Content.AST.ConcatableSyntax B9.Content.YamlObject.YamlObject instance B9.Content.AST.ASTish B9.Content.YamlObject.YamlObject instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.YamlObject.YamlObject -- | The basic data structure that ties together syntax trees making them -- composable and addressable in B9 artifacts. module B9.Content.Generator data Content RenderErlang :: (AST Content ErlangPropList) -> Content RenderYaml :: (AST Content YamlObject) -> Content FromString :: String -> Content FromTextFile :: SourceFile -> Content FromURL :: String -> Content instance GHC.Generics.Generic B9.Content.Generator.Content instance Data.Data.Data B9.Content.Generator.Content instance GHC.Classes.Eq B9.Content.Generator.Content instance GHC.Show.Show B9.Content.Generator.Content instance GHC.Read.Read B9.Content.Generator.Content instance Data.Hashable.Class.Hashable B9.Content.Generator.Content instance Data.Binary.Class.Binary B9.Content.Generator.Content instance Control.DeepSeq.NFData B9.Content.Generator.Content instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.Generator.Content instance B9.Content.AST.CanRender B9.Content.Generator.Content -- | Top-Level data types for B9 build artifacts. module B9.ArtifactGenerator -- | Artifacts represent the things B9 can build. A generator specifies -- howto generate parameterized, multiple artifacts. The general -- structure is: -- --
--   Let [ ... bindings ... ]
--       [ Sources
--           [ ... list all input files ... ]
--           [ Artifact ...
--           , Artifact ...
--           , Let [ ... ] [ ... ]
--           ]
--       ]
--   
-- -- The reasons why Sources takes a list of -- ArtifactGenerators is that -- --
    --
  1. this makes the value easier to read/write for humans
  2. --
  3. the sources are static files used in all children (e.g. company -- logo image)
  4. --
  5. the sources are parameterized by variables that bound to different -- values for each artifact, e.g. a template network config file which -- contains the host IP address.
  6. --
-- -- To bind such variables use Let, Each, LetX or -- EachT. -- -- String subtitution of these variables is done by -- B9.Content.StringTemplate. These variables can be used as value -- in nested Lets, in most file names/paths and in source files -- added with SourceFile data ArtifactGenerator -- | Add sources available to ArtifactAssemblys in nested artifact -- generators. Sources :: [ArtifactSource] -> [ArtifactGenerator] -> ArtifactGenerator -- | Bind variables, variables are avaible in nested generators. Let :: [(String, String)] -> [ArtifactGenerator] -> ArtifactGenerator -- | A Let where each variable is assigned to each value; the nested -- generator is executed for each permutation. -- --
--   LetX [("x", ["1","2","3"]), ("y", ["a","b"])] [..]
--   
-- -- Is equal to: -- --
--   Let [] [
--     Let [("x", "1"), ("y", "a")] [..]
--     Let [("x", "1"), ("y", "b")] [..]
--     Let [("x", "2"), ("y", "a")] [..]
--     Let [("x", "2"), ("y", "b")] [..]
--     Let [("x", "3"), ("y", "a")] [..]
--     Let [("x", "3"), ("y", "b")] [..]
--   ]
--   
LetX :: [(String, [String])] -> [ArtifactGenerator] -> ArtifactGenerator -- | Bind each variable to their first value, then each variable to the -- second value, etc ... and execute the nested generator in every step. -- LetX represents a product of all variables, whereas Each -- represents a sum of variable bindings - Each is more like a -- zip whereas LetX is more like a list comprehension. Each :: [(String, [String])] -> [ArtifactGenerator] -> ArtifactGenerator -- | The transposed verison of Each: Bind the variables in the first -- list to each a set of values from the second argument; execute the -- nested generators for each binding EachT :: [String] -> [[String]] -> [ArtifactGenerator] -> ArtifactGenerator -- | Generate an artifact defined by an ArtifactAssembly; the -- assembly can access the files created from the Sources and -- variables bound by Letish elements. An artifact has an instance -- id, that is a unique, human readable string describing the artifact to -- assemble. Artifact :: InstanceId -> ArtifactAssembly -> ArtifactGenerator EmptyArtifact :: ArtifactGenerator -- | Describe how input files for artifacts to build are obtained. The -- general structure of each constructor is FromXXX -- destination source data ArtifactSource -- | Copy a SourceFile potentially replacing variabled defined in -- Let-like parent elements. FromFile :: FilePath -> SourceFile -> ArtifactSource -- | Create a file from some Content FromContent :: FilePath -> Content -> ArtifactSource -- | Set the unix file permissions to all files generated by the -- nested list of ArtifactSources. SetPermissions :: Int -> Int -> Int -> [ArtifactSource] -> ArtifactSource -- | Assume a local directory as starting point for all relative source -- files in the nested ArtifactSources. FromDirectory :: FilePath -> [ArtifactSource] -> ArtifactSource -- | Specify an output directory for all the files generated by the nested -- ArtifactSources IntoDirectory :: FilePath -> [ArtifactSource] -> ArtifactSource -- | Deprecated Concatenate the files generated by the nested -- ArtifactSources. The nested, generated files are not written -- when they are concatenated. Concatenation :: FilePath -> [ArtifactSource] -> ArtifactSource -- | Identify an artifact. Deprecated TODO: B9 does not check if all -- instances IDs are unique. newtype InstanceId IID :: String -> InstanceId data ArtifactTarget CloudInitTarget :: CloudInitType -> FilePath -> ArtifactTarget VmImagesTarget :: ArtifactTarget data CloudInitType CI_ISO :: CloudInitType CI_VFAT :: CloudInitType CI_DIR :: CloudInitType -- | Define an output of a build. Assemblies are nested into -- ArtifactGenerators. They contain all the files defined by the -- Sources they are nested into. data ArtifactAssembly -- | Generate a cloud-init compatible directory, ISO- or VFAT image, -- as specified by the list of CloudInitTypes. Every item will use -- the second argument to create an appropriate file name, e.g. -- for the CI_ISO type the output is second_param.iso. CloudInit :: [CloudInitType] -> FilePath -> ArtifactAssembly -- | a set of VM-images that were created by executing a build script on -- them. VmImages :: [ImageTarget] -> VmScript -> ArtifactAssembly -- | A type representing the targets assembled by assemble from an -- ArtifactAssembly. There is a list of ArtifactTargets -- because e.g. a single CloudInit can produce upto three output -- files, a directory, an ISO image and a VFAT image. data AssembledArtifact AssembledArtifact :: InstanceId -> [ArtifactTarget] -> AssembledArtifact -- | The variable containing the instance id. Deprecated instanceIdKey :: String -- | The variable containing the buildId that identifies each execution of -- B9. For more info about variable substitution in source files see -- StringTemplate buildIdKey :: String -- | The variable containing the date and time a build was started. For -- more info about variable substitution in source files see -- StringTemplate buildDateKey :: String -- | Return the files that the artifact assembly consist of. getAssemblyOutputFiles :: ArtifactAssembly -> [FilePath] instance GHC.Generics.Generic B9.ArtifactGenerator.ArtifactGenerator instance Data.Data.Data B9.ArtifactGenerator.ArtifactGenerator instance GHC.Classes.Eq B9.ArtifactGenerator.ArtifactGenerator instance GHC.Show.Show B9.ArtifactGenerator.ArtifactGenerator instance GHC.Read.Read B9.ArtifactGenerator.ArtifactGenerator instance GHC.Generics.Generic B9.ArtifactGenerator.ArtifactAssembly instance GHC.Classes.Eq B9.ArtifactGenerator.ArtifactAssembly instance Data.Data.Data B9.ArtifactGenerator.ArtifactAssembly instance GHC.Show.Show B9.ArtifactGenerator.ArtifactAssembly instance GHC.Read.Read B9.ArtifactGenerator.ArtifactAssembly instance GHC.Generics.Generic B9.ArtifactGenerator.AssembledArtifact instance GHC.Classes.Eq B9.ArtifactGenerator.AssembledArtifact instance Data.Data.Data B9.ArtifactGenerator.AssembledArtifact instance GHC.Show.Show B9.ArtifactGenerator.AssembledArtifact instance GHC.Read.Read B9.ArtifactGenerator.AssembledArtifact instance GHC.Generics.Generic B9.ArtifactGenerator.ArtifactTarget instance GHC.Classes.Eq B9.ArtifactGenerator.ArtifactTarget instance Data.Data.Data B9.ArtifactGenerator.ArtifactTarget instance GHC.Show.Show B9.ArtifactGenerator.ArtifactTarget instance GHC.Read.Read B9.ArtifactGenerator.ArtifactTarget instance GHC.Generics.Generic B9.ArtifactGenerator.CloudInitType instance GHC.Classes.Eq B9.ArtifactGenerator.CloudInitType instance Data.Data.Data B9.ArtifactGenerator.CloudInitType instance GHC.Show.Show B9.ArtifactGenerator.CloudInitType instance GHC.Read.Read B9.ArtifactGenerator.CloudInitType instance Data.Hashable.Class.Hashable B9.ArtifactGenerator.InstanceId instance Data.Binary.Class.Binary B9.ArtifactGenerator.InstanceId instance Control.DeepSeq.NFData B9.ArtifactGenerator.InstanceId instance GHC.Classes.Eq B9.ArtifactGenerator.InstanceId instance Data.Data.Data B9.ArtifactGenerator.InstanceId instance GHC.Show.Show B9.ArtifactGenerator.InstanceId instance GHC.Read.Read B9.ArtifactGenerator.InstanceId instance GHC.Generics.Generic B9.ArtifactGenerator.ArtifactSource instance Data.Data.Data B9.ArtifactGenerator.ArtifactSource instance GHC.Classes.Eq B9.ArtifactGenerator.ArtifactSource instance GHC.Show.Show B9.ArtifactGenerator.ArtifactSource instance GHC.Read.Read B9.ArtifactGenerator.ArtifactSource instance Data.Hashable.Class.Hashable B9.ArtifactGenerator.ArtifactGenerator instance Data.Binary.Class.Binary B9.ArtifactGenerator.ArtifactGenerator instance Control.DeepSeq.NFData B9.ArtifactGenerator.ArtifactGenerator instance GHC.Base.Monoid B9.ArtifactGenerator.ArtifactGenerator instance Data.Hashable.Class.Hashable B9.ArtifactGenerator.ArtifactSource instance Data.Binary.Class.Binary B9.ArtifactGenerator.ArtifactSource instance Control.DeepSeq.NFData B9.ArtifactGenerator.ArtifactSource instance Data.Hashable.Class.Hashable B9.ArtifactGenerator.ArtifactAssembly instance Data.Binary.Class.Binary B9.ArtifactGenerator.ArtifactAssembly instance Control.DeepSeq.NFData B9.ArtifactGenerator.ArtifactAssembly instance Data.Hashable.Class.Hashable B9.ArtifactGenerator.AssembledArtifact instance Data.Binary.Class.Binary B9.ArtifactGenerator.AssembledArtifact instance Control.DeepSeq.NFData B9.ArtifactGenerator.AssembledArtifact instance Data.Hashable.Class.Hashable B9.ArtifactGenerator.ArtifactTarget instance Data.Binary.Class.Binary B9.ArtifactGenerator.ArtifactTarget instance Control.DeepSeq.NFData B9.ArtifactGenerator.ArtifactTarget instance Data.Hashable.Class.Hashable B9.ArtifactGenerator.CloudInitType instance Data.Binary.Class.Binary B9.ArtifactGenerator.CloudInitType instance Control.DeepSeq.NFData B9.ArtifactGenerator.CloudInitType instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.ArtifactGenerator instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.ArtifactSource instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.InstanceId instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.ArtifactAssembly instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.CloudInitType -- | Experimental new, hopefully typesafe. domain specific language for -- description of VM-builds. module B9.DSL type B9DSL a = Free BuildStep a doc :: String -> B9DSL () doc' :: Content -> B9DSL () (#) :: B9DSL a -> String -> B9DSL a data Documentation Doc :: String -> Documentation DocIncluded :: Content -> Documentation ($=) :: String -> String -> B9DSL () include :: FilePath -> FilePath -> B9DSL () includeTemplate :: FilePath -> FilePath -> B9DSL () writeContent :: FilePath -> Content -> B9DSL () exportCloudInit :: FilePath -> B9DSL () imageSource :: ImageSource -> B9DSL (Imported VmImage) createImage :: String -> FileSystem -> ImageType -> ImageSize -> B9DSL (Imported VmImage) importImage :: FilePath -> ImageType -> FileSystem -> Partition -> ImageResize -> B9DSL (Imported VmImage) from :: String -> B9DSL (Imported VmImage) fromResized :: ImageResize -> String -> B9DSL (Imported VmImage) imageDestination :: Imported VmImage -> ImageDestination -> B9DSL () share :: Imported VmImage -> String -> B9DSL () exportLiveInstallerImage :: Imported VmImage -> String -> FilePath -> ImageResize -> B9DSL () exportImage :: Imported VmImage -> FilePath -> ImageType -> FileSystem -> ImageResize -> B9DSL () mount :: DSLCanMount src => ExecEnv -> src -> FilePath -> B9DSL (Imported (MountArtifact src)) lxc :: String -> B9DSL ExecEnv lxc32 :: String -> B9DSL ExecEnv boot :: String -> ExecEnvType -> CPUArch -> B9DSL ExecEnv exec :: Script -> ExecEnv -> B9DSL () sh :: String -> ExecEnv -> B9DSL () rootImage :: String -> String -> ExecEnv -> B9DSL () dataImage :: String -> ExecEnv -> B9DSL () mountAndShareSharedImage :: String -> String -> String -> ExecEnv -> B9DSL (Imported VmImage) mountAndShareNewImage :: String -> Int -> String -> FilePath -> ExecEnv -> B9DSL (Imported VmImage) runDSL :: Monad m => (forall a. BuildStep a -> m a) -> B9DSL b -> m b -- | Print the DSL to IO printDSL :: B9DSL a -> IO () printBuildStep :: BuildStep a -> IO a dslExample :: B9DSL () instance GHC.Show.Show B9.DSL.ExecEnv instance GHC.Show.Show (B9.DSL.MountOpts GHC.Base.String) instance GHC.Show.Show (B9.DSL.MountOpts (B9.DSL.Tagged B9.DiskImages.ImageSource GHC.Base.String)) instance GHC.Base.Functor B9.DSL.BuildStep instance GHC.Show.Show b => GHC.Show.Show (B9.DSL.Tagged a b) instance B9.DSL.DSLCanMount GHC.Base.String instance B9.DSL.DSLCanMount (B9.DSL.Tagged B9.DiskImages.ImageSource GHC.Base.String) -- | Implementation of an execution environment that uses "libvirt-lxc". module B9.LibVirtLXC runInEnvironment :: ExecEnv -> Script -> B9 Bool supportedImageTypes :: [ImageType] setDefaultConfig :: ConfigParser instance GHC.Show.Show B9.LibVirtLXC.LibVirtLXCConfig instance GHC.Read.Read B9.LibVirtLXC.LibVirtLXCConfig instance GHC.Show.Show B9.LibVirtLXC.LXCGuestCapability instance GHC.Read.Read B9.LibVirtLXC.LXCGuestCapability -- | Effectful functions to execute and build virtual machine images using -- an execution environment like e.g. libvirt-lxc. module B9.VmBuilder buildWithVm :: InstanceId -> [ImageTarget] -> FilePath -> VmScript -> B9 Bool -- | Mostly effectful functions to assemble artifacts. module B9.ArtifactGeneratorImpl -- | Return a list of relative paths for the local files to be -- generated by the ArtifactGenerator. This excludes Shared and -- Transient image targets. getArtifactOutputFiles :: ArtifactGenerator -> Either String [FilePath] -- | Run an artifact generator to produce the artifacts. assemble :: ArtifactGenerator -> B9 [AssembledArtifact] -- | Evaluate an ArtifactGenerator into a list of low-level build -- instructions that can be built with createAssembledArtifacts. evalArtifactGenerator :: String -> String -> BuildVariables -> ArtifactGenerator -> Either String [InstanceGenerator [SourceGenerator]] -- | Parse an artifacto generator inside a CGParser monad. parseArtifactGenerator :: ArtifactGenerator -> CGParser () -- | Execute a CGParser action in an environment that contains a -- list of ArtifactSources. withArtifactSources :: [ArtifactSource] -> CGParser () -> CGParser () withBindings :: [(String, String)] -> CGParser () -> CGParser () addBindings :: [(String, String)] -> CGEnv -> CGEnv withXBindings :: [(String, [String])] -> CGParser () -> CGParser () eachBindingSetT :: ArtifactGenerator -> [String] -> [[String]] -> CGParser [[(String, String)]] eachBindingSet :: ArtifactGenerator -> [(String, [String])] -> CGParser [[(String, String)]] writeInstanceGenerator :: InstanceId -> ArtifactAssembly -> CGParser () -- | Monad for creating Instance generators. newtype CGParser a CGParser :: WriterT [InstanceGenerator CGEnv] (ReaderT CGEnv (Either CGError)) a -> CGParser a [runCGParser] :: CGParser a -> WriterT [InstanceGenerator CGEnv] (ReaderT CGEnv (Either CGError)) a data CGEnv CGEnv :: [(String, String)] -> [ArtifactSource] -> CGEnv [agEnv] :: CGEnv -> [(String, String)] [agSources] :: CGEnv -> [ArtifactSource] data InstanceGenerator e IG :: InstanceId -> e -> ArtifactAssembly -> InstanceGenerator e newtype CGError CGError :: String -> CGError cgError :: String -> CGParser a execCGParser :: CGParser () -> CGEnv -> Either CGError [InstanceGenerator CGEnv] execIGEnv :: InstanceGenerator CGEnv -> Either String (InstanceGenerator [SourceGenerator]) substAssembly :: [(String, String)] -> ArtifactAssembly -> ArtifactAssembly toSourceGen :: [(String, String)] -> ArtifactSource -> Either String [SourceGenerator] createAssembledArtifacts :: [InstanceGenerator [SourceGenerator]] -> B9 [AssembledArtifact] generateSources :: FilePath -> InstanceGenerator [SourceGenerator] -> B9 (InstanceGenerator FilePath) createTargets :: InstanceGenerator FilePath -> B9 AssembledArtifact generateUniqueIID :: InstanceId -> B9 InstanceId generateSourceTo :: FilePath -> SourceGenerator -> B9 () sgReadSourceFile :: [(String, String)] -> SourceFile -> B9 ByteString sgChangePerm :: FilePath -> SGPerm -> B9 () -- | Internal data type simplifying the rather complex source generation by -- bioling down ArtifactSources to a flat list of uniform -- SourceGenerators. data SourceGenerator SGConcat :: [(String, String)] -> SGSource -> SGPerm -> FilePath -> SourceGenerator data SGSource SGFiles :: [SourceFile] -> SGSource SGContent :: Content -> SGSource data SGType SGT :: SGType SGF :: SGType data SGPerm SGSetPerm :: (Int, Int, Int) -> SGPerm KeepPerm :: SGPerm sgGetFroms :: SourceGenerator -> [SourceFile] setSGPerm :: Int -> Int -> Int -> SourceGenerator -> Either String SourceGenerator setSGFromDirectory :: FilePath -> SourceGenerator -> SourceGenerator setSGToDirectory :: FilePath -> SourceGenerator -> SourceGenerator -- | Create the actual target, either just a mountpoint, or an ISO or VFAT -- image. createTarget :: InstanceId -> FilePath -> ArtifactAssembly -> B9 [ArtifactTarget] instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.SourceGenerator instance GHC.Show.Show B9.ArtifactGeneratorImpl.SourceGenerator instance GHC.Read.Read B9.ArtifactGeneratorImpl.SourceGenerator instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.SGPerm instance Data.Data.Data B9.ArtifactGeneratorImpl.SGPerm instance GHC.Show.Show B9.ArtifactGeneratorImpl.SGPerm instance GHC.Read.Read B9.ArtifactGeneratorImpl.SGPerm instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.SGType instance Data.Data.Data B9.ArtifactGeneratorImpl.SGType instance GHC.Show.Show B9.ArtifactGeneratorImpl.SGType instance GHC.Read.Read B9.ArtifactGeneratorImpl.SGType instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.SGSource instance GHC.Show.Show B9.ArtifactGeneratorImpl.SGSource instance GHC.Read.Read B9.ArtifactGeneratorImpl.SGSource instance Control.Monad.Error.Class.MonadError B9.ArtifactGeneratorImpl.CGError B9.ArtifactGeneratorImpl.CGParser instance Control.Monad.Writer.Class.MonadWriter [B9.ArtifactGeneratorImpl.InstanceGenerator B9.ArtifactGeneratorImpl.CGEnv] B9.ArtifactGeneratorImpl.CGParser instance Control.Monad.Reader.Class.MonadReader B9.ArtifactGeneratorImpl.CGEnv B9.ArtifactGeneratorImpl.CGParser instance GHC.Base.Monad B9.ArtifactGeneratorImpl.CGParser instance GHC.Base.Applicative B9.ArtifactGeneratorImpl.CGParser instance GHC.Base.Functor B9.ArtifactGeneratorImpl.CGParser instance Control.Monad.Trans.Error.Error B9.ArtifactGeneratorImpl.CGError instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.CGError instance Data.Data.Data B9.ArtifactGeneratorImpl.CGError instance GHC.Show.Show B9.ArtifactGeneratorImpl.CGError instance GHC.Read.Read B9.ArtifactGeneratorImpl.CGError instance GHC.Classes.Eq e => GHC.Classes.Eq (B9.ArtifactGeneratorImpl.InstanceGenerator e) instance Data.Data.Data e => Data.Data.Data (B9.ArtifactGeneratorImpl.InstanceGenerator e) instance GHC.Show.Show e => GHC.Show.Show (B9.ArtifactGeneratorImpl.InstanceGenerator e) instance GHC.Read.Read e => GHC.Read.Read (B9.ArtifactGeneratorImpl.InstanceGenerator e) instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.CGEnv instance GHC.Show.Show B9.ArtifactGeneratorImpl.CGEnv instance GHC.Read.Read B9.ArtifactGeneratorImpl.CGEnv -- | Highest-level build functions and and B9-re-exports. module B9.Builder buildArtifacts :: ArtifactGenerator -> ConfigParser -> B9Config -> IO Bool -- | B9 is a library and build tool with primitive operations to rmrun a -- build script inside a virtual machine and to create and convert -- virtual machine image files as well as related ISO and VFAT disk -- images for e.g. cloud-init configuration sources. -- -- This module re-exports the modules needed to build a tool around the -- library, e.g. see src/cli/Main.hs as an example. -- -- B9.ArtifactGenerator is the module containing the basic data -- structure used to describe a B9 build. module B9 -- | Merge existingConfig with the configuration from the main b9 -- config file. If the file does not exists, a new config file with the -- given configuration will be written. The return value is a parser for -- the config file. Returning the raw config file parser allows modules -- unkown to B9Config to add their own values to the shared config -- file. configure :: MonadIO m => Maybe SystemPath -> B9Config -> m ConfigParser -- | Return the cabal package version of the B9 library. b9_version :: Version