Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
cdist configuration management
Shell Python Makefile

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
conf
doc
.gitignore
HACKERS_README
Makefile
README
REAL_README

README

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

[[!toc  levels=2]]

## Introduction

cdist configures your system and is similar to
other configuration management systems like
[cfengine](http://www.cfengine.org/),
[bcfg2](http://trac.mcs.anl.gov/projects/bcfg2),
[chef](http://wiki.opscode.com/display/chef/)
and [puppet](http://www.puppetlabs.com/), 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://git.schottelius.org/cdist
    cd cdist
    export PATH=$PATH:$(pwd -P)/bin


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

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.freenode.org](irc://irc.freenode.org/#cLinux).

### Mailing list

Bug reports, questions, patches, etc. should be send to the
[cdist mailing list](http://l.schottelius.org/mailman/listinfo/cdist).
Something went wrong with that request. Please try again.