Author: arkurth
Date: Thu Feb 26 14:18:04 2009
New Revision: 748160

URL: http://svn.apache.org/viewvc?rev=748160&view=rev
Log:
VCL-94
Added set_provisioner() and provisioner() subroutines to OS.pm, allowing OS 
modules to access the provisioning module object.

Added set_os() and os() subroutines to Provisioning.pm, allowing provisioning 
modules to access the OS module object.

Added code to State.pm::initialize() calling the above-mentioned subroutines. 
This allows provisioning and OS module objects to access each other via 
$self->os and $self->provisioner.

Added a block to the beginning of image.pm::process() to call the provisioning 
module's capture() subroutine if it has been implemented. If it hasn't, the 
block is ignored and process() behaves exactly as it did before.

Made 2 minor changes in utils.pm. Added run_command to the EXPORT list. Added a 
check in run_scp_command() for the existence of 'no such file' in the output. 
This wasn't being caught.

Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning.pm
    incubator/vcl/trunk/managementnode/lib/VCL/Module/State.pm
    incubator/vcl/trunk/managementnode/lib/VCL/image.pm
    incubator/vcl/trunk/managementnode/lib/VCL/utils.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=748160&r1=748159&r2=748160&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/OS.pm Thu Feb 26 14:18:04 
2009
@@ -63,6 +63,45 @@
 
 #/////////////////////////////////////////////////////////////////////////////
 
+=head2 set_provisioner
+
+ Parameters  : None
+ Returns     : Process's provisioner object
+ Description : Sets the provisioner object for the OS module to access.
+
+=cut
+
+sub set_provisioner {
+       my $self = shift;
+       my $provisioner = shift;
+       $self->{provisioner} = $provisioner;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 provisioner
+
+ Parameters  : None
+ Returns     : Process's provisioner object
+ Description : Allows OS modules to access the reservation's provisioner
+               object.
+
+=cut
+
+sub provisioner {
+       my $self = shift;
+       
+       if (!$self->{provisioner}) {
+               notify($ERRORS{'WARNING'}, 0, "unable to return provisioner 
object, \$self->{provisioner} is not set");
+               return;
+       }
+       else {
+               return $self->{provisioner};
+       }
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
 1;
 __END__
 

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning.pm?rev=748160&r1=748159&r2=748160&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning.pm Thu Feb 
26 14:18:04 2009
@@ -63,6 +63,45 @@
 
 #/////////////////////////////////////////////////////////////////////////////
 
+=head2 set_os
+
+ Parameters  : None
+ Returns     : Process's OS object
+ Description : Sets the OS object for the provisioner module to access.
+
+=cut
+
+sub set_os {
+       my $self = shift;
+       my $os = shift;
+       $self->{os} = $os;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 os
+
+ Parameters  : None
+ Returns     : Process's OS object
+ Description : Allows provisioning modules to access the reservation's OS
+               object.
+
+=cut
+
+sub os {
+       my $self = shift;
+       
+       if (!$self->{os}) {
+               notify($ERRORS{'WARNING'}, 0, "unable to return OS object, 
\$self->{os} is not set");
+               return;
+       }
+       else {
+               return $self->{os};
+       }
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
 1;
 __END__
 

Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/State.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/State.pm?rev=748160&r1=748159&r2=748160&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/State.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/State.pm Thu Feb 26 
14:18:04 2009
@@ -163,28 +163,9 @@
        else {
                notify($ERRORS{'OK'}, 0, "OS module not loaded, Perl package is 
not defined");
        }
-
-       # Attempt to load the predictive loading module
-       #if ($predictive_perl_package) {
-       #       notify($ERRORS{'OK'}, 0, "attempting to load predictive loading 
module: $predictive_perl_package");
-       #       eval "use $predictive_perl_package";
-       #       if ($EVAL_ERROR) {
-       #               notify($ERRORS{'WARNING'}, 0, "$predictive_perl_package 
module could not be loaded");
-       #               notify($ERRORS{'OK'},      0, "returning 0");
-       #               return 0;
-       #       }
-       #       if (my $predictor = 
($predictive_perl_package)->new({data_structure => $self->data})) {
-       #               notify($ERRORS{'OK'}, 0, ref($predictor) . " predictive 
loading object successfully created");
-       #               $self->{predictor} = $predictor;
-       #       }
-       #       else {
-       #               notify($ERRORS{'WARNING'}, 0, "predictive loading 
object could not be created, returning 0");
-       #               return 0;
-       #       }
-       #} ## end if ($predictive_perl_package)
-       #else {
-       #       notify($ERRORS{'OK'}, 0, "predictive loading module not loaded, 
Perl package is not defined");
-       #}
+       
+       $self->{provisioner}->set_os($self->{os});
+       $self->{os}->set_provisioner($self->{provisioner});
 
        notify($ERRORS{'OK'}, 0, "returning 1");
        return 1;

Modified: incubator/vcl/trunk/managementnode/lib/VCL/image.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/image.pm?rev=748160&r1=748159&r2=748160&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/image.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/image.pm Thu Feb 26 14:18:04 2009
@@ -151,10 +151,26 @@
        my $timestamp = makedatestring();
        $self->data->set_image_lastupdate($timestamp);
        $self->data->set_imagerevision_date_created($timestamp);
-
-       # Call the create image subroutine in utils.pm
+       
        my $create_image_result;
-       if ($computer_type eq "blade" && $self->os) {
+       
+       # --- BEGIN NEW MODULARIZED METHOD ---
+       # Check if capture() subroutine has been implemented by the 
provisioning module
+       if ($self->provisioner->can("capture")) {
+               # Call the provisioning modules's capture() subroutine
+               # The provisioning module should do everything necessary to 
capture the image
+               notify($ERRORS{'OK'}, 0, "calling provisioning module's 
capture() subroutine");
+               if ($create_image_result = $self->provisioner->capture()) {
+                       notify($ERRORS{'OK'}, 0, "$image_name image was 
successfully captured by the provisioning module");
+               }
+               else {
+                       notify($ERRORS{'WARNING'}, 0, "$image_name image failed 
to be captured by provisioning module");
+                       $self->image_creation_failed();
+               }
+       }
+       # --- END NEW MODULARIZED METHOD ---
+
+       elsif ($computer_type eq "blade" && $self->os) {
                $create_image_result = 1;
 
                notify($ERRORS{'OK'}, 0, "OS modularization supported, 
beginning OS module capture prepare");

Modified: incubator/vcl/trunk/managementnode/lib/VCL/utils.pm
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=748160&r1=748159&r2=748160&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/utils.pm Thu Feb 26 14:18:04 2009
@@ -161,6 +161,7 @@
   reservations_ready
   restoresshkeys
   round
+  run_command
   run_scp_command
   run_ssh_command
   set_hash_process_id
@@ -6982,7 +6983,7 @@
                # Check the output for known error messages
                # Check the exit status
                # scp exits with 0 on success or >0 if an error occurred
-               if ($scp_exit_status > 0 || $scp_output =~ /lost 
connection|failed|reset by peer|no route to host/i) {
+               if ($scp_exit_status > 0 || $scp_output =~ /lost 
connection|failed|reset by peer|no route to host|no such file/i) {
                        notify($ERRORS{'WARNING'}, 0, "scp error occurred: 
attempt $attempts/$max_attempts, command: $scp_command, exit status: 
$scp_exit_status, output: $scp_output");
                        
                        # Temporary fix for problem of nodes using different 
ports


Reply via email to