rauto - Network Device Automation CLI
rauto is a powerful CLI tool for network device automation, written in Rust. It leverages the rneter library for intelligent SSH connection management and utilizes minijinja for flexible command templating.
Features
- Double Template System: Command Templates (Jinja2) & Device Profiles (TOML).
- Intelligent Connection Handling: Uses
rneterfor SSH state management. - Dry Run Support: Preview commands before execution.
- Variable Injection: Load variables from JSON.
- Extensible: Custom TOML device profiles.
- Built-in Web Console: Start browser UI with
rauto web. - Embedded Web Assets: Frontend files are embedded into the binary for release usage.
- Saved Connection Profiles: Reuse named connection settings across commands.
- Session Recording & Replay: Record SSH sessions to JSONL and replay offline.
Installation
From Binary (Recommended)
Download the latest release for your platform from GitHub Releases.
From Crates.io
From Source
Ensure you have Rust and Cargo installed.
The binary will be available at target/release/rauto.
Usage
1. Template Mode (Recommended)
Render commands from a template and execute them on a device.
Basic Usage:
With Variables:
Given a template templates/commands/configure_vlan.j2 and variables file templates/example_vars.json:
Dry Run (Preview):
2. Direct Execution
Execute raw commands directly without templates.
Specifying Execution Mode:
Execute a command in a specific mode (e.g., Enable, Config).
3. Device Profiles
rauto supports built-in device profiles (inherited from rneter) and custom TOML profiles.
List Available Profiles:
Using a Specific Profile:
Default is cisco. To use Huawei VRP:
Custom Device Profile:
You can define custom profiles in templates/devices/*.toml.
Example templates/devices/custom_cisco.toml:
= "custom_cisco"
[[]]
= "Enable"
= ['^[^\s#]+#\s*$']
# ... see templates/devices/custom_cisco.toml for full example
Use it:
Useful profile management commands:
4. Web Console (Axum)
Start the built-in web service and open the visual console in your browser:
Then visit http://127.0.0.1:3000.
Web assets are embedded into the binary at build time.
For released binaries, users only need to run the executable (no extra static/ files required at runtime).
Web console key capabilities:
- Manage saved connections in UI: add, load, update, delete, and inspect details.
- Execute commands with saved connection info (load one connection, then run direct or template mode).
- Manage profiles (builtin/custom) and templates in dedicated tabs.
- Diagnose profile state machines in Prompt Management -> Diagnostics with visualized result fields.
- Switch Chinese/English in UI.
- Record execution sessions and replay recorded outputs in browser (list events or replay by command/mode).
5. Template Storage Commands
6. Saved Connection Profiles
You can save and reuse connection settings by name:
# Add/update a profile directly from CLI args
# Reuse the saved profile
# Save current effective connection after a successful run
# Manage saved profiles
Password behavior:
--save-connection(used inexec/template/device test-connection) saves without password by default; add--save-passwordto include password fields.device add-connectionsaves password only when--password/--enable-passwordis explicitly provided.
7. CLI Quick Reference
Connection troubleshooting
Saved connection profiles
Profile management
Template storage management
Session recording & replay
# Record direct exec
# Record template execution
# Replay / inspect
Start web console
Directory Structure
By default, rauto stores runtime data under ~/.rauto/.
Default directories:
~/.rauto/connections(saved connection profiles)~/.rauto/profiles(custom device profiles)~/.rauto/templates/commands~/.rauto/templates/devices~/.rauto/records(session recordings)
These folders are auto-created on startup.
For backward compatibility, local ./templates/ is still checked as a fallback.
~/.rauto
├── connections/ # Saved connection profiles (*.toml)
├── profiles/ # Custom profiles copied/created from builtin
├── templates/
│ ├── commands/ # Store your .j2 command templates here
│ └── devices/ # Store custom .toml device profiles here
└── records/ # Session recording output (*.jsonl)
You can specify a custom template directory using the --template-dir argument or RAUTO_TEMPLATE_DIR environment variable.
Configuration
| Argument | Env Var | Description |
|---|---|---|
--host |
- | Device hostname or IP |
--username |
- | SSH username |
--password |
RAUTO_PASSWORD |
SSH password |
--enable-password |
- | Enable/Secret password |
--ssh-port |
- | SSH port (default: 22) |
--device-profile |
- | Device type (default: cisco) |
--connection |
- | Load saved connection profile by name |
--save-connection |
- | Save effective connection profile after successful connect |
--save-password |
- | With --save-connection, also save password/enable_password |
Recording-related options (command-specific):
exec/template --record-file <path>: Save recording JSONL after execution.exec/template --record-level <off|key-events-only|full>: Recording granularity.replay <record_file> --list: List recorded command output events.replay <record_file> --command <cmd> [--mode <mode>]: Replay one command output.
Template Syntax
rauto uses Minijinja, which is compatible with Jinja2.
Example configure_vlan.j2:
conf t
{% for vlan in vlans %}
vlan {{ vlan.id }}
name {{ vlan.name }}
{% endfor %}
end
Example variables:
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
MIT