tricorder
Automation the KISS way.
Introduction
Ansible is a great tool for automation. But it suffers from the same problem of many such tools: a big pile of custom YAML DSL.
YAML is used to provide a declarative syntax of your automated workflow. This is nice for simple use cases, but automation can become rather complex very quickly.
But once those tools start implementing:
- control flow structures (conditions, loops)
- variable assignations
- modules
- package management
- ...
Your YAML files become a programming language with terrible developer experience.
tricorder aims to fix this. It gives you a single tool to perform tasks on
multiple remotes. You then use your common UNIX tools like bash
, jq
, curl
,
etc... to compose those tasks together.
Usage
Just like Ansible, tricorder uses an inventory file, listing the hosts to connect to:
[[]]
= "backend"
= ["server", "backend", "myapp"]
= "10.0.1.10:22"
= "admin"
[[]]
= "frontend"
= ["server", "frontend", "myapp"]
= "10.0.1.20:22"
= "admin"
NB: The inventory is either a TOML file or an executable producing a JSON output. This way you can create dynamic inventories by querying a remote service or database.
Then, run one of the following commands:
$ tricorder -i /path/to/inventory do -- echo "run on all hosts"
$ tricorder -i /path/to/inventory -H backend do -- echo "run on specific host"
$ tricorder -i /path/to/inventory -t "server & myapp" do -- echo "run on all hosts matching tags"
Or to run concurrently instead of sequencially:
$ tricorder -i /path/to/inventory do -p -- echo "run on all hosts"
$ tricorder -i /path/to/inventory -H backend do -p -- echo "run on specific host"
$ tricorder -i /path/to/inventory -t "server & myapp" do -p -- echo "run on all hosts matching tags"
NB: Authentication is done via
ssh-agent
only.
Every logging messages is written on stderr
, the command result for each host
is written as a JSON document on stdout
:
This way, you can compose this tool with jq
to extract the relevant informations
in your scripts.
Usage with the Rust API
tricorder is also available as a Rust crate to include it directly in your software:
use *;
use exec;
use json;
let inventory = new
.add_host
.to_owned;
let task = new;
// Run the task sequentially:
let result = inventory.hosts.run_task_seq.unwrap;
// Run the task concurrently:
let result = inventory.hosts.run_task_parallel.unwrap;
println!;
Documentation
For more informations, consult the documentation.
Roadmap
Checkout the Bug Tracker.
License
This software is released under the terms of the MIT License.