Note: this is pre-alpha software and not feature complete. See open Issues.
Runsible
Runsible uses SSH (via net-ssh) to execute remote commands, handling failures with retries and alerting. It captures remote STDOUT and STDERR and outputs them locally. Commands are executed sequentially in a "runlist".
An executable runsible is provided, which looks for a
YAML file in the command line arguments.
The YAML file defines the runlist and settings, while the command line options
for runsible can override the YAML settings.
Features
- Use SSH for remote transport and execution
- Use your local ssh_config, keys, agent, etc.
- Declare runlists and settings in YAML format
- Robust failure handling including:
- Runs locally - no additional software or agents to manage on the command
target
- Command target must be running SSH service
Installation
Install the gem:
$ gem install runsible # sudo as necessary
Or, if using Bundler, add to your Gemfile:
gem 'runsible', '~> 0.1'Usage
runsible /path/to/file.yaml
$ runsible -h
usage: runsible [options] yaml_file
-h, --help
-v, --version show runsible version
-u, --user remote user [rwh]
-H, --host remote host [127.0.0.1]
-p, --port remote port [22]
-r, --retries retry count [0]
-s, --silent suppress alerts
YAML Configuration
The top-level YAML structure is a hash. Primary keys are 'settings' and
'runlist', though neither are necessary. Optionally you can define a
'cleanup' section and point to it with on_failure: cleanup in a runlist item.
The minimal YAML file is empty. runsible empty.yaml will use internal
defaults to attempt to SSH to 127.0.0.1:22 as the current user.
Real-world Example
settings:
user: root
alerts:
backend: email
address: alerts@bigco.local
runlist:
- command: ./setup_fs
- command: source anaconda/bin/activate graphlab
- command: python scorer.py
retries: 5
on_failure: cleanup
cleanup:
- command: python wipe_cache.py
Maximal Settings Example
settings:
silent: no
retries: 5
alerts:
backend: email
address: alerts@bigco.local
user: root
host: bigco.local
port: 80
vars: FOO BAR BAZ
All of the above is optional.
Note that vars is not behaving as expected and is unsupported at the moment.
See net-ssh/net-ssh#236 for details.
Simple Runlist Example
runlist:
- command: false
retries: 3
on_failure: continue
- command: true
- command: false
- command: true
Note that the last - command: true runlist item will never execute. The
previous - command: false will exit, since it doesn't have
on_failure: continue and the default value is exit.
Empty Runlist
The SSH connection will still be attempted according to defaults and any settings provided. The connection will be closed immediately.
See also the built-in examples.
Commands
- Commands are executed in the context of a remote shell provided by SSH
- Commands are executed sequentially within a runlist
- Shell exit code determines command success or failure
- On success, execution proceeds to the next command in the runlist
- On failure, if there are retries configured, the command will be retried after a short delay
- When retries are exhausted, an alert goes out, and
on_failuredetermines the flow of execution-
exitis the default, aborting the runlist and causingrunsibleto exit with non-zero status code -
continueis used to proceed to the next command in the runlist -
cleanupproceeds to another runlist keyed bycleanup
-