195 lines
4.6 KiB
Perl
195 lines
4.6 KiB
Perl
|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
|
||
|
#-------------------------------------------------------
|
||
|
|
||
|
=head1
|
||
|
xCAT plugin package to tell xcatd daemon to rescan plugin directory
|
||
|
|
||
|
Supported command:
|
||
|
rescanplugins->rescanplugins
|
||
|
|
||
|
=cut
|
||
|
|
||
|
#-------------------------------------------------------
|
||
|
package xCAT_plugin::rescanplugins;
|
||
|
BEGIN
|
||
|
{
|
||
|
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
|
||
|
}
|
||
|
use lib "$::XCATROOT/lib/perl";
|
||
|
use xCAT::Utils;
|
||
|
use xCAT::MsgUtils;
|
||
|
use Getopt::Long;
|
||
|
use strict;
|
||
|
1;
|
||
|
|
||
|
#-------------------------------------------------------
|
||
|
|
||
|
=head3 handled_commands
|
||
|
|
||
|
Return list of commands handled by this plugin
|
||
|
|
||
|
=cut
|
||
|
|
||
|
#-------------------------------------------------------
|
||
|
|
||
|
sub handled_commands
|
||
|
{
|
||
|
return {rescanplugins => "rescanplugins"};
|
||
|
}
|
||
|
|
||
|
#-------------------------------------------------------
|
||
|
|
||
|
=head3 preprocess_request
|
||
|
|
||
|
If hierarchy, send request to xcatd on service nodes
|
||
|
|
||
|
=cut
|
||
|
|
||
|
#-------------------------------------------------------
|
||
|
sub preprocess_request
|
||
|
{
|
||
|
my $req = shift;
|
||
|
my $callback = shift;
|
||
|
my $subreq = shift;
|
||
|
$::CALLBACK=$callback;
|
||
|
my $args = $req->{arg};
|
||
|
my $envs = $req->{env};
|
||
|
|
||
|
|
||
|
#if already preprocessed, go straight to request
|
||
|
if (($req->{_xcatpreprocessed}) and
|
||
|
($req->{_xcatpreprocessed}->[0] == 1) ) { return [$req]; }
|
||
|
|
||
|
|
||
|
# do your processing here
|
||
|
# return info
|
||
|
if ($args) {
|
||
|
@ARGV = @{$args}; # get arguments
|
||
|
}
|
||
|
Getopt::Long::Configure("posix_default");
|
||
|
Getopt::Long::Configure("no_gnu_compat");
|
||
|
Getopt::Long::Configure("bundling");
|
||
|
my %options = ();
|
||
|
if (
|
||
|
!GetOptions(
|
||
|
'h|help' => \$options{'help'},
|
||
|
's|servicenodes' => \$options{'servicenodes'},
|
||
|
'v|version' => \$options{'version'},
|
||
|
'V|Verbose' => \$options{'verbose'}
|
||
|
)
|
||
|
)
|
||
|
{
|
||
|
&usage;
|
||
|
exit 1;
|
||
|
}
|
||
|
|
||
|
if ($options{'help'})
|
||
|
{
|
||
|
&usage;
|
||
|
exit 0;
|
||
|
}
|
||
|
|
||
|
if ($options{'version'})
|
||
|
{
|
||
|
my $version = xCAT::Utils->Version();
|
||
|
#$version .= "\n";
|
||
|
my $rsp={};
|
||
|
$rsp->{data}->[0] = $version;
|
||
|
xCAT::MsgUtils->message("I",$rsp,$callback, 0);
|
||
|
exit 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
if ( @ARGV && $ARGV[0] ) {
|
||
|
my $rsp={};
|
||
|
$rsp->{data}->[0] = "Ignoring arguments ". join(',',@ARGV);
|
||
|
xCAT::MsgUtils->message("I",$rsp,$callback, 0);
|
||
|
}
|
||
|
|
||
|
if ( $req->{node} && $req->{node}->[0] ) {
|
||
|
my $rsp={};
|
||
|
$rsp->{data}->[0] = "Ignoring nodes ". join(',',@{$req->{node}});
|
||
|
xCAT::MsgUtils->message("I",$rsp,$callback, 0);
|
||
|
$req->{node}=[];
|
||
|
}
|
||
|
|
||
|
if ($options{'servicenodes'}) {
|
||
|
|
||
|
# Run rescanplugins on MN and all service nodes
|
||
|
# build an individual request for each service node
|
||
|
my @requests;
|
||
|
my $MNreq = {%$req};
|
||
|
$MNreq->{_xcatpreprocessed}->[0] = 1;
|
||
|
push @requests, $MNreq;
|
||
|
|
||
|
foreach my $sn (xCAT::ServiceNodeUtils->getAllSN())
|
||
|
{
|
||
|
my $SNreq = {%$req};
|
||
|
$SNreq->{'_xcatdest'} = $sn;
|
||
|
$SNreq->{_xcatpreprocessed}->[0] = 1;
|
||
|
push @requests, $SNreq;
|
||
|
|
||
|
}
|
||
|
return \@requests; # return requests for all Service nodes
|
||
|
}
|
||
|
|
||
|
return [$req];
|
||
|
}
|
||
|
|
||
|
#-------------------------------------------------------
|
||
|
|
||
|
=head3 process_request
|
||
|
|
||
|
Process the command
|
||
|
|
||
|
=cut
|
||
|
|
||
|
#-------------------------------------------------------
|
||
|
sub process_request
|
||
|
{
|
||
|
my $req = shift;
|
||
|
my $callback = shift;
|
||
|
my $subreq = shift;
|
||
|
|
||
|
# The xcatd daemon should intercept this command and process it directly
|
||
|
|
||
|
print "in rescanplugins->process_request -- xcatd should process this request directly. WE SHOULD NEVER GET HERE \n";
|
||
|
my $rsp={};
|
||
|
$rsp->{data}->[0] = "in rescanplugins->process_request: xcatd should process this request directly. WE SHOULD NEVER GET HERE";
|
||
|
xCAT::MsgUtils->message("I", $rsp, $callback, 0);
|
||
|
return;
|
||
|
|
||
|
}
|
||
|
#-------------------------------------------------------------------------------
|
||
|
|
||
|
=head3
|
||
|
usage
|
||
|
|
||
|
puts out usage message for help
|
||
|
|
||
|
Arguments:
|
||
|
None
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
Globals:
|
||
|
|
||
|
Error:
|
||
|
None
|
||
|
|
||
|
|
||
|
=cut
|
||
|
|
||
|
#-------------------------------------------------------------------------------
|
||
|
|
||
|
sub usage
|
||
|
{
|
||
|
## usage message
|
||
|
my $usagemsg = " rescanplugins [-h|--help] \n rescanplugins [-v|--version] \n rescanplugins [-s|--servicenodes]\n";
|
||
|
### end usage mesage
|
||
|
my $rsp = {};
|
||
|
$rsp->{data}->[0] = $usagemsg;
|
||
|
xCAT::MsgUtils->message("I", $rsp, $::CALLBACK);
|
||
|
return;
|
||
|
}
|