Libvirt is an open source toolkit which can interact with KVM, Xen, and several other virtualization architectures.
...
...
A master disk image is stored in the location specified by the datastore path in the VM host profile. A copy on write virtual disk image is created for each virtual machine when it is loaded. The master disk image is used as a read-only backing file for the copy on write disk images. Each VM writes to its own copy on write disk image. Using copy on write virtual disks allows VMs to be loaded without having to create a complete copy of the master disk image.
Anchor | ||||
---|---|---|---|---|
|
HTML |
---|
<?xml version="1.0" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>VCL::Provisioning::libvirt - VCL provisioning module to support the libvirt toolkit</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <link rev="made" href="mailto:root@localhost" /> </head> <body style="background-color: white"> <p><a name="__index__"></a></p> <!-- INDEX BEGIN --> <ul> <li><a href="#name">NAME</a></li> <li><a href="#synopsis">SYNOPSIS</a></li> <li><a href="#description">DESCRIPTION</a></li> <li><a href="#object_methods">OBJECT METHODS</a></li> <ul> <li><a href="#initialize">initialize</a></li> <li><a href="#load">load</a></li> <li><a href="#capture">capture</a></li> <li><a href="#node_status">node_status</a></li> <li><a href="#does_image_exist">does_image_exist</a></li> <li><a href="#get_image_size">get_image_size</a></li> <li><a href="#get_image_repository_search_paths">get_image_repository_search_paths</a></li> <li><a href="#power_status">power_status</a></li> <li><a href="#power_on">power_on</a></li> <li><a href="#power_off">power_off</a></li> <li><a href="#power_reset">power_reset</a></li> <li><a href="#post_maintenance_action">post_maintenance_action</a></li> </ul> <li><a href="#private_methods">PRIVATE METHODS</a></li> <ul> <li><a href="#driver">driver</a></li> <li><a href="#get_driver_name">get_driver_name</a></li> <li><a href="#get_domain_name">get_domain_name</a></li> <li><a href="#get_domain_file_base_name">get_domain_file_base_name</a></li> <li><a href="#get_domain_xml_directory_path">get_domain_xml_directory_path</a></li> <li><a href="#get_domain_xml_file_path">get_domain_xml_file_path</a></li> <li><a href="#get_master_image_directory_path">get_master_image_directory_path</a></li> <li><a href="#get_master_image_file_path">get_master_image_file_path</a></li> <li><a href="#get_copy_on_write_file_path">get_copy_on_write_file_path</a></li> <li><a href="#delete_existing_domains">delete_existing_domains</a></li> <li><a href="#delete_domain">delete_domain</a></li> <li><a href="#generate_domain_xml">generate_domain_xml</a></li> <li><a href="#get_domain_info">get_domain_info</a></li> <li><a href="#get_domain_xml">get_domain_xml</a></li> <li><a href="#domain_exists">domain_exists</a></li> <li><a href="#get_snapshot_info">get_snapshot_info</a></li> <li><a href="#create_snapshot">create_snapshot</a></li> <li><a href="#delete_snapshot">delete_snapshot</a></li> <li><a href="#get_image_size_bytes">get_image_size_bytes</a></li> <li><a href="#find_repository_image_file_paths">find_repository_image_file_paths</a></li> </ul> <li><a href="#see_also">SEE ALSO</a></li> </ul> <!-- INDEX END --> <hr /> <p> </p> <h1><a name="name">NAME</a></h1> <p>VCL::Provisioning::libvirt - VCL provisioning module to support the libvirt toolkit</p> <p> </p> <hr /> <h1><a name="synopsis">SYNOPSIS</a></h1> <pre> use VCL::Module::Provisioning::libvirt; my $provisioner = (VCL::Module::Provisioning::libvirt)->new({data_structure => $self->data});</pre> <p> </p> <hr /> <h1><a name="description">DESCRIPTION</a></h1> <pre> Provides support allowing VCL to provisioning resources supported by the libvirt toolkit. <a href="http://libvirt.org">http://libvirt.org</a></pre> <p> </p> <hr /> <h1><a name="object_methods">OBJECT METHODS</a></h1> <p> </p> <h2><a name="initialize">initialize</a></h2> <pre> Parameters : none Returns : boolean Description : Enumerates the libvirt driver modules directory: lib/VCL/Module/Provisioning/libvirt/ Attempts to create and initialize an object for each hypervisor driver module found in this directory. The first driver module object successfully initialized is used. This object is made accessible within this module via $self->driver. This allows libvirt support driver modules to be added without having to alter the code in libvirt.pm.</pre> <p> </p> <h2><a name="load">load</a></h2> <pre> Parameters : none Returns : boolean Description : Loads the requested image on the domain:</pre> <ul> <li> <p>Destroy and delete any domains have already been defined for the computer assigned to this reservation.</p> </li> <li> <p>Construct the default libvirt XML definition for the domain.</p> </li> <li> <p>Call the libvirt driver module's 'extend_domain_xml' subroutine if it is implemented. Pass the default domain XML definition hash reference as an argument. The 'extend_domain_xml' subroutine may add or modify XML values. This allows the driver module to customize the XML specific to that driver.</p> </li> <li> <p>Call the driver module's 'pre_define' subroutine if it is implemented. This subroutine completes any necessary tasks which are specific to the driver being used prior to defining the domain.</p> </li> <li> <p>Create a text file on the node containing the domain XML definition.</p> </li> <li> <p>Define the domain on the node by calling 'virsh define <XML file>'.</p> </li> <li> <p>Power on the domain.</p> </li> <li> <p>Call the domain guest OS module's 'post_load' subroutine if implemented.</p> </li> </ul> <p> </p> <h2><a name="capture">capture</a></h2> <pre> Parameters : none Returns : boolean Description : Captures the image currently loaded on the computer.</pre> <p> </p> <h2><a name="node_status">node_status</a></h2> <pre> Parameters : $computer_id (optional) Returns : string Description : Checks the status of the computer in order to determine if the computer is ready to be reserved or needs to be reloaded. A string is returned depending on the status of the computer: 'READY': * Computer is ready to be reserved * It is accessible * It is loaded with the correct image * OS module's post-load tasks have run 'POST_LOAD': * Computer is loaded with the correct image * OS module's post-load tasks have not run 'RELOAD': * Computer is not accessible or not loaded with the correct image</pre> <p> </p> <h2><a name="does_image_exist">does_image_exist</a></h2> <pre> Parameters : $image_name (optional) Returns : array (boolean) Description : Checks if the requested image exists on the node or in the repository. If the image exists, an array containing the image file paths is returned. A boolean evaluation can be done on the return value to simply determine if an image exists.</pre> <p> </p> <h2><a name="get_image_size">get_image_size</a></h2> <pre> Parameters : $image_name (optional) Returns : integer Description : Returns the size of the image in megabytes.</pre> <p> </p> <h2><a name="get_image_repository_search_paths">get_image_repository_search_paths</a></h2> <pre> Parameters : $management_node_identifier (optional) Returns : array Description : Returns an array containing paths on the management node where an image may reside. The paths may contain wildcards. This is used to attempt to locate an image on another managment node in order to retrieve it.</pre> <p> </p> <h2><a name="power_status">power_status</a></h2> <pre> Parameters : $domain_name (optional) Returns : string Description : Determines the power state of the domain. A string is returned containing one of the following values: * 'on' * 'off' * 'suspended'</pre> <p> </p> <h2><a name="power_on">power_on</a></h2> <pre> Parameters : $domain_name (optional) Returns : boolean Description : Powers on the domain. Returns true if the domain was successfully powered on or was already powered on.</pre> <p> </p> <h2><a name="power_off">power_off</a></h2> <pre> Parameters : $domain_name Returns : boolean Description : Powers off the domain. Returns true if the domain was successfully powered off or was already powered off.</pre> <p> </p> <h2><a name="power_reset">power_reset</a></h2> <pre> Parameters : $domain_name (optional) Returns : boolean Description : Resets the power of the domain by powering it off and then back on.</pre> <p> </p> <h2><a name="post_maintenance_action">post_maintenance_action</a></h2> <pre> Parameters : none Returns : boolean Description : Performs tasks to the computer after it has been put into maintenance mode.</pre> <p> </p> <hr /> <h1><a name="private_methods">PRIVATE METHODS</a></h1> <p> </p> <h2><a name="driver">driver</a></h2> <pre> Parameters : none Returns : Libvirt driver object Description : Returns a reference to the libvirt driver object which is created when this libvirt.pm module is initialized.</pre> <p> </p> <h2><a name="get_driver_name">get_driver_name</a></h2> <pre> Parameters : none Returns : string Description : Returns the name of the libvirt driver being used to control the node. Example: 'KVM'</pre> <p> </p> <h2><a name="get_domain_name">get_domain_name</a></h2> <pre> Parameters : none Returns : string Description : Returns the name of the domain. This name is passed to various virsh commands. It is also the name displayed in virt-manager. Example: 'vclv99-197:vmwarewin7-Windows764bit1846-v3'</pre> <p> </p> <h2><a name="get_domain_file_base_name">get_domain_file_base_name</a></h2> <pre> Parameters : none Returns : string Description : Returns the base name for files created for the current reservation. A file extension is not included. This file name is used for the domain's XML definition file and it's copy on write image file. Example: 'vclv99-37_234-v23'</pre> <p> </p> <h2><a name="get_domain_xml_directory_path">get_domain_xml_directory_path</a></h2> <pre> Parameters : none Returns : string Description : Returns the directory path on the node where domain definition XML files reside. The directory used is: '/tmp/vcl'</pre> <p> </p> <h2><a name="get_domain_xml_file_path">get_domain_xml_file_path</a></h2> <pre> Parameters : none Returns : string Description : Returns the domain XML definition file path on the node. Example: '/tmp/vcl/vclv99-37_234-v23.xml'</pre> <p> </p> <h2><a name="get_master_image_directory_path">get_master_image_directory_path</a></h2> <pre> Parameters : none Returns : string Description : Returns the directory path on the node where the master image files reside. Example: '/var/lib/libvirt/images'</pre> <p> </p> <h2><a name="get_master_image_file_path">get_master_image_file_path</a></h2> <pre> Parameters : $image_name (optional) Returns : string Description : Returns the path on the node where the master image file resides. Example: '/var/lib/libvirt/images/vmwarelinux-RHEL54Small2251-v1.qcow2'</pre> <p> </p> <h2><a name="get_copy_on_write_file_path">get_copy_on_write_file_path</a></h2> <pre> Parameters : none Returns : string Description : Returns the path on the node where the copy on write file for the domain resides. Example: '/var/lib/libvirt/images/vclv99-197_2251-v1.qcow2'</pre> <p> </p> <h2><a name="delete_existing_domains">delete_existing_domains</a></h2> <pre> Parameters : none Returns : boolean Description : Deletes existing domains which were previously created for the computer assigned to the current reservation.</pre> <p> </p> <h2><a name="delete_domain">delete_domain</a></h2> <pre> Parameters : $domain_name Returns : boolean Description : Deletes a domain from the node.</pre> <p> </p> <h2><a name="generate_domain_xml">generate_domain_xml</a></h2> <pre> Parameters : none Returns : string Description : Generates a string containing the XML definition for the domain. </pre> <p> </p> <h2><a name="get_domain_info">get_domain_info</a></h2> <pre> Parameters : none Returns : hash reference Description : Retrieves information about all of the domains defined on the node and constructs a hash containing the information. Example: "vclv99-197:vmwarewin7-Windows764bit1846-v3" => { "id" => 135, "state" => "paused" }, "vclv99-37:vmwarewinxp-base234-v23" => { "state" => "shut off" } </pre> <p> </p> <h2><a name="get_domain_xml">get_domain_xml</a></h2> <pre> Parameters : $domain_name Returns : hash reference Description : Retrieves the XML definition of a domain already defined on the node. Generates a hash using XML::Simple::XMLin. </pre> <p> </p> <h2><a name="domain_exists">domain_exists</a></h2> <pre> Parameters : $domain_name Returns : boolean Description : Determines if the domain is defined on the node. </pre> <p> </p> <h2><a name="get_snapshot_info">get_snapshot_info</a></h2> <pre> Parameters : $domain_name Returns : hash reference Description : Retrieves snapshot information for the domain specified by the argument and constructs a hash. The hash keys are the snapshot names. Example: "VCL snapshot" => { "creation_time" => "2011-12-07 16:05:50 -0500", "state" => "shutoff" } </pre> <p> </p> <h2><a name="create_snapshot">create_snapshot</a></h2> <pre> Parameters : $domain_name, $description Returns : boolean Description : Creates a snapshot of the domain specified by the argument. </pre> <p> </p> <h2><a name="delete_snapshot">delete_snapshot</a></h2> <pre> Parameters : $domain_name, $snapshot Returns : boolean Description : Deletes a snapshot created of the domain specified by the argument. </pre> <p> </p> <h2><a name="get_image_size_bytes">get_image_size_bytes</a></h2> <pre> Parameters : $image_name (optional) Returns : integer Description : Returns the size of the image in bytes. </pre> <p> </p> <h2><a name="find_repository_image_file_paths">find_repository_image_file_paths</a></h2> <pre> Parameters : $image_name (optional) Returns : array Description : Locates valid image files stored in the image repository. Searches for all files beginning with the image name and then checks the results to remove any files which should not be included. File extensions which are excluded: vmx, txt, xml If multiple vmdk files are found it is assumed that the image is one of the split vmdk formats and the <image name>.vmdk contains the descriptor information. This file is excluded because it causes qemu-img to fail. </pre> <p> </p> <hr /> <h1><a name="see_also">SEE ALSO</a></h1> <p><a href="http://cwiki.apache.org/VCL/">http://cwiki.apache.org/VCL/</a> </p> </body> </html> |
...