b9 0.5.8 → 0.5.9
raw patch · 8 files changed
+281/−65 lines, 8 filesdep +boxesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: boxes
API changes (from Hackage documentation)
- B9.ArtifactGenerator: instance Arbitrary ArtifactAssembly
- B9.ArtifactGenerator: instance Arbitrary ArtifactGenerator
- B9.ArtifactGenerator: instance Arbitrary ArtifactSource
- B9.ArtifactGenerator: instance Arbitrary CloudInitType
- B9.ArtifactGenerator: instance Arbitrary InstanceId
- B9.ArtifactGenerator: instance Data ArtifactAssembly
- B9.ArtifactGenerator: instance Data ArtifactTarget
- B9.ArtifactGenerator: instance Data AssembledArtifact
- B9.ArtifactGenerator: instance Data CloudInitType
- B9.ArtifactGenerator: instance Data InstanceId
- B9.ArtifactGenerator: instance Eq ArtifactAssembly
- B9.ArtifactGenerator: instance Eq ArtifactGenerator
- B9.ArtifactGenerator: instance Eq ArtifactSource
- B9.ArtifactGenerator: instance Eq ArtifactTarget
- B9.ArtifactGenerator: instance Eq AssembledArtifact
- B9.ArtifactGenerator: instance Eq CloudInitType
- B9.ArtifactGenerator: instance Eq InstanceId
- B9.ArtifactGenerator: instance Monoid ArtifactGenerator
- B9.ArtifactGenerator: instance Read ArtifactAssembly
- B9.ArtifactGenerator: instance Read ArtifactGenerator
- B9.ArtifactGenerator: instance Read ArtifactSource
- B9.ArtifactGenerator: instance Read ArtifactTarget
- B9.ArtifactGenerator: instance Read AssembledArtifact
- B9.ArtifactGenerator: instance Read CloudInitType
- B9.ArtifactGenerator: instance Read InstanceId
- B9.ArtifactGenerator: instance Show ArtifactAssembly
- B9.ArtifactGenerator: instance Show ArtifactGenerator
- B9.ArtifactGenerator: instance Show ArtifactSource
- B9.ArtifactGenerator: instance Show ArtifactTarget
- B9.ArtifactGenerator: instance Show AssembledArtifact
- B9.ArtifactGenerator: instance Show CloudInitType
- B9.ArtifactGenerator: instance Show InstanceId
- B9.ArtifactGenerator: instance Typeable ArtifactAssembly
- B9.ArtifactGenerator: instance Typeable ArtifactTarget
- B9.ArtifactGenerator: instance Typeable AssembledArtifact
- B9.ArtifactGenerator: instance Typeable CloudInitType
- B9.ArtifactGenerator: instance Typeable InstanceId
- B9.ArtifactGeneratorImpl: agEnv :: CGEnv -> [(String, String)]
- B9.ArtifactGeneratorImpl: agSources :: CGEnv -> [ArtifactSource]
- B9.ArtifactGeneratorImpl: instance Applicative CGParser
- B9.ArtifactGeneratorImpl: instance Data CGError
- B9.ArtifactGeneratorImpl: instance Data SGPerm
- B9.ArtifactGeneratorImpl: instance Data SGType
- B9.ArtifactGeneratorImpl: instance Data e => Data (InstanceGenerator e)
- B9.ArtifactGeneratorImpl: instance Eq CGEnv
- B9.ArtifactGeneratorImpl: instance Eq CGError
- B9.ArtifactGeneratorImpl: instance Eq SGPerm
- B9.ArtifactGeneratorImpl: instance Eq SGSource
- B9.ArtifactGeneratorImpl: instance Eq SGType
- B9.ArtifactGeneratorImpl: instance Eq SourceGenerator
- B9.ArtifactGeneratorImpl: instance Eq e => Eq (InstanceGenerator e)
- B9.ArtifactGeneratorImpl: instance Error CGError
- B9.ArtifactGeneratorImpl: instance Functor CGParser
- B9.ArtifactGeneratorImpl: instance Monad CGParser
- B9.ArtifactGeneratorImpl: instance MonadError CGError CGParser
- B9.ArtifactGeneratorImpl: instance MonadReader CGEnv CGParser
- B9.ArtifactGeneratorImpl: instance MonadWriter [InstanceGenerator CGEnv] CGParser
- B9.ArtifactGeneratorImpl: instance Read CGEnv
- B9.ArtifactGeneratorImpl: instance Read CGError
- B9.ArtifactGeneratorImpl: instance Read SGPerm
- B9.ArtifactGeneratorImpl: instance Read SGSource
- B9.ArtifactGeneratorImpl: instance Read SGType
- B9.ArtifactGeneratorImpl: instance Read SourceGenerator
- B9.ArtifactGeneratorImpl: instance Read e => Read (InstanceGenerator e)
- B9.ArtifactGeneratorImpl: instance Show CGEnv
- B9.ArtifactGeneratorImpl: instance Show CGError
- B9.ArtifactGeneratorImpl: instance Show SGPerm
- B9.ArtifactGeneratorImpl: instance Show SGSource
- B9.ArtifactGeneratorImpl: instance Show SGType
- B9.ArtifactGeneratorImpl: instance Show SourceGenerator
- B9.ArtifactGeneratorImpl: instance Show e => Show (InstanceGenerator e)
- B9.ArtifactGeneratorImpl: instance Typeable CGError
- B9.ArtifactGeneratorImpl: instance Typeable InstanceGenerator
- B9.ArtifactGeneratorImpl: instance Typeable SGPerm
- B9.ArtifactGeneratorImpl: instance Typeable SGType
- B9.ArtifactGeneratorImpl: runCGParser :: CGParser a -> WriterT [InstanceGenerator CGEnv] (ReaderT CGEnv (Either CGError)) a
- B9.B9Config: buildDirRoot :: B9Config -> Maybe FilePath
- B9.B9Config: envVars :: B9Config -> BuildVariables
- B9.B9Config: execEnvType :: B9Config -> ExecEnvType
- B9.B9Config: instance Eq ExecEnvType
- B9.B9Config: instance Eq LogLevel
- B9.B9Config: instance Monoid B9Config
- B9.B9Config: instance Ord ExecEnvType
- B9.B9Config: instance Ord LogLevel
- B9.B9Config: instance Read ExecEnvType
- B9.B9Config: instance Read LogLevel
- B9.B9Config: instance Show B9Config
- B9.B9Config: instance Show ExecEnvType
- B9.B9Config: instance Show LogLevel
- B9.B9Config: keepTempDirs :: B9Config -> Bool
- B9.B9Config: logFile :: B9Config -> Maybe FilePath
- B9.B9Config: profileFile :: B9Config -> Maybe FilePath
- B9.B9Config: repository :: B9Config -> Maybe String
- B9.B9Config: repositoryCache :: B9Config -> Maybe SystemPath
- B9.B9Config: uniqueBuildDirs :: B9Config -> Bool
- B9.B9Config: verbosity :: B9Config -> Maybe LogLevel
- B9.B9Monad: instance Applicative B9
- B9.B9Monad: instance Eq ProfilingEntry
- B9.B9Monad: instance Functor B9
- B9.B9Monad: instance Monad B9
- B9.B9Monad: instance MonadIO B9
- B9.B9Monad: instance MonadState BuildState B9
- B9.B9Monad: instance Show ProfilingEntry
- B9.ConfigUtils: instance Data SystemPath
- B9.ConfigUtils: instance Eq SystemPath
- B9.ConfigUtils: instance Eq UUID
- B9.ConfigUtils: instance Exception IniFileException
- B9.ConfigUtils: instance Exception ReaderException
- B9.ConfigUtils: instance Ord UUID
- B9.ConfigUtils: instance PrintfArg UUID
- B9.ConfigUtils: instance Read SystemPath
- B9.ConfigUtils: instance Read UUID
- B9.ConfigUtils: instance Show IniFileException
- B9.ConfigUtils: instance Show ReaderException
- B9.ConfigUtils: instance Show SystemPath
- B9.ConfigUtils: instance Show UUID
- B9.ConfigUtils: instance Typeable IniFileException
- B9.ConfigUtils: instance Typeable ReaderException
- B9.ConfigUtils: instance Typeable SystemPath
- B9.Content.AST: instance (Arbitrary c, Arbitrary a) => Arbitrary (AST c a)
- B9.Content.AST: instance (Data c, Data a) => Data (AST c a)
- B9.Content.AST: instance (Eq c, Eq a) => Eq (AST c a)
- B9.Content.AST: instance (Read c, Read a) => Read (AST c a)
- B9.Content.AST: instance (Show c, Show a) => Show (AST c a)
- B9.Content.AST: instance ConcatableSyntax ByteString
- B9.Content.AST: instance Typeable AST
- B9.Content.ErlTerms: instance Arbitrary SimpleErlangTerm
- B9.Content.ErlTerms: instance Data SimpleErlangTerm
- B9.Content.ErlTerms: instance Eq SimpleErlangTerm
- B9.Content.ErlTerms: instance Ord SimpleErlangTerm
- B9.Content.ErlTerms: instance Read SimpleErlangTerm
- B9.Content.ErlTerms: instance Show SimpleErlangTerm
- B9.Content.ErlTerms: instance Typeable SimpleErlangTerm
- B9.Content.ErlangPropList: instance ASTish ErlangPropList
- B9.Content.ErlangPropList: instance Arbitrary ErlangPropList
- B9.Content.ErlangPropList: instance ConcatableSyntax ErlangPropList
- B9.Content.ErlangPropList: instance Data ErlangPropList
- B9.Content.ErlangPropList: instance Eq ErlangPropList
- B9.Content.ErlangPropList: instance Read ErlangPropList
- B9.Content.ErlangPropList: instance Semigroup ErlangPropList
- B9.Content.ErlangPropList: instance Show ErlangPropList
- B9.Content.ErlangPropList: instance Typeable ErlangPropList
- B9.Content.Generator: instance Arbitrary Content
- B9.Content.Generator: instance CanRender Content
- B9.Content.Generator: instance Eq Content
- B9.Content.Generator: instance Read Content
- B9.Content.Generator: instance Show Content
- B9.Content.Generator: instance Typeable Content
- B9.Content.StringTemplate: instance Arbitrary SourceFile
- B9.Content.StringTemplate: instance Data SourceFile
- B9.Content.StringTemplate: instance Data SourceFileConversion
- B9.Content.StringTemplate: instance Eq SourceFile
- B9.Content.StringTemplate: instance Eq SourceFileConversion
- B9.Content.StringTemplate: instance Read SourceFile
- B9.Content.StringTemplate: instance Read SourceFileConversion
- B9.Content.StringTemplate: instance Show SourceFile
- B9.Content.StringTemplate: instance Show SourceFileConversion
- B9.Content.StringTemplate: instance Typeable SourceFile
- B9.Content.StringTemplate: instance Typeable SourceFileConversion
- B9.Content.YamlObject: instance ASTish YamlObject
- B9.Content.YamlObject: instance Arbitrary YamlObject
- B9.Content.YamlObject: instance ConcatableSyntax YamlObject
- B9.Content.YamlObject: instance Eq YamlObject
- B9.Content.YamlObject: instance Read YamlObject
- B9.Content.YamlObject: instance Semigroup YamlObject
- B9.Content.YamlObject: instance Show YamlObject
- B9.DiskImages: instance Data FileSystem
- B9.DiskImages: instance Data Image
- B9.DiskImages: instance Data ImageDestination
- B9.DiskImages: instance Data ImageResize
- B9.DiskImages: instance Data ImageSize
- B9.DiskImages: instance Data ImageSource
- B9.DiskImages: instance Data ImageTarget
- B9.DiskImages: instance Data ImageType
- B9.DiskImages: instance Data MountPoint
- B9.DiskImages: instance Data Partition
- B9.DiskImages: instance Data SizeUnit
- B9.DiskImages: instance Eq FileSystem
- B9.DiskImages: instance Eq Image
- B9.DiskImages: instance Eq ImageDestination
- B9.DiskImages: instance Eq ImageResize
- B9.DiskImages: instance Eq ImageSize
- B9.DiskImages: instance Eq ImageSource
- B9.DiskImages: instance Eq ImageTarget
- B9.DiskImages: instance Eq ImageType
- B9.DiskImages: instance Eq MountPoint
- B9.DiskImages: instance Eq Partition
- B9.DiskImages: instance Eq SharedImage
- B9.DiskImages: instance Eq SharedImageBuildId
- B9.DiskImages: instance Eq SharedImageDate
- B9.DiskImages: instance Eq SharedImageName
- B9.DiskImages: instance Eq SizeUnit
- B9.DiskImages: instance Ord SharedImage
- B9.DiskImages: instance Ord SharedImageBuildId
- B9.DiskImages: instance Ord SharedImageDate
- B9.DiskImages: instance Ord SharedImageName
- B9.DiskImages: instance Ord SizeUnit
- B9.DiskImages: instance Read FileSystem
- B9.DiskImages: instance Read Image
- B9.DiskImages: instance Read ImageDestination
- B9.DiskImages: instance Read ImageResize
- B9.DiskImages: instance Read ImageSize
- B9.DiskImages: instance Read ImageSource
- B9.DiskImages: instance Read ImageTarget
- B9.DiskImages: instance Read ImageType
- B9.DiskImages: instance Read MountPoint
- B9.DiskImages: instance Read Partition
- B9.DiskImages: instance Read SharedImage
- B9.DiskImages: instance Read SharedImageBuildId
- B9.DiskImages: instance Read SharedImageDate
- B9.DiskImages: instance Read SharedImageName
- B9.DiskImages: instance Read SizeUnit
- B9.DiskImages: instance Show FileSystem
- B9.DiskImages: instance Show Image
- B9.DiskImages: instance Show ImageDestination
- B9.DiskImages: instance Show ImageResize
- B9.DiskImages: instance Show ImageSize
- B9.DiskImages: instance Show ImageSource
- B9.DiskImages: instance Show ImageTarget
- B9.DiskImages: instance Show ImageType
- B9.DiskImages: instance Show MountPoint
- B9.DiskImages: instance Show Partition
- B9.DiskImages: instance Show SharedImage
- B9.DiskImages: instance Show SharedImageBuildId
- B9.DiskImages: instance Show SharedImageDate
- B9.DiskImages: instance Show SharedImageName
- B9.DiskImages: instance Show SizeUnit
- B9.DiskImages: instance Typeable FileSystem
- B9.DiskImages: instance Typeable Image
- B9.DiskImages: instance Typeable ImageDestination
- B9.DiskImages: instance Typeable ImageResize
- B9.DiskImages: instance Typeable ImageSize
- B9.DiskImages: instance Typeable ImageSource
- B9.DiskImages: instance Typeable ImageTarget
- B9.DiskImages: instance Typeable ImageType
- B9.DiskImages: instance Typeable MountPoint
- B9.DiskImages: instance Typeable Partition
- B9.DiskImages: instance Typeable SizeUnit
- B9.ExecEnv: cpuArch :: Resources -> CPUArch
- B9.ExecEnv: cpuCount :: Resources -> Int
- B9.ExecEnv: envImageMounts :: ExecEnv -> [Mounted Image]
- B9.ExecEnv: envName :: ExecEnv -> String
- B9.ExecEnv: envResources :: ExecEnv -> Resources
- B9.ExecEnv: envSharedDirectories :: ExecEnv -> [SharedDirectory]
- B9.ExecEnv: instance Data CPUArch
- B9.ExecEnv: instance Data RamSize
- B9.ExecEnv: instance Data Resources
- B9.ExecEnv: instance Data SharedDirectory
- B9.ExecEnv: instance Eq CPUArch
- B9.ExecEnv: instance Eq RamSize
- B9.ExecEnv: instance Eq SharedDirectory
- B9.ExecEnv: instance Monoid CPUArch
- B9.ExecEnv: instance Monoid RamSize
- B9.ExecEnv: instance Monoid Resources
- B9.ExecEnv: instance Ord RamSize
- B9.ExecEnv: instance Read CPUArch
- B9.ExecEnv: instance Read RamSize
- B9.ExecEnv: instance Read Resources
- B9.ExecEnv: instance Read SharedDirectory
- B9.ExecEnv: instance Show CPUArch
- B9.ExecEnv: instance Show RamSize
- B9.ExecEnv: instance Show Resources
- B9.ExecEnv: instance Show SharedDirectory
- B9.ExecEnv: instance Typeable CPUArch
- B9.ExecEnv: instance Typeable RamSize
- B9.ExecEnv: instance Typeable Resources
- B9.ExecEnv: instance Typeable SharedDirectory
- B9.ExecEnv: maxMemory :: Resources -> RamSize
- B9.LibVirtLXC: instance Read LXCGuestCapability
- B9.LibVirtLXC: instance Read LibVirtLXCConfig
- B9.LibVirtLXC: instance Show LXCGuestCapability
- B9.LibVirtLXC: instance Show LibVirtLXCConfig
- B9.MBR: chsH :: CHS -> !Word8
- B9.MBR: chs_CLower8 :: CHS -> !Word8
- B9.MBR: chs_CUpper2_S :: CHS -> !Word8
- B9.MBR: instance Show CHS
- B9.MBR: instance Show MBR
- B9.MBR: instance Show PrimaryPartition
- B9.MBR: mbrPart1 :: MBR -> !PrimaryPartition
- B9.MBR: mbrPart2 :: MBR -> !PrimaryPartition
- B9.MBR: mbrPart3 :: MBR -> !PrimaryPartition
- B9.MBR: mbrPart4 :: MBR -> !PrimaryPartition
- B9.MBR: primPartChsEnd :: PrimaryPartition -> !CHS
- B9.MBR: primPartChsStart :: PrimaryPartition -> !CHS
- B9.MBR: primPartLbaStart :: PrimaryPartition -> !Word32
- B9.MBR: primPartPartType :: PrimaryPartition -> !Word8
- B9.MBR: primPartSectors :: PrimaryPartition -> !Word32
- B9.MBR: primPartStatus :: PrimaryPartition -> !Word8
- B9.Repository: instance Data RemoteRepo
- B9.Repository: instance Data RepoCache
- B9.Repository: instance Data SshPrivKey
- B9.Repository: instance Data SshRemoteHost
- B9.Repository: instance Data SshRemoteUser
- B9.Repository: instance Read RemoteRepo
- B9.Repository: instance Read RepoCache
- B9.Repository: instance Read SshPrivKey
- B9.Repository: instance Read SshRemoteHost
- B9.Repository: instance Read SshRemoteUser
- B9.Repository: instance Show RemoteRepo
- B9.Repository: instance Show RepoCache
- B9.Repository: instance Show SshPrivKey
- B9.Repository: instance Show SshRemoteHost
- B9.Repository: instance Show SshRemoteUser
- B9.Repository: instance Typeable RemoteRepo
- B9.Repository: instance Typeable RepoCache
- B9.Repository: instance Typeable SshPrivKey
- B9.Repository: instance Typeable SshRemoteHost
- B9.Repository: instance Typeable SshRemoteUser
- B9.RepositoryIO: instance Eq Repository
- B9.RepositoryIO: instance Ord Repository
- B9.RepositoryIO: instance Read Repository
- B9.RepositoryIO: instance Show Repository
- B9.ShellScript: instance Data CmdVerbosity
- B9.ShellScript: instance Data Script
- B9.ShellScript: instance Eq CmdVerbosity
- B9.ShellScript: instance Eq Script
- B9.ShellScript: instance Monoid Script
- B9.ShellScript: instance Read Cmd
- B9.ShellScript: instance Read CmdVerbosity
- B9.ShellScript: instance Read Cwd
- B9.ShellScript: instance Read Script
- B9.ShellScript: instance Read User
- B9.ShellScript: instance Show Cmd
- B9.ShellScript: instance Show CmdVerbosity
- B9.ShellScript: instance Show Cwd
- B9.ShellScript: instance Show Script
- B9.ShellScript: instance Show User
- B9.ShellScript: instance Typeable CmdVerbosity
- B9.ShellScript: instance Typeable Script
- B9.Vm: instance Data VmScript
- B9.Vm: instance Eq VmScript
- B9.Vm: instance Read VmScript
- B9.Vm: instance Show VmScript
- B9.Vm: instance Typeable VmScript
+ B9.ArtifactGenerator: instance Data.Data.Data B9.ArtifactGenerator.ArtifactAssembly
+ B9.ArtifactGenerator: instance Data.Data.Data B9.ArtifactGenerator.ArtifactTarget
+ B9.ArtifactGenerator: instance Data.Data.Data B9.ArtifactGenerator.AssembledArtifact
+ B9.ArtifactGenerator: instance Data.Data.Data B9.ArtifactGenerator.CloudInitType
+ B9.ArtifactGenerator: instance Data.Data.Data B9.ArtifactGenerator.InstanceId
+ B9.ArtifactGenerator: instance GHC.Base.Monoid B9.ArtifactGenerator.ArtifactGenerator
+ B9.ArtifactGenerator: instance GHC.Classes.Eq B9.ArtifactGenerator.ArtifactAssembly
+ B9.ArtifactGenerator: instance GHC.Classes.Eq B9.ArtifactGenerator.ArtifactGenerator
+ B9.ArtifactGenerator: instance GHC.Classes.Eq B9.ArtifactGenerator.ArtifactSource
+ B9.ArtifactGenerator: instance GHC.Classes.Eq B9.ArtifactGenerator.ArtifactTarget
+ B9.ArtifactGenerator: instance GHC.Classes.Eq B9.ArtifactGenerator.AssembledArtifact
+ B9.ArtifactGenerator: instance GHC.Classes.Eq B9.ArtifactGenerator.CloudInitType
+ B9.ArtifactGenerator: instance GHC.Classes.Eq B9.ArtifactGenerator.InstanceId
+ B9.ArtifactGenerator: instance GHC.Read.Read B9.ArtifactGenerator.ArtifactAssembly
+ B9.ArtifactGenerator: instance GHC.Read.Read B9.ArtifactGenerator.ArtifactGenerator
+ B9.ArtifactGenerator: instance GHC.Read.Read B9.ArtifactGenerator.ArtifactSource
+ B9.ArtifactGenerator: instance GHC.Read.Read B9.ArtifactGenerator.ArtifactTarget
+ B9.ArtifactGenerator: instance GHC.Read.Read B9.ArtifactGenerator.AssembledArtifact
+ B9.ArtifactGenerator: instance GHC.Read.Read B9.ArtifactGenerator.CloudInitType
+ B9.ArtifactGenerator: instance GHC.Read.Read B9.ArtifactGenerator.InstanceId
+ B9.ArtifactGenerator: instance GHC.Show.Show B9.ArtifactGenerator.ArtifactAssembly
+ B9.ArtifactGenerator: instance GHC.Show.Show B9.ArtifactGenerator.ArtifactGenerator
+ B9.ArtifactGenerator: instance GHC.Show.Show B9.ArtifactGenerator.ArtifactSource
+ B9.ArtifactGenerator: instance GHC.Show.Show B9.ArtifactGenerator.ArtifactTarget
+ B9.ArtifactGenerator: instance GHC.Show.Show B9.ArtifactGenerator.AssembledArtifact
+ B9.ArtifactGenerator: instance GHC.Show.Show B9.ArtifactGenerator.CloudInitType
+ B9.ArtifactGenerator: instance GHC.Show.Show B9.ArtifactGenerator.InstanceId
+ B9.ArtifactGenerator: instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.ArtifactAssembly
+ B9.ArtifactGenerator: instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.ArtifactGenerator
+ B9.ArtifactGenerator: instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.ArtifactSource
+ B9.ArtifactGenerator: instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.CloudInitType
+ B9.ArtifactGenerator: instance Test.QuickCheck.Arbitrary.Arbitrary B9.ArtifactGenerator.InstanceId
+ B9.ArtifactGeneratorImpl: [agEnv] :: CGEnv -> [(String, String)]
+ B9.ArtifactGeneratorImpl: [agSources] :: CGEnv -> [ArtifactSource]
+ B9.ArtifactGeneratorImpl: [runCGParser] :: CGParser a -> WriterT [InstanceGenerator CGEnv] (ReaderT CGEnv (Either CGError)) a
+ B9.ArtifactGeneratorImpl: instance Control.Monad.Error.Class.MonadError B9.ArtifactGeneratorImpl.CGError B9.ArtifactGeneratorImpl.CGParser
+ B9.ArtifactGeneratorImpl: instance Control.Monad.Reader.Class.MonadReader B9.ArtifactGeneratorImpl.CGEnv B9.ArtifactGeneratorImpl.CGParser
+ B9.ArtifactGeneratorImpl: instance Control.Monad.Trans.Error.Error B9.ArtifactGeneratorImpl.CGError
+ B9.ArtifactGeneratorImpl: instance Control.Monad.Writer.Class.MonadWriter [B9.ArtifactGeneratorImpl.InstanceGenerator B9.ArtifactGeneratorImpl.CGEnv] B9.ArtifactGeneratorImpl.CGParser
+ B9.ArtifactGeneratorImpl: instance Data.Data.Data B9.ArtifactGeneratorImpl.CGError
+ B9.ArtifactGeneratorImpl: instance Data.Data.Data B9.ArtifactGeneratorImpl.SGPerm
+ B9.ArtifactGeneratorImpl: instance Data.Data.Data B9.ArtifactGeneratorImpl.SGType
+ B9.ArtifactGeneratorImpl: instance Data.Data.Data e => Data.Data.Data (B9.ArtifactGeneratorImpl.InstanceGenerator e)
+ B9.ArtifactGeneratorImpl: instance GHC.Base.Applicative B9.ArtifactGeneratorImpl.CGParser
+ B9.ArtifactGeneratorImpl: instance GHC.Base.Functor B9.ArtifactGeneratorImpl.CGParser
+ B9.ArtifactGeneratorImpl: instance GHC.Base.Monad B9.ArtifactGeneratorImpl.CGParser
+ B9.ArtifactGeneratorImpl: instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.CGEnv
+ B9.ArtifactGeneratorImpl: instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.CGError
+ B9.ArtifactGeneratorImpl: instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.SGPerm
+ B9.ArtifactGeneratorImpl: instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.SGSource
+ B9.ArtifactGeneratorImpl: instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.SGType
+ B9.ArtifactGeneratorImpl: instance GHC.Classes.Eq B9.ArtifactGeneratorImpl.SourceGenerator
+ B9.ArtifactGeneratorImpl: instance GHC.Classes.Eq e => GHC.Classes.Eq (B9.ArtifactGeneratorImpl.InstanceGenerator e)
+ B9.ArtifactGeneratorImpl: instance GHC.Read.Read B9.ArtifactGeneratorImpl.CGEnv
+ B9.ArtifactGeneratorImpl: instance GHC.Read.Read B9.ArtifactGeneratorImpl.CGError
+ B9.ArtifactGeneratorImpl: instance GHC.Read.Read B9.ArtifactGeneratorImpl.SGPerm
+ B9.ArtifactGeneratorImpl: instance GHC.Read.Read B9.ArtifactGeneratorImpl.SGSource
+ B9.ArtifactGeneratorImpl: instance GHC.Read.Read B9.ArtifactGeneratorImpl.SGType
+ B9.ArtifactGeneratorImpl: instance GHC.Read.Read B9.ArtifactGeneratorImpl.SourceGenerator
+ B9.ArtifactGeneratorImpl: instance GHC.Read.Read e => GHC.Read.Read (B9.ArtifactGeneratorImpl.InstanceGenerator e)
+ B9.ArtifactGeneratorImpl: instance GHC.Show.Show B9.ArtifactGeneratorImpl.CGEnv
+ B9.ArtifactGeneratorImpl: instance GHC.Show.Show B9.ArtifactGeneratorImpl.CGError
+ B9.ArtifactGeneratorImpl: instance GHC.Show.Show B9.ArtifactGeneratorImpl.SGPerm
+ B9.ArtifactGeneratorImpl: instance GHC.Show.Show B9.ArtifactGeneratorImpl.SGSource
+ B9.ArtifactGeneratorImpl: instance GHC.Show.Show B9.ArtifactGeneratorImpl.SGType
+ B9.ArtifactGeneratorImpl: instance GHC.Show.Show B9.ArtifactGeneratorImpl.SourceGenerator
+ B9.ArtifactGeneratorImpl: instance GHC.Show.Show e => GHC.Show.Show (B9.ArtifactGeneratorImpl.InstanceGenerator e)
+ B9.B9Config: [buildDirRoot] :: B9Config -> Maybe FilePath
+ B9.B9Config: [envVars] :: B9Config -> BuildVariables
+ B9.B9Config: [execEnvType] :: B9Config -> ExecEnvType
+ B9.B9Config: [interactive] :: B9Config -> Bool
+ B9.B9Config: [keepTempDirs] :: B9Config -> Bool
+ B9.B9Config: [logFile] :: B9Config -> Maybe FilePath
+ B9.B9Config: [profileFile] :: B9Config -> Maybe FilePath
+ B9.B9Config: [repositoryCache] :: B9Config -> Maybe SystemPath
+ B9.B9Config: [repository] :: B9Config -> Maybe String
+ B9.B9Config: [uniqueBuildDirs] :: B9Config -> Bool
+ B9.B9Config: [verbosity] :: B9Config -> Maybe LogLevel
+ B9.B9Config: instance GHC.Base.Monoid B9.B9Config.B9Config
+ B9.B9Config: instance GHC.Classes.Eq B9.B9Config.ExecEnvType
+ B9.B9Config: instance GHC.Classes.Eq B9.B9Config.LogLevel
+ B9.B9Config: instance GHC.Classes.Ord B9.B9Config.ExecEnvType
+ B9.B9Config: instance GHC.Classes.Ord B9.B9Config.LogLevel
+ B9.B9Config: instance GHC.Read.Read B9.B9Config.ExecEnvType
+ B9.B9Config: instance GHC.Read.Read B9.B9Config.LogLevel
+ B9.B9Config: instance GHC.Show.Show B9.B9Config.B9Config
+ B9.B9Config: instance GHC.Show.Show B9.B9Config.ExecEnvType
+ B9.B9Config: instance GHC.Show.Show B9.B9Config.LogLevel
+ B9.B9Monad: instance Control.Monad.IO.Class.MonadIO B9.B9Monad.B9
+ B9.B9Monad: instance Control.Monad.State.Class.MonadState B9.B9Monad.BuildState B9.B9Monad.B9
+ B9.B9Monad: instance GHC.Base.Applicative B9.B9Monad.B9
+ B9.B9Monad: instance GHC.Base.Functor B9.B9Monad.B9
+ B9.B9Monad: instance GHC.Base.Monad B9.B9Monad.B9
+ B9.B9Monad: instance GHC.Classes.Eq B9.B9Monad.ProfilingEntry
+ B9.B9Monad: instance GHC.Show.Show B9.B9Monad.ProfilingEntry
+ B9.ConfigUtils: instance Data.Data.Data B9.ConfigUtils.SystemPath
+ B9.ConfigUtils: instance GHC.Classes.Eq B9.ConfigUtils.SystemPath
+ B9.ConfigUtils: instance GHC.Classes.Eq B9.ConfigUtils.UUID
+ B9.ConfigUtils: instance GHC.Classes.Ord B9.ConfigUtils.UUID
+ B9.ConfigUtils: instance GHC.Exception.Exception B9.ConfigUtils.IniFileException
+ B9.ConfigUtils: instance GHC.Exception.Exception B9.ConfigUtils.ReaderException
+ B9.ConfigUtils: instance GHC.Read.Read B9.ConfigUtils.SystemPath
+ B9.ConfigUtils: instance GHC.Read.Read B9.ConfigUtils.UUID
+ B9.ConfigUtils: instance GHC.Show.Show B9.ConfigUtils.IniFileException
+ B9.ConfigUtils: instance GHC.Show.Show B9.ConfigUtils.ReaderException
+ B9.ConfigUtils: instance GHC.Show.Show B9.ConfigUtils.SystemPath
+ B9.ConfigUtils: instance GHC.Show.Show B9.ConfigUtils.UUID
+ B9.ConfigUtils: instance Text.Printf.PrintfArg B9.ConfigUtils.UUID
+ B9.Content.AST: instance (Data.Data.Data c, Data.Data.Data a) => Data.Data.Data (B9.Content.AST.AST c a)
+ B9.Content.AST: instance (GHC.Classes.Eq c, GHC.Classes.Eq a) => GHC.Classes.Eq (B9.Content.AST.AST c a)
+ B9.Content.AST: instance (GHC.Read.Read c, GHC.Read.Read a) => GHC.Read.Read (B9.Content.AST.AST c a)
+ B9.Content.AST: instance (GHC.Show.Show c, GHC.Show.Show a) => GHC.Show.Show (B9.Content.AST.AST c a)
+ B9.Content.AST: instance (Test.QuickCheck.Arbitrary.Arbitrary c, Test.QuickCheck.Arbitrary.Arbitrary a) => Test.QuickCheck.Arbitrary.Arbitrary (B9.Content.AST.AST c a)
+ B9.Content.AST: instance B9.Content.AST.ConcatableSyntax Data.ByteString.Internal.ByteString
+ B9.Content.ErlTerms: instance Data.Data.Data B9.Content.ErlTerms.SimpleErlangTerm
+ B9.Content.ErlTerms: instance GHC.Classes.Eq B9.Content.ErlTerms.SimpleErlangTerm
+ B9.Content.ErlTerms: instance GHC.Classes.Ord B9.Content.ErlTerms.SimpleErlangTerm
+ B9.Content.ErlTerms: instance GHC.Read.Read B9.Content.ErlTerms.SimpleErlangTerm
+ B9.Content.ErlTerms: instance GHC.Show.Show B9.Content.ErlTerms.SimpleErlangTerm
+ B9.Content.ErlTerms: instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.ErlTerms.SimpleErlangTerm
+ B9.Content.ErlangPropList: instance B9.Content.AST.ASTish B9.Content.ErlangPropList.ErlangPropList
+ B9.Content.ErlangPropList: instance B9.Content.AST.ConcatableSyntax B9.Content.ErlangPropList.ErlangPropList
+ B9.Content.ErlangPropList: instance Data.Data.Data B9.Content.ErlangPropList.ErlangPropList
+ B9.Content.ErlangPropList: instance Data.Semigroup.Semigroup B9.Content.ErlangPropList.ErlangPropList
+ B9.Content.ErlangPropList: instance GHC.Classes.Eq B9.Content.ErlangPropList.ErlangPropList
+ B9.Content.ErlangPropList: instance GHC.Read.Read B9.Content.ErlangPropList.ErlangPropList
+ B9.Content.ErlangPropList: instance GHC.Show.Show B9.Content.ErlangPropList.ErlangPropList
+ B9.Content.ErlangPropList: instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.ErlangPropList.ErlangPropList
+ B9.Content.Generator: instance B9.Content.AST.CanRender B9.Content.Generator.Content
+ B9.Content.Generator: instance GHC.Classes.Eq B9.Content.Generator.Content
+ B9.Content.Generator: instance GHC.Read.Read B9.Content.Generator.Content
+ B9.Content.Generator: instance GHC.Show.Show B9.Content.Generator.Content
+ B9.Content.Generator: instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.Generator.Content
+ B9.Content.StringTemplate: instance Data.Data.Data B9.Content.StringTemplate.SourceFile
+ B9.Content.StringTemplate: instance Data.Data.Data B9.Content.StringTemplate.SourceFileConversion
+ B9.Content.StringTemplate: instance GHC.Classes.Eq B9.Content.StringTemplate.SourceFile
+ B9.Content.StringTemplate: instance GHC.Classes.Eq B9.Content.StringTemplate.SourceFileConversion
+ B9.Content.StringTemplate: instance GHC.Read.Read B9.Content.StringTemplate.SourceFile
+ B9.Content.StringTemplate: instance GHC.Read.Read B9.Content.StringTemplate.SourceFileConversion
+ B9.Content.StringTemplate: instance GHC.Show.Show B9.Content.StringTemplate.SourceFile
+ B9.Content.StringTemplate: instance GHC.Show.Show B9.Content.StringTemplate.SourceFileConversion
+ B9.Content.StringTemplate: instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.StringTemplate.SourceFile
+ B9.Content.YamlObject: instance B9.Content.AST.ASTish B9.Content.YamlObject.YamlObject
+ B9.Content.YamlObject: instance B9.Content.AST.ConcatableSyntax B9.Content.YamlObject.YamlObject
+ B9.Content.YamlObject: instance Data.Semigroup.Semigroup B9.Content.YamlObject.YamlObject
+ B9.Content.YamlObject: instance GHC.Classes.Eq B9.Content.YamlObject.YamlObject
+ B9.Content.YamlObject: instance GHC.Read.Read B9.Content.YamlObject.YamlObject
+ B9.Content.YamlObject: instance GHC.Show.Show B9.Content.YamlObject.YamlObject
+ B9.Content.YamlObject: instance Test.QuickCheck.Arbitrary.Arbitrary B9.Content.YamlObject.YamlObject
+ B9.DiskImageBuilder: getSelectedRepos :: B9 [RemoteRepo]
+ B9.DiskImageBuilder: getSharedImagesCacheDir :: B9 FilePath
+ B9.DiskImages: imageFileName :: Image -> FilePath
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.FileSystem
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.Image
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.ImageDestination
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.ImageResize
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.ImageSize
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.ImageSource
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.ImageTarget
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.ImageType
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.MountPoint
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.Partition
+ B9.DiskImages: instance Data.Data.Data B9.DiskImages.SizeUnit
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.FileSystem
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.Image
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.ImageDestination
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.ImageResize
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.ImageSize
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.ImageSource
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.ImageTarget
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.ImageType
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.MountPoint
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.Partition
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.SharedImage
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.SharedImageBuildId
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.SharedImageDate
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.SharedImageName
+ B9.DiskImages: instance GHC.Classes.Eq B9.DiskImages.SizeUnit
+ B9.DiskImages: instance GHC.Classes.Ord B9.DiskImages.SharedImage
+ B9.DiskImages: instance GHC.Classes.Ord B9.DiskImages.SharedImageBuildId
+ B9.DiskImages: instance GHC.Classes.Ord B9.DiskImages.SharedImageDate
+ B9.DiskImages: instance GHC.Classes.Ord B9.DiskImages.SharedImageName
+ B9.DiskImages: instance GHC.Classes.Ord B9.DiskImages.SizeUnit
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.FileSystem
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.Image
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.ImageDestination
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.ImageResize
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.ImageSize
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.ImageSource
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.ImageTarget
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.ImageType
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.MountPoint
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.Partition
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.SharedImage
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.SharedImageBuildId
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.SharedImageDate
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.SharedImageName
+ B9.DiskImages: instance GHC.Read.Read B9.DiskImages.SizeUnit
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.FileSystem
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.Image
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.ImageDestination
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.ImageResize
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.ImageSize
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.ImageSource
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.ImageTarget
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.ImageType
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.MountPoint
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.Partition
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.SharedImage
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.SharedImageBuildId
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.SharedImageDate
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.SharedImageName
+ B9.DiskImages: instance GHC.Show.Show B9.DiskImages.SizeUnit
+ B9.DiskImages: prettyPrintSharedImages :: [SharedImage] -> String
+ B9.DiskImages: siBuildId :: SharedImage -> SharedImageBuildId
+ B9.DiskImages: siDate :: SharedImage -> SharedImageDate
+ B9.ExecEnv: [cpuArch] :: Resources -> CPUArch
+ B9.ExecEnv: [cpuCount] :: Resources -> Int
+ B9.ExecEnv: [envImageMounts] :: ExecEnv -> [Mounted Image]
+ B9.ExecEnv: [envName] :: ExecEnv -> String
+ B9.ExecEnv: [envResources] :: ExecEnv -> Resources
+ B9.ExecEnv: [envSharedDirectories] :: ExecEnv -> [SharedDirectory]
+ B9.ExecEnv: [maxMemory] :: Resources -> RamSize
+ B9.ExecEnv: instance Data.Data.Data B9.ExecEnv.CPUArch
+ B9.ExecEnv: instance Data.Data.Data B9.ExecEnv.RamSize
+ B9.ExecEnv: instance Data.Data.Data B9.ExecEnv.Resources
+ B9.ExecEnv: instance Data.Data.Data B9.ExecEnv.SharedDirectory
+ B9.ExecEnv: instance GHC.Base.Monoid B9.ExecEnv.CPUArch
+ B9.ExecEnv: instance GHC.Base.Monoid B9.ExecEnv.RamSize
+ B9.ExecEnv: instance GHC.Base.Monoid B9.ExecEnv.Resources
+ B9.ExecEnv: instance GHC.Classes.Eq B9.ExecEnv.CPUArch
+ B9.ExecEnv: instance GHC.Classes.Eq B9.ExecEnv.RamSize
+ B9.ExecEnv: instance GHC.Classes.Eq B9.ExecEnv.SharedDirectory
+ B9.ExecEnv: instance GHC.Classes.Ord B9.ExecEnv.RamSize
+ B9.ExecEnv: instance GHC.Read.Read B9.ExecEnv.CPUArch
+ B9.ExecEnv: instance GHC.Read.Read B9.ExecEnv.RamSize
+ B9.ExecEnv: instance GHC.Read.Read B9.ExecEnv.Resources
+ B9.ExecEnv: instance GHC.Read.Read B9.ExecEnv.SharedDirectory
+ B9.ExecEnv: instance GHC.Show.Show B9.ExecEnv.CPUArch
+ B9.ExecEnv: instance GHC.Show.Show B9.ExecEnv.RamSize
+ B9.ExecEnv: instance GHC.Show.Show B9.ExecEnv.Resources
+ B9.ExecEnv: instance GHC.Show.Show B9.ExecEnv.SharedDirectory
+ B9.LibVirtLXC: instance GHC.Read.Read B9.LibVirtLXC.LXCGuestCapability
+ B9.LibVirtLXC: instance GHC.Read.Read B9.LibVirtLXC.LibVirtLXCConfig
+ B9.LibVirtLXC: instance GHC.Show.Show B9.LibVirtLXC.LXCGuestCapability
+ B9.LibVirtLXC: instance GHC.Show.Show B9.LibVirtLXC.LibVirtLXCConfig
+ B9.MBR: [chsH] :: CHS -> !Word8
+ B9.MBR: [chs_CLower8] :: CHS -> !Word8
+ B9.MBR: [chs_CUpper2_S] :: CHS -> !Word8
+ B9.MBR: [mbrPart1] :: MBR -> !PrimaryPartition
+ B9.MBR: [mbrPart2] :: MBR -> !PrimaryPartition
+ B9.MBR: [mbrPart3] :: MBR -> !PrimaryPartition
+ B9.MBR: [mbrPart4] :: MBR -> !PrimaryPartition
+ B9.MBR: [primPartChsEnd] :: PrimaryPartition -> !CHS
+ B9.MBR: [primPartChsStart] :: PrimaryPartition -> !CHS
+ B9.MBR: [primPartLbaStart] :: PrimaryPartition -> !Word32
+ B9.MBR: [primPartPartType] :: PrimaryPartition -> !Word8
+ B9.MBR: [primPartSectors] :: PrimaryPartition -> !Word32
+ B9.MBR: [primPartStatus] :: PrimaryPartition -> !Word8
+ B9.MBR: instance GHC.Show.Show B9.MBR.CHS
+ B9.MBR: instance GHC.Show.Show B9.MBR.MBR
+ B9.MBR: instance GHC.Show.Show B9.MBR.PrimaryPartition
+ B9.Repository: cleanRemoteRepo :: MonadIO m => RepoCache -> RemoteRepo -> m ()
+ B9.Repository: instance Data.Data.Data B9.Repository.RemoteRepo
+ B9.Repository: instance Data.Data.Data B9.Repository.RepoCache
+ B9.Repository: instance Data.Data.Data B9.Repository.SshPrivKey
+ B9.Repository: instance Data.Data.Data B9.Repository.SshRemoteHost
+ B9.Repository: instance Data.Data.Data B9.Repository.SshRemoteUser
+ B9.Repository: instance GHC.Read.Read B9.Repository.RemoteRepo
+ B9.Repository: instance GHC.Read.Read B9.Repository.RepoCache
+ B9.Repository: instance GHC.Read.Read B9.Repository.SshPrivKey
+ B9.Repository: instance GHC.Read.Read B9.Repository.SshRemoteHost
+ B9.Repository: instance GHC.Read.Read B9.Repository.SshRemoteUser
+ B9.Repository: instance GHC.Show.Show B9.Repository.RemoteRepo
+ B9.Repository: instance GHC.Show.Show B9.Repository.RepoCache
+ B9.Repository: instance GHC.Show.Show B9.Repository.SshPrivKey
+ B9.Repository: instance GHC.Show.Show B9.Repository.SshRemoteHost
+ B9.Repository: instance GHC.Show.Show B9.Repository.SshRemoteUser
+ B9.RepositoryIO: instance GHC.Classes.Eq B9.RepositoryIO.Repository
+ B9.RepositoryIO: instance GHC.Classes.Ord B9.RepositoryIO.Repository
+ B9.RepositoryIO: instance GHC.Read.Read B9.RepositoryIO.Repository
+ B9.RepositoryIO: instance GHC.Show.Show B9.RepositoryIO.Repository
+ B9.RepositoryIO: toRemoteRepository :: RemoteRepo -> Repository
+ B9.ShellScript: instance Data.Data.Data B9.ShellScript.CmdVerbosity
+ B9.ShellScript: instance Data.Data.Data B9.ShellScript.Script
+ B9.ShellScript: instance GHC.Base.Monoid B9.ShellScript.Script
+ B9.ShellScript: instance GHC.Classes.Eq B9.ShellScript.CmdVerbosity
+ B9.ShellScript: instance GHC.Classes.Eq B9.ShellScript.Script
+ B9.ShellScript: instance GHC.Read.Read B9.ShellScript.Cmd
+ B9.ShellScript: instance GHC.Read.Read B9.ShellScript.CmdVerbosity
+ B9.ShellScript: instance GHC.Read.Read B9.ShellScript.Cwd
+ B9.ShellScript: instance GHC.Read.Read B9.ShellScript.Script
+ B9.ShellScript: instance GHC.Read.Read B9.ShellScript.User
+ B9.ShellScript: instance GHC.Show.Show B9.ShellScript.Cmd
+ B9.ShellScript: instance GHC.Show.Show B9.ShellScript.CmdVerbosity
+ B9.ShellScript: instance GHC.Show.Show B9.ShellScript.Cwd
+ B9.ShellScript: instance GHC.Show.Show B9.ShellScript.Script
+ B9.ShellScript: instance GHC.Show.Show B9.ShellScript.User
+ B9.Vm: instance Data.Data.Data B9.Vm.VmScript
+ B9.Vm: instance GHC.Classes.Eq B9.Vm.VmScript
+ B9.Vm: instance GHC.Read.Read B9.Vm.VmScript
+ B9.Vm: instance GHC.Show.Show B9.Vm.VmScript
- B9.B9Config: B9Config :: Maybe LogLevel -> Maybe FilePath -> Maybe FilePath -> Bool -> ExecEnvType -> Maybe FilePath -> BuildVariables -> Bool -> Maybe SystemPath -> Maybe String -> B9Config
+ B9.B9Config: B9Config :: Maybe LogLevel -> Maybe FilePath -> Maybe FilePath -> Bool -> ExecEnvType -> Maybe FilePath -> BuildVariables -> Bool -> Maybe SystemPath -> Maybe String -> Bool -> B9Config
- B9.Content.AST: class ConcatableSyntax a => ASTish a
+ B9.Content.AST: class (ConcatableSyntax a) => ASTish a
- B9.Content.AST: class Semigroup a => ConcatableSyntax a
+ B9.Content.AST: class (Semigroup a) => ConcatableSyntax a
- B9.DiskImages: siName :: SharedImage -> String
+ B9.DiskImages: siName :: SharedImage -> SharedImageName
Files
- b9.cabal +3/−1
- src/cli/Main.hs +185/−35
- src/lib/B9/B9Config.hs +5/−1
- src/lib/B9/B9Monad.hs +19/−13
- src/lib/B9/DiskImageBuilder.hs +15/−13
- src/lib/B9/DiskImages.hs +31/−2
- src/lib/B9/Repository.hs +18/−0
- src/lib/B9/RepositoryIO.hs +5/−0
b9.cabal view
@@ -1,5 +1,5 @@ name: b9-version: 0.5.8+version: 0.5.9 synopsis: A tool and library for building virtual machine images. @@ -112,6 +112,7 @@ , yaml , bifunctors , free+ , boxes default-extensions: TupleSections , GeneralizedNewtypeDeriving , DeriveDataTypeable@@ -129,6 +130,7 @@ -- other-extensions: build-depends: b9 , base >= 4.7 && < 5+ , directory , bytestring , optparse-applicative hs-source-dirs: src/cli
src/cli/Main.hs view
@@ -1,10 +1,17 @@ module Main where -import Options.Applicative hiding (action)-import Options.Applicative.Help.Pretty+import Options.Applicative hiding (action)+import Options.Applicative.Help.Pretty hiding ((</>)) -import Paths_b9+import Control.Exception+import Data.Function (on)+import Data.List (groupBy)+import Data.Maybe import Data.Version+import Paths_b9+import Prelude hiding (catch)+import System.Directory+import System.IO.Error hiding (catch) import B9 @@ -90,18 +97,121 @@ conf' = conf { keepTempDirs = False } maybePullImage = maybe (return True) pullLatestImage mName +runRun :: SharedImageName -> [String] -> BuildAction+runRun (SharedImageName name) cmdAndArgs _cfgFile cp conf = impl+ where+ conf' =+ conf+ { keepTempDirs = False+ , interactive = True+ }+ impl = buildArtifacts runCmdAndArgs cp conf'+ where+ runCmdAndArgs =+ Artifact+ (IID ("run-" ++ name))+ (VmImages+ [ ImageTarget+ Transient+ (From name KeepSize)+ (MountPoint "/")]+ (VmScript+ X86_64+ [SharedDirectory "." (MountPoint "/mnt/CWD")]+ (Run (head cmdAndArgs') (tail cmdAndArgs'))))+ cmdAndArgs' =+ if null cmdAndArgs+ then ["/usr/bin/zsh"]+ else cmdAndArgs+++runGcLocalRepoCache :: BuildAction+runGcLocalRepoCache _cfgFile cp conf = impl+ where+ conf' =+ conf+ { keepTempDirs = False+ }+ impl =+ run cp conf' $+ do toDelete <-+ (obsoleteSharedmages . map snd) <$>+ lookupSharedImages (== Cache) (const True)+ imgDir <- getSharedImagesCacheDir+ let filesToDelete = (imgDir </>) <$> (infoFiles ++ imgFiles)+ infoFiles = sharedImageFileName <$> toDelete+ imgFiles = (imageFileName . sharedImageImage) <$> toDelete+ if null filesToDelete+ then liftIO $+ do putStrLn "\n\nNO IMAGES TO DELETE\n"+ return True+ else liftIO $+ do putStrLn "DELETING FILES:"+ putStrLn (unlines filesToDelete)+ mapM_ removeIfExists filesToDelete+ return True+ obsoleteSharedmages :: [SharedImage] -> [SharedImage]+ obsoleteSharedmages =+ concatMap (tail . reverse) .+ filter ((> 1) . length) . groupBy ((==) `on` siName)+ removeIfExists :: FilePath -> IO ()+ removeIfExists fileName = removeFile fileName `catch` handleExists+ where+ handleExists e+ | isDoesNotExistError e = return ()+ | otherwise = throwIO e++runGcRemoteRepoCache :: BuildAction+runGcRemoteRepoCache _cfgFile cp conf = impl+ where+ conf' =+ conf+ { keepTempDirs = False+ }+ impl =+ run cp conf' $+ do repos <- getSelectedRepos+ cache <- getRepoCache+ mapM_ (cleanRemoteRepo cache) repos+ return True+ runListSharedImages :: BuildAction runListSharedImages _cfgFile cp conf = impl where- conf' = conf { keepTempDirs = False }- impl = do- imgs <- run cp conf' getSharedImages- if null imgs- then putStrLn "\n\nNO SHAREABLE IMAGES\n"- else putStrLn "SHAREABLE IMAGES:"- mapM_ (putStrLn . ppShow) imgs- return True+ conf' =+ conf+ { keepTempDirs = False+ }+ impl =+ run cp conf' $+ do remoteRepo <- getSelectedRemoteRepo+ let repoPred =+ maybe (== Cache) ((==) . toRemoteRepository) remoteRepo+ allRepos <- getRemoteRepos+ if isNothing remoteRepo+ then liftIO $+ do putStrLn "Showing local shared images only."+ putStrLn $+ "\nTo view the contents of a remote repo add \n\+ \the '-r' switch with one of the remote \n\+ \repository ids."+ else liftIO $+ putStrLn+ ("Showing shared images on: " +++ remoteRepoRepoId (fromJust remoteRepo))+ when (not (null allRepos)) $+ liftIO $+ do putStrLn "\nAvailable remote repositories:"+ mapM_ (putStrLn . (" * " ++) . remoteRepoRepoId) allRepos+ imgs <- lookupSharedImages repoPred (const True)+ if null imgs+ then liftIO $ putStrLn "\n\nNO SHARED IMAGES\n"+ else liftIO $+ do putStrLn ""+ putStrLn $ prettyPrintSharedImages $ map snd imgs+ return True + runAddRepo :: RemoteRepo -> BuildAction runAddRepo repo cfgFile cp _conf = do repo' <- remoteRepoCheckSshPrivKey repo@@ -189,21 +299,42 @@ , cliB9Config = b9cfg' } cmds :: Parser BuildAction-cmds = subparser ( command "version"- (info (pure runShowVersion)- (progDesc "Show program version and exit."))- <> command "build"- (info (runBuildArtifacts <$> buildFileParser)- (progDesc "Merge all build file and\- \ generate all artifacts."))- <> command "push"- (info (runPush <$> sharedImageNameParser)- (progDesc "Push the lastest shared image\+cmds =+ subparser+ (command+ "version"+ (info+ (pure runShowVersion)+ (progDesc "Show program version and exit.")) <>+ command+ "build"+ (info+ (runBuildArtifacts <$> buildFileParser)+ (progDesc+ "Merge all build file and\+ \ generate all artifacts.")) <>+ command+ "run"+ (info+ (runRun <$> sharedImageNameParser <*> many (strArgument idm))+ (progDesc+ "Run a command on the lastest version of the\+ \ specified shared image. All modifications\+ \ are lost on exit.")) <>+ command+ "push"+ (info+ (runPush <$> sharedImageNameParser)+ (progDesc+ "Push the lastest shared image\ \ from cache to the selected \- \ remote repository."))- <> command "pull"- (info (runPull <$> optional sharedImageNameParser)- (progDesc "Either pull shared image meta\+ \ remote repository.")) <>+ command+ "pull"+ (info+ (runPull <$> optional sharedImageNameParser)+ (progDesc+ "Either pull shared image meta\ \ data from all repositories,\ \ or only from just a selected one.\ \ If additionally the name of a\@@ -211,16 +342,35 @@ \ pull the newest version\ \ from either the selected repo,\ \ or from the repo with the most\- \ recent version."))- <> command "list"- (info (pure runListSharedImages)- (progDesc "List shared images."))- <> command "add-repo"- (info (runAddRepo <$> remoteRepoParser)- (progDesc "Add a remote repo."))- <> command "reformat"- (info (runFormatBuildFiles <$> buildFileParser)- (progDesc "Re-Format all build files.")))+ \ recent version.")) <>+ command+ "clean-local"+ (info+ (pure runGcLocalRepoCache)+ (progDesc+ "Remove old versions of shared images\+ \ from the local cache.")) <>+ command+ "clean-remote"+ (info+ (pure runGcRemoteRepoCache)+ (progDesc+ "Remove cached meta-data of a remote repository. \+ \If no '-r' is given, clean the meta data of ALL \+ \remote repositories.")) <>+ command+ "list"+ (info (pure runListSharedImages) (progDesc "List shared images.")) <>+ command+ "add-repo"+ (info+ (runAddRepo <$> remoteRepoParser)+ (progDesc "Add a remote repo.")) <>+ command+ "reformat"+ (info+ (runFormatBuildFiles <$> buildFileParser)+ (progDesc "Re-Format all build files."))) buildFileParser :: Parser [FilePath] buildFileParser = helper <*>
src/lib/B9/B9Config.hs view
@@ -45,12 +45,13 @@ , uniqueBuildDirs :: Bool , repositoryCache :: Maybe SystemPath , repository :: Maybe String+ , interactive :: Bool } deriving (Show) instance Monoid B9Config where mempty = B9Config Nothing Nothing Nothing False LibVirtLXC Nothing [] True- Nothing Nothing+ Nothing Nothing False mappend c c' = B9Config { verbosity = getLast $ on mappend (Last . verbosity) c c' , logFile = getLast $ on mappend (Last . logFile) c c'@@ -62,6 +63,7 @@ , uniqueBuildDirs = getAll ((mappend `on` (All . uniqueBuildDirs)) c c') , repositoryCache = getLast $ on mappend (Last . repositoryCache) c c' , repository = getLast ((mappend `on` (Last . repository)) c c')+ , interactive = getAny ((mappend `on` (Any . interactive)) c c') } defaultB9Config :: B9Config@@ -75,6 +77,7 @@ , uniqueBuildDirs = True , repository = Nothing , repositoryCache = Just defaultRepositoryCache+ , interactive = False } defaultRepositoryCache :: SystemPath@@ -170,6 +173,7 @@ <*> getr uniqueBuildDirsK <*> getr repositoryCacheK <*> getr repositoryK+ <*> pure False in case getB9Config of Left err -> Left (printf "Failed to parse B9 configuration file: '%s'" (show err))
src/lib/B9/B9Monad.hs view
@@ -68,10 +68,11 @@ withBuildDir buildId = bracket (createBuildDir buildId) removeBuildDir run' buildId now buildDir logFileHandle = do- maybe (print "Keeping PWD as CWD") setCurrentDirectory (buildDirRoot cfg)+ maybe (return ()) setCurrentDirectory (buildDirRoot cfg) -- Check repositories repoCache <- initRepoCache (fromMaybe defaultRepositoryCache (repositoryCache cfg)) let remoteRepos = getConfiguredRemoteRepos cfgParser+ buildDate = formatTime undefined "%F-%T" now remoteRepos' <- mapM (initRemoteRepo repoCache) remoteRepos let ctx = BuildState buildId@@ -85,8 +86,7 @@ repoCache [] now- True- buildDate = formatTime undefined "%F-%T" now+ (interactive cfg) selectedRemoteRepo = do sel <- repository cfg lookupRemoteRepo remoteRepos sel@@ -171,28 +171,34 @@ cmd str = do inheritStdIn <- gets bsInheritStdIn if inheritStdIn- then interactive str- else nonInteractive str+ then interactiveCmd str+ else nonInteractiveCmd str -interactive :: String -> B9 ()-interactive str = void (cmdWithStdIn str :: B9 Inherited)+interactiveCmd :: String -> B9 ()+interactiveCmd str = void (cmdWithStdIn True str :: B9 Inherited) -nonInteractive :: String -> B9 ()-nonInteractive str = void (cmdWithStdIn str :: B9 ClosedStream)+nonInteractiveCmd :: String -> B9 ()+-- TODO if we use 'ClosedStream' we get an error from 'virsh console'+-- complaining about a missing controlling tty. Original source line:+-- nonInteractiveCmd str = void (cmdWithStdIn False str :: B9 ClosedStream)+nonInteractiveCmd str = void (cmdWithStdIn False str :: B9 Inherited) -cmdWithStdIn :: (InputSource stdin) => String -> B9 stdin-cmdWithStdIn cmdStr = do+cmdWithStdIn :: (InputSource stdin) => Bool -> String -> B9 stdin+cmdWithStdIn toStdOut cmdStr = do traceL $ "COMMAND: " ++ cmdStr- (cpIn, cpOut, cpErr, cph) <- streamingProcess (shell cmdStr) cmdLogger <- getCmdLogger+ let outPipe = if toStdOut then CL.mapM_ B.putStr+ else cmdLogger LogTrace+ (cpIn, cpOut, cpErr, cph) <- streamingProcess (shell cmdStr) e <- liftIO $ runConcurrently $- Concurrently (cpOut $$ cmdLogger LogTrace) *>+ Concurrently (cpOut $$ outPipe) *> Concurrently (cpErr $$ cmdLogger LogInfo) *> Concurrently (waitForStreamingProcess cph) checkExitCode e return cpIn where+ getCmdLogger = do lv <- gets $ verbosity . bsCfg lfh <- gets bsLogFileHandle
src/lib/B9/DiskImageBuilder.hs view
@@ -16,6 +16,8 @@ ,pushSharedImageLatestVersion ,lookupSharedImages ,getSharedImages+ ,getSharedImagesCacheDir+ ,getSelectedRepos ,pullRemoteRepos ,pullLatestImage ,) where@@ -84,7 +86,7 @@ (CopyOnWrite backingImg) -> liftIO (ensureAbsoluteImageDirExists backingImg) (From name _resize) -> do- latestImage <- getLatestImageByName name+ latestImage <- getLatestImageByName (SharedImageName name) liftIO (ensureAbsoluteImageDirExists latestImage) -- | Return all valid image types sorted by preference.@@ -102,7 +104,7 @@ `intersect` allowedImageTypesForResize resize) (From name resize) -> do- sharedImg <- getLatestImageByName name+ sharedImg <- getLatestImageByName (SharedImageName name) preferredDestImageTypes (SourceImage sharedImg NoPT resize) preferredSourceImageTypes :: ImageDestination -> [ImageType]@@ -134,7 +136,7 @@ return $ changeImageDirectory dirAbs img -- | Create an image from an image source. The destination image must have a--- compatible image type and filesyste. The directory of the image MUST be+-- 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 () materializeImageSource src dest =@@ -147,7 +149,7 @@ (CopyOnWrite backingImg) -> createCOWImage backingImg dest (From name resize) -> do- sharedImg <- getLatestImageByName name+ sharedImg <- getLatestImageByName (SharedImageName name) materializeImageSource (SourceImage sharedImg NoPT resize) dest createImageFromImage :: Image -> Partition -> ImageResize -> Image -> B9 ()@@ -364,8 +366,8 @@ -- | Publish the latest version of a shared image identified by name to the -- selected repository from the cache. pushSharedImageLatestVersion :: SharedImageName -> B9 ()-pushSharedImageLatestVersion (SharedImageName imgName) = do- sharedImage <- getLatestSharedImageByNameFromCache imgName+pushSharedImageLatestVersion name@(SharedImageName imgName) = do+ sharedImage <- getLatestSharedImageByNameFromCache name dbgL (printf "PUSHING '%s'" (ppShow sharedImage)) pushToSelectedRepo sharedImage infoL (printf "PUSHED '%s'" imgName)@@ -396,7 +398,7 @@ -- | 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-pullLatestImage (SharedImageName name) = do+pullLatestImage name@(SharedImageName dbgName) = do repos <- getSelectedRepos let repoPredicate Cache = False repoPredicate (Remote repoId) = repoId `elem` repoIds@@ -407,7 +409,7 @@ if null candidates then do errorL- (printf "No shared image named '%s' on these remote repositories: '%s'" name+ (printf "No shared image named '%s' on these remote repositories: '%s'" dbgName (ppShow repoIds)) return False else do@@ -422,13 +424,13 @@ repo = fromJust (lookupRemoteRepo repos repoId) pullFromRepo repo repoImgFile cachedImgFile pullFromRepo repo repoInfoFile cachedInfoFile- infoL (printf "PULLED '%s' FROM '%s'" name repoId)+ infoL (printf "PULLED '%s' FROM '%s'" dbgName repoId) return True -- | Return the 'Image' of the latest version of a shared image named 'name' -- from the local cache.-getLatestImageByName :: String -> B9 Image+getLatestImageByName :: SharedImageName -> B9 Image getLatestImageByName name = do sharedImage <- getLatestSharedImageByNameFromCache name cacheDir <- getSharedImagesCacheDir@@ -437,14 +439,14 @@ return image -- | Return the latest version of a shared image named 'name' from the local cache.-getLatestSharedImageByNameFromCache :: String -> B9 SharedImage-getLatestSharedImageByNameFromCache name = do+getLatestSharedImageByNameFromCache :: SharedImageName -> B9 SharedImage+getLatestSharedImageByNameFromCache name@(SharedImageName dbgName) = do imgs <- lookupSharedImages (== Cache) ((== name) . siName) case reverse imgs of (Cache, sharedImage):_rest -> return sharedImage _ ->- error (printf "No image(s) named '%s' found." name)+ error (printf "No image(s) named '%s' found." dbgName) -- | Return a list of all existing sharedImages from cached repositories. getSharedImages :: B9 [(Repository, [SharedImage])]
src/lib/B9/DiskImages.hs view
@@ -5,6 +5,7 @@ import Data.Semigroup import Data.Data import System.FilePath+import qualified Text.PrettyPrint.Boxes as Boxes -- | 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@@ -92,6 +93,10 @@ type Mounted a = (a, MountPoint) +-- | Return the name of the file corresponding to an `Image`+imageFileName :: Image -> FilePath+imageFileName (Image f _ _) = f+ -- | Return the files generated for a local or a live image; shared and transient images -- are treated like they have no ouput files because the output files are manged -- by B9.@@ -143,9 +148,17 @@ deriving (Eq,Read,Show) -- | Return the name of a shared image.-siName :: SharedImage -> String-siName (SharedImage (SharedImageName n) _ _ _ _) = n+siName :: SharedImage -> SharedImageName+siName (SharedImage n _ _ _ _) = n +-- | Return the date of a shared image.+siDate :: SharedImage -> SharedImageDate+siDate (SharedImage _ n _ _ _) = n++-- | Return the build id of a shared image.+siBuildId :: SharedImage -> SharedImageBuildId+siBuildId (SharedImage _ _ n _ _) = n+ -- | Shared images are orderd by name, build date and build id instance Ord SharedImage where compare (SharedImage n d b _ _) (SharedImage n' d' b' _ _) =@@ -154,6 +167,22 @@ newtype SharedImageName = SharedImageName String deriving (Eq,Ord,Read,Show) newtype SharedImageDate = SharedImageDate String deriving (Eq,Ord,Read,Show) newtype SharedImageBuildId = SharedImageBuildId String deriving (Eq,Ord,Read,Show)++-- | Print the contents of the shared image in one line+prettyPrintSharedImages :: [SharedImage] -> String+prettyPrintSharedImages imgs = Boxes.render table+ where+ table = Boxes.hsep 1 Boxes.left cols+ where+ cols = [nameC, dateC, idC]+ where+ nameC = col "Name" ((\(SharedImageName n) -> n) . siName)+ dateC = col "Date" ((\(SharedImageDate n) -> n) . siDate)+ idC = col "ID" ((\(SharedImageBuildId n) -> n) . siBuildId)+ col title accessor =+ (Boxes.text title) Boxes.// (Boxes.vcat Boxes.left cells)+ where+ cells = Boxes.text <$> accessor <$> imgs -- | Return the disk image of an sharedImage sharedImageImage :: SharedImage -> Image
src/lib/B9/Repository.hs view
@@ -11,6 +11,7 @@ ,SshRemoteUser(..) ,initRepoCache ,initRemoteRepo+ ,cleanRemoteRepo ,remoteRepoCheckSshPrivKey ,remoteRepoCacheDir ,localRepoDir@@ -77,10 +78,27 @@ -> RemoteRepo -> m RemoteRepo initRemoteRepo cache repo = do+ -- TODO logging traceL $ printf "Initializing remote repo: %s" (remoteRepoRepoId repo) repo' <- remoteRepoCheckSshPrivKey repo let (RemoteRepo repoId _ _ _ _) = repo' ensureDir (remoteRepoCacheDir cache repoId ++ "/") return repo'++-- | 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 ()+cleanRemoteRepo cache repo = do+ let repoId = remoteRepoRepoId repo+ repoDir = remoteRepoCacheDir cache repoId ++ "/"+ -- TODO logging infoL $ printf "Cleaning remote repo: %s" repoId+ ensureDir repoDir+ -- TODO logging traceL $ printf "Deleting directory: %s" repoDir+ liftIO $ removeDirectoryRecursive repoDir+ ensureDir repoDir -- | Return the cache directory for a remote repository relative to the root -- cache dir.
src/lib/B9/RepositoryIO.hs view
@@ -5,6 +5,7 @@ ,pullFromRepo ,pullGlob ,Repository(..)+ ,toRemoteRepository ,FilePathGlob(..)) where import B9.Repository@@ -20,6 +21,10 @@ data Repository = Cache | Remote String deriving (Eq, Ord, Read, Show)++-- | Convert a `RemoteRepo` down to a mere `Repository`+toRemoteRepository :: RemoteRepo -> Repository+toRemoteRepository = Remote . remoteRepoRepoId -- | 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