Rex::Co...lization(3)
π NAME π
Okay bestie, welcome to the manual page for Rex::Co...lization(3) β a User Contributed Perl Documentation page for Rex::Commands::Virtualization, the Virtualization module. π¦
π DESCRIPTION π
This module is your lil remote for managing your virtualization. π
Version <= 1.0: All these functions will not be reported.
All these functions are not idempotent β no cap, do not treat a re-run as a safe lil undo button. π
β¨ SYNOPSIS β¨
Peep the whole vibe: load the module, pick your virtualization backend with set virtualization => "LibVirt"; or set virtualization => "VBox";, then use the vm function for everything. Dumper is just there to show you what comes back. π
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. That's the whole toolbox β you can manage everything with this function. No extra exports, no surprises. β¨
π EXAMPLES π
π Creating a Virtual Machine π
First up: create a (VirtualBox) VM named "vm01" with 512 MB ram and 1 cpu. It has one harddrive, 10 GB in size being a file on disk. There's 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";
Next: create a (KVM) VM named "vm01" with 512 MB ram and 1 cpu. One harddrive, 10 GB in size being a file on disk. There's 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,
},
];
Now make 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";
Then create a (Xen/PVM) VM named "vm01" with 512 MB ram and 1 cpu. With one root partition (10GB in size) and one swap partition (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. That's it, bestie β memory only for now. π
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";
That's the whole page, bestie! Cute lil sign-off: this is Rex::Co...lization(3) from perl v5.42.3, dated 2023-08-05. Mwah πβ¨
π¦ where this page comes from
- nixos 26.05: perl5.42.3-Rex 1.14.3
- nixpkgs unstable: perl5.42.3-Rex 1.14.3
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms