2014-04-19 19:45:27 +00:00
|
|
|
This is a configuration management system using Haskell and Git.
|
|
|
|
|
2014-04-19 20:34:29 +00:00
|
|
|
[Propellor](https://propellor.branchable.com/) enures that the system it's
|
|
|
|
run against satisfies a list of properties, taking action as necessary when
|
|
|
|
a property is not yet met.
|
2014-04-19 19:45:27 +00:00
|
|
|
|
|
|
|
Propellor is configured via a git repository, which typically lives
|
|
|
|
in ~/.propellor/. The git repository contains a config.hs file,
|
|
|
|
and also the entire source code to propellor.
|
|
|
|
|
|
|
|
You typically want to have the repository checked out on a laptop, in order
|
|
|
|
to make changes and push them out to hosts. Each host will also have a
|
|
|
|
clone of the repository, and in that clone "make" can be used to build and
|
|
|
|
run propellor. This can be done by a cron job (which propellor can set up),
|
|
|
|
or a remote host can be triggered to update by running propellor on your
|
|
|
|
laptop: propellor --spin $host
|
|
|
|
|
|
|
|
Properties are defined using Haskell. Edit config.hs to get started.
|
|
|
|
For API documentation, see <http://hackage.haskell.org/package/propellor/>
|
|
|
|
|
|
|
|
There is no special language as used in puppet, chef, ansible, etc.. just
|
|
|
|
the full power of Haskell. Hopefully that power can be put to good use in
|
|
|
|
making declarative properties that are powerful, nicely idempotent, and
|
|
|
|
easy to adapt to a system's special needs.
|
|
|
|
|
|
|
|
## quick start
|
|
|
|
|
|
|
|
1. Get propellor installed
|
|
|
|
`cabal install propellor`
|
|
|
|
or
|
|
|
|
`apt-get install propellor`
|
|
|
|
2. Run propellor for the first time. It will set up a `~/.propellor/` git
|
|
|
|
repository for you.
|
|
|
|
3. `cd ~/.propellor/`; use git to push the repository to a central
|
|
|
|
server (github, or your own git server). Configure that central
|
|
|
|
server as the origin remote of the repository.
|
|
|
|
4. If you don't have a gpg private key, generate one: `gpg --gen-key`
|
|
|
|
5. Run: `propellor --add-key $KEYID`
|
|
|
|
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.
|
|
|
|
7. Pick a host and run: `propellor --spin $HOST`
|
|
|
|
8. 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.
|
|
|
|
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 * * * *"`
|
|
|
|
|
|
|
|
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 to <propellor@joeyh.name>!
|
|
|
|
|
|
|
|
## debugging
|
|
|
|
|
|
|
|
Set `PROPELLOR_DEBUG=1` to make propellor print out all the commands it runs
|
|
|
|
and any other debug messages that Properties choose to emit.
|