You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by fa...@apache.org on 2010/04/28 21:29:41 UTC
svn commit: r939062 -
/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT2.pm
Author: fapeeler
Date: Wed Apr 28 19:29:41 2010
New Revision: 939062
URL: http://svn.apache.org/viewvc?rev=939062&view=rev
Log:
VCL-239
hardcoding xCAT group member ship so correct postscripts will be run based on the vcl project name from the image profile table.
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT2.pm
Modified: incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT2.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT2.pm?rev=939062&r1=939061&r2=939062&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT2.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/xCAT2.pm Wed Apr 28 19:29:41 2010
@@ -858,6 +858,15 @@ sub capture {
return 0;
} # Close _edit_nodetype failed
+ # Create the tmpl file for the image
+ if ($self->_create_template()) {
+ notify($ERRORS{'OK'}, 0, "created .tmpl file for $image_name");
+ }
+ else {
+ notify($ERRORS{'WARNING'}, 0, "failed to create .tmpl file for $image_name");
+ return 0;
+ }
+
# edit nodelist table
if ($self->_edit_nodelist($computer_node_name, 1)) {
notify($ERRORS{'OK'}, 0, "nodelist updated for $computer_node_name");
@@ -1057,6 +1066,78 @@ sub capture_monitor {
#/////////////////////////////////////////////////////////////////////////////
+=head2 _create_template
+ Parameters : image name (optional)
+ Returns : true if successful, false if failed
+ Description : Creates a template file for the image specified for the reservation.
+
+=cut
+
+sub _create_template {
+ my $self = shift;
+ if (ref($self) !~ /xCAT/i) {
+ notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
+ return;
+ }
+
+ # Get the image name
+ my $image_name = shift;
+ $image_name = $self->data->get_image_name() if !$image_name;
+ if (!$image_name) {
+ notify($ERRORS{'WARNING'}, 0, "failed to create template file, image name could not be retrieved");
+ return 0;
+ }
+
+ notify($ERRORS{'DEBUG'}, 0, "attempting to create tmpl file for image: $image_name");
+
+ # Get the image template repository path
+ my $tmpl_repository_path = $self->_get_image_template_path();
+ if (!$tmpl_repository_path) {
+ notify($ERRORS{'WARNING'}, 0, "xCAT template repository information could not be determined") ;
+ return 0;
+ }
+
+ # Get the base template filename
+ my $basetmpl = $self->_get_base_template_filename();
+ if (!$basetmpl) {
+ notify($ERRORS{'WARNING'}, 0, "base template filename could not be determined");
+ return 0;
+ }
+ # Make a copy of the base template file
+ my $cp_output = `/bin/cp -fv $tmpl_repository_path/$basetmpl $tmpl_repository_path/$image_name.tmpl 2>&1`;
+ my $cp_exit_status = $? >> 8;
+
+ # Check if $? = -1, this likely means a Perl CHLD signal bug was encountered
+ if ($? == -1) {
+ notify($ERRORS{'OK'}, 0, "\$? is set to $?, setting exit status to 0, Perl bug likely encountered");
+ $cp_exit_status = 0;
+ }
+
+ if ($cp_exit_status == 0) {
+ notify($ERRORS{'DEBUG'}, 0, "copied $basetmpl to $tmpl_repository_path/$image_name.tmpl, output:\n$cp_output");
+ }
+ else {
+ notify($ERRORS{'WARNING'}, 0, "failed to copy $basetmpl to $tmpl_repository_path/$image_name.tmpl, returning undefined, exit status: $cp_exit_status, output:\n$cp_output");
+ return;
+ }
+
+ # Make sure template file was created
+ # -s File has nonzero size
+ my $tmpl_file_exists;
+ if (-s "$tmpl_repository_path/$image_name.tmpl") {
+ notify($ERRORS{'DEBUG'}, 0, "confirmed template file exists: $tmpl_repository_path/$image_name.tmpl");
+ }
+ else {
+ notify($ERRORS{'WARNING'}, 0, "template file should have been copied but does not exist: $tmpl_repository_path/$image_name.tmpl, returning undefined");
+ return;
+ }
+
+ notify($ERRORS{'OK'}, 0, "successfully created template file: $image_name.tmpl");
+ return 1;
+} ## end sub _create_template
+
+#/////////////////////////////////////////////////////////////////////////////
+
=head2 _edit_template
Parameters : imagename,drivetype
@@ -1296,10 +1377,20 @@ sub _edit_nodelist {
# Get the rest of the variables
$computer_node_name = $self->data->get_computer_node_name() if !$computer_node_name;
my $image_os_install_type = $self->data->get_image_os_install_type();
+ my $image_project = $self->data->get_image_project();
+
# FIXME undo hardcode
if ($installmode) {
$image_os_install_type = 'partimage';
}
+
+ # Set postscript group name.
+ # vcl = compute
+ # vclhpc = vclhpc, should have xCAT group for specific postscripts
+ my $postscript_project = $image_project;
+ if($image_project eq "vcl"){
+ $postscript_project = "compute";
+ }
# Check to make sure the variables are populated
if (!$computer_node_name) {
@@ -1312,6 +1403,7 @@ sub _edit_nodelist {
}
notify($ERRORS{'DEBUG'}, 0, "$computer_node_name, installtype=$image_os_install_type");
+ notify($ERRORS{'DEBUG'}, 0, "$computer_node_name, postscript_project=$postscript_project");
my $oldlist = '';
my $newlist = '';
@@ -1326,26 +1418,12 @@ sub _edit_nodelist {
$oldlist = $l;
notify($ERRORS{'DEBUG'}, 0, "l is $l");
if ($image_os_install_type eq 'partimage') {
- # want 'image' to be in the list
- if ($newlist !~ /image/) {
- $newlist = "$newlist,image";
- }
- # do not want 'compute' to be in the list
- if ($newlist =~ /compute/) {
- $newlist =~ s/compute(,)?//;
- $newlist =~ s/,$//;
- }
+ #this is a partimage based install
+ $newlist = "all,blade,image";
} ## end if ($image_os_install_type eq 'partimage')
else {
- # do not want 'image' to be in the list
- if ($newlist =~ /image/) {
- $newlist =~ s/image(,)?//;
- $newlist =~ s/,$//;
- }
- # want 'compute' to be in the list
- if ($newlist !~ /compute/) {
- $newlist = "$newlist,compute";
- }
+ # this is a kickstart based install
+ $newlist = "all,blade,$postscript_project";
} ## end else [ if ($image_os_install_type eq 'partimage')
} ## end foreach my $l (@file)
notify($ERRORS{'DEBUG'}, 0, "old nodelist.groups=$oldlist, new nodelist.groups=$newlist");