(R)?ex Deployment & Configuration Management

News

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 » Release notes » Release notes for 0.35

Release notes for 0.35

There are now 2 new websites:

A website where you can search for Rex modules and browse their documentation.

A website where you can download prebuilt Boxes and find information about Rex/Boxes. A module for easy deployment of development boxes (currently only VirtualBox is supported).

General

Copy to clipboard

use Rex::Commands::Virtualization;

set virtualization => "VBox";

use Data::Dumper;   

print Dumper vm list => "all";
print Dumper vm list => "running";

vm destroy => "vm01";

vm delete => "vm01"; 

vm start => "vm01";

vm shutdown => "vm01";

vm reboot => "vm01";

vm option => "vm01",
         memory     => 512;

print Dumper vm info => "vm01";

# creating a vm 
vm create => "vm01",
      storage     => [
         {   
            file   => "/mnt/data/vbox/vm01.img",
         }
      ],
      memory => 512,
      type => "Linux26", 
      cpus => 1,
      boot => "cdrom";

Functions to easily work with VirtualBox images.

Copy to clipboard

 use Rex::Commands::Box;

 task "init", sub {

   my $param = shift;

   box {
      my ($box) = @_;
      $box->name($param->{name});
      $box->url($param->{url});
      $box->network(1 => {
         type => "nat",
      });

      # only works with network type = nat
      # if an ssh key is present, rex will use this to log into the vm
      # you need this if you don't run VirtualBox on your local host.
      $box->forward_port(ssh => [2222 => 22]);

      $box->share_folder("myhome" => "/home/jan");

      $box->auth(
         user => "root",
         password => "box",
      );

      $box->setup(qw/install_webserver/);
   };

 };

 task "down", sub {

   my $param = shift;

   my $box = Rex::Commands::Box->new(name => $param->{name});
   $box->stop;
 };

 task "install_webserver", sub {
   install "apache2";
 };

Copy to clipboard

 # Rexfile

 task foo => sub {
 };
 task example => sub {
 };
 task example2 => sub {
 };

  set auth for qr{^example\d$} =>
     user => "example",
     password => "foob4r";

Copy to clipboard

 task "add-repo", "server1", "server2", sub {
   repository add => myrepo => {
      Ubuntu => {
         url => "http://foo.bar/repo",
         distro => "precise",
         repository => "foo",
      },
      Debian => {
         url => "http://foo.bar/repo",
         distro => "squeeze",
         repository => "foo",
      },
      CentOS => {
         url => "http://foo.bar/repo",
      },
   };
 };

The key that is used is the return value of get_operating_system().

It is also possible to add an after hook like this:

Copy to clipboard

 task "add-repo", "server1", "server2", sub {
   repository add => myrepo => {
      Ubuntu => {
         url => "http://foo.bar/repo",
         distro => "precise",
         repository => "foo",
         after => sub {
              # import gpg key
         },
      },
      Debian => {
         url => "http://foo.bar/repo",
         distro => "squeeze",
         repository => "foo",
         after => sub {
              # import gpg key
         },
      },
      CentOS => {
         url => "http://foo.bar/repo",
         after => sub {
              # import gpg key
         },
      },
   };
 };
Google Group / Twitter / GitHub / Mailinglist / irc.freenode.net #rex   -.ô.-   Disclaimer