Cdist — Configuration Management Without the Bloat
Overview
Cdist is a configuration management tool that sticks to the basics — no agents, no hidden daemons, no heavyweight dependencies. It runs entirely from a control host, pushing changes to targets over SSH. As long as the remote system has a POSIX-compatible shell, it can be managed. This makes Cdist a good fit for mixed Unix environments, small clusters, and secure networks where minimal footprint matters.
How It Operates in the Field
When launched, Cdist connects to each target, gathers facts using lightweight scripts (called explorers), and then applies changes described in manifests. Those changes are built from reusable types — for example, ensuring a package is present or a configuration file matches the expected version. The whole process is repeatable and idempotent, so running it twice won’t cause unnecessary work.
Technical Summary
| Parameter | Detail |
| Target Systems | Linux, BSD, macOS, other POSIX-compliant platforms |
| Controller Requirements | Python 3.5+ with Cdist installed |
| Target Requirements | SSH access and /bin/sh; no Python or agents on target |
| Execution Model | Push-based, initiated from the controller |
| Configuration Style | Core in Python, manifests and types written in shell |
| Inventory Management | Simple directory-based host lists, easy to keep in Git |
| License | GPLv3+ |
| Packages | Available in major Linux distribution repositories |
Workflow in Practice
Inventory – Hosts are listed in plain text files inside a directory structure.
Exploration – Scripts run remotely to detect OS type, package manager, and other facts.
Manifest Execution – Based on those facts, manifests decide which types to apply.
Convergence – Objects defined by types bring the system to the desired state.
Because it’s all shell-driven, extending functionality is a matter of writing a small, well-targeted script rather than learning a custom DSL.
Quick Installation Example (Debian/Ubuntu Controller → Linux Targets)
Install on controller:
sudo apt update
sudo apt install cdist
Prepare a host list and a basic manifest:
mkdir -p ~/ops/cdist/{conf,hosts}
echo “node01” > ~/ops/cdist/hosts/prod
cat > ~/ops/cdist/conf/manifest/init <<'EOF'
__package htop
__file /etc/cdist-tag –mode 0644 –state present –source – <<'E'
Managed by Cdist
E
EOF
Run against a target:
cdist config node01
Typical Use Cases
Initial Provisioning – Push base packages and configuration to fresh installs.
Change Management – Roll out config adjustments during controlled maintenance windows.
Heterogeneous Fleets – Manage different Unix flavors with one central tool.
Operational Notes
Works well in secure environments where installing agents is not allowed.
Performance scales acceptably for dozens to hundreds of hosts, but extremely large fleets may require parallelization strategies.
No built-in event-driven orchestration — runs are manual or scripted.
Limitations
Windows hosts are not supported.
Does not monitor for drift between runs — external monitoring is needed.
Complex inter-host orchestration needs custom scripting.
Related Options
Ansible – Broader ecosystem, YAML playbooks, heavier requirements.
Puppet – Agent-based model with strong reporting.
SaltStack – Real-time orchestration and event bus features.