Provided by: rex_1.14.3-1_all bug

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 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. 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";