blankout the nodetype.provmethod is the state is boot or iscsiboot and the previous value is not install

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@4200 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
linggao 2009-09-22 17:59:56 +00:00
parent 88f43e7d28
commit ca46778694

View File

@ -144,17 +144,18 @@ sub setdestiny {
($state,$target) = split /=/,$state,2;
}
my $nodetypetable = xCAT::Table->new('nodetype', -create=>1);
if ($state eq 'install' or $state eq 'netboot') {
if ($state ne 'osimage') {
my $updateattribs;
if ($target) {
my $archentries = $nodetypetable->getNodesAttribs($req->{node},['supportedarchs']);
if ($target =~ /(.*)-(.*)-(.*)/) {
if ($target =~ /^([^-]*)-([^-]*)-(.*)/) {
$updateattribs->{os}=$1;
$updateattribs->{arch}=$2;
$updateattribs->{profile}=$3;
my $nodearch=$2;
foreach (@{$req->{node}}) {
if ($archentries->{$_}->[0]->{supportedarchs} and $archentries->{$_}->[0]->{supportedarchs} !~ /(^|,)$2(\z|,)/) {
$callback->({errorcode=>1,error=>"Requested architecture ".$updateattribs->{arch}." is not one of the architectures supported by $_ (per nodetype.supportedarchs, it supports ".$archentries->{$_}->[0]->{supportedarchs}.")"});
if ($archentries->{$_}->[0]->{supportedarchs} and $archentries->{$_}->[0]->{supportedarchs} !~ /(^|,)$nodearch(\z|,)/) {
$callback->({errorcode=>1,error=>"Requested architecture ".$nodearch." is not one of the architectures supported by $_ (per nodetype.supportedarchs, it supports ".$archentries->{$_}->[0]->{supportedarchs}.")"});
return;
}
} #end foreach
@ -164,9 +165,7 @@ sub setdestiny {
} #end if($target)
$updateattribs->{provmethod}=$state;
$nodetypetable->setNodesAttribs($req->{node},$updateattribs);
}
if ($state eq 'osimage') {
} else {
if (@{$req->{node}} == 0) { return;}
if ($target) {
my $osimagetable=xCAT::Table->new('osimage');
@ -281,6 +280,46 @@ sub setdestiny {
$callback->({error=>["Unknown state $state requested"],errorcode=>[1]});
return;
}
#blank out the nodetype.provmethod if the previous provisioning method is not 'install'
if ($state eq "iscsiboot" or $state eq "boot") {
my $nodetype = xCAT::Table->new('nodetype',-create=>1);
my $osimagetab = xCAT::Table->new('osimage', -create=>1);
my $ntents = $nodetype->getNodesAttribs($req->{node},[qw(os arch profile provmethod)]);
my @nodestoblank=();
my %osimage_hash=();
foreach (@{$req->{node}}) {
my $ntent = $ntents->{$_}->[0];
#if the previous nodeset staute is not install, then blank nodetype.provmethod
if ($ntent and $ntent->{provmethod}){
my $provmethod=$ntent->{provmethod};
if (($provmethod ne 'install') && ($provmethod ne 'netboot')) {
if (exists($osimage_hash{$provmethod})) {
$provmethod= $osimage_hash{$provmethod};
} else {
(my $ref) = $osimagetab->getAttribs({imagename => $provmethod}, 'provmethod');
if (($ref) && $ref->{provmethod}) {
$osimage_hash{$provmethod}=$ref->{provmethod};
$provmethod=$ref->{provmethod};
}
}
}
if ($provmethod ne 'install') {
push(@nodestoblank, $_);
}
}
} #end foreach
#now blank out the nodetype.provmethod
#print "nodestoblank=@nodestoblank\n";
if (@nodestoblank > 0) {
my $newhash;
$newhash->{provmethod}="";
$nodetype->setNodesAttribs(\@nodestoblank, $newhash);
}
}
if ($noupdate) { return; } #skip table manipulation if just doing 'enact'
foreach (@nodes) {
my $lstate = $state;