add -F option to lskit

This commit is contained in:
nott 2013-10-17 15:02:18 -04:00
parent c05b7c9a66
commit 899be1a70d

View File

@ -20,6 +20,7 @@ use Getopt::Long;
#use Data::Dumper;
use File::Basename;
use File::Path;
use Cwd;
my $kitconf = "kit.conf";
@ -3402,10 +3403,10 @@ sub lskit_usage {
push @{ $rsp->{data} },
"\nUsage: lskit - List infomation for one or more kits.\n";
push @{ $rsp->{data} },
" lskit [-V|--verbose] [-x|--xml|--XML] [-K|--kitattr kitattr_names] [-R|--repoattr repoattr_names] [-C|--compattr compattr_names] [kit_names]\n ";
push @{ $rsp->{data} }, " lskit [-h|--help|-?] \n";
push @{ $rsp->{data} },
" lskit [-v|--version] \n ";
"\tlskit [-V|--verbose] [-x|--xml|--XML] [-K|--kitattr kitattr_names]\n\t[-R|--repoattr repoattr_names] [-C|--compattr compattr_names]\n\t[kit_names]\n ";
push @{ $rsp->{data} }, "\tlskit [-h|--help|-?]\n";
push @{ $rsp->{data} }, "\tlskit [-v|--version]\n ";
push @{ $rsp->{data} }, "\tlskit [-F|--framework] kit_path_name\n ";
xCAT::MsgUtils->message( "I", $rsp, $::CALLBACK );
return 0;
}
@ -3514,6 +3515,7 @@ sub lskit_processargs {
'kitattr|K=s' => \$::opt_K,
'repoattr|R=s' => \$::opt_R,
'compattr|C=s' => \$::opt_C,
'framework|F=s' => \$::opt_F,
'verbose|V' => \$::opt_V,
'version|v' => \$::opt_v,
'xml|XML|x' => \$::opt_x,
@ -3912,9 +3914,12 @@ sub check_attr_values_exist {
=cut
#-----------------------------------------------------------------------------
sub lskit {
my $request = shift;
my $callback = shift;
my $request_command = shift;
my $rc = 0;
# process the command line
@ -3935,6 +3940,99 @@ sub lskit {
return 1;
}
if ( defined($::opt_F) ) {
if ( defined($::opt_x) || defined($::opt_K) || defined($::opt_R) || defined($::opt_C) ) {
my $rsp = {};
push @{ $rsp->{data}}, "\nThe \'-F\' option cannot be used with the x, R, K, or C options.\n";
xCAT::MsgUtils->message("E", $rsp, $::CALLBACK);
lskit_usage(1);
return 1;
}
my $tarpathname = $::opt_F;
# check if full path
my $dir = $request->{cwd}; #getcwd;
my $cwd = $dir->[0];
if ($tarpathname !~ /^\//)
{
my $fullpath = xCAT::Utils->full_path($tarpathname, $cwd);
if ($fullpath)
{
$tarpathname = $fullpath;
}
}
unless (-e $tarpathname) {
my $rsp = {};
push @{ $rsp->{data} }, "Could not find $tarpathname.\n";
xCAT::MsgUtils->message("E", $rsp, $::CALLBACK);
return 1;
}
# create a unique /tmp dir name name
my $thisdate = `/bin/date +%s`;
my $tmp_dir_name = qq~/tmp/tmp_kit_$thisdate~;
$tmp_dir_name =~ s/\s*//g; #remove blanks
# extract the kit.conf file
my $rsp = {};
push @{ $rsp->{data} }, "\nExtracting the kit.conf file from $tarpathname. Please wait.\n";
xCAT::MsgUtils->message("I", $rsp, $::CALLBACK);
my $tcmd = qq~/bin/mkdir -p $tmp_dir_name;/bin/tar -C $tmp_dir_name -jxvf $tarpathname --wildcards */kit.conf~;
my $kitconffile = xCAT::Utils->runcmd("$tcmd", -1);
if ($::RUNCMD_RC != 0) {
my $rsp = {};
push @{ $rsp->{data} }, "No kit.conf file was found.\n";
xCAT::MsgUtils->message("E", $rsp, $::CALLBACK);
return 1;
}
# get the framework from the file
my $fcmd = "/bin/cat $tmp_dir_name/$kitconffile | grep 'kitframework '";
my $fline = xCAT::Utils->runcmd("$fcmd", -1);
if ($::RUNCMD_RC != 0) {
my $rsp = {};
push @{ $rsp->{data} }, "No kitframework value was found.\n";
xCAT::MsgUtils->message("E", $rsp, $::CALLBACK);
return 1;
}
my ($junk, $kitframework) = split(/=/, $fline);
$kitframework =~ s/\s*//g; #remove blanks
my $cfcmd = "/bin/cat $tmp_dir_name/$kitconffile | grep 'compatible_kitframeworks'";
my $cfline = xCAT::Utils->runcmd("$cfcmd", -1);
if ($::RUNCMD_RC != 0) {
my $rsp = {};
push @{ $rsp->{data} }, "No compatible_kitframeworks value was found.\n";
xCAT::MsgUtils->message("E", $rsp, $::CALLBACK);
return 1;
}
my ($junk, $compatframework) = split(/=/, $cfline);
$compatframework =~ s/\s*//g; #remove blanks
my $rcmd = qq~/bin/rm -Rf $tmp_dir_name 2>/dev/null~;
my $out = xCAT::Utils->runcmd("$rcmd", -1);
if ($::RUNCMD_RC != 0) {
my $rsp = {};
push @{ $rsp->{data} }, "Could not remove $tmp_dir_name.\n";
xCAT::MsgUtils->message("E", $rsp, $::CALLBACK);
}
if ($kitframework && $compatframework) {
my $rsp = {};
push @{ $rsp->{data} }, "\tkitframework=$kitframework\n\tcompatible_kitframeworks=$compatframework\n";
xCAT::MsgUtils->message("I", $rsp, $::CALLBACK);
return 0;
} else {
my $rsp = {};
push @{ $rsp->{data} }, "Could not determine framework values for Kit $tarpathname.\n";
xCAT::MsgUtils->message("E", $rsp, $::CALLBACK);
return 1;
}
return 0;
}
# Prepare the hash tables to pass to the output routines
my $kit_hash = get_kit_hash($::kitnames, $::kitattrs);
my $kitrepo_hash = get_kitrepo_hash($::kitnames, $::kitrepoattrs);