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/02/26 15:18:04 UTC
svn commit: r748160 - in /incubator/vcl/trunk/managementnode/lib/VCL:
Module/OS.pm Module/Provisioning.pm Module/State.pm image.pm utils.pm
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