packages feed

propellor 2.8.0 → 2.8.1

raw patch · 22 files changed

+256/−26 lines, 22 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Propellor.PrivData: instance Eq PrivInfo
- Propellor.PrivData: instance IsInfo PrivInfo
- Propellor.PrivData: instance Monoid PrivInfo
- Propellor.PrivData: instance Ord PrivInfo
- Propellor.PrivData: instance Show PrivInfo
- Propellor.PrivData: instance Typeable PrivInfo
- Propellor.PropAccum: instance PropAccum Host
- Propellor.PropAccum: instance PropAccum PropList
- Propellor.Property.Apt: keyname :: AptKey -> String
- Propellor.Property.Apt: pubkey :: AptKey -> String
- Propellor.Property.Chroot: instance PropAccum Chroot
- Propellor.Property.Chroot: instance Show BuilderConf
- Propellor.Property.Chroot: instance Show Chroot
- Propellor.Property.DebianMirror: instance Eq DebianPriority
- Propellor.Property.DebianMirror: instance Show DebianPriority
- Propellor.Property.Debootstrap: instance Monoid DebootstrapConfig
- Propellor.Property.Debootstrap: instance Show DebootstrapConfig
- Propellor.Property.Docker: instance Eq ContainerFilter
- Propellor.Property.Docker: instance Eq ContainerId
- Propellor.Property.Docker: instance Eq ContainerIdent
- Propellor.Property.Docker: instance Eq Image
- Propellor.Property.Docker: instance HasImage Container
- Propellor.Property.Docker: instance HasImage Image
- Propellor.Property.Docker: instance ImageIdentifier Image
- Propellor.Property.Docker: instance ImageIdentifier ImageID
- Propellor.Property.Docker: instance ImageIdentifier ImageUID
- Propellor.Property.Docker: instance Mountable (Bound FilePath)
- Propellor.Property.Docker: instance Mountable String
- Propellor.Property.Docker: instance PropAccum Container
- Propellor.Property.Docker: instance Publishable (Bound Port)
- Propellor.Property.Docker: instance Publishable String
- Propellor.Property.Docker: instance Read ContainerId
- Propellor.Property.Docker: instance Read ContainerIdent
- Propellor.Property.Docker: instance Read Image
- Propellor.Property.Docker: instance Show ContainerId
- Propellor.Property.Docker: instance Show ContainerIdent
- Propellor.Property.Docker: instance Show Image
- Propellor.Property.Docker: repository :: Image -> String
- Propellor.Property.Docker: tag :: Image -> Maybe String
- Propellor.Property.Firewall: instance Eq Chain
- Propellor.Property.Firewall: instance Eq ConnectionState
- Propellor.Property.Firewall: instance Eq Proto
- Propellor.Property.Firewall: instance Eq Rule
- Propellor.Property.Firewall: instance Eq Rules
- Propellor.Property.Firewall: instance Eq Target
- Propellor.Property.Firewall: instance Monoid Rules
- Propellor.Property.Firewall: instance Show Chain
- Propellor.Property.Firewall: instance Show ConnectionState
- Propellor.Property.Firewall: instance Show Proto
- Propellor.Property.Firewall: instance Show Rule
- Propellor.Property.Firewall: instance Show Rules
- Propellor.Property.Firewall: instance Show Target
- Propellor.Property.Gpg: getGpgKeyId :: GpgKeyId -> String
- Propellor.Property.List: instance PropertyList PropList
- Propellor.Property.List: instance PropertyList [Property HasInfo]
- Propellor.Property.List: instance PropertyList [Property NoInfo]
- Propellor.Property.Obnam: instance Eq NumClients
- Propellor.Property.Parted: instance Monoid PartSize
- Propellor.Property.Parted: instance Monoid PartTable
- Propellor.Property.Parted: instance PartedVal Bool
- Propellor.Property.Parted: instance PartedVal Fs
- Propellor.Property.Parted: instance PartedVal PartFlag
- Propellor.Property.Parted: instance PartedVal PartSize
- Propellor.Property.Parted: instance PartedVal PartType
- Propellor.Property.Parted: instance PartedVal TableType
- Propellor.Property.Parted: instance Show PartFlag
- Propellor.Property.Parted: instance Show PartSize
- Propellor.Property.Parted: instance Show PartTable
- Propellor.Property.Parted: instance Show PartType
- Propellor.Property.Parted: instance Show Partition
- Propellor.Property.Parted: instance Show TableType
- Propellor.Property.Parted: partFlags :: Partition -> [(PartFlag, Bool)]
- Propellor.Property.Parted: partFs :: Partition -> Fs
- Propellor.Property.Parted: partMkFsOpts :: Partition -> MkfsOpts
- Propellor.Property.Parted: partName :: Partition -> Maybe String
- Propellor.Property.Parted: partSize :: Partition -> PartSize
- Propellor.Property.Parted: partType :: Partition -> PartType
- Propellor.Property.Partition: instance Show Fs
- Propellor.Property.Rsync: instance RsyncParam Filter
- Propellor.Property.Ssh: instance Eq SshPubKeyInfo
- Propellor.Property.Ssh: instance IsInfo SshPubKeyInfo
- Propellor.Property.Ssh: instance Monoid SshPubKeyInfo
- Propellor.Property.Ssh: instance Ord SshPubKeyInfo
- Propellor.Property.Ssh: instance Typeable SshPubKeyInfo
- Propellor.Property.Systemd: instance Bindable (Bound FilePath)
- Propellor.Property.Systemd: instance Bindable FilePath
- Propellor.Property.Systemd: instance PropAccum Container
- Propellor.Property.Systemd: instance Publishable (Bound Port)
- Propellor.Property.Systemd: instance Publishable (Proto, Bound Port)
- Propellor.Property.Systemd: instance Publishable Port
- Propellor.Property.Systemd: instance Show Container
- Propellor.Property.User: instance Eq PasswordStatus
- Propellor.Types: hostInfo :: Host -> Info
- Propellor.Types: hostName :: Host -> HostName
- Propellor.Types: hostProperties :: Host -> [Property HasInfo]
- Propellor.Types: instance Applicative Propellor
- Propellor.Types: instance Combines (Property HasInfo) (Property HasInfo)
- Propellor.Types: instance Combines (Property HasInfo) (Property NoInfo)
- Propellor.Types: instance Combines (Property NoInfo) (Property HasInfo)
- Propellor.Types: instance Combines (Property NoInfo) (Property NoInfo)
- Propellor.Types: instance Combines RevertableProperty (Property HasInfo)
- Propellor.Types: instance Combines RevertableProperty (Property NoInfo)
- Propellor.Types: instance Combines RevertableProperty RevertableProperty
- Propellor.Types: instance Functor Propellor
- Propellor.Types: instance IsProp (Property HasInfo)
- Propellor.Types: instance IsProp (Property NoInfo)
- Propellor.Types: instance IsProp RevertableProperty
- Propellor.Types: instance Monad Propellor
- Propellor.Types: instance MonadCatch Propellor
- Propellor.Types: instance MonadIO Propellor
- Propellor.Types: instance MonadMask Propellor
- Propellor.Types: instance MonadReader Host Propellor
- Propellor.Types: instance MonadThrow Propellor
- Propellor.Types: instance MonadWriter [EndAction] Propellor
- Propellor.Types: instance Monoid (Propellor Result)
- Propellor.Types: instance Show (Property i)
- Propellor.Types: instance Show Host
- Propellor.Types: instance Typeable Host
- Propellor.Types: runWithHost :: Propellor p -> RWST Host [EndAction] () IO p
- Propellor.Types.Chroot: _chrootCfg :: ChrootInfo -> ChrootCfg
- Propellor.Types.Chroot: _chroots :: ChrootInfo -> Map FilePath Host
- Propellor.Types.Chroot: instance Empty ChrootCfg
- Propellor.Types.Chroot: instance Empty ChrootInfo
- Propellor.Types.Chroot: instance Eq ChrootCfg
- Propellor.Types.Chroot: instance IsInfo ChrootInfo
- Propellor.Types.Chroot: instance Monoid ChrootCfg
- Propellor.Types.Chroot: instance Monoid ChrootInfo
- Propellor.Types.Chroot: instance Show ChrootCfg
- Propellor.Types.Chroot: instance Show ChrootInfo
- Propellor.Types.Chroot: instance Typeable ChrootInfo
- Propellor.Types.CmdLine: instance Eq CmdLine
- Propellor.Types.CmdLine: instance Read CmdLine
- Propellor.Types.CmdLine: instance Show CmdLine
- Propellor.Types.Container: containerSide :: Bound v -> v
- Propellor.Types.Container: hostSide :: Bound v -> v
- Propellor.Types.Dns: confAllowTransfer :: NamedConf -> [IPAddr]
- Propellor.Types.Dns: confDnsServerType :: NamedConf -> DnsServerType
- Propellor.Types.Dns: confDomain :: NamedConf -> Domain
- Propellor.Types.Dns: confFile :: NamedConf -> FilePath
- Propellor.Types.Dns: confLines :: NamedConf -> [String]
- Propellor.Types.Dns: confMasters :: NamedConf -> [IPAddr]
- Propellor.Types.Dns: fromDnsInfo :: DnsInfo -> Set Record
- Propellor.Types.Dns: instance Empty NamedConfMap
- Propellor.Types.Dns: instance Eq AliasesInfo
- Propellor.Types.Dns: instance Eq BindDomain
- Propellor.Types.Dns: instance Eq DnsInfo
- Propellor.Types.Dns: instance Eq DnsServerType
- Propellor.Types.Dns: instance Eq IPAddr
- Propellor.Types.Dns: instance Eq NamedConf
- Propellor.Types.Dns: instance Eq NamedConfMap
- Propellor.Types.Dns: instance Eq Record
- Propellor.Types.Dns: instance Eq SOA
- Propellor.Types.Dns: instance Eq Zone
- Propellor.Types.Dns: instance IsInfo AliasesInfo
- Propellor.Types.Dns: instance IsInfo DnsInfo
- Propellor.Types.Dns: instance IsInfo NamedConfMap
- Propellor.Types.Dns: instance Monoid AliasesInfo
- Propellor.Types.Dns: instance Monoid DnsInfo
- Propellor.Types.Dns: instance Monoid NamedConfMap
- Propellor.Types.Dns: instance Ord AliasesInfo
- Propellor.Types.Dns: instance Ord BindDomain
- Propellor.Types.Dns: instance Ord DnsInfo
- Propellor.Types.Dns: instance Ord DnsServerType
- Propellor.Types.Dns: instance Ord IPAddr
- Propellor.Types.Dns: instance Ord NamedConf
- Propellor.Types.Dns: instance Ord NamedConfMap
- Propellor.Types.Dns: instance Ord Record
- Propellor.Types.Dns: instance Read BindDomain
- Propellor.Types.Dns: instance Read IPAddr
- Propellor.Types.Dns: instance Read Record
- Propellor.Types.Dns: instance Read SOA
- Propellor.Types.Dns: instance Read Zone
- Propellor.Types.Dns: instance Show AliasesInfo
- Propellor.Types.Dns: instance Show BindDomain
- Propellor.Types.Dns: instance Show DnsInfo
- Propellor.Types.Dns: instance Show DnsServerType
- Propellor.Types.Dns: instance Show IPAddr
- Propellor.Types.Dns: instance Show NamedConf
- Propellor.Types.Dns: instance Show NamedConfMap
- Propellor.Types.Dns: instance Show Record
- Propellor.Types.Dns: instance Show SOA
- Propellor.Types.Dns: instance Show Zone
- Propellor.Types.Dns: instance Typeable AliasesInfo
- Propellor.Types.Dns: instance Typeable DnsInfo
- Propellor.Types.Dns: instance Typeable NamedConfMap
- Propellor.Types.Dns: instance Typeable Record
- Propellor.Types.Dns: sDomain :: SOA -> BindDomain
- Propellor.Types.Dns: sExpire :: SOA -> Integer
- Propellor.Types.Dns: sNegativeCacheTTL :: SOA -> Integer
- Propellor.Types.Dns: sRefresh :: SOA -> Integer
- Propellor.Types.Dns: sRetry :: SOA -> Integer
- Propellor.Types.Dns: sSerial :: SOA -> SerialNumber
- Propellor.Types.Dns: zDomain :: Zone -> Domain
- Propellor.Types.Dns: zHosts :: Zone -> [(BindDomain, Record)]
- Propellor.Types.Dns: zSOA :: Zone -> SOA
- Propellor.Types.Docker: _dockerContainers :: DockerInfo -> Map String Host
- Propellor.Types.Docker: _dockerRunParams :: DockerInfo -> [DockerRunParam]
- Propellor.Types.Docker: instance Empty DockerInfo
- Propellor.Types.Docker: instance IsInfo DockerInfo
- Propellor.Types.Docker: instance Monoid DockerInfo
- Propellor.Types.Docker: instance Show DockerInfo
- Propellor.Types.Docker: instance Show DockerRunParam
- Propellor.Types.Docker: instance Typeable DockerInfo
- Propellor.Types.Empty: instance Empty (Map k v)
- Propellor.Types.Empty: instance Empty (Set v)
- Propellor.Types.Empty: instance Empty [a]
- Propellor.Types.Info: instance Monoid (InfoVal v)
- Propellor.Types.Info: instance Monoid Info
- Propellor.Types.Info: instance Show Info
- Propellor.Types.Info: instance Typeable InfoVal
- Propellor.Types.Info: instance Typeable v => IsInfo (InfoVal v)
- Propellor.Types.OS: instance Eq DebianSuite
- Propellor.Types.OS: instance Eq Distribution
- Propellor.Types.OS: instance Eq Port
- Propellor.Types.OS: instance Eq System
- Propellor.Types.OS: instance Show DebianSuite
- Propellor.Types.OS: instance Show Distribution
- Propellor.Types.OS: instance Show Port
- Propellor.Types.OS: instance Show System
- Propellor.Types.OS: instance Typeable System
- Propellor.Types.PrivData: instance Bounded DnsSecKey
- Propellor.Types.PrivData: instance Bounded SshKeyType
- Propellor.Types.PrivData: instance Enum DnsSecKey
- Propellor.Types.PrivData: instance Enum SshKeyType
- Propellor.Types.PrivData: instance Eq Context
- Propellor.Types.PrivData: instance Eq DnsSecKey
- Propellor.Types.PrivData: instance Eq HostContext
- Propellor.Types.PrivData: instance Eq PrivDataField
- Propellor.Types.PrivData: instance Eq SshKeyType
- Propellor.Types.PrivData: instance IsContext Context
- Propellor.Types.PrivData: instance IsContext HostContext
- Propellor.Types.PrivData: instance IsPrivDataSource PrivDataField
- Propellor.Types.PrivData: instance IsPrivDataSource PrivDataSource
- Propellor.Types.PrivData: instance Ord Context
- Propellor.Types.PrivData: instance Ord DnsSecKey
- Propellor.Types.PrivData: instance Ord HostContext
- Propellor.Types.PrivData: instance Ord PrivDataField
- Propellor.Types.PrivData: instance Ord SshKeyType
- Propellor.Types.PrivData: instance Read Context
- Propellor.Types.PrivData: instance Read DnsSecKey
- Propellor.Types.PrivData: instance Read PrivDataField
- Propellor.Types.PrivData: instance Read SshKeyType
- Propellor.Types.PrivData: instance Show Context
- Propellor.Types.PrivData: instance Show DnsSecKey
- Propellor.Types.PrivData: instance Show HostContext
- Propellor.Types.PrivData: instance Show PrivDataField
- Propellor.Types.PrivData: instance Show SshKeyType
- Propellor.Types.PrivData: mkHostContext :: HostContext -> HostName -> Context
- Propellor.Types.Result: instance ActionResult Bool
- Propellor.Types.Result: instance ActionResult Result
- Propellor.Types.Result: instance Eq Result
- Propellor.Types.Result: instance Monoid Result
- Propellor.Types.Result: instance Read Result
- Propellor.Types.Result: instance Show Result
- Propellor.Types.Result: instance ToResult Bool
+ Propellor.PrivData: forceHostContext :: String -> PrivInfo -> PrivInfo
+ Propellor.PrivData: instance GHC.Base.Monoid Propellor.PrivData.PrivInfo
+ Propellor.PrivData: instance GHC.Classes.Eq Propellor.PrivData.PrivInfo
+ Propellor.PrivData: instance GHC.Classes.Ord Propellor.PrivData.PrivInfo
+ Propellor.PrivData: instance GHC.Show.Show Propellor.PrivData.PrivInfo
+ Propellor.PrivData: instance Propellor.Types.Info.IsInfo Propellor.PrivData.PrivInfo
+ Propellor.PropAccum: instance Propellor.PropAccum.PropAccum Propellor.PropAccum.PropList
+ Propellor.PropAccum: instance Propellor.PropAccum.PropAccum Propellor.Types.Host
+ Propellor.Property.Apt: [keyname] :: AptKey -> String
+ Propellor.Property.Apt: [pubkey] :: AptKey -> String
+ Propellor.Property.Chroot: instance GHC.Show.Show Propellor.Property.Chroot.BuilderConf
+ Propellor.Property.Chroot: instance GHC.Show.Show Propellor.Property.Chroot.Chroot
+ Propellor.Property.Chroot: instance Propellor.PropAccum.PropAccum Propellor.Property.Chroot.Chroot
+ Propellor.Property.DebianMirror: instance GHC.Classes.Eq Propellor.Property.DebianMirror.DebianPriority
+ Propellor.Property.DebianMirror: instance GHC.Show.Show Propellor.Property.DebianMirror.DebianPriority
+ Propellor.Property.Debootstrap: instance GHC.Base.Monoid Propellor.Property.Debootstrap.DebootstrapConfig
+ Propellor.Property.Debootstrap: instance GHC.Show.Show Propellor.Property.Debootstrap.DebootstrapConfig
+ Propellor.Property.Docker: Container :: Image -> Host -> Container
+ Propellor.Property.Docker: [repository] :: Image -> String
+ Propellor.Property.Docker: [tag] :: Image -> Maybe String
+ Propellor.Property.Docker: instance GHC.Classes.Eq Propellor.Property.Docker.ContainerFilter
+ Propellor.Property.Docker: instance GHC.Classes.Eq Propellor.Property.Docker.ContainerId
+ Propellor.Property.Docker: instance GHC.Classes.Eq Propellor.Property.Docker.ContainerIdent
+ Propellor.Property.Docker: instance GHC.Classes.Eq Propellor.Property.Docker.Image
+ Propellor.Property.Docker: instance GHC.Read.Read Propellor.Property.Docker.ContainerId
+ Propellor.Property.Docker: instance GHC.Read.Read Propellor.Property.Docker.ContainerIdent
+ Propellor.Property.Docker: instance GHC.Read.Read Propellor.Property.Docker.Image
+ Propellor.Property.Docker: instance GHC.Show.Show Propellor.Property.Docker.ContainerId
+ Propellor.Property.Docker: instance GHC.Show.Show Propellor.Property.Docker.ContainerIdent
+ Propellor.Property.Docker: instance GHC.Show.Show Propellor.Property.Docker.Image
+ Propellor.Property.Docker: instance Propellor.PropAccum.PropAccum Propellor.Property.Docker.Container
+ Propellor.Property.Docker: instance Propellor.Property.Docker.HasImage Propellor.Property.Docker.Container
+ Propellor.Property.Docker: instance Propellor.Property.Docker.HasImage Propellor.Property.Docker.Image
+ Propellor.Property.Docker: instance Propellor.Property.Docker.ImageIdentifier Propellor.Property.Docker.Image
+ Propellor.Property.Docker: instance Propellor.Property.Docker.ImageIdentifier Propellor.Property.Docker.ImageID
+ Propellor.Property.Docker: instance Propellor.Property.Docker.ImageIdentifier Propellor.Property.Docker.ImageUID
+ Propellor.Property.Docker: instance Propellor.Property.Docker.Mountable (Propellor.Types.Container.Bound GHC.IO.FilePath)
+ Propellor.Property.Docker: instance Propellor.Property.Docker.Mountable GHC.Base.String
+ Propellor.Property.Docker: instance Propellor.Property.Docker.Publishable (Propellor.Types.Container.Bound Propellor.Types.OS.Port)
+ Propellor.Property.Docker: instance Propellor.Property.Docker.Publishable GHC.Base.String
+ Propellor.Property.Firewall: instance GHC.Base.Monoid Propellor.Property.Firewall.Rules
+ Propellor.Property.Firewall: instance GHC.Classes.Eq Propellor.Property.Firewall.Chain
+ Propellor.Property.Firewall: instance GHC.Classes.Eq Propellor.Property.Firewall.ConnectionState
+ Propellor.Property.Firewall: instance GHC.Classes.Eq Propellor.Property.Firewall.Proto
+ Propellor.Property.Firewall: instance GHC.Classes.Eq Propellor.Property.Firewall.Rule
+ Propellor.Property.Firewall: instance GHC.Classes.Eq Propellor.Property.Firewall.Rules
+ Propellor.Property.Firewall: instance GHC.Classes.Eq Propellor.Property.Firewall.Target
+ Propellor.Property.Firewall: instance GHC.Show.Show Propellor.Property.Firewall.Chain
+ Propellor.Property.Firewall: instance GHC.Show.Show Propellor.Property.Firewall.ConnectionState
+ Propellor.Property.Firewall: instance GHC.Show.Show Propellor.Property.Firewall.Proto
+ Propellor.Property.Firewall: instance GHC.Show.Show Propellor.Property.Firewall.Rule
+ Propellor.Property.Firewall: instance GHC.Show.Show Propellor.Property.Firewall.Rules
+ Propellor.Property.Firewall: instance GHC.Show.Show Propellor.Property.Firewall.Target
+ Propellor.Property.Gpg: [getGpgKeyId] :: GpgKeyId -> String
+ Propellor.Property.Kerberos: adminServerInstalled :: Property NoInfo
+ Propellor.Property.Kerberos: checkKeyTabEntry :: Maybe FilePath -> Principal -> IO Bool
+ Propellor.Property.Kerberos: checkKeyTabEntry' :: Maybe FilePath -> (Kvno, Principal) -> IO Bool
+ Propellor.Property.Kerberos: defaultKeyTab :: FilePath
+ Propellor.Property.Kerberos: installed :: Property NoInfo
+ Propellor.Property.Kerberos: k5login :: User -> [Principal] -> Property NoInfo
+ Propellor.Property.Kerberos: k5loginPath :: User -> IO FilePath
+ Propellor.Property.Kerberos: k5srvutil :: (Maybe FilePath) -> [String] -> IO String
+ Propellor.Property.Kerberos: kadmAclPath :: FilePath
+ Propellor.Property.Kerberos: kdcConfPath :: FilePath
+ Propellor.Property.Kerberos: kdcInstalled :: Property NoInfo
+ Propellor.Property.Kerberos: keyTabPath :: Maybe FilePath -> FilePath
+ Propellor.Property.Kerberos: keytabEntries :: Maybe FilePath -> IO [(Kvno, Principal)]
+ Propellor.Property.Kerberos: kpropAcls :: [String] -> Property NoInfo
+ Propellor.Property.Kerberos: kpropServerInstalled :: Property HasInfo
+ Propellor.Property.Kerberos: kpropdAclPath :: FilePath
+ Propellor.Property.Kerberos: principal :: String -> Maybe String -> Maybe Realm -> Principal
+ Propellor.Property.Kerberos: type Kvno = Integer
+ Propellor.Property.Kerberos: type Principal = String
+ Propellor.Property.Kerberos: type Realm = String
+ Propellor.Property.List: instance Propellor.Property.List.PropertyList Propellor.PropAccum.PropList
+ Propellor.Property.List: instance Propellor.Property.List.PropertyList [Propellor.Types.Property Propellor.Types.HasInfo]
+ Propellor.Property.List: instance Propellor.Property.List.PropertyList [Propellor.Types.Property Propellor.Types.NoInfo]
+ Propellor.Property.Logcheck: Paranoid :: ReportLevel
+ Propellor.Property.Logcheck: Server :: ReportLevel
+ Propellor.Property.Logcheck: Workstation :: ReportLevel
+ Propellor.Property.Logcheck: data ReportLevel
+ Propellor.Property.Logcheck: defaultPrefix :: String
+ Propellor.Property.Logcheck: ignoreFilePath :: ReportLevel -> Service -> FilePath
+ Propellor.Property.Logcheck: ignoreLines :: ReportLevel -> Service -> [String] -> Property NoInfo
+ Propellor.Property.Logcheck: installed :: Property NoInfo
+ Propellor.Property.Logcheck: instance GHC.Show.Show Propellor.Property.Logcheck.ReportLevel
+ Propellor.Property.Logcheck: type Service = String
+ Propellor.Property.Obnam: instance GHC.Classes.Eq Propellor.Property.Obnam.NumClients
+ Propellor.Property.Parted: [partFlags] :: Partition -> [(PartFlag, Bool)]
+ Propellor.Property.Parted: [partFs] :: Partition -> Fs
+ Propellor.Property.Parted: [partMkFsOpts] :: Partition -> MkfsOpts
+ Propellor.Property.Parted: [partName] :: Partition -> Maybe String
+ Propellor.Property.Parted: [partSize] :: Partition -> PartSize
+ Propellor.Property.Parted: [partType] :: Partition -> PartType
+ Propellor.Property.Parted: instance GHC.Base.Monoid Propellor.Property.Parted.PartSize
+ Propellor.Property.Parted: instance GHC.Base.Monoid Propellor.Property.Parted.PartTable
+ Propellor.Property.Parted: instance GHC.Show.Show Propellor.Property.Parted.PartFlag
+ Propellor.Property.Parted: instance GHC.Show.Show Propellor.Property.Parted.PartSize
+ Propellor.Property.Parted: instance GHC.Show.Show Propellor.Property.Parted.PartTable
+ Propellor.Property.Parted: instance GHC.Show.Show Propellor.Property.Parted.PartType
+ Propellor.Property.Parted: instance GHC.Show.Show Propellor.Property.Parted.Partition
+ Propellor.Property.Parted: instance GHC.Show.Show Propellor.Property.Parted.TableType
+ Propellor.Property.Parted: instance Propellor.Property.Parted.PartedVal GHC.Types.Bool
+ Propellor.Property.Parted: instance Propellor.Property.Parted.PartedVal Propellor.Property.Parted.PartFlag
+ Propellor.Property.Parted: instance Propellor.Property.Parted.PartedVal Propellor.Property.Parted.PartSize
+ Propellor.Property.Parted: instance Propellor.Property.Parted.PartedVal Propellor.Property.Parted.PartType
+ Propellor.Property.Parted: instance Propellor.Property.Parted.PartedVal Propellor.Property.Parted.TableType
+ Propellor.Property.Parted: instance Propellor.Property.Parted.PartedVal Propellor.Property.Partition.Fs
+ Propellor.Property.Partition: instance GHC.Show.Show Propellor.Property.Partition.Fs
+ Propellor.Property.Rsync: instance Propellor.Property.Rsync.RsyncParam Propellor.Property.Rsync.Filter
+ Propellor.Property.Ssh: instance GHC.Base.Monoid Propellor.Property.Ssh.SshPubKeyInfo
+ Propellor.Property.Ssh: instance GHC.Classes.Eq Propellor.Property.Ssh.SshPubKeyInfo
+ Propellor.Property.Ssh: instance GHC.Classes.Ord Propellor.Property.Ssh.SshPubKeyInfo
+ Propellor.Property.Ssh: instance Propellor.Types.Info.IsInfo Propellor.Property.Ssh.SshPubKeyInfo
+ Propellor.Property.Systemd: instance GHC.Show.Show Propellor.Property.Systemd.Container
+ Propellor.Property.Systemd: instance Propellor.PropAccum.PropAccum Propellor.Property.Systemd.Container
+ Propellor.Property.Systemd: instance Propellor.Property.Systemd.Bindable (Propellor.Types.Container.Bound GHC.IO.FilePath)
+ Propellor.Property.Systemd: instance Propellor.Property.Systemd.Bindable GHC.IO.FilePath
+ Propellor.Property.Systemd: instance Propellor.Property.Systemd.Publishable (Propellor.Property.Systemd.Proto, Propellor.Types.Container.Bound Propellor.Types.OS.Port)
+ Propellor.Property.Systemd: instance Propellor.Property.Systemd.Publishable (Propellor.Types.Container.Bound Propellor.Types.OS.Port)
+ Propellor.Property.Systemd: instance Propellor.Property.Systemd.Publishable Propellor.Types.OS.Port
+ Propellor.Property.Unbound: type ConfSection = String
+ Propellor.Property.Unbound: type UnboundHost = (BindDomain, Record)
+ Propellor.Property.Unbound: type UnboundKey = String
+ Propellor.Property.Unbound: type UnboundSection = (ConfSection, [UnboundSetting])
+ Propellor.Property.Unbound: type UnboundSetting = (UnboundKey, UnboundValue)
+ Propellor.Property.Unbound: type UnboundValue = String
+ Propellor.Property.Unbound: type UnboundZone = (BindDomain, ZoneType)
+ Propellor.Property.Unbound: type ZoneType = String
+ Propellor.Property.User: instance GHC.Classes.Eq Propellor.Property.User.PasswordStatus
+ Propellor.Types: [hostInfo] :: Host -> Info
+ Propellor.Types: [hostName] :: Host -> HostName
+ Propellor.Types: [hostProperties] :: Host -> [Property HasInfo]
+ Propellor.Types: [runWithHost] :: Propellor p -> RWST Host [EndAction] () IO p
+ Propellor.Types: instance Control.Monad.Catch.MonadCatch Propellor.Types.Propellor
+ Propellor.Types: instance Control.Monad.Catch.MonadMask Propellor.Types.Propellor
+ Propellor.Types: instance Control.Monad.Catch.MonadThrow Propellor.Types.Propellor
+ Propellor.Types: instance Control.Monad.IO.Class.MonadIO Propellor.Types.Propellor
+ Propellor.Types: instance Control.Monad.Reader.Class.MonadReader Propellor.Types.Host Propellor.Types.Propellor
+ Propellor.Types: instance Control.Monad.Writer.Class.MonadWriter [Propellor.Types.EndAction] Propellor.Types.Propellor
+ Propellor.Types: instance GHC.Base.Applicative Propellor.Types.Propellor
+ Propellor.Types: instance GHC.Base.Functor Propellor.Types.Propellor
+ Propellor.Types: instance GHC.Base.Monad Propellor.Types.Propellor
+ Propellor.Types: instance GHC.Base.Monoid (Propellor.Types.Propellor Propellor.Types.Result.Result)
+ Propellor.Types: instance GHC.Show.Show (Propellor.Types.Property i)
+ Propellor.Types: instance GHC.Show.Show Propellor.Types.Host
+ Propellor.Types: instance Propellor.Types.Combines (Propellor.Types.Property Propellor.Types.HasInfo) (Propellor.Types.Property Propellor.Types.HasInfo)
+ Propellor.Types: instance Propellor.Types.Combines (Propellor.Types.Property Propellor.Types.HasInfo) (Propellor.Types.Property Propellor.Types.NoInfo)
+ Propellor.Types: instance Propellor.Types.Combines (Propellor.Types.Property Propellor.Types.NoInfo) (Propellor.Types.Property Propellor.Types.HasInfo)
+ Propellor.Types: instance Propellor.Types.Combines (Propellor.Types.Property Propellor.Types.NoInfo) (Propellor.Types.Property Propellor.Types.NoInfo)
+ Propellor.Types: instance Propellor.Types.Combines Propellor.Types.RevertableProperty (Propellor.Types.Property Propellor.Types.HasInfo)
+ Propellor.Types: instance Propellor.Types.Combines Propellor.Types.RevertableProperty (Propellor.Types.Property Propellor.Types.NoInfo)
+ Propellor.Types: instance Propellor.Types.Combines Propellor.Types.RevertableProperty Propellor.Types.RevertableProperty
+ Propellor.Types: instance Propellor.Types.IsProp (Propellor.Types.Property Propellor.Types.HasInfo)
+ Propellor.Types: instance Propellor.Types.IsProp (Propellor.Types.Property Propellor.Types.NoInfo)
+ Propellor.Types: instance Propellor.Types.IsProp Propellor.Types.RevertableProperty
+ Propellor.Types.Chroot: [_chrootCfg] :: ChrootInfo -> ChrootCfg
+ Propellor.Types.Chroot: [_chroots] :: ChrootInfo -> Map FilePath Host
+ Propellor.Types.Chroot: instance GHC.Base.Monoid Propellor.Types.Chroot.ChrootCfg
+ Propellor.Types.Chroot: instance GHC.Base.Monoid Propellor.Types.Chroot.ChrootInfo
+ Propellor.Types.Chroot: instance GHC.Classes.Eq Propellor.Types.Chroot.ChrootCfg
+ Propellor.Types.Chroot: instance GHC.Show.Show Propellor.Types.Chroot.ChrootCfg
+ Propellor.Types.Chroot: instance GHC.Show.Show Propellor.Types.Chroot.ChrootInfo
+ Propellor.Types.Chroot: instance Propellor.Types.Empty.Empty Propellor.Types.Chroot.ChrootCfg
+ Propellor.Types.Chroot: instance Propellor.Types.Empty.Empty Propellor.Types.Chroot.ChrootInfo
+ Propellor.Types.Chroot: instance Propellor.Types.Info.IsInfo Propellor.Types.Chroot.ChrootInfo
+ Propellor.Types.CmdLine: instance GHC.Classes.Eq Propellor.Types.CmdLine.CmdLine
+ Propellor.Types.CmdLine: instance GHC.Read.Read Propellor.Types.CmdLine.CmdLine
+ Propellor.Types.CmdLine: instance GHC.Show.Show Propellor.Types.CmdLine.CmdLine
+ Propellor.Types.Container: [containerSide] :: Bound v -> v
+ Propellor.Types.Container: [hostSide] :: Bound v -> v
+ Propellor.Types.Dns: [confAllowTransfer] :: NamedConf -> [IPAddr]
+ Propellor.Types.Dns: [confDnsServerType] :: NamedConf -> DnsServerType
+ Propellor.Types.Dns: [confDomain] :: NamedConf -> Domain
+ Propellor.Types.Dns: [confFile] :: NamedConf -> FilePath
+ Propellor.Types.Dns: [confLines] :: NamedConf -> [String]
+ Propellor.Types.Dns: [confMasters] :: NamedConf -> [IPAddr]
+ Propellor.Types.Dns: [fromDnsInfo] :: DnsInfo -> Set Record
+ Propellor.Types.Dns: [sDomain] :: SOA -> BindDomain
+ Propellor.Types.Dns: [sExpire] :: SOA -> Integer
+ Propellor.Types.Dns: [sNegativeCacheTTL] :: SOA -> Integer
+ Propellor.Types.Dns: [sRefresh] :: SOA -> Integer
+ Propellor.Types.Dns: [sRetry] :: SOA -> Integer
+ Propellor.Types.Dns: [sSerial] :: SOA -> SerialNumber
+ Propellor.Types.Dns: [zDomain] :: Zone -> Domain
+ Propellor.Types.Dns: [zHosts] :: Zone -> [(BindDomain, Record)]
+ Propellor.Types.Dns: [zSOA] :: Zone -> SOA
+ Propellor.Types.Dns: instance GHC.Base.Monoid Propellor.Types.Dns.AliasesInfo
+ Propellor.Types.Dns: instance GHC.Base.Monoid Propellor.Types.Dns.DnsInfo
+ Propellor.Types.Dns: instance GHC.Base.Monoid Propellor.Types.Dns.NamedConfMap
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.AliasesInfo
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.BindDomain
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.DnsInfo
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.DnsServerType
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.IPAddr
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.NamedConf
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.NamedConfMap
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.Record
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.SOA
+ Propellor.Types.Dns: instance GHC.Classes.Eq Propellor.Types.Dns.Zone
+ Propellor.Types.Dns: instance GHC.Classes.Ord Propellor.Types.Dns.AliasesInfo
+ Propellor.Types.Dns: instance GHC.Classes.Ord Propellor.Types.Dns.BindDomain
+ Propellor.Types.Dns: instance GHC.Classes.Ord Propellor.Types.Dns.DnsInfo
+ Propellor.Types.Dns: instance GHC.Classes.Ord Propellor.Types.Dns.DnsServerType
+ Propellor.Types.Dns: instance GHC.Classes.Ord Propellor.Types.Dns.IPAddr
+ Propellor.Types.Dns: instance GHC.Classes.Ord Propellor.Types.Dns.NamedConf
+ Propellor.Types.Dns: instance GHC.Classes.Ord Propellor.Types.Dns.NamedConfMap
+ Propellor.Types.Dns: instance GHC.Classes.Ord Propellor.Types.Dns.Record
+ Propellor.Types.Dns: instance GHC.Read.Read Propellor.Types.Dns.BindDomain
+ Propellor.Types.Dns: instance GHC.Read.Read Propellor.Types.Dns.IPAddr
+ Propellor.Types.Dns: instance GHC.Read.Read Propellor.Types.Dns.Record
+ Propellor.Types.Dns: instance GHC.Read.Read Propellor.Types.Dns.SOA
+ Propellor.Types.Dns: instance GHC.Read.Read Propellor.Types.Dns.Zone
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.AliasesInfo
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.BindDomain
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.DnsInfo
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.DnsServerType
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.IPAddr
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.NamedConf
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.NamedConfMap
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.Record
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.SOA
+ Propellor.Types.Dns: instance GHC.Show.Show Propellor.Types.Dns.Zone
+ Propellor.Types.Dns: instance Propellor.Types.Empty.Empty Propellor.Types.Dns.NamedConfMap
+ Propellor.Types.Dns: instance Propellor.Types.Info.IsInfo Propellor.Types.Dns.AliasesInfo
+ Propellor.Types.Dns: instance Propellor.Types.Info.IsInfo Propellor.Types.Dns.DnsInfo
+ Propellor.Types.Dns: instance Propellor.Types.Info.IsInfo Propellor.Types.Dns.NamedConfMap
+ Propellor.Types.Docker: [_dockerContainers] :: DockerInfo -> Map String Host
+ Propellor.Types.Docker: [_dockerRunParams] :: DockerInfo -> [DockerRunParam]
+ Propellor.Types.Docker: instance GHC.Base.Monoid Propellor.Types.Docker.DockerInfo
+ Propellor.Types.Docker: instance GHC.Show.Show Propellor.Types.Docker.DockerInfo
+ Propellor.Types.Docker: instance GHC.Show.Show Propellor.Types.Docker.DockerRunParam
+ Propellor.Types.Docker: instance Propellor.Types.Empty.Empty Propellor.Types.Docker.DockerInfo
+ Propellor.Types.Docker: instance Propellor.Types.Info.IsInfo Propellor.Types.Docker.DockerInfo
+ Propellor.Types.Empty: instance Propellor.Types.Empty.Empty (Data.Map.Base.Map k v)
+ Propellor.Types.Empty: instance Propellor.Types.Empty.Empty (Data.Set.Base.Set v)
+ Propellor.Types.Empty: instance Propellor.Types.Empty.Empty [a]
+ Propellor.Types.Info: instance Data.Typeable.Internal.Typeable v => Propellor.Types.Info.IsInfo (Propellor.Types.Info.InfoVal v)
+ Propellor.Types.Info: instance GHC.Base.Monoid (Propellor.Types.Info.InfoVal v)
+ Propellor.Types.Info: instance GHC.Base.Monoid Propellor.Types.Info.Info
+ Propellor.Types.Info: instance GHC.Show.Show Propellor.Types.Info.Info
+ Propellor.Types.Info: mapInfo :: IsInfo v => (v -> v) -> Info -> Info
+ Propellor.Types.OS: instance GHC.Classes.Eq Propellor.Types.OS.DebianSuite
+ Propellor.Types.OS: instance GHC.Classes.Eq Propellor.Types.OS.Distribution
+ Propellor.Types.OS: instance GHC.Classes.Eq Propellor.Types.OS.Port
+ Propellor.Types.OS: instance GHC.Classes.Eq Propellor.Types.OS.System
+ Propellor.Types.OS: instance GHC.Show.Show Propellor.Types.OS.DebianSuite
+ Propellor.Types.OS: instance GHC.Show.Show Propellor.Types.OS.Distribution
+ Propellor.Types.OS: instance GHC.Show.Show Propellor.Types.OS.Port
+ Propellor.Types.OS: instance GHC.Show.Show Propellor.Types.OS.System
+ Propellor.Types.PrivData: [mkHostContext] :: HostContext -> HostName -> Context
+ Propellor.Types.PrivData: instance GHC.Classes.Eq Propellor.Types.PrivData.Context
+ Propellor.Types.PrivData: instance GHC.Classes.Eq Propellor.Types.PrivData.DnsSecKey
+ Propellor.Types.PrivData: instance GHC.Classes.Eq Propellor.Types.PrivData.HostContext
+ Propellor.Types.PrivData: instance GHC.Classes.Eq Propellor.Types.PrivData.PrivDataField
+ Propellor.Types.PrivData: instance GHC.Classes.Eq Propellor.Types.PrivData.SshKeyType
+ Propellor.Types.PrivData: instance GHC.Classes.Ord Propellor.Types.PrivData.Context
+ Propellor.Types.PrivData: instance GHC.Classes.Ord Propellor.Types.PrivData.DnsSecKey
+ Propellor.Types.PrivData: instance GHC.Classes.Ord Propellor.Types.PrivData.HostContext
+ Propellor.Types.PrivData: instance GHC.Classes.Ord Propellor.Types.PrivData.PrivDataField
+ Propellor.Types.PrivData: instance GHC.Classes.Ord Propellor.Types.PrivData.SshKeyType
+ Propellor.Types.PrivData: instance GHC.Enum.Bounded Propellor.Types.PrivData.DnsSecKey
+ Propellor.Types.PrivData: instance GHC.Enum.Bounded Propellor.Types.PrivData.SshKeyType
+ Propellor.Types.PrivData: instance GHC.Enum.Enum Propellor.Types.PrivData.DnsSecKey
+ Propellor.Types.PrivData: instance GHC.Enum.Enum Propellor.Types.PrivData.SshKeyType
+ Propellor.Types.PrivData: instance GHC.Read.Read Propellor.Types.PrivData.Context
+ Propellor.Types.PrivData: instance GHC.Read.Read Propellor.Types.PrivData.DnsSecKey
+ Propellor.Types.PrivData: instance GHC.Read.Read Propellor.Types.PrivData.PrivDataField
+ Propellor.Types.PrivData: instance GHC.Read.Read Propellor.Types.PrivData.SshKeyType
+ Propellor.Types.PrivData: instance GHC.Show.Show Propellor.Types.PrivData.Context
+ Propellor.Types.PrivData: instance GHC.Show.Show Propellor.Types.PrivData.DnsSecKey
+ Propellor.Types.PrivData: instance GHC.Show.Show Propellor.Types.PrivData.HostContext
+ Propellor.Types.PrivData: instance GHC.Show.Show Propellor.Types.PrivData.PrivDataField
+ Propellor.Types.PrivData: instance GHC.Show.Show Propellor.Types.PrivData.SshKeyType
+ Propellor.Types.PrivData: instance Propellor.Types.PrivData.IsContext Propellor.Types.PrivData.Context
+ Propellor.Types.PrivData: instance Propellor.Types.PrivData.IsContext Propellor.Types.PrivData.HostContext
+ Propellor.Types.PrivData: instance Propellor.Types.PrivData.IsPrivDataSource Propellor.Types.PrivData.PrivDataField
+ Propellor.Types.PrivData: instance Propellor.Types.PrivData.IsPrivDataSource Propellor.Types.PrivData.PrivDataSource
+ Propellor.Types.Result: instance GHC.Base.Monoid Propellor.Types.Result.Result
+ Propellor.Types.Result: instance GHC.Classes.Eq Propellor.Types.Result.Result
+ Propellor.Types.Result: instance GHC.Read.Read Propellor.Types.Result.Result
+ Propellor.Types.Result: instance GHC.Show.Show Propellor.Types.Result.Result
+ Propellor.Types.Result: instance Propellor.Types.Result.ActionResult GHC.Types.Bool
+ Propellor.Types.Result: instance Propellor.Types.Result.ActionResult Propellor.Types.Result.Result
+ Propellor.Types.Result: instance Propellor.Types.Result.ToResult GHC.Types.Bool
- Propellor.Info: askInfo :: IsInfo v => Propellor v
+ Propellor.Info: askInfo :: (IsInfo v) => Propellor v
- Propellor.Info: pureInfoProperty :: IsInfo v => Desc -> v -> Property HasInfo
+ Propellor.Info: pureInfoProperty :: (IsInfo v) => Desc -> v -> Property HasInfo
- Propellor.PropAccum: propigateContainer :: PropAccum container => container -> Property HasInfo -> Property HasInfo
+ Propellor.PropAccum: propigateContainer :: (PropAccum container) => String -> container -> Property HasInfo -> Property HasInfo
- Propellor.Property: fallback :: Combines (Property p1) (Property p2) => Property p1 -> Property p2 -> Property (CInfo p1 p2)
+ Propellor.Property: fallback :: (Combines (Property p1) (Property p2)) => Property p1 -> Property p2 -> Property (CInfo p1 p2)
- Propellor.Property: onChange :: Combines (Property x) (Property y) => Property x -> Property y -> CombinedType (Property x) (Property y)
+ Propellor.Property: onChange :: (Combines (Property x) (Property y)) => Property x -> Property y -> CombinedType (Property x) (Property y)
- Propellor.Property: onChangeFlagOnFail :: Combines (Property x) (Property y) => FilePath -> Property x -> Property y -> CombinedType (Property x) (Property y)
+ Propellor.Property: onChangeFlagOnFail :: (Combines (Property x) (Property y)) => FilePath -> Property x -> Property y -> CombinedType (Property x) (Property y)
- Propellor.Property.Apt: robustly :: Combines (Property i) (Property NoInfo) => Property i -> Property i
+ Propellor.Property.Apt: robustly :: (Combines (Property i) (Property NoInfo)) => Property i -> Property i
- Propellor.Property.Chroot: propigateChrootInfo :: IsProp (Property i) => Chroot -> Property i -> Property HasInfo
+ Propellor.Property.Chroot: propigateChrootInfo :: (IsProp (Property i)) => Chroot -> Property i -> Property HasInfo
- Propellor.Property.Debootstrap: built' :: Combines (Property NoInfo) (Property i) => Property i -> FilePath -> System -> DebootstrapConfig -> Property (CInfo NoInfo i)
+ Propellor.Property.Debootstrap: built' :: (Combines (Property NoInfo) (Property i)) => Property i -> FilePath -> System -> DebootstrapConfig -> Property (CInfo NoInfo i)
- Propellor.Property.Mount: type FsType = String
+ Propellor.Property.Mount: type FsType = String type of filesystem to mount ("auto" to autodetect)
- Propellor.Property.Scheduled: period :: IsProp (Property i) => Property i -> Recurrance -> Property i
+ Propellor.Property.Scheduled: period :: (IsProp (Property i)) => Property i -> Recurrance -> Property i
- Propellor.Types: combineWith :: Combines (Property x) (Property y) => (Propellor Result -> Propellor Result -> Propellor Result) -> Property x -> Property y -> CombinedType (Property x) (Property y)
+ Propellor.Types: combineWith :: (Combines (Property x) (Property y)) => (Propellor Result -> Propellor Result -> Propellor Result) -> Property x -> Property y -> CombinedType (Property x) (Property y)

Files

CHANGELOG view
@@ -1,3 +1,19 @@+propellor (2.8.1) unstable; urgency=medium++  * Guard against power loss etc when building propellor, by updating+    the executable atomically.+  * Added Logcheck module, contributed by Jelmer Vernooij.+  * Added Kerberos module, contributed by Jelmer Vernooij.+  * Privdata that uses HostContext inside a container will now have the+    name of the container as its context, rather than the name of+    the host(s) where the container is used. This allows eg, having different+    passwords for a user in different containers. Note that previously,+    propellor would prompt using the container name as the context, but+    not actually use privdata using that context; so this is a bug fix.+  * Fix --add-key to not fail committing when no privdata file exists yet.++ -- Joey Hess <id@joeyh.name>  Sun, 04 Oct 2015 13:54:59 -0400+ propellor (2.8.0) unstable; urgency=medium    * Added Propellor.Property.Rsync.
config-joey.hs view
@@ -455,7 +455,7 @@ 	& Docker.publish "2202:22" 	& Docker.publish "8001:80" 	& Apt.installed ["ssh"]-	& User.hasSomePassword (User "root")+	& User.hasPassword (User "root") 	& Ssh.permitRootLogin (Ssh.RootLogin True)  kiteShellBox :: Systemd.Container
debian/changelog view
@@ -1,3 +1,19 @@+propellor (2.8.1) unstable; urgency=medium++  * Guard against power loss etc when building propellor, by updating+    the executable atomically.+  * Added Logcheck module, contributed by Jelmer Vernooij.+  * Added Kerberos module, contributed by Jelmer Vernooij.+  * Privdata that uses HostContext inside a container will now have the+    name of the container as its context, rather than the name of+    the host(s) where the container is used. This allows eg, having different+    passwords for a user in different containers. Note that previously,+    propellor would prompt using the container name as the context, but+    not actually use privdata using that context; so this is a bug fix.+  * Fix --add-key to not fail committing when no privdata file exists yet.++ -- Joey Hess <id@joeyh.name>  Sun, 04 Oct 2015 13:54:59 -0400+ propellor (2.8.0) unstable; urgency=medium    * Added Propellor.Property.Rsync.
propellor.cabal view
@@ -1,5 +1,5 @@ Name: propellor-Version: 2.8.0+Version: 2.8.1 Cabal-Version: >= 1.8 License: BSD3 Maintainer: Joey Hess <id@joeyh.name>@@ -91,6 +91,7 @@     Propellor.Property.Group     Propellor.Property.Grub     Propellor.Property.Journald+    Propellor.Property.Kerberos     Propellor.Property.Mount     Propellor.Property.Network     Propellor.Property.Nginx@@ -105,6 +106,7 @@     Propellor.Property.Rsync     Propellor.Property.List     Propellor.Property.LightDM+    Propellor.Property.Logcheck     Propellor.Property.Scheduled     Propellor.Property.Service     Propellor.Property.Ssh
src/Propellor/Bootstrap.hs view
@@ -104,9 +104,24 @@ 		void $ cabal ["configure"] 		unlessM (cabal ["build"]) $ 			error "cabal build failed"-	nukeFile "propellor"-	createSymbolicLink "dist/build/propellor-config/propellor-config" "propellor"+	-- For safety against eg power loss in the middle of the build,+	-- make a copy of the binary, and move it into place atomically.+	-- This ensures that the propellor symlink only ever points at+	-- a binary that is fully built. Also, avoid ever removing+	-- or breaking the symlink.+	--+	-- Need cp -a to make build timestamp checking work.+	unlessM (boolSystem "cp" [Param "-af", Param cabalbuiltbin, Param (tmpfor safetycopy)]) $+		error "cp of binary failed"+	rename (tmpfor safetycopy) safetycopy+	createSymbolicLink safetycopy (tmpfor dest)+	rename (tmpfor dest) dest 	return True+  where+	dest = "propellor"+	cabalbuiltbin = "dist/build/propellor-config/propellor-config"+	safetycopy = cabalbuiltbin ++ ".built"+	tmpfor f = f ++ ".propellortmp"  make :: FilePath -> [FilePath] -> IO Bool -> IO () make dest srcs builder = do
src/Propellor/Gpg.hs view
@@ -6,6 +6,7 @@ import System.Directory import Data.Maybe import Data.List.Utils+import Control.Monad  import Propellor.PrivData.Paths import Propellor.Message@@ -106,12 +107,14 @@ 	]  gitCommitKeyRing :: String -> IO Bool-gitCommitKeyRing action = gitCommit-	[ File keyring-	, File privDataFile-	, Param "-m"-	, Param ("propellor " ++ action)-	]+gitCommitKeyRing action = do+	-- Commit explicitly the keyring and privdata files, as other+	-- changes may be staged by the user and shouldn't be committed.+	tocommit <- filterM doesFileExist [ privDataFile, keyring]+	gitCommit $ (map File tocommit) ++ +		[ Param "-m"+		, Param ("propellor " ++ action)+		]  -- Adds --gpg-sign if there's a keyring. gpgSignParams :: [CommandParam] -> IO [CommandParam]
src/Propellor/PrivData.hs view
@@ -17,6 +17,7 @@ 	decryptPrivData, 	PrivMap, 	PrivInfo,+	forceHostContext, ) where  import Control.Applicative@@ -236,3 +237,10 @@ -- hosts need it. instance IsInfo PrivInfo where 	propigateInfo _ = True++-- | Sets the context of any privdata that uses HostContext to the+-- provided name.+forceHostContext :: String -> PrivInfo -> PrivInfo+forceHostContext name i = PrivInfo $ S.map go (fromPrivInfo i)+  where+	go (f, d, HostContext ctx) = (f, d, HostContext (const $ ctx name)) 
src/Propellor/PropAccum.hs view
@@ -14,6 +14,7 @@ import Propellor.Types import Propellor.Property import Propellor.Types.Info+import Propellor.PrivData  -- | Starts accumulating the properties of a Host. --@@ -72,12 +73,16 @@ --  -- The Info of the propertyChildren is adjusted to only include  -- info that should be propigated out to the Property.+--+-- Any PrivInfo that uses HostContext is adjusted to use the name+-- of the container as its context. propigateContainer 	:: (PropAccum container)-	=> container+	=> String+	-> container 	-> Property HasInfo 	-> Property HasInfo-propigateContainer c prop = infoProperty+propigateContainer containername c prop = infoProperty 	(propertyDesc prop) 	(propertySatisfy prop) 	(propertyInfo prop)@@ -85,6 +90,7 @@   where 	hostprops = map go $ getProperties c 	go p = -		let i = propigatableInfo (propertyInfo p)+		let i = mapInfo (forceHostContext containername)+			(propigatableInfo (propertyInfo p)) 		    cs = map go (propertyChildren p) 		in infoProperty (propertyDesc p) (propertySatisfy p) i cs
src/Propellor/Property/Aiccu.hs view
@@ -1,3 +1,5 @@+-- | Maintainer: Jelmer Vernooij <jelmer@samba.org>+ module Propellor.Property.Aiccu ( 	installed, 	restarted,@@ -46,5 +48,5 @@ 		property "aiccu configured" . writeConfig 	writeConfig :: (((PrivDataField, PrivData) -> Propellor Result) -> Propellor Result) -> Propellor Result 	writeConfig getpassword = getpassword $ ensureProperty . go-	go (Password _, p) = confPath `File.hasContentProtected` config u t p+	go (Password u', p) = confPath `File.hasContentProtected` config u' t p 	go (f, _) = error $ "Unexpected type of privdata: " ++ show f
src/Propellor/Property/Chroot.hs view
@@ -83,7 +83,7 @@ 	teardown = toProp (revert built)  propigateChrootInfo :: (IsProp (Property i)) => Chroot -> Property i -> Property HasInfo-propigateChrootInfo c p = propigateContainer c p'+propigateChrootInfo c@(Chroot location _ _ _) p = propigateContainer location c p'   where 	p' = infoProperty 		(propertyDesc p)
src/Propellor/Property/DebianMirror.hs view
@@ -1,3 +1,5 @@+-- | Maintainer: Félix Sipma <felix+propellor@gueux.org>+ module Propellor.Property.DebianMirror 	( DebianPriority(..) 	, showPriority
src/Propellor/Property/Docker.hs view
@@ -19,7 +19,7 @@ 	Image(..), 	latestImage, 	ContainerName,-	Container,+	Container(..), 	HasImage(..), 	-- * Container configuration 	dns,@@ -171,7 +171,7 @@ 	image = getImageName ctr  propigateContainerInfo :: (IsProp (Property i)) => Container -> Property i -> Property HasInfo-propigateContainerInfo ctr@(Container _ h) p = propigateContainer ctr p'+propigateContainerInfo ctr@(Container _ h) p = propigateContainer cn ctr p'   where 	p' = infoProperty 		(propertyDesc p)@@ -179,7 +179,8 @@ 		(propertyInfo p <> dockerinfo) 		(propertyChildren p) 	dockerinfo = dockerInfo $-		mempty { _dockerContainers = M.singleton (hostName h) h }+		mempty { _dockerContainers = M.singleton cn h }+	cn = hostName h  mkContainerInfo :: ContainerId -> Container -> ContainerInfo mkContainerInfo cid@(ContainerId hn _cn) (Container img h) = 
src/Propellor/Property/Firewall.hs view
@@ -1,7 +1,7 @@--- |Properties for configuring firewall (iptables) rules------ Copyright 2014 Arnaud Bailly <arnaud.oqube@gmail.com>--- License: BSD-2-Clause+-- | Maintainer: Arnaud Bailly <arnaud.oqube@gmail.com>+-- +-- Properties for configuring firewall (iptables) rules+ module Propellor.Property.Firewall ( 	rule, 	installed,
+ src/Propellor/Property/Kerberos.hs view
@@ -0,0 +1,94 @@+-- | Maintainer: Jelmer Vernooij <jelmer@samba.org>++module Propellor.Property.Kerberos where++import Utility.Process++import Propellor+import qualified Propellor.Property.Apt as Apt+import qualified Propellor.Property.File as File+import Propellor.Property.User++type Realm = String+type Principal = String+type Kvno = Integer++-- Standard paths in MIT Kerberos++defaultKeyTab :: FilePath+defaultKeyTab = "/etc/krb5.keytab"++kadmAclPath :: FilePath+kadmAclPath = "/etc/krb5kdc/kadm5.acl"++kpropdAclPath :: FilePath+kpropdAclPath = "/etc/krb5kdc/kpropd.acl"++kdcConfPath :: FilePath+kdcConfPath = "/etc/krb5kdc/kdc.conf"++keyTabPath :: Maybe FilePath -> FilePath+keyTabPath = maybe defaultKeyTab id++-- | Create a principal from a primary, instance and realm+principal :: String -> Maybe String -> Maybe Realm -> Principal+principal p i r = p ++ maybe "" ("/"++) i ++ maybe "" ("@" ++) r++installed :: Property NoInfo+installed = Apt.installed ["krb5-user"]++kdcInstalled :: Property NoInfo+kdcInstalled = Apt.serviceInstalledRunning "krb5-kdc"++adminServerInstalled :: Property NoInfo+adminServerInstalled = Apt.serviceInstalledRunning "krb5-admin-server"++kpropServerInstalled :: Property HasInfo+kpropServerInstalled = propertyList "kprop server installed" $ props+	& kdcInstalled+	& Apt.installed ["openbsd-inetd"]+	& "/etc/inetd.conf" `File.containsLines`+	[ "krb5_prop\tstream\ttcp\tnowait\troot\t/usr/sbin/kpropd kpropd"+	, "krb5_prop\tstream\ttcp6\tnowait\troot\t/usr/sbin/kpropd kpropd"+	]++kpropAcls :: [String] -> Property NoInfo+kpropAcls ps = kpropdAclPath `File.hasContent` ps `describe` "kprop server ACLs"++k5srvutil :: (Maybe FilePath) -> [String] -> IO String+k5srvutil kt cmd = readProcess "k5srvutil" (maybe [] (\x -> ["-f", x]) kt ++ cmd)++-- Keytab management+keytabEntries :: Maybe FilePath -> IO [(Kvno, Principal)]+keytabEntries p = do+	c <- k5srvutil p ["list"]+	return $ map parseLine (drop 3 $ lines c)+  where+	parseLine l = (Prelude.read x, y) where (x, y) = splitAt 5 l++checkKeyTabEntry' :: Maybe FilePath -> (Kvno, Principal) -> IO Bool+checkKeyTabEntry' path entry = do+	entries <- keytabEntries path+	return $ entry `elem` entries++checkKeyTabEntry :: Maybe FilePath -> Principal -> IO Bool+checkKeyTabEntry path princ = do+	entries <- keytabEntries path+	return $ princ `elem` (map snd entries)++-- k5login files+k5loginPath :: User -> IO FilePath+k5loginPath user = do+	h <- homedir user+	return $ h </> ".k5login"++k5login :: User -> [Principal] -> Property NoInfo+k5login user@(User u) ps = property (u ++ " has k5login") $ do+	f <- liftIO $ k5loginPath user+	liftIO $ do+		createDirectoryIfMissing True (takeDirectory f)+		writeFile f (unlines ps)+	ensureProperties+		[ File.ownerGroup f user (userGroup user)+		, File.ownerGroup (takeDirectory f) user (userGroup user)+		]
src/Propellor/Property/LightDM.hs view
@@ -1,5 +1,7 @@ {-# LANGUAGE FlexibleInstances #-} +-- | Maintainer: Sean Whitton <spwhitton@spwhitton.name>+ module Propellor.Property.LightDM where  import Propellor
+ src/Propellor/Property/Logcheck.hs view
@@ -0,0 +1,36 @@+-- | Maintainer: Jelmer Vernooij <jelmer@jelmer.uk>++module Propellor.Property.Logcheck (+	ReportLevel (Workstation, Server, Paranoid),+	Service,+	defaultPrefix,+	ignoreFilePath,+	ignoreLines,+	installed,+) where++import Propellor+import qualified Propellor.Property.Apt as Apt+import qualified Propellor.Property.File as File++data ReportLevel = Workstation | Server | Paranoid+type Service = String++instance Show ReportLevel where+	show Workstation = "workstation"+	show Server = "server"+	show Paranoid = "paranoid"++-- The common prefix used by default in syslog lines.+defaultPrefix :: String+defaultPrefix = "^\\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ "++ignoreFilePath :: ReportLevel -> Service -> FilePath+ignoreFilePath t n = "/etc/logcheck/ignore.d." ++ (show t) </> n++ignoreLines :: ReportLevel -> Service -> [String] -> Property NoInfo+ignoreLines t n ls = (ignoreFilePath t n) `File.containsLines` ls+	`describe` ("logcheck ignore lines for " ++ n ++ "(" ++ (show t) ++ ")")++installed :: Property NoInfo+installed = Apt.installed ["logcheck"]
src/Propellor/Property/Nginx.hs view
@@ -1,3 +1,5 @@+-- | Maintainer: Félix Sipma <felix+propellor@gueux.org>+ module Propellor.Property.Nginx where  import Propellor
src/Propellor/Property/Prosody.hs view
@@ -1,3 +1,5 @@+-- | Maintainer: Félix Sipma <felix+propellor@gueux.org>+ module Propellor.Property.Prosody where  import Propellor
src/Propellor/Property/SiteSpecific/IABak.hs view
@@ -37,6 +37,10 @@ 	& Cron.niceJob "shardmaint" Cron.Daily (User "root") "/" 		"/usr/local/IA.BAK/shardmaint-fast; /usr/local/IA.BAK/shardmaint" 	& Apt.installed ["git-annex"]+	& Apt.installed ["libmail-sendmail-perl"]+	& Cron.niceJob "expireemailer" Cron.Daily (User "root") +		"/usr/local/IA.BAK"+		"./expireemailer"  registrationServer :: [Host] -> Property HasInfo registrationServer knownhosts = propertyList "iabak registration server" $ props
src/Propellor/Property/Unbound.hs view
@@ -1,9 +1,19 @@--- | Properties for the Unbound caching DNS server+-- | Maintainer: Félix Sipma <felix+propellor@gueux.org>+--+-- Properties for the Unbound caching DNS server  module Propellor.Property.Unbound 	( installed 	, restarted 	, reloaded+	, UnboundSection+	, UnboundZone+	, UnboundHost+	, UnboundSetting+	, UnboundValue+	, UnboundKey+	, ConfSection+	, ZoneType 	, cachingDnsServer 	) where 
src/Propellor/Types/Info.hs view
@@ -5,6 +5,7 @@ 	IsInfo(..), 	addInfo, 	getInfo,+	mapInfo, 	propigatableInfo, 	InfoVal(..), 	fromInfoVal,@@ -16,8 +17,6 @@ import Data.Maybe  -- | Information about a Host, which can be provided by its properties.------ Any value in the `IsInfo` type class can be added to an Info. data Info = Info [(Dynamic, Bool)]  instance Show Info where@@ -37,11 +36,21 @@ 	-- container to its Host? 	propigateInfo :: v -> Bool +-- | Any value in the `IsInfo` type class can be added to an Info. addInfo :: IsInfo v => Info -> v -> Info addInfo (Info l) v = Info ((toDyn v, propigateInfo v):l)  getInfo :: IsInfo v => Info -> v getInfo (Info l) = mconcat (mapMaybe (fromDynamic . fst) (reverse l))++-- | Maps a function over all values stored in the Info that are of the+-- appropriate type.+mapInfo :: IsInfo v => (v -> v) -> Info -> Info+mapInfo f (Info l) = Info (map go l)+  where+	go (i, p) = case fromDynamic i of+		Nothing -> (i, p)+		Just v -> (toDyn (f v), p)  -- | Filters out parts of the Info that should not propigate out of a -- container.
src/Propellor/Types/PrivData.hs view
@@ -61,7 +61,7 @@ newtype Context = Context String 	deriving (Read, Show, Ord, Eq) --- | A context that varies depending on the HostName where it's used.+-- | A context that may vary depending on the HostName where it's used. newtype HostContext = HostContext { mkHostContext :: HostName -> Context }  instance Show HostContext where