xcat-core/xCAT-client-2.0/bin/xcatDBcmds

131 lines
3.1 KiB
Perl
Executable File

#!/usr/bin/perl
# !/usr/bin/env perl
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
BEGIN
{
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : -d '/opt/xcat' ? '/opt/xcat' : '/usr';
}
use lib "$::XCATROOT/lib/perl";
use File::Basename;
use xCAT::MsgUtils;
use xCAT::Client submit_request;
my $bname = basename($0);
#########################################
# Main
#
# xcatDBcmds
#
# Build hash and submit request
#
# Handles: mkdef, chdef, lsdef, rmdef commands
#
# Note: The subroutines that implement these commands
# are in /usr/lib/xcat/plugins/DBobjectdefs.pm
# on the xCAT management node
#
#########################################
my $cmdref;
# set the command name to pass to the plugin
if ($bname =~ /xcatDBcmds/)
{
$cmdref->{command}->[0] = shift @ARGV;
}
elsif ($bname =~ /^(.*$)/)
{
$cmdref->{command}->[0] = $1;
}
else
{
printf("Bad usage\n");
exit 1;
}
# get info from files piped in as stdin
if (-p STDIN) {
my $data;
while ( <STDIN> ) {
$data.=$_;
}
$cmdref->{stdin}->[0]=$data;
}
# add all the cmd line args to the hash - to pass to the plugin subroutine
foreach (@ARGV)
{
push(@{$cmdref->{arg}}, $_);
}
# Is it necessary to pass the node range through the client-server path ??
#
# !!!!!
#
# BUT - also want to pass in a list of object definitions that are
# not noderanges
#
#
# In any case - this doesn't work for mkdef & chdef because we may be
# creating the node definition for the first time
#
#if (!($bname =~ /mkdef/))
if (0)
{
#
# We need to see if a noderange was provided on the command line
# - the command line could be flags(options) -> noderange -> attr=val pairs
# - the noderange is used by xCAT remote access support infrastructure
# so we need to set it now
#
use Getopt::Long;
# Allows opts to be grouped (e.g. -avx)
Getopt::Long::Configure("bundling");
# parse the options
if (
!GetOptions(
'all|a' => \$::opt_a,
'dynamic|d' => \$::opt_d,
'f|force' => \$::opt_f,
'i=s' => \$::opt_i,
'help|h' => \$::opt_h,
'long|l' => \$::opt_l,
'm|minus' => \$::opt_m,
'o=s' => \$::opt_o,
'r|relace' => \$::opt_r,
't=s' => \$::opt_t,
'verbose|V' => \$::opt_V,
'version|v' => \$::opt_v,
'w=s' => \$::opt_w,
'x|xml' => \$::opt_x,
'z|stanza' => \$::opt_z
)
)
{
return 1;
}
# a node range would be the next arg - but not if it contains an "=" sign
# - then it would be an attr=val operand
my $arg = shift(@ARGV);
if (!($arg =~ /=/))
{
# only set the noderange if it was a type of node or the type
# wasn't specified.
if (!$::opt_t || ($::opt_t eq 'node')) {
$cmdref->{noderange}->[0] = $arg;
}
}
}
xCAT::Client::submit_request($cmdref,\&xCAT::Client::handle_response);
exit $xCAT::Client::EXITCODE;