xcat-core/xCAT-server/lib/xcat/plugins/xCATWorld.pm

121 lines
2.7 KiB
Perl
Raw Normal View History

# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
#-------------------------------------------------------
=head1
xCAT plugin package to handle xCATWorld
Supported command:
xCATWorld->xCATWorld
=cut
#-------------------------------------------------------
package xCAT_plugin::xCATWorld;
use Sys::Hostname;
use xCAT::Table;
use xCAT::Utils;
use xCAT::MsgUtils;
use Getopt::Long;
1;
#-------------------------------------------------------
=head3 handled_commands
Return list of commands handled by this plugin
=cut
#-------------------------------------------------------
sub handled_commands
{
return {xCATWorld => "xCATWorld"};
}
#-------------------------------------------------------
=head3 preprocess_request
Check and setup for hierarchy
=cut
#-------------------------------------------------------
sub preprocess_request
{
my $req = shift;
my $callback = shift;
my %sn;
#if already preprocessed, go straight to request
if (($req->{_xcatpreprocessed}) and ($req->{_xcatpreprocessed}->[0] == 1) ) { return [$req]; }
my $nodes = $req->{node};
my $service = "xcat";
# find service nodes for requested nodes
# build an individual request for each service node
if ($nodes) {
$sn = xCAT::Utils->get_ServiceNode($nodes, $service, "MN");
# build each request for each service node
foreach my $snkey (keys %$sn)
{
my $n=$sn->{$snkey};
print "snkey=$snkey, nodes=@$n\n";
my $reqcopy = {%$req};
$reqcopy->{node} = $sn->{$snkey};
$reqcopy->{'_xcatdest'} = $snkey;
$reqcopy->{_xcatpreprocessed}->[0] = 1;
push @requests, $reqcopy;
}
return \@requests;
} else { # input error
my %rsp;
$rsp->{data}->[0] = "Input noderange missing. Useage: xCATWorld <noderange> \n";
xCAT::MsgUtils->message("I", $rsp, $callback, 0);
return 1;
}
}
#-------------------------------------------------------
=head3 process_request
Process the command
=cut
#-------------------------------------------------------
sub process_request
{
my $request = shift;
my $callback = shift;
my $nodes = $request->{node};
my $command = $request->{command}->[0];
my $args = $request->{arg};
my $envs = $request->{env};
my %rsp;
my $i = 1;
my @nodes=@$nodes;
# do your processing here
# return info
my $host=hostname();
$rsp->{data}->[0] = "Hello World from $host! I can process the following nodes:";
xCAT::MsgUtils->message("I", $rsp, $callback, 0);
foreach $node (@nodes)
{
$rsp->{data}->[$i] = "$node";
$i++;
}
xCAT::MsgUtils->message("I", $rsp, $callback, 0);
return;
}