[[!meta title="cdist - usable configuration management"]] .. . .x+=:. s dF @88> z` ^% :8 '88bu. %8P . = 3.2 required) * SSH-Client * Asciidoc (for building the manpages) ### Client ("target host") * A posix like shell * SSH-Server ## Installation ### Preperation Ensure you have Python 3.x and the **argparse** module installed on the machine you use to **deploy to the targets**. #### Archlinux Archlinux already has python >= 3.2, so you only need to do: pacman -S python #### Debian aptitude install python3 python3-setuptools easy_install3 argparse #### Gentoo Gentoo only provides python 3.2 in testing packages (http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=3&chap=3). 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 Ensure you have port installed and configured (http://www.macports.org/install.php). port install python32 ln -s /opt/local/bin/python3.2 /opt/local/bin/python3 ### 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://git.schottelius.org/cdist cd cdist export PATH=$PATH:$(pwd -P)/bin # If you want the manpages ./build.sh 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 the following branches available: * Development: master * 2.0: Python rewrite of cdist core 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 origin/ # Stay on a specific version version=2.0 git checkout -b $version origin/$version ### Mirrors * git://github.com/telmich/cdist.git ([github](https://github.com/telmich/cdist)) ## Update To upgrade cdist in the current branch use git pull # Also update the manpages ./build.sh 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 ## Support ### IRC You can join the development ***IRC channel*** [#cstar on irc.freenode.org](irc://irc.freenode.org/#cstar). ### Mailing list Bug reports, questions, patches, etc. should be send to the [cdist mailing list](http://l.schottelius.org/mailman/listinfo/cdist). ### Commercial support You can request commercial support for cdist from [my company](http://firma.schottelius.org/english/). ## 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 and privately 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) * [nss-pam-ldapd](http://arthurdejong.org/nss-pam-ldapd/) (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) (version control) * [xfce](http://www.xfce.org/) (lightweight desktop environment) * [slim](http://slim.berlios.de/) (graphical login manager for X11) with cdist on more than **60** production machines of the [Systems Group](http://www.systems.ethz.ch) at the [ETH Zurich](http://www.ethz.ch) as well at home. ### Steven Armstrong, CBRG ETH Zurich The CBRG is managing most of their compute clusters with cdist.