(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 » 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

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.

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";
};

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

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

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

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
            },
        },
    };
};

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