Skip to content

ruuda/deptool

Repository files navigation

Deptool

Deptool is a declarative configuration deployment tool. It manages configuration files on a cluster of unix hosts reachable over SSH. Deptool is designed for small clusters (1–50 hosts) managed by a small group of operators (1–5 people). It is extremely fast for this use case: it can show a deployment plan in milliseconds, and execute it sub-second.

For example, this is Deptool updating DNS records on a cluster running NSD:

$ deptool deploy
s4.ruuda.nl
    update nsd
        ~ zones/ruuda.nl.zone
        restart unit nsd.service

s5.ruuda.nl
    update nsd
        ~ zones/ruuda.nl.zone
        restart unit nsd.service

Auto-rollback if deploy fails.
Apply to 2 hosts in cluster 'prod'? [y/N/d] y

  s4.ruuda.nl: done
  s5.ruuda.nl: done

Changes deployed successfully to 2 hosts in 0.99s.

To get started, these are the most useful chapters from the manual:

Status

  • Deptool is a hobby project without stability promise. I use it to manage my own personal infra, and it works very well for this use case.
  • I’m open sourcing it in the hope that others find it useful too, bug reports are welcome.
  • If there is sufficient interest, I may look into setting up a proper release flow with prebuilt binaries and more care for compatibility between releases. Drop me a message if Deptool is useful to you!

Hacking

Deptool is written in Rust and builds with Cargo. To typecheck and run the tests:

$ cargo check
$ cargo test

The tests are safe to run locally. They only operate on temp directories, they don’t invoke systemd or ssh.

For a production build you need a static binary, see docs/building.md.

LLM usage disclosure

Deptool was built with the help of LLMs. The code is primarily written by LLMs, but I carefully review the entire diff and iterate until I am happy with the code before committing to the repository. I want this to be a high quality codebase, not vibecoded AI slop. The user-facing documentation and this readme are written by hand, because even though LLMs could get the content right, you can tell an LLM was involved, and that has negative consequences. I don’t want to force humans to read LLM-generated text to be able to use a tool intended for humans.

License

Deptool is licensed under the Apache 2.0 license. Please do not open an issue if you disagree with the choice of license.

About

A declarative configuration deployment tool

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors

Languages