You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
5.7 KiB
134 lines
5.7 KiB
{{db-spam}}
|
|
{{Infobox software
|
|
|name = cdist
|
|
|logo =
|
|
|screenshot =
|
|
|caption =
|
|
|collapsible =
|
|
|author = Nico Schottelius, Steven Armstrong
|
|
|developer =
|
|
|released = 2010
|
|
|latest release version = 2.0.13
|
|
|latest release date = 05-Jun-2012
|
|
|frequently updated =
|
|
|programming language = [[Python_(programming_language)|Python]], [[Bourne shell]]
|
|
|operating system = [[GNU/Linux]], [[Unix-like]]
|
|
|platform =
|
|
|size =
|
|
|language =
|
|
|status =
|
|
|genre = [[Configuration management]]
|
|
|license = [[GPLv3]].
|
|
|website = http://www.nico.schottelius.org/software/cdist/
|
|
}}
|
|
|
|
'''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 [[Hacker News]] for some time.<ref>cdist on [[Hacker News]] https://news.ycombinator.com/item?id=3422678</ref>
|
|
|
|
|
|
== Architecture ==
|
|
|
|
cdist is split into two components:
|
|
|
|
* The core
|
|
* The configuration
|
|
|
|
=== 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.
|
|
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:
|
|
|
|
<pre>
|
|
# Provide a default file, but let the user change it
|
|
__file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \
|
|
--state exists \
|
|
--owner frodo --mode 0600
|
|
|
|
# Take file content from stdin
|
|
__file /tmp/whatever --owner root --group root --mode 644 --source - << DONE
|
|
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.
|
|
|
|
|
|
== See also ==
|
|
{{Portal|Free software}}
|
|
* [[Comparison of open source configuration management software]]
|
|
|
|
== References ==
|
|
{{reflist}}
|
|
|
|
== External links ==
|
|
* [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 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]]
|
|
|
|
|