cdist configuration management Latest manual: https://www.cdi.st/manual/latest/ Home page: https://www.cdi.st
Find a file
Nico Schottelius 2d4cbdddab document new features
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
2011-03-15 00:05:38 +01:00
bin add new cdist-env 2011-03-11 23:42:44 +01:00
conf document new features 2011-03-15 00:05:38 +01:00
doc document new features 2011-03-15 00:05:38 +01:00
.gitignore +cleanup 2011-03-12 19:48:51 +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 +mercurial 2011-03-14 18:25:57 +01:00

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

     
                 ..          .       .x+=:.        s   
               dF           @88>    z`    ^%      :8  
              '88bu.        %8P        .   <k    .88 
          .   '*88888bu      .       .@8Ned8"   :888ooo
     .udR88N    ^"*8888N   .@88u   .@^%8888"  -*8888888
    <888'888k  beWE "888L ''888E` x88:  `)8b.   8888
    9888 'Y"   888E  888E   888E  8888N=*8888   8888
    9888       888E  888E   888E   %8"    R88   8888
    9888       888E  888F   888E    @8Wou 9%   .8888Lu=
    ?8888u../ .888N..888    888&  .888888P`    ^%888*
     "8888P'   `"888*""     R888" `   ^"F        'Y" 
       "P'        ""         ""  
     

[[!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

    # 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.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).

## 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](http://plone.org/) (cms)
 * [moinmoin](http://moinmo.in/) (wiki)
 * [apache](http://httpd.apache.org/) (webserver)
 * [kerberos (mit)](http://web.mit.edu/kerberos/) (authentication)
 * [ircd-hybrid](http://www.ircd-hybrid.org/) (chat)
 * [stunnel](http://stunnel.mirt.net/) (SSL tunnel)
 * [mercurial-server](http://www.lshift.net/mercurial-server.html)

with cdist on a total of **4** production servers of the
[Systems Group](http://www.systems.ethz.ch) at the
[ETH Zurich](http://www.ethz.ch).