xcat-core/xCAT-server/lib/xcat/plugins/sinv.pm
2012-08-09 04:07:40 +00:00

160 lines
3.4 KiB
Perl

# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
#-------------------------------------------------------
=head1
xCAT plugin package to handle sinv
Supported command:
sinv - software/firmware inventory program
run xdsh or rinv. See man sinv.
=cut
#-------------------------------------------------------
package xCAT_plugin::sinv;
use strict;
require xCAT::Utils;
require xCAT::TableUtils;
require xCAT::ServiceNodeUtils;
require xCAT::MsgUtils;
require xCAT::SINV;
use Getopt::Long;
#-------------------------------------------------------
=head3 handled_commands
Return list of commands handled by this plugin
=cut
#-------------------------------------------------------
sub handled_commands
{
return {sinv => "sinv",};
}
#-------------------------------------------------------
=head3 preprocess_request ( handles hierachy, TBD)
=cut
#-------------------------------------------------------
#sub preprocess_request
#{
# my $req = shift;
# my $cb = shift;
# $::CALLBACK = $cb;
# my %sn;
# my $sn;
# if ($req->{_xcatpreprocessed}->[0] == 1) { return [$req]; }
# my $nodes = $req->{node};
# my $service = "xcat";
# my @requests;
# #display usage statement if -h and version if -v
# my $extrargs = $req->{arg};
# my @exargs=($req->{arg});
# if (ref($extrargs)) {
# @exargs=@$extrargs;
# }
# @ARGV=@exargs;
# $Getopt::Long::ignorecase=0;
# if(!GetOptions(
# 'h|help' => \$::HELP,
# 'v|version' => \$::VERSION)) {
# $req= {};
# #return;
# }
# if ($::HELP) {
# xCAT::SINV->usage();
# $req = {};
# return;
# }
# if ($::VERSION) {
# my $version = xCAT::Utils->Version();
# $version .= "\n";
# my $rsp = {};
# $rsp->{data}->[0] = $version;
# xCAT::MsgUtils->message("I", $rsp, $cb);
# $req= {};
# return;
# }
# if ($nodes) {
# # find service nodes for requested nodes
# # build an individual request for each service node
# $sn = xCAT::ServiceNodeUtils->get_ServiceNode($nodes, $service, "MN");
#
# # build each request for each service node
#
# foreach my $snkey (keys %$sn)
# {
# my $reqcopy = {%$req};
# $reqcopy->{node} = $sn->{$snkey};
# $reqcopy->{'_xcatdest'} = $snkey;
# $reqcopy->{_xcatpreprocessed}->[0] = 1
# push @requests, $reqcopy;
#
# }
# } else { # no nodes
# my $rsp = {};
# $rsp->{data}->[0] = "No noderange specified on the command.\n";
# xCAT::MsgUtils->message("E", $rsp, $cb);
# $req= {};
# return;
#
# }
# return \@requests;
# }
#
#-------------------------------------------------------
=head3 process_request
Process the command
=cut
#-------------------------------------------------------
sub process_request
{
my $request = shift;
my $callback = shift;
my $sub_req = shift;
sinv($request, $callback,$sub_req);
}
#-------------------------------------------------------
=head3 sinv
Parses Builds and runs the sinv
=cut
#-------------------------------------------------------
sub sinv
{
my ($request, $callback, $sub_req) = @_;
# parse input and run dsh
my @local_results =
xCAT::SINV->parse_and_run_sinv($request, $callback,
$sub_req);
my $rsp = {};
push @{$rsp->{data}}, @local_results;
xCAT::MsgUtils->message("I", $rsp, $callback);
return;
}
1;