Why use Rex?
If you have to do a task more than once, automate it!
Don‘t forget an installation step anymore. Automation reduces the risk of failure and let you do your real work.
Advantages
- uses ssh, no agent required
- seamless integration, no conflicts
- easy to use and to extend
- easy to learn, it‘s just plain perl
Open Source
We belive in the idea of open source. So Rex and all its parts are released under Apache 2.0 license.
You‘re invited to join the community to make Rex better and better.
Uptime?
This command line example will execute "uptime" on all the given hosts (frontend01, frontend02, ...).
$ rex -H "frontend[01..15] middleware[01..05] db[01..04]" -e "say run 'uptime'"
The same, but with a Rexfile
desc "Get Disk Free";
task "disk_free", sub {
my $output = run "df -h";
say $output;
};
Now you can run your Task with this command
$ rex -H "frontend[01..15] middleware[01..05] db[01..04]" disk_free
Keep Your Configuration In Sync
This example will install the Apache Webserver on 5 servers and keep the configuration in sync. If the configuration file was changed it will automatically reload apache.
If this task gets executed against a virgin host (where no apache is installed) it will first install it.
user "root";
group "frontend" => "frontend[01..05]";
desc "Prepare Frontend Server";
task "prepare", group => "frontend", sub {
install "apache2";
};
desc "Keep Configuration in sync";
task "configure", group => "frontend", sub {
prepare();
file "/etc/apache2/apache2.conf",
source => "files/etc/apache2/apache2.conf",
on_change => sub { service apache2 => "reload"; };
};
Running under sudo?
You can also run everything with sudo. Just define the sudo password and activate sudo.
user "ubuntu";
group "frontend" => "frontend[01..05]";
sudo TRUE;
desc "Prepare Frontend Server";
task "prepare", group => "frontend", sub {
install "apache2";
};
desc "Keep Configuration in sync";
task "configure", group => "frontend", sub {
prepare();
file "/etc/apache2/apache2.conf",
source => "files/etc/apache2/apache2.conf",
on_change => sub { service apache2 => "reload"; };
};