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 (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. * Added prosody module, contributed by Félix Sipma.
* Can be used to configure tor hidden services. Thanks, 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 * 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. kernel when necessary.
* Avoid outputting color setting sequences when not run on a terminal. * Avoid outputting color setting sequences when not run on a terminal.
* Run remote propellor --spin with a controlling 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 -- 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 ## quick start
1. Get propellor installed 1. Get propellor installed on your laptop.
`cabal install propellor` `cabal install propellor`
or or
`apt-get install propellor` `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` 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 4. Run: `propellor --add-key $KEYID`, which will make propellor trust
your gpg key, and will sign your `~/.propellor` repository using it. your gpg key, and will sign your `~/.propellor` repository using it.
5. Push the git repository to a central server (github or your own): 5. Edit `~/.propellor/config.hs`, and add a host you want to manage.
`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.
You can start by not adding any properties, or only a few. You can start by not adding any properties, or only a few.
7. Pick a host and run: `propellor --spin $HOST` 6. Pick a host and run: `propellor --spin $HOST`
8. Now you have a simple propellor deployment, but it doesn't do 7. Now you have a simple propellor deployment, but it doesn't do
much to the host yet, besides installing propellor. much to the host yet, besides installing propellor.
So, edit `~/.propellor/config.hs` to configure the host (maybe 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. :) Repeat until happy and move on to the next host. :)
9. To move beyond manually running `propellor --spin` against hosts 8. Write some neat new properties and send patches!
when you change their properties, add a property to your hosts
like: `Cron.runPropellor "30 * * * *"` ## 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 Now they'll automatically update every 30 minutes, and you can
`git commit -S` and `git push` changes that affect any number of `git commit -S` and `git push` changes that affect any number of
hosts. hosts.
10. Write some neat new properties and send patches!
## debugging ## debugging

View File

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