propellor spin

This commit is contained in:
Joey Hess 2014-11-18 17:26:02 -04:00
parent 4dd35537e6
commit 74e067fa76
Failed to extract signature
3 changed files with 41 additions and 19 deletions

9
debian/changelog vendored
View File

@ -1,5 +1,11 @@
propellor (0.9.3) UNRELEASED; urgency=medium
* propellor --spin can now be used to update remote hosts, without
any central git repository being used. The git repository is updated
over propellor's ssh connection to the remote host. The central
git repository is still useful for running propellor from cron,
but this simplifies getting started with propellor.
* The git repo url, if any, is updated whenever propellor --spin is used.
* Added prosody module, contributed by Félix Sipma.
* Can be used to configure tor hidden services. Thanks, Félix Sipma.
* When multiple gpg keys are added, ensure that the privdata file
@ -9,9 +15,6 @@ propellor (0.9.3) UNRELEASED; urgency=medium
kernel when necessary.
* Avoid outputting color setting sequences when not run on a terminal.
* Run remote propellor --spin with a controlling terminal.
* The git repo url is updated whenever propellor --spin is used,
and a central git repo does not need to be set up before using --spin
for the first time.
-- Joey Hess <joeyh@debian.org> Mon, 10 Nov 2014 11:15:27 -0400

View File

@ -35,7 +35,7 @@ see [configuration for the Haskell newbie](https://propellor.branchable.com/hask
## quick start
1. Get propellor installed
1. Get propellor installed on your laptop.
`cabal install propellor`
or
`apt-get install propellor`
@ -44,25 +44,46 @@ see [configuration for the Haskell newbie](https://propellor.branchable.com/hask
3. If you don't have a gpg private key already, generate one: `gpg --gen-key`
4. Run: `propellor --add-key $KEYID`, which will make propellor trust
your gpg key, and will sign your `~/.propellor` repository using it.
5. Push the git repository to a central server (github or your own):
`cd ~/.propellor/; git remote add origin ssh://git.example.com/propellor.git; git push -u origin master`
6. Edit `~/.propellor/config.hs`, and add a host you want to manage.
5. Edit `~/.propellor/config.hs`, and add a host you want to manage.
You can start by not adding any properties, or only a few.
7. Pick a host and run: `propellor --spin $HOST`
8. Now you have a simple propellor deployment, but it doesn't do
6. Pick a host and run: `propellor --spin $HOST`
7. Now you have a simple propellor deployment, but it doesn't do
much to the host yet, besides installing propellor.
So, edit `~/.propellor/config.hs` to configure the host (maybe
start with a few simple properties), and re-run step 7.
start with a few simple properties), and re-run step 6.
Repeat until happy and move on to the next host. :)
9. To move beyond manually running `propellor --spin` against hosts
when you change their properties, add a property to your hosts
like: `Cron.runPropellor "30 * * * *"`
8. Write some neat new properties and send patches!
## adding a central git repository
The above quick start uses propellor without any central git repository.
Instead, the git repo on a host gets updated from the repo on your laptop
whenever you run `propellor --spin $HOST`.
A central git repository allows hosts to run propellor from cron and pick
up any updates you may have pushed. This is useful when managing several
hosts with propellor.
You can add a central git repository to your existing propellor setup easily:
1. Push propellor's git repository to a central server (github or your own):
`cd ~/.propellor/; git remote add origin ssh://git.example.com/propellor.git; git push -u origin master`
2. Configure the url your hosts should use for the git repisitory, if
it differs from the url above, by setting up a remote named "deploy":
`cd ~/.propellor/; git remote add deploy git://git.example.com/propellor.git`
2. Add a property to your hosts like:
`Cron.runPropellor "30 * * * *"`
3. Let your hosts know about the changed configuration (including the url
to the central repository), by running `proellor --spin $HOST` for each
of your hosts.
Now they'll automatically update every 30 minutes, and you can
`git commit -S` and `git push` changes that affect any number of
hosts.
10. Write some neat new properties and send patches!
## debugging

View File

@ -315,10 +315,8 @@ boot = do
hout <- dup stdOutput
hClose stdin
hClose stdout
unlessM (boolSystem "git" [Param "fetch", Param "--progress", Param "--upload-pack", Param $ "./propellor --gitpush " ++ show hin ++ " " ++ show hout, Param "."]) $
errorMessage "git fetch from client failed"
unlessM (boolSystem "git" [Param "merge", Param "--quiet", Param "FETCH_HEAD"]) $
errorMessage "git merge failed"
unlessM (boolSystem "git" [Param "pull", Param "--progress", Param "--upload-pack", Param $ "./propellor --gitpush " ++ show hin ++ " " ++ show hout, Param "."]) $
errorMessage "git pull from client failed"
-- Shim for git push over the propellor ssh channel.
-- Reads from stdin and sends it to hout;