(R)?ex the friendly automation framework

News

2023-08-05
Rex-1.14.3

Rex-1.14.3 is now available on CPAN. It contains bug fixes for local package installation, command existence checks, and Git tests.

2023-05-05
Rex-1.14.2

The Rex-1.14.2 release is now available on CPAN. It contains bug fixes for running local commands on Windows, cloning git repositories, and test suite fixes for the upcoming perl-5.38.0 release.

2023-03-17
Call for papers TPRC 2023

Dean Hamstead from the The Perl and Raku Foundation Marketing Committee has sent an invitation to present about Rex at TPRC 2023. I’m posting it here to increase visibility.

2023-03-05
Rex-1.14.1

The Rex-1.14.1 release is now available on CPAN. It contains bug fixes and documentation updates.

2023-02-05
Rex-1.14.0

The Rex-1.14.0 release is now available on CPAN. It contains improved Rexfile loading, documentation updates, and bumps the minimum required Perl version to 5.12.5.

Events

2021-03-08
Learning automation using Rex

Ferenc Erki (FErki) will be the guest of Gábor Szabó on the next Code Maven live stream to learn about automation using Rex. Register for the free event via Code Maven or Meetup, and join the discussion!

2020-03-05
Unexpected use cases with Rex

Unexpected use cases with Rex at the 22nd German Perl/Raku Workshop 2020 in Erlangen by Ferenc Erki (FErki).

2019-11-09
Rex & Friends

Rex & Friends talk at the Barcelona Perl & Friends 2019 by Ferenc Erki (FErki).

» 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

Proudly powered by Perl and built with Statocles

GitHub repository and discussions / Chat on Matrix and IRC / Mailing list on Google Groups (retired: rex-users@freelists)

MetaCPAN / Twitter / StackShare / Server Fault   -.ô.-   Disclaimer