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");