cdist configuration management Latest manual: Home page:
Go to file
Nico Schottelius 6a591d3e06 update version to be indpendent of git tree
Otherwise versions will include changes by users, which
will not be helpful for development.

Signed-off-by: Nico Schottelius <>
2011-03-11 19:17:31 +01:00
bin update version to be indpendent of git tree 2011-03-11 19:17:31 +01:00
conf [__issue] remove unneeded parameters 2011-03-11 19:08:52 +01:00
doc update version to be indpendent of git tree 2011-03-11 19:17:31 +01:00
.gitignore update manpages to work with asciidoc 2011-03-08 00:20:35 +01:00
HACKERS_README prepend new path, so running HACKERS_README in biased environment works 2011-03-08 12:18:26 +01:00
Makefile finish (kind of ugly) manpage generation in makefile 2011-03-09 13:08:56 +01:00
README master == dev 2011-03-04 15:02:56 +01:00
REAL_README update used_by section 2011-03-11 16:20:29 +01:00

[[!meta title="cdist - configuration management"]]

[[!toc  levels=2]]

## Introduction

cdist configures your system and is similar to
other configuration management systems like
and [puppet](, but
it ticks differently:

 * cdist sticks completly to the KISS (keep it simple and stupid) paradigma
  * cdist's core is very small (< 1k lines of code)
  * There is only one type to extend cdist called ***type***.
  * One main development target: ***It must be incredible easy to add new types.***
 * cdist is UNIX
  * It reuses existing tools like cat, find, mv, ...
  * cdist's documentation is bundled as manpages
 * cdist is written in POSIX shell
  * No special requirements like high level interpreters needed on server or target

### Architecture

 * Push mode (server pushes configuration)
 * Pull mode planned (client triggers configuration)
 * User defines configuration in shell scripts (called ***manifests***)
 * Generates internal configuration (cconfig style)
 * Uses ***types*** to generate code be executed on the target
 * And finally executes the code on the target / applies the configuration

### Features

Stuff that should probably be included in every configuration management,
but is not. Or: The reason why I began to write cdist.

 * Speed
 * Elegant code
 * Clean design
 * Good documentation (man pages)
 * Meaningful error messages
 * No surprise factor
 * Consistency in behaviour, naming and documentation
 * Easy integration nacked installations
 * Simple and well-known DSL: posix shell
 * It is very easy to
  * extend cdist
  * debug cdist-core and cdist-types
 * Focus on reuse of existing functionality
  * ssh
  * sh
  * find, rm, ...

## Requirements

### Server

 * A posix like shell
 * SSH-Client

### Client ("target host")

 * A posix like shell
 * SSH-Server

## Getting cdist

You can clone cdist from git, which gives you the advantage of having
a version control in place for development of your own stuff as well.

### Installation

To install cdist, execute the following commands:

    git clone git://
    cd cdist
    export PATH=$PATH:$(pwd -P)/bin

    # If you want the manpages (requires asciidoc to be installed)
    make man
    export MANPATH=$MANPATH:$(pwd -P)/doc/man

Afterwards you can run ***cdist-quickstart*** to get an impression on
how to use cdist.

### Available versions

There are at least two branches available:

 * master: the development branch
 * 1.0: stable branch of version 1.0

Other branches may be available as well for features or bugfixes, but they
may vanish at any point. To select a specific branch use

    # Generic code
    git checkout -b <name> origin/<name>
    # Stay on version 1.0
    git checkout -b 1.0 origin/1.0

### Update

To upgrade cdist in the current branch use

    git pull

    # Also update the manpages
    make man
    export MANPATH=$MANPATH:$(pwd -P)/doc/man

The version branches are designed to change if there are incompatibilities.
Or the other way round: As long as you stay on 1.0 and do git pull, nothing
should break.

## Support

### IRC

You can join the development ***IRC channel***
[#cLinux on](irc://

### Mailing list

Bug reports, questions, patches, etc. should be send to the
[cdist mailing list](

## Used by

If you're using cdist, feel free to send a report to the mailing list.
Interesting information are for instance

 * Which services do you manage?
 * How many machines do you manage?
 * What are the pros/cons you see in cdist?
 * General comments/critics

### Nico Schottelius, Systems Group ETH Zurich

Yes, I'm actually eating my own dogfood and currently managing

 * [plone]( (cms)
 * [moinmoin]( (wiki)
 * [apache]( (webserver)
 * [kerberos (mit)]( (authentication)
 * [ircd-hybrid]( (chat)
 * [stunnel]( (SSL tunnel)

with cdist on a total of **3** production servers of the
[Systems Group]( at the
[ETH Zurich](