2014-04-19 20:44:17 +00:00
|
|
|
[Propellor](https://propellor.branchable.com/) is a
|
|
|
|
configuration management system using Haskell and Git.
|
|
|
|
Each system has a list of properties, which Propellor ensures
|
|
|
|
are satisfied.
|
2014-04-19 19:45:27 +00:00
|
|
|
|
|
|
|
Propellor is configured via a git repository, which typically lives
|
2014-04-19 20:44:17 +00:00
|
|
|
in `~/.propellor/` on your development machine. Propellor clones the
|
2014-04-19 21:08:20 +00:00
|
|
|
repository to each host it manages, in a
|
2014-05-11 16:32:37 +00:00
|
|
|
[secure](http://propellor.branchable.com/security/) way. The git repository
|
|
|
|
contains the full source code to Propellor, along with its config file.
|
2014-04-19 19:45:27 +00:00
|
|
|
|
2014-04-19 20:44:17 +00:00
|
|
|
Properties are defined using Haskell. Edit `~/.propellor/config.hs`
|
|
|
|
to get started. There is fairly complete
|
2014-04-19 21:22:06 +00:00
|
|
|
[API documentation](http://hackage.haskell.org/package/propellor/),
|
|
|
|
which includes many built-in Properties for dealing with
|
2014-08-19 21:33:00 +00:00
|
|
|
[Apt](http://hackage.haskell.org/package/propellor/docs/Propellor-Property-Apt.html)
|
2014-04-19 21:22:06 +00:00
|
|
|
and
|
2014-08-19 21:33:00 +00:00
|
|
|
[Apache](http://hackage.haskell.org/package/propellor/docs/Propellor-Property-Apache.html)
|
2014-04-19 21:22:06 +00:00
|
|
|
,
|
2014-08-19 21:33:00 +00:00
|
|
|
[Cron](http://hackage.haskell.org/package/propellor/docs/Propellor-Property-Cron.html)
|
2014-04-19 21:22:06 +00:00
|
|
|
and
|
2014-08-19 21:33:00 +00:00
|
|
|
[Commands](http://hackage.haskell.org/package/propellor/docs/Propellor-Property-Cmd.html)
|
2014-04-19 21:22:06 +00:00
|
|
|
,
|
2014-08-19 21:33:00 +00:00
|
|
|
[Dns](http://hackage.haskell.org/package/propellor/docs/Propellor-Property-Dns.html)
|
2014-04-19 21:22:06 +00:00
|
|
|
and
|
2014-08-19 21:33:00 +00:00
|
|
|
[Docker](http://hackage.haskell.org/package/propellor/docs/Propellor-Property-Docker.html), etc.
|
2014-04-19 19:45:27 +00:00
|
|
|
|
|
|
|
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
|
2014-04-19 20:44:17 +00:00
|
|
|
easy to adapt to a system's special needs!
|
2014-04-19 19:45:27 +00:00
|
|
|
|
2014-04-19 21:08:20 +00:00
|
|
|
If using Haskell to configure Propellor seems intimidating,
|
2014-04-19 21:09:08 +00:00
|
|
|
see [configuration for the Haskell newbie](https://propellor.branchable.com/haskell_newbie/).
|
2014-04-19 21:08:20 +00:00
|
|
|
|
2014-04-19 19:45:27 +00:00
|
|
|
## 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.
|
2014-05-11 16:32:37 +00:00
|
|
|
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. `cd ~/.propellor/`; use git to push the repository to a central
|
2014-04-19 19:45:27 +00:00
|
|
|
server (github, or your own git server). Configure that central
|
|
|
|
server as the origin remote of the repository.
|
|
|
|
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.
|