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]]
 | |
| 
 |