Merge branch 'master' of ssh://propellor.branchable.com

This commit is contained in:
Joey Hess 2015-04-14 14:48:03 -04:00
commit 27f4c9be43
3 changed files with 178 additions and 2 deletions

View File

@ -1,5 +1,5 @@
The [API documentation](http://hackage.haskell.org/package/propellor) of
Propellor's modules is the most important docuemntation of propellor.
Propellor's modules is the most important documentation of propellor.
Other documentation:
@ -9,6 +9,6 @@ Other documentation:
* [[Components]]
* [[Contributing]]
* [[Interface Stability]]
* [[Coding Stye]]
* [[Coding Style]]
* [[Security]]
* [[Debugging]]

View File

@ -0,0 +1,160 @@
Having taken the inital hurdle of getting propellor running
(cf. my last post in this forum), I am beginning to like propellor
quite a lot. - This comes not too much as a surprise, as I am
a Haskeller really. - I would love to use it for all my configuration
needs, and to that end ditch ansible.
Propellor's biggest show stopper for me is this (maybe I am misunderstanding
propellor?):
I can run
```
propellor --spin myhost
```
from the command line, and all the tasks/properties that I have
defined myhost to have beforehand will be executed/realized/configured.
Say eg. I haved defined
```
myhost :: Host
myhost = host "myhost"
& os (System (Debian Testing) "amd64")
& emacs
& apt
emacs :: Property HasInfo
emacs = propertyList "install & configure emacs" $ props
& Apt.installed ["emacs"
, "auto-complete-el"]
apt :: Property HasInfo
apt = propertyList "apt update + upgrade" $ props
& Apt.update
& Apt.upgrade
```
Then running
```
propellor --spin myhost
```
will make sure, that emacs is installed, and all my
packages on myhost are up to date.
It does so every time I run propellor, but normally I install
emacs only once (and I know it's installed), whereas
the apt update+upgrade combo I would want to run every other day.
So what I would like is this: have just a minimal config for
myhost, like this:
```
myhost :: Host
myhost = host "myhost"
& os (System (Debian Testing) "amd64")
```
and then run a task (require a property ?) on myhost, somehow
from the command line, like this
```
propellor --spin myhost --task apt
```
Many other properties / installation steps I could run in this
manner, like installing emacs initially
```
propellor --spin myhost --task emacs
```
In ansible I can do this with playbooks:
```
ansible-playbook -l myhost apt.yml
```
with some preconfigured playbook apt.yml that does just
the apt update + upgrade task and nothing else. But I would
have other tasks in other playbooks of course: I can install & configure
emacs on myhost
```
ansible-playbook -l myhost emacs.yml
```
etc.
Related to that (but maybe not strictly the same question):
I wouldn't mind writing my own haskell script that does
the command line parsing (with optparse applicative eg):
I could have options for
```
--host (myhost/...)
```
and
```
--task (emacs/apt/...)
```
and then just call into propellor. Unfortunately propellor's
defaultMain does more than I want: gets the command line
from processCmdLine.
So I tried to create my own otherMain (similar to defaultMain,
but would let me do my own command line parsing):
```
otherMain :: [Host] -> CmdLine -> IO ()
```
but then at some point just gave up: for one thing: things
were getting complicated, because of all the indirection:
the propellor command line tool recompiles itself (?),
does all this git stuff etc.
And then: maybe I am approaching things in the wrong direction:
maybe it's just not meant to be used that way
(but ansible works fine for me in this regard)?
And I thought: I don't really want to start a major programming
task just to get this thing working, the way that seems
reasonable to me. Or maybe it's possible already, and I just
don't know how to use it? (So I am stuck with ansible for the time
being).
Still more or less related:
Say this otherMain function existed, that allowed me to
to do my own command line parsing and just
call propellor on some host with the one or the other task,
I am not 100% what's the right
way to ensure/require/execute such a task on a host:
above I am just using
```
host & property
```
(from PropAccum), but maybe ensureProperty is better suited
for that?
Also for the wish list: some CONFIG_FILE env variable that
would allow me to keep my config.hs somewhere other than
in ~/.propellor/config.hs
Anyway, thanks so far
I would certainly want to switch to propellor completely.
Andreas

View File

@ -0,0 +1,16 @@
[[!comment format=mdwn
username="https://www.google.com/accounts/o8/id?id=AItOawm-czsfuWENKQ0GI8l0gnGTeF1JEli1mA0"
nickname="Andreas"
subject="thanks a lot"
date="2015-04-06T21:11:46Z"
content="""
thanks for your your commments (both of them),
and fair enough: have just renamed my origin remote to upstream,
will try your installedFromExperimental suggestion next.
I will have more questions about propellor,
but aske them in a different thread
(as they are not really about installation)
"""]]