Commit Graph

724 Commits

Author SHA1 Message Date
Joey Hess 824ebdd76f
propellor spin 2015-02-10 19:57:18 -04:00
Joey Hess 057509c5cd
propellor spin 2015-02-10 15:09:57 -04:00
Joey Hess d1ebc7c145
propellor spin 2015-02-10 10:02:37 -04:00
Joey Hess 991249185c
propellor spin 2015-02-09 18:51:07 -04:00
Joey Hess 162df37da4
propellor spin 2015-02-01 17:38:05 -04:00
Joey Hess 8edc7ed3ae
propellor spin 2015-02-01 17:34:04 -04:00
Joey Hess 30c8621f5c
propellor spin 2015-02-01 17:01:32 -04:00
Joey Hess 2e2e30fc39
propellor spin 2015-02-01 16:58:32 -04:00
Joey Hess b3bdb95ed0
propellor spin 2015-02-01 16:51:55 -04:00
Joey Hess 8ff2b77385
propellor spin 2015-02-01 16:40:03 -04:00
Joey Hess db7a9aa9f6
propellor spin 2015-02-01 16:19:37 -04:00
Joey Hess 0ea9794324
propellor spin 2015-02-01 15:08:30 -04:00
Joey Hess 3c7c40dd67
propellor spin 2015-02-01 14:50:54 -04:00
Joey Hess bcdc5754fc
propellor spin 2015-02-01 14:48:13 -04:00
Joey Hess f276466cf2
propellor spin 2015-02-01 13:36:58 -04:00
Joey Hess 1b7a00372b
propellor spin 2015-02-01 13:14:45 -04:00
Joey Hess 3585f14d4e
propellor spin 2015-01-29 01:37:53 -04:00
Joey Hess d7697a4b25
propellor spin 2015-01-29 01:04:59 -04:00
Joey Hess 7da64306a0 store PropList reversed to optimise &
PropList is now an opaque type, to prevent misuse.

Note that the PropAccum Host instance cannot use reversed order.
2015-01-25 15:40:38 -04:00
Joey Hess e9d5d9aff1 remove toSimpleProp
It didn't do what I thought it did with a RevertableProperty; it always
returned Nothing because even if the input properties to <!> are NoInfo, it
casts them to HasInfo.

Even if it had worked, it lost type safety. Better to export the
Property NoInfo that is used in a RevertableProperty, so it can be used
directly.
2015-01-25 14:47:57 -04:00
Joey Hess 334abae312 fix combines instance
The old one caused the actions to run in the right order, but with the
wrong description.

This problem was found by comparing the [Host] between this branch and
current joeyconfig, and printing out their properties, info, and also their
list of child properties.

The only other difference found is that onChange orders the child property
list differently. That does not have any real effect and would be difficult
to change, so I've left it as-is.
2015-01-25 13:28:04 -04:00
Joey Hess f4fc24aa5c avoid needing to define Show twice 2015-01-25 13:04:39 -04:00
Joey Hess f5da1c2b23 improve docs 2015-01-25 01:26:38 -04:00
Joey Hess a780cae441 fix typo 2015-01-24 23:43:24 -04:00
Joey Hess 0ee04ecc43 GADT properties seem to work (untested)
* Property has been converted to a GADT, and will be Property NoInfo
  or Property HasInfo.
  This was done to make sure that ensureProperty is only used on
  properties that do not have Info.
  Transition guide:
  - Change all "Property" to "Property NoInfo" or "Property WithInfo"
    (The compiler can tell you if you got it wrong!)
  - To construct a RevertableProperty, it is useful to use the new
    (<!>) operator
  - Constructing a list of properties can be problimatic, since
    Property NoInto and Property WithInfo are different types and cannot
    appear in the same list. To deal with this, "props" has been added,
    and can built up a list of properties of different types,
    using the same (&) and (!) operators that are used to build
    up a host's properties.
2015-01-24 22:38:51 -04:00
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 4da4c4a70f use git.joeyh.name in preference to git.kitenet.net 2015-01-19 14:29:09 -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 ee7135dbfd typo; columns vs rows
No behavior change
2015-01-15 19:58:03 -04:00
Joey Hess 95d1cc62ea avoid unncessary padding on last column in table 2015-01-15 19:56:18 -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
Joey Hess f1a1d0001a sshPubKey is renamed to Ssh.pubKey, and has an added SshKeyType parameter. 2015-01-04 15:57:27 -04:00
Joey Hess 52664e6220 sshPubKey is renamed to Ssh.pubKey 2015-01-04 15:36:53 -04:00
Joey Hess 0f41071cb5 transition docs 2015-01-04 15:22:22 -04:00
Joey Hess ad984e74e4
propellor spin 2015-01-04 15:00:40 -04:00
Joey Hess bb7b8e7891 add $INCLUDE of pubkeys before zone file is written, to avoid pogoing 2015-01-04 14:22:44 -04:00
Joey Hess 43e15c8add fix serial incrementing 2015-01-04 14:17:33 -04:00
Joey Hess f36443755e
propellor spin 2015-01-04 14:05:42 -04:00
Joey Hess 8c1006c654
propellor spin 2015-01-04 13:56:55 -04:00
Joey Hess ce7f14b9b3
propellor spin 2015-01-04 13:52:59 -04:00
Joey Hess baf1dcc822 accidentially merged 2015-01-04 13:47:03 -04:00
Joey Hess bf34d6f423 propellor spin 2015-01-04 13:42:01 -04:00
Joey Hess e67901a77b use separate directory for dnssec files 2015-01-04 13:22:23 -04:00
Joey Hess d6c8ddb955 resign zone if keys change 2015-01-04 13:13:06 -04:00
Joey Hess 01d8ab0cfd Fix build with process 1.2.1.0. 2015-01-04 13:08:19 -04:00
Joey Hess 8172f243d7 DNS WIP 2015-01-04 12:44:05 -04:00
Joey Hess a1f61e09b8 stub signedPrimary 2015-01-03 19:10:28 -04:00
Joey Hess 4dd6596919 add DnsSec module 2015-01-03 19:10:17 -04:00
Joey Hess 05004730c7 add DnsSec privdata types 2015-01-03 19:08:32 -04:00
Joey Hess 932cb7c5d6 add hasPrivContentFrom 2015-01-03 19:07:59 -04:00
Joey Hess 7cbd367e1c Update intermediary propellor in --spin --via 2015-01-01 17:13:03 -04:00
Joey Hess 31739ac1a6
propellor spin 2015-01-01 16:19:32 -04:00
Joey Hess f89aeaa0e8
propellor spin 2015-01-01 16:18:36 -04:00
Joey Hess d5cfadd899 Detect #774376 and refuse to use docker if the system is so broken that docker exec doesn't enter a chroot. 2015-01-01 15:41:31 -04:00
Joey Hess 858ded043b more cruft from new image 2015-01-01 15:15:44 -04:00
Joey Hess b50f33395e update docs 2015-01-01 13:57:13 -04:00
Joey Hess 6fb45673d0
propellor spin 2015-01-01 13:42:34 -04:00
Joey Hess f3f60a74c4
propellor spin 2015-01-01 13:36:51 -04:00
Joey Hess b059ae4c77
propellor spin 2015-01-01 13:34:02 -04:00
Joey Hess 72b7b06525
propellor spin 2015-01-01 13:31:30 -04:00
Joey Hess 0b4a95f6c2 --spin checks if the DNS matches any configured IP address property of the host, and if not, sshes to the host by IP address. 2015-01-01 13:28:17 -04:00
Joey Hess c7aac0b35e remove screen workaround
Turns out elephant's oldusenet shellbox docker instance somehow had a
non-setguid screen binary. Dunno how; reinstall fixed it.
2014-12-23 15:45:35 -04:00
Joey Hess 35ccb0fac6
fix screen dir mode 2014-12-23 15:29:23 -04:00
Joey Hess a48f5916e1
propellor spin 2014-12-23 14:22:50 -04:00
Joey Hess b8be8c244e
propellor spin 2014-12-22 17:16:52 -04:00
Joey Hess 26a4c164e4 gitriddance 2014-12-22 15:05:05 -04:00
Joey Hess dc36a98fc1 Revert ensureProperty warning message, too many false positives in places where Info is correctly propigated. Better approach needed. 2014-12-21 21:33:03 -04:00
Joey Hess d194765e10
propellor spin 2014-12-21 21:14:11 -04:00
Joey Hess 23399416f1 broke up big function to describe PrivDataField 2014-12-14 16:14:05 -04:00
Joey Hess 71723ca09f support for crypted passwords in privdata
* Added CryptPassword to PrivDataField, for password hashes as produced
  by crypt(3).
* User.hasPassword and User.hasSomePassword will now use either
  a CryptPassword or a Password from privdata, depending on which is set.
2014-12-14 15:24:10 -04:00
Joey Hess 2e2438ae66 improve haddock formating of filenames 2014-12-09 14:22:37 -04:00
Joey Hess b22201e36b Fix Apache.siteEnabled to update the config file and reload apache when configuration has changed. 2014-12-09 00:34:24 -04:00
Joey Hess f8943c2036 fix a case where fileProperty reported a change despite not making one
The problem occurred because two lists of lines of the file can be
different, while representing the same file content. For example:
["foo", "bar"]
["foo\nbar"]
2014-12-09 00:30:04 -04:00
Joey Hess 834a05e25a refactor 2014-12-08 01:22:29 -04:00
Joey Hess 06975ec5e1 another place to use toResult 2014-12-08 01:12:55 -04:00
Joey Hess 3c7219874b finished accidentially committed bit 2014-12-08 01:07:31 -04:00
Joey Hess 4e9b01a8a7 propellor spin
(cherry picked from commit 1d02d589c7)
2014-12-08 01:07:25 -04:00
Joey Hess 42a0c83248 Display a warning when ensureProperty is used on a property which has Info and is so prevented from propigating it.
Would much rather a type-based fixed, but this is all I have for now.
2014-12-07 17:09:55 -04:00
Joey Hess 5a932c382d docuemnt info propigtion problem 2014-12-07 16:37:02 -04:00
Joey Hess 2fe0b28982 more uses for hostContext 2014-12-07 15:21:55 -04:00
Joey Hess 089b7131a6 caution 2014-12-07 15:13:28 -04:00
Joey Hess 9ca332e481 Fixed privdata introspection for User.hasPassword and User.hasSomePassword
This is not a complete fix for the problem that Info doen't propigate
from the called property when code does something like:

	do
		hostname <- asks hostName
		ensureProperty $ foo hostname

Instead, I just eliminated the need to implement hasPassword that way,
by making the PrivData Info use a HostContext which automatically
gets the right hostname passed to it.

All other uses of withPrivData don't have the problem. It's still possible
for the user to run into the problem if they write something like the
above, where foo is a property that uses privdata. However, all properties
that take a Context now also accept a HostContext, so it's at least less
likely the user needs to write that.
2014-12-07 15:03:06 -04:00
Joey Hess 8c12047b6b simplify using makeChange 2014-12-07 14:49:12 -04:00
Joey Hess 6a906c8a4c typo 2014-12-07 12:50:40 -04:00
Joey Hess 52a83a8911 enable shadow passwords
I have seen weird almost boot failures when they're disabled, including a
segfault.
2014-12-06 15:39:02 -04:00
Joey Hess 7983046cd5 update 2014-12-06 15:28:30 -04:00
Joey Hess bdbf787e2c keep and use Reboot.now 2014-12-06 13:32:53 -04:00
Joey Hess 29442f222e Reboot.atEnd 2014-12-06 13:21:19 -04:00
Joey Hess 62697c7b7f reboot at end of propellor run when clean os has been installed 2014-12-06 06:41:21 -04:00
Joey Hess fcff7762e3 endAction can be used to register an action to run once propellor has successfully run on a host. 2014-12-06 06:34:32 -04:00
Joey Hess c97dd0d708 spelling typo 2014-12-05 19:33:34 -04:00
Joey Hess a7e71faaaa
forgot to add new Mount lib 2014-12-05 17:54:29 -04:00
Joey Hess 5ae6a302df some comments 2014-12-05 17:44:09 -04:00
Joey Hess 00ab240164 fix install of debootstrap from source 2014-12-05 16:48:52 -04:00
Joey Hess 527975dffe hasSomePassword and hasPassword now check to make sure shadow passwords are enabled. 2014-12-05 16:33:23 -04:00
Joey Hess bf9284d05c I have now successfully used propellor to convert a Fedora system into a bootable and fully working Debian system 2014-12-05 16:22:11 -04:00
Joey Hess 97e9433f1b rollback if renameing fails
This avoids leaving the system in a broken state where some directories
have been renamed away any others not.

Future work: If the rename list contains (foo, bar) and (newfoo,foo),
reorder the list to gather those two actions together to minimize
the amount of time that foo is missing. In case of power loss or something.
2014-12-05 12:50:01 -04:00
Joey Hess 4be893f0bf more improvements to takeover 2014-12-04 17:34:47 -04:00
Joey Hess f1fd75c9ec more work on OS takeover 2014-12-04 17:11:15 -04:00
Joey Hess f78c2f16d1
update name of libgnutls dev package 2014-12-03 19:05:36 -04:00
Joey Hess c9d09afafa
Run apt-cache policy with LANG=C. 2014-12-01 11:59:27 -04:00
Joey Hess 4c2eac2d3c
remove -i, seems not needed and may be causing problem 2014-11-27 19:10:39 -04:00
Joey Hess 9500e9bb81
added more debugging 2014-11-27 17:55:56 -04:00