Rex::Co...lization(3)

πŸ“¦ version 1.14.3, in nixos 26.05, nixpkgs unstable

πŸ’… 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