diff --git a/perl-xCAT/xCAT/Utils.pm b/perl-xCAT/xCAT/Utils.pm index c5721cfb8..977f7a319 100644 --- a/perl-xCAT/xCAT/Utils.pm +++ b/perl-xCAT/xCAT/Utils.pm @@ -4542,6 +4542,7 @@ sub splitkcmdline{ #Input Params: # $osvers: the osname of the osimage,i.e,rhels7.1,sles11.3,ubuntu14.04.1 ... # $osarch: the osarch of the osimage,i.e, x86_64,ppc64,ppc64le ... +# $imagetype: the osimage.imagetype, i.e, Linux,NIM #Return value: # a string of the possible noderes.netboot values delimited with comma "," # i.e, "pxe,xnba", empty on fail. @@ -4553,6 +4554,7 @@ sub lookupNetboot{ $osvers=shift; } my $osarch=shift; + my $imgtype=shift; my $ret=""; my $osv; @@ -4569,19 +4571,21 @@ sub lookupNetboot{ $osm = 0; } - - if ($osarch =~ /^x86_64$/i){ - $ret= "xnba,pxe"; - }elsif($osarch =~ /^ppc64$/i){ - if(($osv =~ /rh/i and $osn < 7) or ($osv =~ /sles/i and $osn < 12)){ - $ret="yaboot"; - }else{ - $ret="grub2,grub2-tftp,grub2-http"; + if($imgtype =~ /^NIM$/i){ + $ret="nimol"; + }elsif($imgtype =~ /^Linux$/i){ + if ($osarch =~ /^x86_64$/i){ + $ret= "xnba,pxe"; + }elsif($osarch =~ /^ppc64$/i){ + if(($osv =~ /rh/i and $osn < 7) or ($osv =~ /sles/i and $osn < 12)){ + $ret="yaboot"; + }else{ + $ret="grub2,grub2-tftp,grub2-http"; + } + }elsif($osarch =~ /^ppc64le$/i or $osarch =~ /^ppc64el$/i){ + $ret="petiboot,grub2,grub2-tftp,grub2-http"; } - }elsif($osarch =~ /^ppc64le$/i or $osarch =~ /^ppc64el$/i){ - $ret="petitboot,grub2,grub2-tftp,grub2-http"; - } - + } return $ret; } diff --git a/xCAT-server/lib/xcat/plugins/destiny.pm b/xCAT-server/lib/xcat/plugins/destiny.pm index 0020f4fa3..c0c86926d 100755 --- a/xCAT-server/lib/xcat/plugins/destiny.pm +++ b/xCAT-server/lib/xcat/plugins/destiny.pm @@ -208,7 +208,7 @@ sub setdestiny { if (@{$req->{node}} == 0) { return;} if ($target) { my $osimagetable=xCAT::Table->new('osimage'); - (my $ref) = $osimagetable->getAttribs({imagename => $target}, 'provmethod', 'osvers', 'profile', 'osarch'); + (my $ref) = $osimagetable->getAttribs({imagename => $target}, 'provmethod', 'osvers', 'profile', 'osarch','imagetype'); if ($ref) { if ($ref->{provmethod}) { @@ -222,10 +222,8 @@ sub setdestiny { $errored =1; $callback->({errorcode=>[1],error=>"Cannot find the OS image $target on the osimage table."}); return; } - - #if the noderes.netboot is invalid for the specified osimage provision - #report error and exit - my $netbootval=xCAT::Utils->lookupNetboot($ref->{osvers},$ref->{osarch}); + + my $netbootval=xCAT::Utils->lookupNetboot($ref->{osvers},$ref->{osarch},$ref->{imagetype}); unless($netbootval =~ /$curnetboot/i){ $errored =1; $callback->({errorcode=>[1],error=> [join(",",@{$req->{node}}).":stop configuration because $curnetboot DOES NOT work for provision of $target, please choose the correct noderes.netboot value in the subset \"$netbootval\",see description of 'netboot' attributes in 'tabdump -d noderes' for details."]}); @@ -258,11 +256,11 @@ sub setdestiny { if (($osimage) && ($osimage ne 'install') && ($osimage ne 'netboot') && ($osimage ne 'statelite')) { if (!exists($updatestuff->{$osimage})) { my $osimagetable=xCAT::Table->new('osimage'); - (my $ref) = $osimagetable->getAttribs({imagename => $osimage}, 'provmethod', 'osvers', 'profile', 'osarch'); + (my $ref) = $osimagetable->getAttribs({imagename => $osimage}, 'provmethod', 'osvers', 'profile', 'osarch','imagetype'); if ($ref) { #check whether the noderes.netboot is set appropriately #if not,push the nodes into $invalidosimghash->{$osimage}->{netboot} - my $netbootval=xCAT::Utils->lookupNetboot($ref->{osvers},$ref->{osarch}); + my $netbootval=xCAT::Utils->lookupNetboot($ref->{osvers},$ref->{osarch},$ref->{imagetype}); if($netbootval =~ /$curnetboot/i){ push(@validnodes,$tmpnode); }else{