Ted is a configuration management tool for systems you care about.
It configures a system by following a plan file containing setup instructions. For example, this plan will install Git using the APT package manager and add a configuration file:
apt install git
file copy gitconfig /etc/gitconfig
You can use ted run to interactively check and fix any issues:
$ ted run plan.ted
✔ apt install git
✘ file copy ◌/gitconfig /etc/gitconfig
/etc/gitconfig missing
fix? [yn]: y
fixing
rechecking
done
Behind the scenes, Ted compiles the plan into a POSIX shell script and then executes that script. This means you can run Ted against a remote host without installing any agents or software on that host. For example:
$ ted run plan.ted --host server.example.com --sudo
✔ apt install git
✔ file copy ◌/gitconfig /etc/gitconfig
You can also compile the plan into a self-contained shell script and then run it later. For example:
$ ted compile check plan.ted > script.sh
$ sh script.sh
✔ apt install git
✔ file copy ◌/gitconfig /etc/gitconfig
Development work so far has been focused on getting the core functionality working (including reading plan files, generating shell scripts, running against remote servers, etc.) with a limited set of supported actions. The next step is adding more actions (including users, groups, more file operations and more package managers), followed by more features. Backwards compatibility is not yet guaranteed.
Prebuilt binaries for supported operating systems can be downloaded from the “Preview” Github Release.
$ ted help tutorial # A step-by-step guide to using Ted
$ ted help plans # Documentation on the plan file format
$ ted help actions # A reference of all available actions
$ ted help # An overview of all documentation
Ted is optimized for small infrastructures, especially single hosts like your laptop or the computer in your closet. Compared to alternatives:
- Ted asks for confirmation before making any changes, unlike most configuration management systems. This is safer to run; you won’t accidentally overwrite an uncommitted working config with the version from a few weeks ago.
- Ted plans are idempotent by default, unlike hand-written shell scripts. You can run them repeatedly and always get the same results.
- Ted is realistic that it’s not enough to just copy some files into place. It also helps you manage users, packages, services, and anything else that requires a command to be run, such as the macOS “defaults” system.
- Ted eschews complexity. Small infrastructures don’t need templating, manifests, role hierarchies, or coordination servers, so Ted avoids them.
- Ted can be used to just run checks against the system, so you can manually make changes and then later commit those changes to version control once they actually work.
- Ted has remote execution built in, making it easier to avoid having multiple out-of-sync copies of your config on different computers.
Ted is the name of my dog. It’s a riff on the idea of “Pets, not cattle”.
Ted is available under the MIT license. For information on the
licenses of all included packages run ted licenses.