Author: arkurth
Date: Fri Jan 20 19:08:19 2012
New Revision: 1234080

URL: http://svn.apache.org/viewvc?rev=1234080&view=rev
Log:
VCL-554
Added pre_capture subroutine to OS.pm. This is called as the first step from 
the Windows.pm and Linux.pm pre_capture subroutines. It checks to make sure the 
computer is responding. If not responding, it checks if the computer is powered 
off and attempts to power it on. OS::pre_capture also creates the 
currentimage.txt file so this step no longer needs to be done in every 
provisioning module's capture subroutine.

Also changed the timing of the wait_for_response call in Linux::post_load. It 
had been waiting 60 seconds for the computer to boot. Some computers take less 
time. Changed to 30 seconds.

Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm?rev=1234080&r1=1234079&r2=1234080&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm Fri Jan 20 19:08:19 
2012
@@ -64,6 +64,70 @@ use VCL::utils;
 
 #/////////////////////////////////////////////////////////////////////////////
 
+=head2 pre_capture
+
+ Parameters  : $arguments->{end_state}
+ Returns     : boolean
+ Description : Performs the tasks common to all OS's that must be done to the
+               computer prior to capturing an image:
+               -Check if the computer is responding to SSH
+               -If not responding, check if computer is powered on
+               -Power on computer if powered off and wait for SSH to respond
+               -Create currentimage.txt file
+
+=cut
+
+sub pre_capture {
+       my $self = shift;
+       my $args = shift;
+       if (ref($self) !~ /VCL::Module/i) {
+               notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a 
function, it must be called as a class method");
+               return;
+       }
+       
+       my $computer_node_name = $self->data->get_computer_node_name();
+       notify($ERRORS{'OK'}, 0, "beginning common image capture preparation 
tasks");
+       
+       # Make sure the computer is responding to SSH
+       # If it is not, check if it is powered on
+       if (!$self->is_ssh_responding()) {
+               notify($ERRORS{'OK'}, 0, "$computer_node_name is not responding 
to SSH, checking if it is powered on");
+               my $power_status = $self->provisioner->power_status();
+               if (!$power_status) {
+                       notify($ERRORS{'WARNING'}, 0, "unable to complete 
capture preparation tasks, $computer_node_name is not responding to SSH and the 
power status could not be determined");
+                       return;
+               }
+               elsif ($power_status =~ /on/i) {
+                       notify($ERRORS{'WARNING'}, 0, "unable to complete 
capture preparation tasks, $computer_node_name is powered on but not responding 
to SSH");
+                       return;
+               }
+               else {
+                       notify($ERRORS{'DEBUG'}, 0, "$computer_node_name is 
powered off, attempting to power it on");
+                       if (!$self->provisioner->power_on()) {
+                               notify($ERRORS{'WARNING'}, 0, "unable to 
complete capture preparation tasks, $computer_node_name could not be powered 
on");
+                               return;
+                       }
+                       
+                       # Wait for computer to respond to SSH
+                       if (!$self->wait_for_response(30, 300, 10)) {
+                               notify($ERRORS{'WARNING'}, 0, "unable to 
complete capture preparation tasks, $computer_node_name never responded to SSH 
after it was powered on");
+                               return;
+                       }
+               }
+       }
+       
+       # Create the currentimage.txt file
+       if (!$self->create_currentimage_txt()) {
+               notify($ERRORS{'WARNING'}, 0, "failed to create 
currentimage.txt on $computer_node_name");
+               return 0;
+       }
+       
+       notify($ERRORS{'OK'}, 0, "completed common image capture preparation 
tasks");
+       return 1;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
 =head2 get_source_configuration_directories
 
  Parameters  : None

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm?rev=1234080&r1=1234079&r2=1234080&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Linux.pm Fri Jan 20 
19:08:19 2012
@@ -133,8 +133,15 @@ sub pre_capture {
        }
        
        my $computer_node_name = $self->data->get_computer_node_name();
+       
+       # Call OS::pre_capture to perform the pre-capture tasks common to all 
OS's
+       if (!$self->SUPER::pre_capture($args)) {
+               notify($ERRORS{'WARNING'}, 0, "failed to execute parent class 
pre_capture() subroutine");
+               return 0;
+       }
+       
        notify($ERRORS{'OK'}, 0, "beginning Linux-specific image capture 
preparation tasks");
-
+       
        if (!$self->file_exists("/root/.vclcontrol/vcl_exclude_list.sample")) {
       notify($ERRORS{'DEBUG'}, 0, "/root/.vclcontrol/vcl_exclude_list.sample 
does not exists");
                if(!$self->generate_vclcontrol_sample_files() ){
@@ -270,7 +277,7 @@ sub post_load {
        notify($ERRORS{'OK'}, 0, "initiating Linux post_load: $image_name on 
$computer_short_name");
 
        # Wait for computer to respond to SSH
-       if (!$self->wait_for_response(60, 600)) {
+       if (!$self->wait_for_response(30, 600, 10)) {
                notify($ERRORS{'WARNING'}, 0, "$computer_node_name never 
responded to SSH");
                return 0;
        }

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=1234080&r1=1234079&r2=1234080&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm Fri Jan 20 
19:08:19 2012
@@ -228,6 +228,12 @@ sub pre_capture {
 
        my $computer_node_name = $self->data->get_computer_node_name();
        my $image_os_install_type = $self->data->get_image_os_install_type();
+       
+       # Call OS::pre_capture to perform the pre-capture tasks common to all 
OS's
+       if (!$self->SUPER::pre_capture($args)) {
+               notify($ERRORS{'WARNING'}, 0, "failed to execute parent class 
pre_capture() subroutine");
+               return 0;
+       }
 
        notify($ERRORS{'OK'}, 0, "beginning Windows image capture preparation 
tasks on $computer_node_name");
 


Reply via email to