Cdist: Configuration Management That Stays Close to Unix Roots
Cdist isn’t about flashy dashboards or enterprise plugins. It’s a minimalist configuration management system designed for people who already speak shell and want full control — without the overhead of agents, databases, or DSLs.
It uses plain shell scripts and SSH. That’s it. Every configuration step — from setting a hostname to deploying a package — is done through type-based modules written in POSIX shell. No interpreters. No agents on the target side. Just the remote system and a working SSH connection.
For sysadmins who prefer simplicity and traceability over abstraction, Cdist fits right in.
What Sets Cdist Apart
Feature | What That Means in Use
——–|————————————————————————
Agentless Design | No daemon, no background process — just push over SSH
Shell-Only Modules | Configuration logic written in POSIX shell — portable and explicit
Idempotent Types | Each “type” ensures system state (like packages, files, users)
Pull or Push | Supports both workflows — fully flexible
Offline Mode | No need for remote internet access on target nodes
Scales Well | Tested on hundreds of nodes — works over SSH fan-out or parallel runs
Bootstrappable | Targets need only SSH and a basic shell — ideal for hardened hosts
No YAML or DSL | All logic lives in executable scripts — no need to learn new syntax
Where It’s Actually Used
– Hardened environments where simplicity and audibility are non-negotiable
– Linux clusters with minimal base systems (e.g., no Python or Ruby)
– Small to mid-sized infrastructures where Ansible feels overkill
– Educational and lab settings for learning shell-based automation
Cdist is particularly attractive to teams that want full transparency in their automation stack — or want to avoid coupling infrastructure to external runtimes.
Quick Setup
1. Install on the host (Debian example)
sudo apt install cdist
Or clone from GitHub:
git clone https://github.com/ungleich/cdist.git
export PATH=$PWD/cdist:$PATH
2. Write your configuration scripts
Define your inventory and types in:
– conf/manifest/init
– conf/type/__package, __file, etc.
Example: ensure vim is installed
__package vim –state present
3. Apply configuration
cdist config -v -i inventory.txt
Runs over SSH to each host listed in your inventory.
Requirements
– Host OS: Any Unix-like system (Linux, BSD, macOS)
– Target: Needs only SSH, shell, and core utilities
– Language: POSIX shell only — no Python, Ruby, or agents
– Dependencies: None beyond SSH and shell tools
Final Note
Cdist doesn’t try to be the next big framework — it tries to be predictable. For admins who already automate with Bash and want structure without surrendering control, it’s a clean, lightweight solution that does the job without drama.
📦 Project Site: https://www.cdi.st
📘 GitHub: https://github.com/ungleich/cdist