roguewave
roguewave is an imperative remote server automation tool.
It allows you to create deployment scripts and automate repetitive
administration tasks.
Unlike many existing tools that achieve similar functionality,
roguewave is not based on declarative descriptions and configuration files.
It's a code-first tool, where you use Rust code to describe any process
you implement. This gives you clear control flow, explicit context passing,
simple code deduplication and many more benefits that come with using a modern
high-level language. This also makes deployment and server configuration
more approachable to developers.
roguewave doesn't come with many built-in capabilities. Existing built-ins are more like
starting points or examples of what you can achieve, and they make some assumptions
about the remote system that are not universally true (e.g. root access, availability of
sudo and apt). However, roguewave itself can be used with any remote system
that provides SSH and SFTP access.
Instead of relying on built-ins completely, users are encouraged
to create and reuse utility functions that suit their purposes. These utilities can
be shared with others as Rust crates or suggested for merging into roguewave.
Getting started
First, make sure you can connect to your server via SSH without a password. Typically,
you can achieve that by setting up keypair auth and adding your key to ssh-agent.
Next, you can create a roguewave session like this:
use Session;
use env;
async
The Session handle provides access to built-in helpers:
session.apt.install.await?;
session.create_user.await?;
session.fs.write.await?;
You can also run arbitrary commands:
session.command.run.await?;
let uname = session.command.run.await?.stdout;
Extending roguewave
The simplest way to write a custom helper is to create a function:
use Session;
async
You can create a nicer interface by creating an extension trait:
use Session;
Alternatively, you can create a struct that provides access to multiple helpers:
use Session;
;
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.