Add incomplete documentation
This commit is contained in:
parent
5d9778f33f
commit
03c3648458
230
README.md
Normal file
230
README.md
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
producer
|
||||||
|
========
|
||||||
|
|
||||||
|
Software provisioning and configuration management tool, based on a
|
||||||
|
DSL to write "recipes".
|
||||||
|
|
||||||
|
|
||||||
|
Getting started
|
||||||
|
---------------
|
||||||
|
|
||||||
|
### Installation (requires ruby and rubygems)
|
||||||
|
|
||||||
|
$ gem install producer-core
|
||||||
|
|
||||||
|
|
||||||
|
### Simple recipe
|
||||||
|
|
||||||
|
Recipes are composed by tasks and a task includes actions. Here we
|
||||||
|
use the `echo` action, which output the given string to standard
|
||||||
|
output. All the power of the Ruby language is available.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
hello_message = 'hello world!'
|
||||||
|
|
||||||
|
task :hello_world do
|
||||||
|
echo hello_message
|
||||||
|
echo hello_message.upcase
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
$ producer simple_recipe.rb
|
||||||
|
hello world!
|
||||||
|
HELLO WORLD!
|
||||||
|
|
||||||
|
|
||||||
|
### Shell command execution on remote host
|
||||||
|
|
||||||
|
The `sh` action will execute a shell command given as a string on
|
||||||
|
the targeted remote host. The remote host can be specified with the
|
||||||
|
CLI option `-t`.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
task :show_zsh_pkg do
|
||||||
|
sh 'pkg info | grep zsh'
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
$ producer -t localhost show_zsh_pkg.rb
|
||||||
|
zsh-5.0.7 The Z shell
|
||||||
|
|
||||||
|
When execution fails, recipe processing is stopped and the action
|
||||||
|
which triggered the failed execution is the last one to be applied.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
task :sh_fail do
|
||||||
|
sh 'false'
|
||||||
|
echo 'end of recipe'
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
$ producer -t localhost sh_fail.rb
|
||||||
|
RemoteCommandExecutionError: false
|
||||||
|
$
|
||||||
|
|
||||||
|
Only the first action is applied.
|
||||||
|
|
||||||
|
|
||||||
|
### Task conditions
|
||||||
|
|
||||||
|
A task can be bound to a condition: when the condition fails actions
|
||||||
|
are skipped, otherwise actions are applied as usual.
|
||||||
|
|
||||||
|
This condition can be a simple ruby expression :
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
task :condition_pass do
|
||||||
|
condition { true }
|
||||||
|
echo 'will output'
|
||||||
|
end
|
||||||
|
|
||||||
|
task :condition_fail do
|
||||||
|
condition { false }
|
||||||
|
echo 'will NOT output'
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Built-in tests
|
||||||
|
|
||||||
|
Specific test keywords are also available in the condition block
|
||||||
|
context, `producer-core` ships with a few common tests,
|
||||||
|
`producer-stdlib` provides more, and custom tests can be defined.
|
||||||
|
|
||||||
|
Here we use the `sh` condition keyword which will pass when the
|
||||||
|
execution of the given shell command succeed, and fail when the
|
||||||
|
execution fails.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
task :condition_sh_pass do
|
||||||
|
condition { sh 'true' }
|
||||||
|
echo 'will output'
|
||||||
|
end
|
||||||
|
|
||||||
|
task :condition_sh_fail do
|
||||||
|
condition { sh 'false' }
|
||||||
|
cho 'will NOT output'
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Nested tasks
|
||||||
|
|
||||||
|
Complex tasks can be split into nested subtasks. Conditions have
|
||||||
|
the same effect on tasks they have on actions, when the condition
|
||||||
|
fails, subtasks of the current task are skipped.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
task :main_task do
|
||||||
|
condition { true }
|
||||||
|
task(:foo_subtask) { echo 'do foo' }
|
||||||
|
task(:bar_subtask) { echo 'do bar' }
|
||||||
|
task(:baz_subtask) do
|
||||||
|
condition { false }
|
||||||
|
task(:baz_subtask_subtask) { echo 'do baz' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
$ producer nested_tasks.rb
|
||||||
|
do foo
|
||||||
|
do bar
|
||||||
|
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
FIXME
|
||||||
|
|
||||||
|
|
||||||
|
Actions
|
||||||
|
-------
|
||||||
|
|
||||||
|
See:
|
||||||
|
https://github.com/tjouan/producer-core/tree/master/features/actions
|
||||||
|
|
||||||
|
|
||||||
|
Tests
|
||||||
|
-----
|
||||||
|
|
||||||
|
See:
|
||||||
|
https://github.com/tjouan/producer-core/tree/master/features/tests
|
||||||
|
|
||||||
|
|
||||||
|
Templates
|
||||||
|
---------
|
||||||
|
|
||||||
|
FIXME
|
||||||
|
|
||||||
|
|
||||||
|
Macros
|
||||||
|
------
|
||||||
|
|
||||||
|
FIXME
|
||||||
|
|
||||||
|
|
||||||
|
Test macros
|
||||||
|
-----------
|
||||||
|
|
||||||
|
FIXME
|
||||||
|
|
||||||
|
|
||||||
|
Macro composition
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
FIXME
|
||||||
|
|
||||||
|
|
||||||
|
Background
|
||||||
|
----------
|
||||||
|
|
||||||
|
producer started as a collection of heterogeneous scripts (Ruby,
|
||||||
|
POSIX shell, Perl…) in the late '90s. I wanted to experiment with the
|
||||||
|
design and usage of Domain Specific Languages in Ruby, and refactor
|
||||||
|
all my scripts as "recipes" in a common language.
|
||||||
|
|
||||||
|
|
||||||
|
Similar or related code and tools
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
### Ruby DSL
|
||||||
|
|
||||||
|
* https://github.com/sprinkle-tool/sprinkle
|
||||||
|
* http://www.capistranorb.com/
|
||||||
|
* http://babushka.me/ (with BDD features, no network support?)
|
||||||
|
|
||||||
|
### Ruby DSL, shell script transpilation
|
||||||
|
|
||||||
|
* http://nadarei.co/mina/ (Rake based DSL, requires and uses bash)
|
||||||
|
|
||||||
|
### Ruby-like DSL
|
||||||
|
|
||||||
|
* http://puppetlabs.com/ (Ruby supported on >= 2.6.x)
|
||||||
|
|
||||||
|
### Agents, daemons
|
||||||
|
|
||||||
|
* https://github.com/saltstack/salt (Python, YAML)
|
||||||
|
* http://www.cobblerd.org/ (Python, many features)
|
||||||
|
* https://www.getchef.com/chef/
|
||||||
|
|
||||||
|
### SSH
|
||||||
|
|
||||||
|
* https://github.com/ansible/ansible (Python, YAML)
|
||||||
|
* http://docs.fabfile.org/ (Python)
|
||||||
|
* https://github.com/sebastien/cuisine (Python DSL, uses Fabric)
|
||||||
|
* https://github.com/kenn/sunzi (Ruby, provisioning, shell based)
|
||||||
|
* http://solutious.com/projects/rudy/ (Ruby, provisioning)
|
||||||
|
|
||||||
|
### Ruby SSH related code
|
||||||
|
|
||||||
|
* https://github.com/leehambley/sshkit
|
||||||
|
* https://github.com/gammons/screwcap
|
||||||
|
* https://github.com/delano/rye/
|
||||||
|
* https://github.com/jheiss/sshwrap
|
||||||
|
|
||||||
|
### BDD
|
||||||
|
|
||||||
|
* https://github.com/hedgehog/cuken (Cucumber)
|
||||||
|
* https://github.com/serverspec/serverspec (RSpec, Net::SSH)
|
||||||
|
https://github.com/serverspec/specinfra
|
||||||
|
* https://github.com/auxesis/cucumber-nagios (Cucumber, Net::SSH,
|
||||||
|
Webrat)
|
||||||
|
* http://larsyencken.github.io/marelle/ (Prolog, babushka inspired)
|
Loading…
x
Reference in New Issue
Block a user