NAME
rex - execute tasks defined in a Rexfile
DESCRIPTION
The "rex" script can be used to execute tasks defined in a Rexfile from the command line.
SYNOPSIS
rex -h # Show usagerex -T # List tasksrex uname # Run the 'uname' taskrex -H server[01..10] uname # Run the 'uname' task on all the specified hostsrex -G production uname # Run 'uname' on hosts on the 'production' hostgrouprex deploy --gracefully # Pass '--gracefully' to the 'deploy' task
USAGE
rex [<options>] [-H <host>] [-G <group>] <task> [<task-options>]rex -T[m|y|v] [<string>]-b Run batch-e Run the given code fragment-E Execute a task on the given environment-G|-g Execute a task on the given server groups-H Execute a task on the given hosts (space delimited)-z Execute a task on hosts from this command's output-K Public key file for the ssh connection-P Private key file for the ssh connection-p Password for the ssh connection-u Username for the ssh connection-d Show debug output-ddd Show more debug output (includes profiling output)-m Monochrome output: no colors-o Output format-q Quiet mode: no log output-qw Quiet mode: only output warnings and errors-Q Really quiet: output nothing-T List tasks-Ta List all tasks, including hidden-Tm List tasks in machine-readable format-Tv List tasks verbosely-Ty List tasks in YAML format-c Turn cache ON-C Turn cache OFF-f Use this file instead of Rexfile-F Force: disregard lock file-h Display this help message-M Load this module instead of Rexfile-O Pass additional options, like CMDB path-s Use sudo for every command-S Password for sudo-t Number of threads to use (aka 'parallelism' param)-v Display (R)?ex version
Rexfile
When you run "rex" it reads the file "Rexfile" in the current working directory. A Rexfile consists of 2 major parts: configuration and task definitions.
Configuration
See all the available commands in Rex::Commands.
Simple authentication
user 'bruce';password 'batman';pass_auth;
Key authentication
private_key '/path/to/your/private/key.file';public_key '/path/to/your/public/key.file';key_auth;
Define logging
logging to_file => 'rex.log';logging to_syslog => 'local0';
Group your servers
Rex gives you the ability to define groups of servers. Groups can be defined the Rexfile:
group 'frontends' => 'frontend01', 'frontend02', 'frontend[03..09]';
Groups can also be defined in separate files, like "server.ini":
# server.ini[frontends]frontend[01..04]# Rexfileuse Rex::Group::Lookup::INI;groups_file 'file.ini'
See Rex::Group::Lookup::INI for more details, and check the "Rex::Group::Lookup" namespace for other formats.
Other configuration
timeout 10; # ssh timeoutparallelism 2; # execute tasks in parallel
Defining tasks
A basic task looks like this:
# task descriptiondesc 'This task tells you how long since the server was rebooted';# task definitiontask 'shortname', sub {say run 'uptime';};
By default it will be targeted at the same host where `rex` is being executed.
You can also set a default server as the task's target:
desc 'This is a long description of a task';task 'shortname','frontend01',sub {say run 'uptime';};
or even a default server group:
desc 'This is a long description of a task';task 'shortname',group => 'frontends',sub {say run 'uptime';};
The task options from the command line will be passed to the task as well:
# Rexfiledesc 'Get task options';task 'get_task_options', sub {my $task_options = shift;my $option1 = $task_options->{option1};};# command linerex get_task_options --option1=yes
TAB COMPLETION
Tab completion scripts are provided for Bash and Zsh in the share <https://metacpan.org/release/Rex/source/share> directory. They provide completions for the available CLI options, hosts, groups, environments and tasks.