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 hostvm 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 bytesmemory => 512*1024;
Request information of a vm
vm info => "name";
Request info from the underlying hypervisor
vm hypervisor => "capabilities";