forked from ungleich-public/cdist
changes(2.0.14)++
Signed-off-by: Nico Schottelius <nico@brief.schottelius.org>
This commit is contained in:
parent
b42657fa8e
commit
a772b33abd
2 changed files with 65 additions and 27 deletions
|
@ -4,6 +4,9 @@ Changelog
|
|||
* Changes are always commented with their author in (braces)
|
||||
* Exception: No braces means author == Nico Schottelius
|
||||
|
||||
2.0.14:
|
||||
* Bugfix Type: __jail: Use correct variable (Jake Guffey)
|
||||
|
||||
2.0.13: 2012-06-05
|
||||
* Bugfix __ssh_authorized_key: Ensure it sets proper group (contradict)
|
||||
* Bugfix __addifnosuchline: Fixed quotes/interpolation bug ("a b" became "a b")
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
{{db-spam}}
|
||||
{{Infobox software
|
||||
|name = cdist
|
||||
|logo =
|
||||
|
@ -21,35 +22,69 @@
|
|||
|website = http://www.nico.schottelius.org/software/cdist/
|
||||
}}
|
||||
|
||||
'''cdist''' is a usable configuration management system. It adheres to the KISS principle and is being used in small up to enterprise grade environments. cdist is an alternative to other configuration management systems like cfengine, bcfg2, chef and puppet.
|
||||
'''cdist''' is a configuration management system, which adheres to the [[KISS_principle]]. It is being used in small up to enterprise grade environments.
|
||||
cdist is an alternative to other configuration management systems [[CFEngine]], [[Bcfg2]], [[Chef (software)|Chef]] and [[Puppet (software)|Puppet]].
|
||||
cdist development started in 2010 at [[ETH Zurich]] and is actively being developed by a lot of [[FOSS]] contributors
|
||||
and maintained by the two main developers Nico Schottelius and
|
||||
Steven Armstrong. cdist is being watched on github by more than 100 people and has more than 30 forks.<ref>cdist development at https://github.com/telmich/cdist</ref>
|
||||
The major part of the discussion about cdist happens on the mailinglist<ref>cdist mailinglist http://l.schottelius.org/mailman/listinfo/cdist</ref>
|
||||
and on the IRC channel #cstar in the [[Freenode]] network. cdist is being used at various companies in Switzerland (for instance at [[ETH Zurich]]), the USA, Germany and France.
|
||||
|
||||
|
||||
Its core is written in [[Python (programming language)|Python]] and the types are
|
||||
written in [[Bourne Shell]]. Cdist is released under the [[GNU General Public License|GPL]].
|
||||
cdist has been a no. 1 topic on Hackernews for some time.<ref>cdist on hackernews https://news.ycombinator.com/item?id=3422678</ref>
|
||||
|
||||
cdist is actively being developed in Switzerland by the two main developer Nico Schottelius and Steven Armstrong.
|
||||
cdist has been a no. 1 topic on [[Hacker News]] for some time.<ref>cdist on [[Hacker News]] https://news.ycombinator.com/item?id=3422678</ref>
|
||||
|
||||
|
||||
== Architecture ==
|
||||
|
||||
cdist is being used to configure small to a large number of hosts in a scalable manner.
|
||||
In cdist the user describes at a central position (the **initial manifest**),
|
||||
what the target state of a system should be. So called **types** are being used to realise
|
||||
the appropriate functionality on hosts.
|
||||
cdist is split into two components:
|
||||
|
||||
In comparison to other configuration management software, cdist
|
||||
* The core
|
||||
* The configuration
|
||||
|
||||
* does not have any requirements on the target host besides SSH and a bourne shell
|
||||
* operates in push based approach (a server pushes to the clients, clients usually do not poll)
|
||||
* is highly scalable by design
|
||||
** If configuring more hosts in parallel than possible on one host is needed, adding more CPUs or more configurations servers to scale out is supported.
|
||||
=== Core ===
|
||||
|
||||
The core of cdist is implemented in Python 3 and provides the executables to configure target hosts. The core operates in a push model: It connects
|
||||
from the source host '''to''' the target hosts and configures the machines. For communication and file transfer [[SSH]] is being used.
|
||||
To allow parallel configuration of hosts, the core supports a parallel mode in which it creates a child process for every connection.
|
||||
This model allows cdist to scale horizontally with the available computing resources: If at a certain limit is reached and the capacity of the
|
||||
available CPUs has been used, adding another CPU or distributing cdist to multiple hosts allows to configure more hosts in parallel.
|
||||
|
||||
=== Configuration ===
|
||||
|
||||
The configuration is written in [[Bourne Shell]] and consists of
|
||||
|
||||
* The initial manifest (which defines which host is assigned which types)
|
||||
* Global Explorers (to gain information about the target system)
|
||||
* Types (which provide all functionality and consist of a manifest, type explorers and gencode scripts)
|
||||
|
||||
Although all of these are written in Shell script, the order of execution in the manifests does not matter: cdist employs a idempotent
|
||||
configuration.
|
||||
|
||||
=== Comparison ===
|
||||
|
||||
In comparison to most other configuration management software, cdist does not have any requirements on the target host besides SSH and a bourne shell.
|
||||
It requires Python 3.2 on the source host, though.<ref>Why cdist requires Python 3.2 on the source host - http://www.nico.schottelius.org/blog/cdist-python-3.2-requirement/</ref>
|
||||
cdist operates in push based approach, in which a server pushes configurations to the client and the clients do not poll for updates.
|
||||
|
||||
== Configuration DSL ==
|
||||
|
||||
All user configurable parts are contained in manifests or gencode-scripts, which are shell scripts.
|
||||
The idea behind shell scripts is to give the System Administrators a simple way DSL, that is known to them.
|
||||
Although the core is written in Python, a user does not need to know any Python at all.
|
||||
Shell scripts were chosen, because Unix System Administrators are usually profound in reading
|
||||
and writing shell scripts.
|
||||
|
||||
cdist reads its configuration from the initial manifest ('''conf/manifest/init'''), in which hosts are mapped to
|
||||
types:
|
||||
|
||||
<pre>
|
||||
case "$__target_host" in
|
||||
myhostname)
|
||||
__package zsh --state present
|
||||
__addifnosuchline /tmp/cdist-welcome --line "Welcome to cdist"
|
||||
;;
|
||||
esac
|
||||
</pre>
|
||||
|
||||
When using the types in cdist, they are called like normal programs in manifests and can make use of
|
||||
advanced parameter parsing as well as reading from stdin:
|
||||
|
@ -66,18 +101,14 @@ Here goes the content for /tmp/whatever
|
|||
DONE
|
||||
</pre>
|
||||
|
||||
Dependencies are expressed by setting up the '''require''' environment variable:
|
||||
<pre>
|
||||
__directory /tmp/foobar
|
||||
require="__directory//tmp/foobar" __file /tmp/foobar/baz
|
||||
</pre>
|
||||
|
||||
Access to paths and files within types is given by environment variables like $__object.
|
||||
|
||||
==Platform support==
|
||||
|
||||
cdist is known to be running on a variety of Unix flavors, but can in theory also run on Windows. This has not been tested though.
|
||||
|
||||
|
||||
==Users==
|
||||
|
||||
cdist is being used at various companies in Switzerland (for instance at [[ETH Zurich]]), the USA, Germany and France.
|
||||
cdist is being watched on github by more than 100 people and has more than 30 forks.<ref>Github project page https://github.com/telmich/cdist</ref>
|
||||
|
||||
|
||||
== See also ==
|
||||
{{Portal|Free software}}
|
||||
|
@ -90,10 +121,14 @@ cdist is being watched on github by more than 100 people and has more than 30 fo
|
|||
* [http://www.nico.schottelius.org/software/cdist/ cdist Website]
|
||||
* [https://github.com/telmich/cdist Github home]
|
||||
* [http://l.schottelius.org/mailman/listinfo/cdist cdist mailinglist]
|
||||
* [https://freecode.com/projects/cdist cdist on freencode]
|
||||
* [https://freecode.com/projects/cdist cdist on freecode]
|
||||
|
||||
|
||||
[[Category:Configuration management]]
|
||||
[[Category:Free software programmed in Python]]
|
||||
[[Category:2010 software]]
|
||||
[[Category:Linux configuration utilities]]
|
||||
[[Category:Mac OS X]]
|
||||
[[Category:Linux package management-related software]]
|
||||
[[Category:Unix package management-related software]]
|
||||
|
||||
|
|
Loading…
Reference in a new issue