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