(R)?ex the friendly automation framework

News

2019-12-05
Rex-1.7.1

The Rex-1.7.1 release is now available on CPAN, fixing a Windows testing issue, and updating some docs.

2019-11-05
Rex-1.7.0

The Rex-1.7.0 release is now available on CPAN.

2019-07-02
Deprecating official Rex packages

As part of our efforts to simplify maintenance around RexOps projects, we have decided to stop building Rex packages on our side. We recommend relying on OS packages maintained by the various distributions in their respective upstream repositories, or to install Rex from CPAN.

2019-06-09
Post-migration updates & clean-up

Over the course of the past weeks many clean-ups have been done, reaping the benefits provided by our new Statocles-based site:

2019-05-19
New site engine for rexify.org

After months of work on a new site backend, we reached the MVP today for our site to be switched over to a new engine: from now on, our site will be maintained using the static site generator Statocles.

Conferences

2016-06-21

Need Help?

Rex is a pure open source project, you can find community support in the following places:

Professional support is also available.

» Home » Docs » Rex book » Writing modules » Getting information of the environment

Getting information of the environment

Often you need to know some things of the environment where you are currently connected. For example if you need to install apache on Debian and CentOS you have to provide different packages names.

Rex comes with a hardware gathering module. To display all the things Rex knows about the environment your can create a test task that just dumps all the information.

use Rex -feature => ['1.0'];
⁠
⁠task "dump-info", sub {
⁠    dump_system_information;
⁠};

This will print out everything Rex knows about the remote system. You can use these information inside your Rexfile or a template.

A sample output (CentOS 5.9 running inside KVM)

$kernelversion = '#1 SMP Tue May 21 15:29:55 EDT 2013'
$memory_cached = '127'
$memory_total = '497'
$kernelrelease = '2.6.18-348.6.1.el5'
$Kernel = {
      kernelversion => '#1 SMP Tue May 21 15:29:55 EDT 2013'
      architecture => 'x86_64'
      kernel => 'Linux'
      kernelrelease => '2.6.18-348.6.1.el5'
   }
$hostname = 'centos-5-amd64.rexify.org'
$operatingsystem = 'CentOS'
$operatingsystemrelease = '5.9'
$architecture = 'x86_64'
$domain = ''
$eth0_mac = '52:54:00:E8:69:15'
$kernel = 'Linux'
$swap_free = '1023'
$VirtInfo = {
      virtualization_role => 'guest'
      virtualization_type => 'kvm'
   }
$memory_shared = '0'
$Network = {
      networkdevices => [
         'eth0'
      ]
      networkconfiguration => {
         eth0 => {
            broadcast => '192.168.122.255'
            ip => '192.168.122.22'
            netmask => '255.255.255.0'
            mac => '52:54:00:E8:69:15'
         }
      }
   }
$memory_used = '218'
$kernelname = 'Linux'
$Swap = {
      free => '1023'
      used => '0'
      total => '1023'
   }
$swap_total = '1023'
$memory_buffers = '12'
$eth0_ip = '192.168.122.22'
$swap_used = '0'
$memory_free = '278'
$manufacturer = 'Bochs'
$Memory = {
      shared => '0'
      buffers => '12'
      free => '278'
      used => '218'
      total => '497'
      cached => '127'
   }
$eth0_broadcast = '192.168.122.255'
$eth0_netmask = '255.255.255.0'
$Host = {
      domain => ''
      manufacturer => 'Bochs'
      kernelname => 'Linux'
      hostname => 'centos-5-amd64.rexify.org'
      operatingsystemrelease => '5.9'
      operatingsystem => 'CentOS'
   }

To use these information inside the Rexfile you can query them with the get_system_information function or use the methods from the connection object

use Rex -feature => ['1.0'];
⁠
⁠task "get_hostname", sub {
⁠    my %info = get_system_information;
⁠    say $info{hostname} . "." . $info{domain};
⁠};
⁠
⁠use Rex -feature => ['1.0'];
⁠
⁠task "prepare", sub {
⁠    my $libpath = case connection->server->architecture,
⁠      "i386"   => "/usr/lib",
⁠      "x86_64" => "/usr/lib64";
⁠};

Using environment information inside templates

You can also use these information inside your template. For example if you want to add the ip address of eth0 or the hostname into a file or change settings of an application based on memory size.

Listen <%= $eth0_ip %>:80
Google Group / Twitter / GitHub / Mailinglist / irc.freenode.net #rex   -.ô.-   Disclaimer