The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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 usage
 rex -T                      # List tasks
 rex uname                   # Run the 'uname' task
 rex -H server[01..10] uname # Run the 'uname' task on all the specified hosts
 rex -G production uname     # Run 'uname' on hosts on the 'production' hostgroup
 rex 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]

 # Rexfile
 use 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 timeout
 parallelism 2; # execute tasks in parallel

Defining tasks

A basic task looks like this:

 # task description
 desc 'This task tells you how long since the server was rebooted';

 # task definition
 task '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:

 # Rexfile
 desc 'Get task options';
 task 'get_task_options', sub {
   my $task_options = shift;
   my $option1 = $task_options->{option1};
 };

 # command line
 rex get_task_options --option1=yes

TAB COMPLETION

Tab completion scripts are provided for Bash and Zsh in the share directory. They provide completions for the available CLI options, hosts, groups, environments and tasks.