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
set
virtualization
=>
"LibVirt"
;
set
virtualization
=>
"VBox"
;
use
Data::Dumper;
Dumper vm
list
=>
"all"
;
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;
Dumper vm
info
=>
"vm01"
;
# creating a vm on a kvm host
vm
create
=>
"vm01"
,
storage
=> [
{
file
=>
"/mnt/data/libvirt/images/vm01.img"
,
dev
=>
"vda"
,
}
];
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"
;