Provided by: rex_1.14.3-1_all
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 Amazon, KVM and VirtualBox. Version <= 1.0: All these functions will not be reported.
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"; };