Commit Graph

571 Commits

Author SHA1 Message Date
Joey Hess 141a7c028b use type level functions to fix type inference for `require` 2015-01-24 19:40:43 -04:00
Joey Hess 45c94ffdd7 moving to using the GADT
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-24 16:54:49 -04:00
Joey Hess 414ee7eee6 added GADT to determine between a property with info and without
Not yet used
2015-01-24 16:53:59 -04:00
Joey Hess 38eec6fc37 OS.preserveNetwork finally written 2015-01-23 01:30:50 -04:00
Joey Hess d156a1e9ba Added more network interface configuration properties. 2015-01-23 01:18:47 -04:00
Joey Hess bbac845900
propellor spin 2015-01-22 16:10:22 -04:00
Joey Hess 4d34b837d2 reorg 2015-01-21 23:28:47 -04:00
Joey Hess a37e0a6bc3
propellor spin 2015-01-21 23:22:42 -04:00
Joey Hess fa66cb49d6 Added journald configuration properties. 2015-01-21 23:21:24 -04:00
Joey Hess 88082c7293 Added systemd configuration properties. 2015-01-21 22:49:03 -04:00
Joey Hess 0a2a553d31 add back a warning aboit info propigation to ensureProperty 2015-01-19 16:14:01 -04:00
Joey Hess c8153ff0bd fix haddock 2015-01-19 15:55:02 -04:00
Joey Hess e28b1ab92b clean up exports 2015-01-19 15:20:12 -04:00
Joey Hess a738a20d79 export 2015-01-19 15:15:22 -04:00
Joey Hess e583c40c65 more reorg 2015-01-19 15:11:10 -04:00
Joey Hess 603e6d3406 split out types to improve haddock for Propellor.Types 2015-01-19 15:09:03 -04:00
Joey Hess 04d4d0d6c4 Fix info propigation from fallback combinator's second Property. 2015-01-19 14:43:25 -04:00
Joey Hess a2a97cbeb2 avoid haddock warnings 2015-01-19 14:26:18 -04:00
Joey Hess 1ae21965aa rename HostLike to PropAccum
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-19 14:15:49 -04:00
Joey Hess afee550e70 Property tree
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-18 18:46:38 -04:00
Joey Hess c7609c824b Add descriptions of how to set missing fields to --list-fields output. (Minor API changes) 2015-01-15 20:15:01 -04:00
Joey Hess 042b3bee01
propellor spin 2015-01-09 21:21:06 -04:00
Joey Hess 2e2f8b4fdd
propellor spin 2015-01-08 23:08:16 -04:00
Joey Hess 4d0a732a30 make both lines pastable together 2015-01-08 23:03:57 -04:00
Joey Hess 5585778e54
propellor spin 2015-01-08 23:02:06 -04:00
Joey Hess 0c66be1aae
propellor spin 2015-01-08 22:51:09 -04:00
Joey Hess 8e6e40abc4
propellor spin 2015-01-08 22:44:36 -04:00
Joey Hess ad8e318c34
propellor spin 2015-01-08 22:01:12 -04:00
Joey Hess 660b5d7f93
propellor spin 2015-01-08 21:41:55 -04:00
Joey Hess dd022c917b
propellor spin 2015-01-08 21:17:06 -04:00
Joey Hess 16a5f561f5 Merge Utiity modules from git-annex.
Except for a few that are using the other exception handling library,
that propellor has not switched to yet.
2015-01-06 19:07:40 -04:00
Joey Hess f4a57ca27d refactor dns settings! 2015-01-06 01:20:56 -04:00
Joey Hess ff7f70d280 add update-server-info, so the repo has all current branches published over http 2015-01-06 01:00:48 -04:00
Joey Hess bd7c118cae
propellor spin 2015-01-05 19:42:59 -04:00
Joey Hess 6250b05767 improve protocol debugging 2015-01-05 19:41:29 -04:00
Joey Hess de5fad970e
propellor spin 2015-01-05 19:37:51 -04:00
Joey Hess 4c2c2785c8 SSHFP records are also generated for CNAMES of hosts. 2015-01-04 21:31:44 -04:00
Joey Hess 66e42a2a5b prep 2015-01-04 19:51:42 -04:00
Joey Hess 09e9b793dd
propellor spin 2015-01-04 19:43:06 -04:00
Joey Hess 570bcde9ed
propellor spin 2015-01-04 19:32:15 -04:00
Joey Hess 8e442f0656 DNS records for hosts with known ssh public keys now automatically include SSHFP records. 2015-01-04 19:24:18 -04:00
Joey Hess ef2f3d33de Fix bug that prevented deploying ssh host keys when the file for the key didn't already exist.
This is not a new bug.
2015-01-04 18:20:02 -04:00
Joey Hess 93e89c7200 cleanup 2015-01-04 18:12:19 -04:00
Joey Hess ab8ff9a00e randomHostKeys is removed from CloudAtCost.deCruft. 2015-01-04 17:15:59 -04:00
Joey Hess fd1e01c853 avoid ever removing all host keys 2015-01-04 17:14:07 -04:00
Joey Hess f0b6ce9702
propellor spin 2015-01-04 17:04:26 -04:00
Joey Hess 08b45ad6f6
propellor spin 2015-01-04 17:00:08 -04:00
Joey Hess 0af7629c98
propellor spin 2015-01-04 16:54:43 -04:00
Joey Hess a2bb647827 Ssh.hostKey and Ssh.hostKeys no longer install public keys from the privdata.
Instead, the public keys of a host should be set using Ssh.pubKey.
2015-01-04 16:10:36 -04:00
Joey Hess 84685f24c9 Ssh.hostKeys now also installs any available SshEd25519 keys. 2015-01-04 15:59:54 -04:00