cdist development started in 2010 at ETH Zurich and is actively being developed2 and is maintained primarily by Nico Schottelius and Steven Armstrong.3 cdist is being used at various companies in Switzerland (such as ETH Zurich4 and The OMA Browser project),5 the US, Germany and France.
cdist is a zero dependency configuration management system: It requires only ssh and a bourne-compatible shell on target hosts, which are provided by default on most Unix-like machines.6 Because of this, cdist can be used to bootstrap other configuration management systems.7
cdist is not typically installed as a package (like .deb or .rpm), but rather via git. All commands are run from the created checkout. The entry point for any configuration is the shell script conf/manifest/init, which is called initial manifest in cdist terms.8
The main components of cdist are so called types, which bundle functionality.9 The types essentially consists of a number of shell scripts to define which types a type reuses and which code is generated to be executed on the target host.
cdist is split into two components:
Cdist's core handles reading configuration and communicating with remote hosts. Like Ansible, cdist uses a "push" model to apply configuration changes: A cdist process on the "host" machine connects to any number of remote nodes via SSH and then performs configuration updates on those nodes. Cdist can configure multiple hosts in parallel to reduce the time spent configuring.10
The configuration scripts define how the targets shall be configured. They are typically written in Bourne Shell and consists of
Shell is the de facto language for writing cdist configuration scripts, but most of the scripts can be written in any language if they contain a suitable shebang line. Shell scripting is favored because of how simple it is to access environment variables, read files, and execute system commands.
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 proficient in reading and writing shell scripts. Furthermore, shell is also commonly available on potential target systems, thus avoiding the need to install additional software there ("zero dependencies").
cdist reads its configuration from the initial manifest (conf/manifest/init), in which hosts are mapped to types:
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:
Dependencies are expressed by setting up the require environment variable:
Access to paths and files within types is given by environment variables like $__object.
Ansible, like cdist, uses an agentless push model to configure nodes.12 However, Ansible requires Python for some types of targets,13 whereas cdist does not. Ansible makes a distinction between roles, written in a declarative YAML-based language, and modules, written in Python. Cdist only has "types" which serve the purposes of both modules and roles and are mostly written in Bourne Shell. Cdist's approach might be preferable because Shell is familiar to many system administrators who have never used a configuration management system before, but Ansible's declarative language is arguably more readable and appropriate.
".github/README.md at df2f84b694afee8137b97695f6424c5aec314717 · skonfig/.github". GitHub.com. https://github.com/skonfig/.github/blob/df2f84b694afee8137b97695f6424c5aec314717/profile/README.md ↩
[1][dead link] http://cia.vc/stats/project/cdist ↩
"ungleich/cdist: cdist configuration management". GitHub.com. Archived from the original on 2015-07-05. Retrieved 2016-04-10. https://github.com/telmich/cdist ↩
"Cdist configuration management". Archived from the original on 2013-01-15. Retrieved 2012-06-08. https://archive.today/20130115205250/http://sans.ethz.ch/projects/cdist/ ↩
"About the OMA Browser". Archived from the original on August 17, 2012. Retrieved June 26, 2012. https://web.archive.org/web/20120817101530/http://omabrowser.org/about.html ↩
Torberntsson, Kim; Rydin, Ylva (June 2014). A Study of Configuration Management - Systems Solutions for Deployment and Configuration of Software in a Cloud Environment (PDF) (Thesis). Uppsala University. pp. 8, 27, 31, 42. Archived (PDF) from the original on 22 November 2018. http://www.diva-portal.org/smash/get/diva2:732615/FULLTEXT01.pdf ↩
"Google Groups". Groups.google.com. Retrieved 2016-04-10. https://groups.google.com/group/puppet-users/browse_thread/thread/e1b1ede3ad3b0a8e/98f6b2c9d78032e8 ↩
Kruse, Christian (2016). "Automatic configuration deployment with cdist". WWWTech. Archived from the original on 22 November 2018. Retrieved 22 November 2018. https://wwwtech.de/articles/2015/feb/automatic-configuration-deployment-with-cdist ↩
"cdist-type(7)". Nico.schottelius.org. Archived from the original on 2016-03-03. Retrieved 2016-04-10. https://web.archive.org/web/20160303233448/http://www.nico.schottelius.org/software/cdist/man/latest/man7/cdist-type.html ↩
Bezroukov, Nikolai. "cdist". Softpanorama. Archived from the original on 8 July 2017. Retrieved 22 November 2018. http://www.softpanorama.org/Admin/Conf_management/cdist.shtml ↩
"13. Manifest — cdist 4.10.6-6-g61ac4a26 documentation". www.nico.schottelius.org. Retrieved 2019-03-26. https://www.nico.schottelius.org/software/cdist/man/beta/cdist-manifest.html ↩
"Installing Ansible — Ansible Documentation". docs.ansible.com. Retrieved 13 January 2023. The managed node (the machine that Ansible is managing) does not require Ansible to be installed, but requires Python 2.7, or Python 3.5 - 3.11 to run Ansible library code. https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#managed-node-requirements ↩