• A posix like shell
  • Python (>= 3.2 required)
  • SSH client
  • Asciidoc (for building the manpages)

Client ("target host")

  • A posix like shell
  • SSH server



Ensure you have Python 3.2 installed on the machine you use to deploy to the targets (the source host).


Archlinux already has python >= 3.2, so you only need to do:

pacman -S python


See the "From source" section


For Debian >= wheezy:

aptitude install python3

On squeeze you can add following line in /etc/apt/sources.list

deb wheezy main

And add pinning entry in /etc/apt/preferences.d/wheezy:

Package: * Pin: release n=wheezy Pin-Priority: 1

Please be aware that both openssh-server and openssh-client might be removed on python3.2 installation. You surely want to reinstall them:

apt-get install -t wheezy openssh-server openssh-client

For older Debian versions, installing python 3.2 manually is required.


For Fedora >= 15:

yum install python3


For the port:

cd /usr/ports/lang/python32/ && make install clean

For the package:

pkg_add -r python32


Gentoo only provides python 3.2 in testing packages ( If you want to ensure nothing breaks you must set back the python version to what was default before.

emerge -av =python-3.2.2 --autounmask-write
emerge -av =python-3.2.2
eselect python list
eselect python list set python3.2

Max OS X

You can choose between Homebrew and Macports, either way works:

Homebrew variant:

brew install python3

Macports variant:

port install python32
ln -s /opt/local/bin/python3.2 /opt/local/bin/python3

From Source

For those operating systems not yet support Python 3.2:

tar xvfj Python-${pyversion}.tar.bz2
cd Python-${pyversion}
sudo make install

This installs python 3.2 to /usr/local/bin. Ensure this directory is in your PATH environment variable.

Get 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. To install cdist, execute the following commands:

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

# If you want the manpages
./build man
export MANPATH=$MANPATH:$(pwd -P)/doc/man

Available versions

There are at least the following branches available:

  • Development: master
  • 2.0: Python rewrite of cdist core [stable branch]

Old versions:

  • 1.7: Bugfixes, cleanups, new type and explorer rename
  • 1.6: New types, cleaned up __package* types, internal cleanup
  • 1.5: Focus on object orientation instead of global stage orientation
  • 1.4: Support for redefiniton of objects (if equal)
  • 1.3: Support for local and remote code execution (current stable)
  • 1.2: Dependencies supported
  • 1.1: __file to __file, __directory, __link migration
  • 1.0: First official release

Other branches may be available 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 a specific version
git checkout -b $version origin/$version


  • git:// (github)
  • git:// (sourceforge)


To upgrade cdist in the current branch use

git pull

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

If you stay on a version branche (i.e. 1.0, 1.1., ...), nothing should break. The master branch on the other hand is the development branch and may not be working, break your setup or eat the tree in your garden.

Upgrading from 1.7 to 2.0

  • Ensure python (>= 3.2) is installed on the server
  • Use "cdist config host" instead of "cdist-deploy-to host"
  • Use "cdist config -p host1 host2" instead of "cdist-mass-deploy"
  • Use "cdist banner" for fun
  • Use __object_fq instead of __self in manifests

Upgrading from 1.6 to 1.7

  • If you used the global explorer hardware_type, you need to change your code to use machine instead.

Upgrading from 1.5 to 1.6

  • If you used __package_apt --preseed, you need to use the new type __debconf_set_selections instead.
  • The __package types accepted either --state deinstalled or --state uninstaaled. Starting with 1.6, it was made consistently to --state removed.

Upgrading from 1.3 to 1.5

No incompatiblities.

Upgrading from 1.2 to 1.3

Rename gencode of every type to gencode-remote.

Upgrading from 1.1 to 1.2

No incompatiblities.

Upgrading from 1.0 to 1.1

In 1.1 the type __file was split into __directory, __file and __link. The parameter --type was removed from __file. Thus you need to replace __file calls in your manifests:

  • Remove --type from all __file calls
  • If type was symlink, use __link and --type symbolic
  • If type was directory, use __directory