Rex::C...ization(3pm)
β¨ NAME β¨
Rex::Commands::Virtualization β the Virtualization module π
no cap, that's literally its whole government name.
π¦ DESCRIPTION π¦
okay so bestie, plot twist: with this module you can manage your virtualization. that's it, that's the vibe. your VMs? handled. π«Ά
but before you get too excited, two things you need to know:
- Version <= 1.0: All these functions will not be reported. not a drill, just how it is.
- All these functions are not idempotent. i'm saying it loud because it MATTERS β running the same thing twice is not the same as running it once, so don't just yeet commands and assume it's chill π
πΈ SYNOPSIS πΈ
here's the whole vibe in code, bestie:
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";
see how it's all just vm doing everything? main character energy, honestly. π
π EXPORTED FUNCTIONS π
vm($action => $name, %option)
This module only exports the vm function. that's right β one function to rule them all, and you can manage everything with it. it's giving "one girl, infinite tasks" π
π EXAMPLES π
Creating a Virtual Machine
the VirtualBox situation π¦
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";
the KVM situation π
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. (yes, ALL of them. we're going maximalist π )
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,
},
];
the Xen/HVM situation π₯
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";
the Xen/PVM situation π
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).
(yes, the original says "parition". we respect the original. canon. π)
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";
hard stop. dramatic. iconic. girlboss move, honestly. π
Delete
vm delete => "name";
(poof. gone. π)
Modifying a VM
Currently you can only modify the memory. that's the whole menu, bestie, no secret items π
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";
and that's the whole page, bestie!! this one came to you straight out of the User Contributed Perl Documentation, brought to you by perl v5.40.1, dated 2025-10-03. now go make some VMs and slay π«Άβ¨π
π¦ where this page comes from
- ubuntu resolute: rex 1.16.1-1 Β· Apache-2.0
- ubuntu stonking: rex 1.16.1-1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms