Author: arkurth
Date: Thu Jan  5 17:12:55 2012
New Revision: 1227701

URL: http://svn.apache.org/viewvc?rev=1227701&view=rev
Log:
VCL-450
Commented out MemTrimRate=0, sched.mem.pshare.enable=FALSE, and 
mainMem.useNamedFile=FALSE values in the code that generates the vmx file. 
These parameters may have adverse performance affects under ESXi 4.x/5.x.

Fixed logic bug in prepare_vmdk. If a dedicated copy of the vmdk needs to be 
created, it was only checking if the file exists in the repository and not in 
the datastore. Updated to check both locations.

Updated get_vm_ethernet_adapter_type to attempt to retrieve the type from the 
reference vmx file if it exists instead of only using the default adapter type 
for the OS being loaded.

Added long timeout arguments to the vmkfstools and vmware-vdiskmanager commands 
which may take a long time.

Modified:
    
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm

Modified: 
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm?rev=1227701&r1=1227700&r2=1227701&view=diff
==============================================================================
--- 
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm 
(original)
+++ 
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm 
Thu Jan  5 17:12:55 2012
@@ -1750,9 +1750,9 @@ sub prepare_vmx {
                
                "virtualHW.version" => "$vm_hardware_version",
                
-               "MemTrimRate" => "0",
-               "sched.mem.pshare.enable" => "FALSE",
-               "mainMem.useNamedFile" => "FALSE",
+               #"MemTrimRate" => "0",
+               #"sched.mem.pshare.enable" => "FALSE",
+               #"mainMem.useNamedFile" => "FALSE",
        );
        
        #my $reservation_password     = $self->data->get_reservation_password();
@@ -1975,19 +1975,19 @@ sub prepare_vmdk {
                
                # Check if the vmdk file exists in the mounted repository
                my $repository_vmdk_file_path = 
$self->get_repository_vmdk_file_path();
-               if (!$self->vmhost_os->file_exists($repository_vmdk_file_path)) 
{
-                       notify($ERRORS{'WARNING'}, 0, "vmdk file does not exist 
in image repository directory mounted on VM host $vmhost_name: 
$repository_vmdk_file_path");
-                       return;
-               }
-               
-               # Attempt to copy the vmdk file from the mounted repository to 
the VM host datastore
-               if ($self->copy_vmdk($repository_vmdk_file_path, 
$host_vmdk_file_path)) {
-                       notify($ERRORS{'OK'}, 0, "copied vmdk from image 
repository to VM host $vmhost_name");
-                       return 1;
+               if ($self->vmhost_os->file_exists($repository_vmdk_file_path)) {
+                       # Attempt to copy the vmdk file from the mounted 
repository to the VM host datastore
+                       if ($self->copy_vmdk($repository_vmdk_file_path, 
$host_vmdk_file_path)) {
+                               notify($ERRORS{'OK'}, 0, "copied vmdk from 
image repository to VM host $vmhost_name");
+                               return 1;
+                       }
+                       else {
+                               notify($ERRORS{'WARNING'}, 0, "failed to copy 
vmdk from image repository to VM host $vmhost_name");
+                               return;
+                       }
                }
                else {
-                       notify($ERRORS{'WARNING'}, 0, "failed to copy vmdk from 
image repository to VM host $vmhost_name");
-                       return;
+                       notify($ERRORS{'DEBUG'}, 0, "vmdk file does not exist 
in image repository directory mounted on VM host $vmhost_name: 
$repository_vmdk_file_path");
                }
        }
        
@@ -4694,7 +4694,10 @@ sub get_vm_guest_os {
  Parameters  : none
  Returns     : string
  Description : Returns the appropriate ethernet virtualDev value to be used in
-               the vmx file.
+               the vmx file. If the reference vmx file exists for the image, 
the
+               type is retrieved from the ethernet0.virtualdev line in the 
file.
+               Otherwise the default adapter type for the OS being loaded is
+               returned.
 
 =cut
 
@@ -4705,6 +4708,21 @@ sub get_vm_ethernet_adapter_type {
                return;
        }
        
+       my $vm_ethernet_adapter_type;
+       
+       # Attempt to retrieve the type from the reference vmx file for the image
+       my $reference_vmx_file_info = $self->get_reference_vmx_info();
+       if ($reference_vmx_file_info) {
+               for my $vmx_key (keys %$reference_vmx_file_info) {
+                       if ($vmx_key =~ /ethernet0\.virtualDev/i) {
+                               $vm_ethernet_adapter_type = 
$reference_vmx_file_info->{$vmx_key};
+                               notify($ERRORS{'DEBUG'}, 0, "retrieved VM 
ethernet adapter type from reference vmx file: $vm_ethernet_adapter_type");
+                               return $vm_ethernet_adapter_type;
+                       }
+               }
+               notify($ERRORS{'DEBUG'}, 0, "unable to retrieve VM ethernet 
adapter type from reference vmx file, 'ethernet0\virtualDev' key does not 
exist");
+       }
+       
        my $vm_os_configuration = $self->get_vm_os_configuration() || return;
        return $vm_os_configuration->{"ethernet-virtualDev"};
 }
@@ -5364,7 +5382,7 @@ sub copy_vmdk {
                notify($ERRORS{'DEBUG'}, 0, "attempting to copy virtual disk 
using vmkfstools, disk type: $virtual_disk_type:\n'$source_vmdk_file_path' --> 
'$destination_vmdk_file_path'");
                
                $start_time = time;
-               my ($exit_status, $output) = 
$self->vmhost_os->execute($command);
+               my ($exit_status, $output) = 
$self->vmhost_os->execute($command, 1, 7200);
                if (!defined($output)) {
                        notify($ERRORS{'WARNING'}, 0, "failed to run command on 
VM host: $command");
                }
@@ -5388,7 +5406,7 @@ sub copy_vmdk {
                        my $vdisk_repair_command = "vmkfstools -x repair 
\"$source_vmdk_file_path\"";
                        notify($ERRORS{'DEBUG'}, 0, "attempting to repair 
virtual disk using vmkfstools: '$source_vmdk_file_path'");
                        
-                       my ($vdisk_repair_exit_status, $vdisk_repair_output) = 
$self->vmhost_os->execute($vdisk_repair_command);
+                       my ($vdisk_repair_exit_status, $vdisk_repair_output) = 
$self->vmhost_os->execute($vdisk_repair_command, 1, 3600);
                        if (!defined($vdisk_repair_output)) {
                                notify($ERRORS{'WARNING'}, 0, "failed to run 
command to repair the virtual disk: '$vdisk_repair_command'");
                        }
@@ -5421,7 +5439,7 @@ sub copy_vmdk {
                notify($ERRORS{'DEBUG'}, 0, "attempting to copy virtual disk 
using vmware-vdiskmanager, disk type: 2gbsparse:\n'$source_vmdk_file_path' --> 
'$destination_vmdk_file_path'");
                
                $start_time = time;
-               my ($exit_status, $output) = 
$self->vmhost_os->execute($vdisk_command);
+               my ($exit_status, $output) = 
$self->vmhost_os->execute($vdisk_command, 1, 7200);
                if (!defined($output)) {
                        notify($ERRORS{'WARNING'}, 0, "failed to run command on 
VM host: $vdisk_command");
                }
@@ -5438,7 +5456,7 @@ sub copy_vmdk {
                                my $vdisk_repair_command = "vmware-vdiskmanager 
-R \"$source_vmdk_file_path\"";
                                notify($ERRORS{'DEBUG'}, 0, "attempting to 
repair virtual disk using vmware-vdiskmanager: '$source_vmdk_file_path'");
                                
-                               my ($vdisk_repair_exit_status, 
$vdisk_repair_output) = $self->vmhost_os->execute($vdisk_repair_command);
+                               my ($vdisk_repair_exit_status, 
$vdisk_repair_output) = $self->vmhost_os->execute($vdisk_repair_command, 1, 
3600);
                                if (!defined($vdisk_repair_output)) {
                                        notify($ERRORS{'WARNING'}, 0, "failed 
to run command to repair the virtual disk: '$vdisk_repair_command'");
                                }
@@ -5643,7 +5661,7 @@ sub move_vmdk {
                # Try vmware-vdiskmanager
                notify($ERRORS{'OK'}, 0, "attempting to move vmdk file using 
vmware-vdiskmanager: $source_vmdk_file_path --> $destination_vmdk_file_path");
                my $vdisk_command = "vmware-vdiskmanager -n 
\"$source_vmdk_file_path\" \"$destination_vmdk_file_path\"";
-               my ($vdisk_exit_status, $vdisk_output) = 
$self->vmhost_os->execute($vdisk_command);
+               my ($vdisk_exit_status, $vdisk_output) = 
$self->vmhost_os->execute($vdisk_command, 1, 7200);
                if (!defined($vdisk_output)) {
                        notify($ERRORS{'WARNING'}, 0, "failed to execute 
'vmware-vdiskmanager' command on VM host to move vmdk file:\n$vdisk_command");
                }
@@ -5662,7 +5680,7 @@ sub move_vmdk {
                # Try vmkfstools
                notify($ERRORS{'OK'}, 0, "attempting to move vmdk file using 
vmkfstools: $source_vmdk_file_path --> $destination_vmdk_file_path");
                my $vmkfs_command = "vmkfstools -E \"$source_vmdk_file_path\" 
\"$destination_vmdk_file_path\"";
-               my ($vmkfs_exit_status, $vmkfs_output) = 
$self->vmhost_os->execute($vmkfs_command);
+               my ($vmkfs_exit_status, $vmkfs_output) = 
$self->vmhost_os->execute($vmkfs_command, 1, 7200);
                
                # There is no output if the command succeeded
                # Check to make sure the source file doesn't exist and the 
destination file does exist


Reply via email to