NAME
Rex::Commands::Virtualization - Virtualization module
DESCRIPTION
With this module you can manage your virtualization.
Version <= 1.0: All these functions will not be reported.
All these functions are not idempotent.
SYNOPSIS
use Rex::Commands::Virtualization;
set virtualization => "LibVirt";
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",
max_memory => 1024*1024,
memory => 512*1024;
print Dumper vm info => "vm01";
# creating a vm on a kvm host
vm create => "vm01",
storage => [
{
file => "/mnt/data/libvirt/images/vm01.img",
dev => "vda",
}
];
print Dumper vm hypervisor => "capabilities";
EXPORTED FUNCTIONS
vm($action => $name, %option)
This module only exports the vm function. You can manage everything with this function.
EXAMPLES
Creating a Virtual Machine
Create a (VirtualBox) VM named "vm01" with 512 MB ram and 1 cpu. One harddrive, 10 GB in size being a file on disk. With a cdrom as an iso image and a natted network. The bootorder is set to "dvd".
vm create => "vm01",
storage => [
{
file => "/mnt/data/vbox/vm01.img",
size => "10G",
},
{
file => "/mnt/iso/debian6.iso",
}
],
memory => 512,
type => "Linux26",
cpus => 1,
boot => "dvd";
Create a (KVM) VM named "vm01" with 512 MB ram and 1 cpu. One harddrive, 10 GB in size being a file on disk. With a cdrom as an iso image and a bridged network on the bridge virbr0. The Bootorder is set to "cdrom".
vm create => "vm01",
boot => "cdrom",
storage => [
{
size => "10G",
file => "/mnt/data/libvirt/images/vm01.img",
},
{
file => "/mnt/data/iso/debian-6.0.2.1-amd64-netinst.iso",
},
];
This is the same as above, but with all options in use.
vm create => "vm01",
memory => 512*1024,
cpus => 1,
arch => "x86_64",
boot => "cdrom",
clock => "utc",
emulator => "/usr/bin/qemu-system-x86_64",
on_poweroff => "destroy",
on_reboot => "restart",
on_crash => "restart",
storage => [
{ type => "file",
size => "10G",
device => "disk",
driver_type => "qcow2", # supports all formats qemu-img supports.
file => "/mnt/data/libvirt/images/vm01.img",
dev => "vda",
bus => "virtio",
address => {
type => "pci",
domain => "0x0000",
bus => "0x00",
slot => "0x05",
function => "0x0",
},
},
{ type => "file",
device => "cdrom",
file => "/mnt/data/iso/debian-6.0.2.1-amd64-netinst.iso",
dev => "hdc",
bus => "ide",
readonly => 1,
address => {
type => "drive",
controller => 0,
bus => 1,
unit => 0,
},
},
],
network => [
{ type => "bridge",
bridge => "virbr0",
model => "virtio",
address => {
type => "pci",
domain => "0x0000",
bus => "0x00",
slot => "0x03",
function => "0x0",
},
},
],
serial_devices => [
{
type => 'tcp',
host => '127.0.0.1',
port => 12345,
},
];
Create a (Xen/HVM) VM named "vm01" with 512 MB ram and 1 cpu. One harddrive, cloned from an existing one.
vm create => "vm01",
type => "hvm",
storage => [
{
file => "/mnt/data/libvirt/images/vm01.img",
template => "/mnt/data/libvirt/images/svn01.img",
},
];
This is the same as above, but with all options in use.
vm create => "vm01",
memory => 512*1024,
cpus => 1,
boot => "hd",
clock => "utc",
on_poweroff => "destroy",
on_reboot => "restart",
on_crash => "restart",
storage => [
{ type => "file",
size => "10G",
device => "disk",
file => "/mnt/data/libvirt/images/vm01.img",
dev => "hda",
bus => "ide",
template => "/mnt/data/libvirt/images/svn01.img",
},
{ type => "file",
device => "cdrom",
dev => "hdc",
bus => "ide",
readonly => 1,
},
],
network => [
{ type => "bridge",
bridge => "virbr0",
},
],
type => "hvm";
Create a (Xen/PVM) VM named "vm01" with 512 MB ram and 1 cpu. With one root partition (10GB in size) and one swap parition (1GB in size).
vm create => "vm01",
type => "pvm",
storage => [
{
file => "/mnt/data/libvirt/images/domains/vm01/disk.img",
dev => "xvda2",
is_root => 1,
},
{
file => "/mnt/data/libvirt/images/domains/vm01/swap.img",
dev => "xvda1",
},
];
This is the same as above, but with all options in use.
vm create => "vm01",
type => "pvm",
memory => 512*1024,
cpus => 1,
clock => "utc",
on_poweroff => "destroy",
on_reboot => "restart",
on_crash => "restart",
os => {
type => "linux",
kernel => "/boot/vmlinuz-2.6.32-5-xen-amd64",
initrd => "/boot/initrd.img-2.6.32-5-xen-amd64",
cmdline => "root=/dev/xvda2 ro",
},
storage => [
{ type => "file",
size => "10G",
device => "disk",
file => "/mnt/data/libvirt/images/domains/vm01/disk.img",
dev => "xvda2",
bus => "xen",
aio => 1, # if you want to use aio
},
{ type => "file",
size => "4G",
device => "disk",
file => "/mnt/data/libvirt/images/domains/vm01/swap.img",
dev => "xvda1",
bus => "xen",
aio => 1, # if you want to use aio
},
],
network => [
{ type => "bridge",
bridge => "virbr0",
},
];
Start/Stop/Destroy
Start a stopped vm
vm start => "name";
Stop a running vm (send shutdown signal)
vm shutdown => "name";
Hard Stop a running vm
vm destroy => "name";
Delete
vm delete => "name";
Modifying a VM
Currently you can only modify the memory.
vm option => "name",
max_memory => 1024*1024, # in bytes
memory => 512*1024;
Request information of a vm
vm info => "name";
Request info from the underlying hypervisor
vm hypervisor => "capabilities";