diff --git a/perl-xCAT/xCAT/NodeRange.pm b/perl-xCAT/xCAT/NodeRange.pm index e89eb4c96..a06364efd 100644 --- a/perl-xCAT/xCAT/NodeRange.pm +++ b/perl-xCAT/xCAT/NodeRange.pm @@ -222,11 +222,11 @@ sub extnoderange { #An extended noderange function. Needed as the more straight } my $return; $retaincache=1; - $return->{nodes}=[noderange($range,$verify)]; + $return->{node}=[noderange($range,$verify)]; if ($namedopts->{intersectinggroups}) { my %grouphash=(); my $nlent; - foreach (@{$return->{nodes}}) { + foreach (@{$return->{node}}) { $nlent=$nodelist->getNodeAttribs($_,['groups']); if ($nlent and $nlent->{groups}) { foreach (split /,/,$nlent->{groups}) { diff --git a/xCAT-server/sbin/xcatd b/xCAT-server/sbin/xcatd index 9197bfd95..5263ac913 100755 --- a/xCAT-server/sbin/xcatd +++ b/xCAT-server/sbin/xcatd @@ -594,7 +594,7 @@ sub plugin_command { my $sock = shift; my $callback = shift; my %handler_hash; - use xCAT::NodeRange; + use xCAT::NodeRange qw/extnoderange nodesmissed noderange/; $Main::resps={}; my @nodes; if ($req->{node}) { @@ -1101,6 +1101,16 @@ sub service_connection { } print $sock XMLout(\%resp,RootName => 'xcatresponse',NoAttr=>1); next; + } elsif ($req->{command}->[0] eq "extnoderange" and $req->{noderange}) { #This is intended for the UIs to build trees + #as this would be part of a highly dynamic construct, it has a shortcut here to minimize server load + my $subgroups=0; + if ($req->{arg} and grep /subgroups/,@{$req->{arg}}) { + $subgroups=1; + } + my %resp=%{extnoderange($req->{noderange}->[0],{intersectinggroups=>$subgroups})}; + $resp{serverdone}={}; + print $sock XMLout(\%resp,RootName => 'xcatresponse',NoAttr=>1); + next; } else { my %resp=(error=>"Unsupported request"); $resp{serverdone} = {};