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 2009/06/19 21:12:43 UTC

svn commit: r786633 - in /incubator/vcl/trunk/managementnode/lib/VCL: Module/Provisioning/vmware.pm Module/Provisioning/xCAT.pm Module/Provisioning/xCAT21.pm utils.pm

Author: arkurth
Date: Fri Jun 19 19:12:42 2009
New Revision: 786633

URL: http://svn.apache.org/viewvc?rev=786633&view=rev
Log:
VCL-165
Added check to utils.pm::write_currentimage_txt to make sure $ssh_output is defined before trying to access it. This was causing processes to die and be left in the pending state because the following error occurred: "Can't use an undefined value as an ARRAY reference"

Added "return 0" to the capture() sub in vmware.pm, xCAT.pm, and xCAT21.pm if write_currentimage_txt failed. It wasn't catching this. Not having the correct currentimage.txt saved in an image may cause unnecessary reloads.

Added several checks in vmware.pm to make sure result is defined after running run_ssh_command before attempting to use it. If ssh command failed, the process would die because of a "Can't use an undefined value as an ARRAY reference" error and the reservation would be left in the pending state.

Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm
    incubator/vcl/trunk/managementnode/lib/VCL/utils.pm

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm?rev=786633&r1=786632&r2=786633&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/vmware.pm Fri Jun 19 19:12:42 2009
@@ -1203,6 +1203,7 @@
 	}
 	else {
 		notify($ERRORS{'WARNING'}, 0, "$notify_prefix unable to update currentimage.txt on $computer_shortname");
+		return 0;
 	}
 
 	# Set some vm paths and names
@@ -1885,6 +1886,10 @@
 		#common checks
 		notify($ERRORS{'OK'}, 0, "checking for base image on $hostnode $datastorepath");
 		@sshcmd = run_ssh_command($hostnode, $identity, "ls -1 $datastorepath", "root");
+		if (!@sshcmd) {
+			notify($ERRORS{'WARNING'}, 0, "failed to run ssh command: ls -1 $datastorepath");
+			return 0;
+		}
 		notify($ERRORS{'OK'}, 0, "@{ $sshcmd[1] }");
 		foreach my $l (@{$sshcmd[1]}) {
 			if ($l =~ /denied|No such/) {
@@ -1918,6 +1923,10 @@
 			##find the correct vmx file for this node -- if running
 			undef @sshcmd;
 			@sshcmd = run_ssh_command($hostnode, $identity, "vmware-cmd -l", "root");
+			if (!@sshcmd) {
+				notify($ERRORS{'WARNING'}, 0, "failed to run ssh command: vmware-cmd -l");
+				return 0;
+			}
 			foreach my $l (@{$sshcmd[1]}) {
 				chomp($l);
 				next if ($l =~ /Warning:/);
@@ -1931,12 +1940,20 @@
 
 					notify($ERRORS{'OK'}, 0, "my vmx $l_myvmx");
 					my @sshcmd_1 = run_ssh_command($hostnode, $identity, "vmware-cmd $l_myvmx getstate");
+					if (!@sshcmd_1) {
+						notify($ERRORS{'WARNING'}, 0, "failed to run ssh command: vmware-cmd $l_myvmx getstate");
+						return 0;
+					}
 					foreach my $l (@{$sshcmd_1[1]}) {
 						if ($l =~ /= off/) {
 							#good - move on
 						}
 						elsif ($l =~ /= on/) {
 							my @sshcmd_2 = run_ssh_command($hostnode, $identity, "vmware-cmd $l_myvmx stop hard");
+							if (!@sshcmd_2) {
+								notify($ERRORS{'WARNING'}, 0, "failed to run ssh command: vmware-cmd $l_myvmx stop hard");
+								return 0;
+							}
 							foreach my $l (@{$sshcmd_2[1]}) {
 								next if ($l =~ /Warning:/);
 								if ($l =~ /= 1/) {
@@ -1953,6 +1970,10 @@
 							#list processes for vmx and kill pid
 							notify($ERRORS{'OK'}, 0, "vm reported in stuck state, attempting to kill process");
 							my @ssh_pid = run_ssh_command($hostnode, $identity, "vmware-cmd -q $l_myvmx getpid");
+							if (!@ssh_pid) {
+								notify($ERRORS{'WARNING'}, 0, "failed to run ssh command: vmware-cmd -q $l_myvmx getpid");
+								return 0;
+							}
 							foreach my $p (@{$ssh_pid[1]}) {
 								if ($p =~ /(\D*)(\s*)([0-9]*)/) {
 									notify($ERRORS{'OK'}, 0, "vm pid= $3");
@@ -1970,6 +1991,10 @@
 					    #unregister
 					undef @sshcmd_1;
 					@sshcmd_1 = run_ssh_command($hostnode, $identity, "vmware-cmd -s unregister $l_myvmx ");
+					if (!@sshcmd_1) {
+						notify($ERRORS{'WARNING'}, 0, "failed to run ssh command: vmware-cmd -s unregister $l_myvmx");
+						return 0;
+					}
 					foreach my $l (@{$sshcmd_1[1]}) {
 						notify($ERRORS{'OK'}, 0, "vm $l_myvmx unregistered") if ($l =~ /= 1/);
 					}
@@ -1992,6 +2017,10 @@
 				notify($ERRORS{'OK'}, 0, "turning off $myvmx");
 				undef @sshcmd;
 				@sshcmd = run_ssh_command($hostnode, $identity, "vmware-cmd $myvmx stop hard", "root");
+				if (!@sshcmd) {
+					notify($ERRORS{'WARNING'}, 0, "failed to run ssh command: vmware-cmd $myvmx stop hard");
+					return 0;
+				}
 				foreach my $l (@{$sshcmd[1]}) {
 					if ($l) {
 						notify($ERRORS{'OK'}, 0, "$myvmx strange output $l");
@@ -2002,6 +2031,10 @@
 				#confirm
 				undef @sshcmd;
 				@sshcmd = run_ssh_command($hostnode, $identity, "vmware-cmd $myvmx getstate", "root");
+				if (!@sshcmd) {
+					notify($ERRORS{'WARNING'}, 0, "failed to run ssh command: vmware-cmd $myvmx getstate7");
+					return 0;
+				}
 				foreach my $l (@{$sshcmd[1]}) {
 					if ($l =~ /= off/) {
 						#good

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm?rev=786633&r1=786632&r2=786633&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT.pm Fri Jun 19 19:12:42 2009
@@ -1237,6 +1237,7 @@
 	}
 	else {
 		notify($ERRORS{'WARNING'}, 0, "unable to update currentimage.txt on $computer_short_name");
+		return 0;
 	}
 
 	# Check if pre_capture() subroutine has been implemented by the OS module

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm?rev=786633&r1=786632&r2=786633&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT21.pm Fri Jun 19 19:12:42 2009
@@ -1334,6 +1334,7 @@
 	}
 	else {
 		notify($ERRORS{'WARNING'}, 0, "unable to update currentimage.txt on $computer_short_name");
+		return 0;
 	}
 	
 	# Check if pre_capture() subroutine has been implemented by the OS module

Modified: incubator/vcl/trunk/managementnode/lib/VCL/utils.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=786633&r1=786632&r2=786633&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/utils.pm Fri Jun 19 19:12:42 2009
@@ -6953,10 +6953,14 @@
 		notify($ERRORS{'OK'}, 0, "created currentimage.txt file on $computer_node_name:\n" . join "\n", @{$ssh_output});
 		return 1;
 	}
-	else {
+	elsif (defined($ssh_output)) {
 		notify($ERRORS{'WARNING'}, 0, "failed to create currentimage.txt file on $computer_node_name:\n" . join "\n", @{$ssh_output});
 		return;
 	}
+	else {
+		notify($ERRORS{'WARNING'}, 0, "failed to run ssh command to create currentimage.txt file on $computer_node_name");
+		return;
+	}
 
 } ## end sub write_currentimage_txt