summaryrefslogtreecommitdiff
path: root/src/Propellor
AgeCommit message (Collapse)Author
2015-01-24moving to using the GADTJoey Hess
The problem this exposes has to do with requires. As implemented, requires yields either a Property HasInfo or a Property NoInfo depending on its inputs. That works. But look what happens when it's used: *Propellor.Types> let foo = IProperty "foo" (return NoChange) mempty mempty *Propellor.Types> let bar = IProperty "bar" (return NoChange) mempty mempty *Propellor.Types> foo `requires` bar <interactive>:17:5: No instance for (Requires (Property HasInfo) (Property HasInfo) r0) arising from a use of `requires' The type variable `r0' is ambiguous Possible fix: add a type signature that fixes these type variable(s) Note: there is a potential instance available: instance Requires (Property HasInfo) (Property HasInfo) (Property HasInfo) -- Defined at Propellor/Types.hs:167:10 Possible fix: add an instance declaration for (Requires (Property HasInfo) (Property HasInfo) r0) In the expression: foo `requires` bar In an equation for `it': it = foo `requires` bar This can be avoided by specifying the result type: *Propellor.Types> (foo `requires` bar) :: Property HasInfo property "foo" But then when multiple `requires` are given, the result type has to be given each time: *Propellor.Types> (foo `requires` bar `requires` bar) :: Property HasInfo <interactive>:22:6: No instance for (Requires (Property HasInfo) (Property HasInfo) x0) arising from a use of `requires' The type variable `x0' is ambiguous Possible fix: add a type signature that fixes these type variable(s) Note: there is a potential instance available: instance Requires (Property HasInfo) (Property HasInfo) (Property HasInfo) -- Defined at Propellor/Types.hs:167:10 Possible fix: add an instance declaration for (Requires (Property HasInfo) (Property HasInfo) x0) In the first argument of `requires', namely `foo `requires` bar' In the expression: (foo `requires` bar `requires` bar) :: Property HasInfo In an equation for `it': it = (foo `requires` bar `requires` bar) :: Property HasInfo <interactive>:22:21: No instance for (Requires x0 (Property HasInfo) (Property HasInfo)) arising from a use of `requires' The type variable `x0' is ambiguous Possible fix: add a type signature that fixes these type variable(s) Note: there are several potential instances: instance Requires (Property NoInfo) (Property HasInfo) (Property HasInfo) -- Defined at Propellor/Types.hs:175:10 instance Requires (Property HasInfo) (Property HasInfo) (Property HasInfo) -- Defined at Propellor/Types.hs:167:10 Possible fix: add an instance declaration for (Requires x0 (Property HasInfo) (Property HasInfo)) In the expression: (foo `requires` bar `requires` bar) :: Property HasInfo In an equation for `it': it = (foo `requires` bar `requires` bar) :: Property HasInfo *Propellor.Types> (((foo `requires` bar) :: Property HasInfo) `requires` bar) :: Property HasInfo property "foo" Yuggh!
2015-01-24added GADT to determine between a property with info and withoutJoey Hess
Not yet used
2015-01-23OS.preserveNetwork finally writtenJoey Hess
2015-01-23Added more network interface configuration properties.Joey Hess
2015-01-22propellor spinJoey Hess
2015-01-21reorgJoey Hess
2015-01-21propellor spinJoey Hess
2015-01-21Added journald configuration properties.Joey Hess
2015-01-21Added systemd configuration properties.Joey Hess
2015-01-19add back a warning aboit info propigation to ensurePropertyJoey Hess
2015-01-19fix haddockJoey Hess
2015-01-19clean up exportsJoey Hess
2015-01-19exportJoey Hess
2015-01-19more reorgJoey Hess
2015-01-19split out types to improve haddock for Propellor.TypesJoey Hess
2015-01-19Fix info propigation from fallback combinator's second Property.Joey Hess
2015-01-19avoid haddock warningsJoey Hess
2015-01-19rename HostLike to PropAccumJoey Hess
This is more general; it doesn't need to contain a Host. It would, for example, be possible to make Property itself be an instance of PropAccum.
2015-01-18Property treeJoey Hess
Properties now form a tree, instead of the flat list used before. This simplifies propigation of Info from the Properties used inside a container to the outer host; the Property that docks the container on the host can just have as child properties all the inner Properties, and their Info can then be gathered recursively. (Although in practice it still needs to be filtered, since not all Info should propigate out of a container.) Note that there is no change to how Properties are actually satisfied. Just because a Property lists some child properties, this does not mean they always have their propertySatisfy actions run. It's still up to the parent property to run those actions. That's necessary so that a container's properties can be satisfied inside it, not outside. It also allows property combinators to add the combined Properties to their childProperties list, even if, like onChange, they don't always run the child properties at all. Testing: I tested that the exact same Info is calculated before and after this change, for every Host in my config file.
2015-01-15Add descriptions of how to set missing fields to --list-fields output. ↵Joey Hess
(Minor API changes)
2015-01-09propellor spinJoey Hess
2015-01-08propellor spinJoey Hess
2015-01-08make both lines pastable togetherJoey Hess
2015-01-08propellor spinJoey Hess
2015-01-08propellor spinJoey Hess
2015-01-08propellor spinJoey Hess
2015-01-08propellor spinJoey Hess
2015-01-08propellor spinJoey Hess
2015-01-08propellor spinJoey Hess
2015-01-06Merge Utiity modules from git-annex.Joey Hess
Except for a few that are using the other exception handling library, that propellor has not switched to yet.
2015-01-06refactor dns settings!Joey Hess
2015-01-06add update-server-info, so the repo has all current branches published over httpJoey Hess
2015-01-05propellor spinJoey Hess
2015-01-05improve protocol debuggingJoey Hess
2015-01-05propellor spinJoey Hess
2015-01-04SSHFP records are also generated for CNAMES of hosts.Joey Hess
2015-01-04prepJoey Hess
2015-01-04propellor spinJoey Hess
2015-01-04propellor spinJoey Hess
2015-01-04DNS records for hosts with known ssh public keys now automatically include ↵Joey Hess
SSHFP records.
2015-01-04Fix bug that prevented deploying ssh host keys when the file for the key ↵Joey Hess
didn't already exist. This is not a new bug.
2015-01-04cleanupJoey Hess
2015-01-04randomHostKeys is removed from CloudAtCost.deCruft.Joey Hess
2015-01-04avoid ever removing all host keysJoey Hess
2015-01-04propellor spinJoey Hess
2015-01-04propellor spinJoey Hess
2015-01-04propellor spinJoey Hess
2015-01-04Ssh.hostKey and Ssh.hostKeys no longer install public keys from the privdata.Joey Hess
Instead, the public keys of a host should be set using Ssh.pubKey.
2015-01-04Ssh.hostKeys now also installs any available SshEd25519 keys.Joey Hess
2015-01-04sshPubKey is renamed to Ssh.pubKey, and has an added SshKeyType parameter.Joey Hess