The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Rex::Commands::Box - Functions / Class to manage Virtual Machines

DESCRIPTION

This is a Module to manage Virtual Machines or Cloud Instances in a simple way. Currently it supports only VirtualBox.

SYNOPSIS

 use Rex::Commands::Box;
    
 set box => "VBox";
   
 group all_my_boxes => map { get_box($_->{name})->{ip} } list_boxes;
   
 task mytask => sub {
    
    box {
       my ($box) = @_;
       $box->name("boxname");
       $box->url("http://box.rexify.org/box/base-image.box");
          
       $box->network(1 => {
         type => "nat",
       });
           
       $box->network(1 => {
         type => "bridged",
         bridge => "eth0",
       });
          
       $box->forward_port(ssh => [2222, 22]);
          
       $box->share_folder(myhome => "/home/myuser");
          
       $box->auth(
         user => "root",
         password => "box",
       );
         
       $box->setup(qw/task_to_customize_box/);
       
    };
    
 };

EXPORTED FUNCTIONS

new(name => $box_name)

Constructor if used in OO mode.

 my $box = Rex::Commands::Box->new(name => "box_name");
box(sub {})

With this function you can create a new Rex/Box. The first parameter of this function is the Box object. With this object you can define your box.

 box {
    my ($box) = @_;
    $box->name("boxname");
    $box->url("http://box.rexify.org/box/base-image.box");
       
    $box->network(1 => {
      type => "nat",
    });
        
    $box->network(1 => {
      type => "bridged",
      bridge => "eth0",
    });
       
    $box->forward_port(ssh => [2222, 22]);
       
    $box->share_folder(myhome => "/home/myuser");
       
    $box->auth(
      user => "root",
      password => "box",
    );
      
    $box->setup(qw/task_to_customize_box/);
 };
 
list_boxes

This function returns an array of hashes containing all information that can be gathered from the hypervisor about the Rex/Box. This function doesn't start a Rex/Box.

 use Data::Dumper;
 task "get_infos", sub {
    my @all_boxes = list_boxes;
    print Dumper(\@all_boxes);
 };
get_box($box_name)

This function tries to gather all information of a Rex/Box. This function also starts a Rex/Box to gather all information of the running system.

 use Data::Dumper;
 task "get_box_info", sub {
    my $data = get_box($box_name);
    print Dumper($data);
 };
boxes($action, @data)

With this function you can control your boxes. Currently there are 3 actions.

init

This action can only be used if you're using a YAML file to describe your Rex/Boxes.

 task "prepare_boxes", sub {
    boxes "init";
 };
start

This action start one or more Rex/Boxes.

 task "start_boxes", sub {
    boxes "start", "box1", "box2";
 };
stop

This action stop one or more Rex/Boxes.

 task "stop_boxes", sub {
    boxes "stop", "box1", "box2";
 };