On Github preaction / Introduction-to-Rex
http://preaction.github.io/Introduction-to-Rex/
A short introduction to Rex, a Perl server automation tool, and a gallery of Rex's features.
by Doug Bell (preaction) @preaction | preaction | Chicago.PM
Source: https://github.com/preaction/Introduction-to-RexLicense: CC-BY-SA 4.0
desc 'Check the disk free on the relevant drives';
task 'df' => sub {
say scalar run 'df -H /usr*';
};
$ rex df
[2015-04-08 12:17:39] INFO - Running task df on <local>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VGRoot-LogVolroot
5.3G 3.5G 1.6G 70% /
/dev/sde1 64G 41G 20G 68% /usr2
$ rex -H scsqhdadap01 df
[2015-04-08 12:18:54] INFO - Running task df on scsqhdadap01
[2015-04-08 12:18:54] INFO - Connecting to scsqhdadap01:22 (nbkyslo)
[2015-04-08 12:18:54] INFO - Connected to scsqhdadap01, trying to authenticate.
[2015-04-08 12:18:54] INFO - Successfully authenticated on scsqhdadap01.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/volgrp01-root
8.4G 4.1G 3.9G 52% /
/dev/mapper/volgrp02-usr2
144G 65G 73G 47% /usr2
/dev/mapper/volgrp01-usr3
108G 73G 30G 72% /usr3
/dev/mapper/volgrp03-usr4
432G 203G 208G 50% /usr4
/dev/fioa 773G 419G 315G 58% /usr5
$ rex -H 'scsqhdapap[01..04]' df
task deploy_www =>
sub {
file '/etc/apache2/httpd.conf',
ensure => 'present',
source => 'etc/httpd.conf',
;
};
task deploy_www =>
sub {
file '/etc/apache2/httpd.conf',
ensure => 'present',
source => 'etc/httpd.conf',
on_change => sub {
run 'apachectl restart';
};
};
task deploy_www =>
sub {
my $config = template(
'etc/httpd.conf',
server => connection->server,
);
file '/etc/apache2/httpd.conf',
ensure => 'present',
content => $config,
on_change => sub {
run 'apachectl restart';
};
};
group ops_prd => 'scsqhdapap0[1..4]'; group ops_uat => 'ltwqhdacap0[1..4]'; group ops_dev => 'scsqhdadap0[1..2]';
$ rex -g ops_dev df
[2015-04-08 12:23:21] INFO - Running task df on scsqhdadap01
[2015-04-08 12:23:21] INFO - Connecting to scsqhdadap01:22 (nbkyslo)
[2015-04-08 12:23:21] INFO - Connected to scsqhdadap01, trying to authenticate.
[2015-04-08 12:23:22] INFO - Successfully authenticated on scsqhdadap01.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/volgrp01-root
8.4G 4.1G 3.9G 52% /
/dev/mapper/volgrp02-usr2
144G 65G 73G 47% /usr2
/dev/mapper/volgrp01-usr3
108G 73G 30G 72% /usr3
/dev/mapper/volgrp03-usr4
432G 203G 208G 50% /usr4
/dev/fioa 773G 419G 315G 58% /usr5
[2015-04-08 12:23:25] INFO - Running task df on scsqhdadap02
[2015-04-08 12:23:25] INFO - Connecting to scsqhdadap02:22 (nbkyslo)
[2015-04-08 12:23:27] INFO - Connected to scsqhdadap02, trying to authenticate.
[2015-04-08 12:23:30] INFO - Successfully authenticated on scsqhdadap02.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/volgrp01-root
8.4G 1.8G 6.2G 23% /
/dev/mapper/volgrp02-usr2
144G 95G 42G 70% /usr2
/dev/mapper/volgrp01-usr3
108G 90G 13G 88% /usr3
/dev/mapper/volgrp03-usr4
432G 258G 153G 63% /usr4
environment ops_dev => sub {
group all => 'scsqhdadap0[1..2]';
group reuters => 'scsqhdadap02';
group db => 'scsqhdadap02';
};
environment ops_prd => sub {
group all => 'scsqhdapap0[1..4]';
group reuters => 'scsqhdapap04';
group db => 'scsqhdapap01';
};
$ rex -E ops_dev -g db df
[2015-04-08 12:35:31] INFO - Running task df on scsqhdadap02
[2015-04-08 12:35:31] INFO - Connecting to scsqhdadap02:22 (nbkyslo)
[2015-04-08 12:35:32] INFO - Connected to scsqhdadap02, trying to authenticate.
[2015-04-08 12:35:35] INFO - Successfully authenticated on scsqhdadap02.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/volgrp01-root
8.4G 1.8G 6.2G 23% /
/dev/mapper/volgrp02-usr2
144G 95G 42G 70% /usr2
/dev/mapper/volgrp01-usr3
108G 90G 13G 88% /usr3
/dev/mapper/volgrp03-usr4
432G 257G 153G 63% /usr4
set datlib => '/datlib/hist';
environment ops_uat => sub {
set datlib => '/datlib/app1_dr';
};
desc 'Restart process controller';
task 'restart_pc' => sub {
my $datlib = get 'datlib';
my $env = environment;
run "$datlib/pc/envs/$env/manager/bin/apache restart";
run "$datlib/pc/envs/$env/manager/bin/boss.pl restart";
};
$ rex -E ops_dev -g pc restart_pc
desc "Update the PC repository";
task 'update_pc',
group => [qw( pc )],
sub {
my $datlib = get 'datlib';
run "cd $datlib/pc/versions/master && git pull";
die "Task failed. Stopping." if $?;
run_task 'restart_pc', on => connection->server;
};
$ rex -E ops_dev update_pc
desc "Install CPAN modules";
task 'cpan', sub {
my ( $opt ) = @_;
my $modules = join " ", split /[, ]/, $opt->{module};
run "cpan $modules";
};
$ rex -g ops_dev cpan --module='Mojolicious Dancer'
use Rex::Commands::Rsync;
task sync_www =>
sub {
sync 'www', '/var/www';
};