You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by ar...@apache.org on 2010/09/22 19:35:32 UTC

svn commit: r1000099 - in /incubator/vcl/trunk/managementnode/lib/VCL/Module: OS/Windows.pm OS/Windows/Version_5.pm OS/Windows/Version_6.pm Provisioning/VMware/VMware.pm

Author: arkurth
Date: Wed Sep 22 17:35:32 2010
New Revision: 1000099

URL: http://svn.apache.org/viewvc?rev=1000099&view=rev
Log:
VCL-145
Updated Windows.pm and Version_5.pm so that Windows 5.x image capture processes don't fail if Sysprep is enabled and no stroage driver .inf files are found.

VCL-298
Updated VMware.pm to remove the VM from the VM host when the VM is unassigned via the website.

Other
Added calls to kill the logon screen saver process in the Windows code before a reboot or shutdown is attempted. This occasionally causes a reboot or shutdown to hang.

Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm?rev=1000099&r1=1000098&r2=1000099&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm Wed Sep 22 17:35:32 2010
@@ -3132,7 +3132,10 @@ sub reboot {
 			notify($ERRORS{'WARNING'}, 0, "reboot not attempted, failed to enable ping from private IP addresses");
 			return 0;
 		}
-
+		
+		# Kill the screen saver process, it occasionally prevents reboots and shutdowns from working
+		$self->kill_process('logon.scr');
+		
 		# Initiate the shutdown.exe command to reboot the computer
 		my $shutdown_command = $system32_path . "/shutdown.exe -r -t 0 -f";
 		my ($shutdown_exit_status, $shutdown_output) = run_ssh_command($computer_node_name, $management_node_keys, $shutdown_command);
@@ -3276,6 +3279,9 @@ sub shutdown {
 	my $computer_node_name   = $self->data->get_computer_node_name();
 	my $system32_path        = $self->get_system32_path() || return;
 	
+	# Kill the screen saver process, it occasionally prevents reboots and shutdowns from working
+	$self->kill_process('logon.scr');
+	
 	my $shutdown_command = "/bin/cygstart.exe $system32_path/cmd.exe /c \"";
 	
 	if ($disable_dhcp) {
@@ -8742,12 +8748,7 @@ sub get_driver_inf_paths {
 	elsif (defined($grep_output)) {
 		my @inf_paths = grep(/:[\\\/]/, @$grep_output);
 		notify($ERRORS{'DEBUG'}, 0, "found " . scalar(@inf_paths) . " driver .inf paths, grep output:\n". join("\n", @$grep_output));
-		if (@inf_paths) {
-			return @inf_paths;
-		}
-		else {
-			return 0;
-		}
+		return @inf_paths;
 	}
 	elsif (defined($grep_exit_status)) {
 		notify($ERRORS{'WARNING'}, 0, "failed to find driver paths, exit status: $grep_exit_status, output:\n@{$grep_output}");

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm?rev=1000099&r1=1000098&r2=1000099&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_5.pm Wed Sep 22 17:35:32 2010
@@ -266,6 +266,9 @@ sub run_sysprep {
 		notify($ERRORS{'WARNING'}, 0, "unable to configure firewall to allow sessmgr.exe program, Sysprep may hang");
 	}
 	
+	# Kill the screen saver process, it occasionally prevents reboots and shutdowns from working
+	$self->kill_process('logon.scr');
+	
 	# Assemble the Sysprep command
 	# Run Sysprep.exe, use cygstart to lauch the .exe and return immediately
 	my $sysprep_command = "/bin/cygstart.exe $system32_path/cmd.exe /c \"";
@@ -477,18 +480,19 @@ sub get_sysprep_inf_contents {
 	
 	# Add the SysprepMassStorage section
 	my $mass_storage_section = $self->get_sysprep_inf_mass_storage_section();
-	if (!$mass_storage_section) {
+	if ($mass_storage_section) {
+		$sysprep_contents .= "[SysprepMassStorage]\n$mass_storage_section";
+	}
+	elsif (!defined($mass_storage_section)) {
 		notify($ERRORS{'WARNING'}, 0, "unable to build sysprep.inf SysprepMassStorage section");
 		return;
 	}
-	else {
-		$sysprep_contents .= "[SysprepMassStorage]\n$mass_storage_section";
-	}
+	
 	
 	# Replace Unix\Linux newlines with Windows newlines
 	$sysprep_contents =~ s/\n/\r\n/g;
 	
-	notify($ERRORS{'DEBUG'}, 0, "sysprep.inf contents:\n" . string_to_ascii($sysprep_contents));
+	notify($ERRORS{'DEBUG'}, 0, "sysprep.inf contents:\n$sysprep_contents");
 	return $sysprep_contents;
 }
 
@@ -524,8 +528,8 @@ sub get_sysprep_inf_mass_storage_section
 	my @storage_inf_paths = $self->get_driver_inf_paths('scsiadapter');
 	#my @storage_inf_paths = $self->get_driver_inf_paths('(scsiadapter|hdc)');
 	if (!@storage_inf_paths) {
-		notify($ERRORS{'WARNING'}, 0, "failed to locate storage driver .inf paths");
-		return;
+		notify($ERRORS{'OK'}, 0, "no storage driver .inf paths were found");
+		return '';
 	}
 	
 	# Extract hardware IDs from each storage driver .inf file 

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm?rev=1000099&r1=1000098&r2=1000099&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows/Version_6.pm Wed Sep 22 17:35:32 2010
@@ -1588,6 +1588,9 @@ EOF
 	# Display licensing information
 	$self->run_slmgr_dlv();
 	
+	# Kill the screen saver process, it occasionally prevents reboots and shutdowns from working
+	$self->kill_process('logon.scr');
+	
 	# Run Sysprep.exe, use cygstart to lauch the .exe and return immediately
 	my $sysprep_command = "/bin/cygstart.exe $system32_path/cmd.exe /c \"";
 	

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=1000099&r1=1000098&r2=1000099&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 Wed Sep 22 17:35:32 2010
@@ -1053,7 +1053,9 @@ sub get_vmhost_api_object {
 
  Parameters  : none
  Returns     : boolean
- Description : 
+ Description : Removes VMs from a VMware host which were previously created for
+               the VM. It only removes VMs created for the VM assigned to the
+               reservation. It does not delete all VM's from the host.
 
 =cut
 
@@ -4120,23 +4122,12 @@ sub post_maintenance_action {
 	my $computer_short_name = $self->data->get_computer_short_name();
 	my $vmhost_hostname = $self->data->get_vmhost_hostname();
 	
-	my $vmx_file_path = $self->get_vmx_file_path();
-	if (!$vmx_file_path) {
-		notify($ERRORS{'WARNING'}, 0, "vmx file path could not be determined");
+	# Delete the existing VM from the VM host which were created for the VM assigned to the reservation
+	if (!$self->remove_existing_vms()) {
+		notify($ERRORS{'WARNING'}, 0, "failed to delete existing VMs on VM host $vmhost_hostname which were created for VM $computer_short_name");
 		return;
 	}
-	
-	# Delete the existing VM from the VM host
-	if ($self->vmhost_os->file_exists($vmx_file_path)) {
-		if (!$self->delete_vm($vmx_file_path)) {
-			notify($ERRORS{'WARNING'}, 0, "failed to delete VM on VM host $vmhost_hostname: $vmx_file_path");
-			return;
-		}
-	}
-	else {
-		notify($ERRORS{'OK'}, 0, "vmx file does not exist on the VM host $vmhost_hostname: $vmx_file_path");
-	}
-	
+
 	if (switch_vmhost_id($computer_id, 'NULL')) {
 		notify($ERRORS{'OK'}, 0, "set vmhostid to NULL for for VM $computer_short_name");
 	}