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
 


Reply via email to