(R)?ex Deployment & Configuration Management

Search

News

2016-09-08

Work with (R)?ex at adjust! Check out their job posting for details, or contact our fellow core developer, FErki.

2016-07-16

(R)?ex 1.4.1 released, fixing many bugs. See the release notes for more details.

2016-03-07

(R)?ex 1.4.0 released, containing lots of goodies. See the release notes for more details.

2015-09-04

(R)?ex 1.3.3 released, fixing a bunch of bugs. See the release notes for more details.

2015-06-22

adjust GmbH is sponsoring the (R)?ex project with a new build server. Thank you for your support!

2015-06-17

(R)?ex 1.3.2 released, fixing issues related to file manipulation when run on BSDs. See the release notes for more details.

2015-06-08

(R)?ex 1.3.1 released, fixing Rex::Commands::DB related tests.

2015-05-27

Read the second part of "Rex in practice" series about Test-driven infrastructure.

2015-05-09

repositor.io 1.1.0 released. repositor.io is a repository management tool for apt, yum, yast and docker. This is a bugfix release with fixes for ubuntu and centos7 installation media mirroring.

2015-05-03

(R)?ex 1.2.0 released. See the release notes for more details.

2015-03-27

View the slides of the talk An introduction to Rex from Andy Beverley.

Conferences

2016-06-21

Training

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 (work in progress) » 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

 

Fork me on GitHub
Google Group / Twitter / GitHub / Mailinglist / irc.freenode.net #rex   -.รด.-   Disclaimer