134 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
{{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]]
 | 
						|
 |