Added descriptions to the db tables.

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@545 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
bp-sawyers 2008-02-21 21:10:35 +00:00
parent 6d5e826634
commit 8b2fee5c16
10 changed files with 811 additions and 464 deletions

View File

@ -536,7 +536,7 @@ sub handle_response {
}
# Handle {data} structure with no nodes
if (scalar @{$rsp->{data}}) {
if ($rsp->{data}) {
#print "printing data\n";
my $data=($rsp->{data});
my $data_entry;
@ -556,9 +556,7 @@ sub handle_response {
}
}
}
if ($desc) {
print "$desc\n";
}
if ($desc) { print "$desc\n"; }
}
}
} # end of handle_response

View File

@ -212,54 +212,56 @@ sub message
# Check that correct structure is filled in. If the data is not in the
# structure corresponding to the $sev, then look for it in "data"
#TODO: this is not really right for a couple reasons: 1) all the fields in the
#TODO: this is not really right for a few reasons: 1) all the fields in the
# response structure are arrays, so can handle multiple lines of text. We
# should not just be check the 0th element. 2) a cmd may have both error
# text and data text. 3) this message() function should just take in a plain
# string and put it in the correct place based on the severity.
if ($call_back) { # callback routine provided
my $sevkey;
if ($sev =~ /I/) { $sevkey = 'info'; }
if ($sev =~ /W/) { $sevkey = 'warning'; }
if ($sev =~ /E/) {
if ($sev =~ /D/) { $sevkey = 'data'; }
elsif ($sev =~ /I/) { $sevkey = 'info'; }
elsif ($sev =~ /W/) { $sevkey = 'warning'; }
elsif ($sev =~ /E/) {
$sevkey = 'error';
if (!defined($exitcode)) { $exitcode = 1; } # default to something non-zero
}
if (defined($sevkey)) {
else { print "Internal Error: Invalid severity passed to MsgUtils::message().\n"; return 1; }
if ($sevkey ne 'data') {
if (!defined ($rsp->{$sevkey}) || !scalar(@{$rsp->{$sevkey}})) { # did not pass the text in in the severity-specific field
if (defined ($rsp->{data}) && scalar(@{$rsp->{data}})) {
push @{$rsp->{$sevkey}}, shift @{$rsp->{data}}; # assume they passed in the text in the data field instead
push @{$rsp->{$sevkey}}, @{$rsp->{data}}; # assume they passed in the text in the data field instead
@{$rsp->{data}} = (); # clear out the data field
}
}
}
if (!defined ($rsp->{$sevkey}) || !scalar(@{$rsp->{$sevkey}})) { return; } # if still nothing in the array, there is nothing to print out
if ($sev ne 'S') # if sev is anything but only-syslog, print the msg
{ # not just syslog
if ($exitcode) { $rsp->{errorcode}->[0] = $exitcode; }
if ($sev ne 'S') { # if sev is anything but only-syslog, print the msg
if ($exitcode) { push @{$rsp->{errorcode}}, $exitcode; }
$call_back->($rsp); # send message to daemon/Client.pm
shift @{$rsp->{$sevkey}}; # clear out the rsp structure in case they use it again
if ($exitcode) { shift @{$rsp->{errorcode}}; }
@{$rsp->{$sevkey}} = (); # clear out the rsp structure in case they use it again
@{$rsp->{data}} = ();
@{$rsp->{errorcode}} = ();
}
# No need to support syslog writing when they specified a callback
}
else # no callback provided
{
if ($sev ne 'S') # syslog only
if ($sev ne 'S') # it is not syslog only
{
print $stdouterrf $rsp; # print the message
}
if ($sev =~ /S/) {
# If they want this msg to also go to syslog, do that now
openlog("xCAT", '', 'local4');
syslog("err", $rsp);
closelog();
}
}
if ($sev =~ /[S]/)
{
# need to syslog , the message
openlog("xCAT", '', 'local4');
syslog("err", $rsp);
closelog();
}
return 0;
return;
}
1;

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,7 @@ use xCAT::NotifHandler;
#--------------------------------------------------------------------------------
=head1 xCAT::Table
=head1 xCAT::Table
xCAT::Table - Perl module for xCAT configuration access
@ -68,13 +68,13 @@ xCAT::Table is released under an IBM license....
#--------------------------------------------------------------------------
=head2 Subroutines
=head2 Subroutines
=cut
#--------------------------------------------------------------------------
=head3 buildcreatestmt
=head3 buildcreatestmt
Description: Build create table statement ( see new)
@ -82,13 +82,13 @@ xCAT::Table is released under an IBM license....
Table name
Table schema ( hash of column names)
Returns:
Table creation SQL
Table creation SQL
Globals:
Error:
Example:
my $str =
buildcreatestmt($self->{tabname},
$xCAT::Schema::tabspec{$self->{tabname}});
@ -123,10 +123,10 @@ sub buildcreatestmt
#--------------------------------------------------------------------------
=head3 new
=head3 new
Description: Constructor: Connects to or Creates Database Table
Arguments: Table name
0 = Connect to table
@ -134,11 +134,11 @@ sub buildcreatestmt
Returns:
Hash: Database Handle, Statement Handle, nodelist
Globals:
Error:
Example:
$nodelisttab = xCAT::Table->new("nodelist");
$nodelisttab = xCAT::Table->new("nodelist");
Comments:
none
@ -157,6 +157,7 @@ sub new
unless (defined($xCAT::Schema::tabspec{$self->{tabname}})) { return undef; }
$self->{schema} = $xCAT::Schema::tabspec{$self->{tabname}};
$self->{colnames} = \@{$self->{schema}->{cols}};
$self->{descriptions} = \%{$self->{schema}->{descriptions}};
my %otherargs = @_;
my $create = $otherargs{'-create'}; #(scalar(@_) == 1 ? shift : 0);
$self->{autocommit} = $otherargs{'-autocommit'};
@ -216,7 +217,7 @@ sub new
#return undef;
}
unless ($::XCAT_DBHS->{$self->{connstring},$self->{dbuser},$self->{dbpass},$self->{autocommit}}) { #= $self->{tabname};
$::XCAT_DBHS->{$self->{connstring},$self->{dbuser},$self->{dbpass},$self->{autocommit}} =
$::XCAT_DBHS->{$self->{connstring},$self->{dbuser},$self->{dbpass},$self->{autocommit}} =
DBI->connect($self->{connstring}, $self->{dbuser}, $self->{dbpass}, {AutoCommit => $self->{autocommit}});
}
@ -280,7 +281,7 @@ sub new
}
}
updateschema($self);
if ($self->{tabname} eq 'nodelist')
{
@ -296,23 +297,23 @@ sub new
#--------------------------------------------------------------------------
=head3 updateschema
=head3 updateschema
Description: Alters table schema
Arguments: Hash containing Database and Table Handle and schema
Returns: None
Globals:
Error:
Example:
$self->{tabname} = shift;
$self->{schema} = $xCAT::Schema::tabspec{$self->{tabname}};
$self->{colnames} = \@{$self->{schema}->{cols}};
updateschema($self);
updateschema($self);
Comments:
none
@ -384,11 +385,11 @@ sub updateschema
Node name
Attribute hash
Returns:
Globals:
Error:
Example:
my $mactab = xCAT::Table->new('mac',-create=>1);
$mactab->setNodeAttribs($node,{mac=>$mac});
@ -414,15 +415,15 @@ sub setNodeAttribs
Description: Add new attributes input to the routine to the nodes
Arguments:
Hash of new attributes
Hash of new attributes
Returns:
Globals:
Error:
Example:
Comments:
none
@ -441,19 +442,19 @@ sub addNodeAttribs
Description: add new attributes
Arguments:
Arguments:
Hash: Database Handle, Statement Handle, nodelist
Key name
Key value
Hash reference of column-value pairs to set
Returns:
Globals:
Error:
Example:
Comments:
none
@ -513,22 +514,22 @@ sub addAttribs
#--------------------------------------------------------------------------
=head3 rollback
=head3 rollback
Description: rollback changes
Arguments:
Database Handle
Returns:
none
none
Globals:
Error:
Example:
my $tab = xCAT::Table->new($table,-create =>1,-autocommit=>0);
$tab->rollback();
$tab->rollback();
Comments:
none
@ -544,22 +545,22 @@ sub rollback
#--------------------------------------------------------------------------
=head3 commit
=head3 commit
Description:
Commit changes
Arguments:
Database Handle
Returns:
none
none
Globals:
Error:
Example:
my $tab = xCAT::Table->new($table,-create =>1,-autocommit=>0);
$tab->commit();
$tab->commit();
Comments:
none
@ -574,7 +575,7 @@ sub commit
#--------------------------------------------------------------------------
=head3 setAttribs
=head3 setAttribs
Description:
@ -584,11 +585,11 @@ sub commit
Hash reference of column-value pairs to set
Returns:
None
None
Globals:
Error:
Example:
my $tab = xCAT::Table->new( 'ppc', -create=>1, -autocommit=>0 );
$keyhash{'node'} = $name;
@ -758,7 +759,7 @@ sub setAttribs
#--------------------------------------------------------------------------
=head3 setAttribsWhere
=head3 setAttribsWhere
Description:
This function sets the attributes for the rows selected by the where clause.
@ -766,9 +767,9 @@ sub setAttribs
Where clause.
Hash reference of column-value pairs to set
Returns:
None
Globals:
Error:
None
Globals:
Error:
Example:
my $tab = xCAT::Table->new( 'ppc', -create=>1, -autocommit=>1 );
$updates{'type'} = lc($type);
@ -859,24 +860,24 @@ sub setAttribsWhere
#--------------------------------------------------------------------------
=head3 getNodeAttribs
=head3 getNodeAttribs
Description: Retrieves the requested attribute
Description: Retrieves the requested attribute
Arguments:
Table handle
Noderange
Attribute type array
Attribute type array
Returns:
Attribute hash ( key attribute type)
Attribute hash ( key attribute type)
Globals:
Error:
Example:
my $ostab = xCAT::Table->new('nodetype');
my $ent = $ostab->getNodeAttribs($node,['profile','os','arch']);
my $ent = $ostab->getNodeAttribs($node,['profile','os','arch']);
Comments:
none
@ -956,20 +957,20 @@ sub getNodeAttribs
#--------------------------------------------------------------------------
=head3 getNodeAttribs_nosub
=head3 getNodeAttribs_nosub
Description:
Arguments:
Returns:
Globals:
Error:
Example:
Comments:
none
@ -1016,20 +1017,20 @@ sub getNodeAttribs_nosub
#--------------------------------------------------------------------------
=head3 getNodeAttribs_nosub_returnany
=head3 getNodeAttribs_nosub_returnany
Description:
Arguments:
Returns:
Globals:
Error:
Example:
Comments:
none
@ -1080,23 +1081,23 @@ sub getNodeAttribs_nosub_returnany
#--------------------------------------------------------------------------
=head3 getAllEntries
=head3 getAllEntries
Description: Read entire table
Arguments:
Table handle
Table handle
Returns:
Hash containing all rows in table
Hash containing all rows in table
Globals:
Error:
Example:
my $tabh = xCAT::Table->new($table);
my $recs=$tabh->getAllEntries();
Comments:
none
@ -1126,7 +1127,7 @@ sub getAllEntries
#--------------------------------------------------------------------------
=head3 getAllAttribsWhere
=head3 getAllAttribsWhere
Description: Get all attributes with "where" clause
@ -1134,13 +1135,13 @@ sub getAllEntries
Database Handle
Where clause
Returns:
Array of attributes
Array of attributes
Globals:
Error:
Example:
$nodelist->getAllAttribsWhere("groups like '%".$atom."%'",'node','group');
$nodelist->getAllAttribsWhere("groups like '%".$atom."%'",'node','group');
Comments:
none
@ -1183,7 +1184,7 @@ sub getAllAttribsWhere
#--------------------------------------------------------------------------
=head3 getAllNodeAttribs
=head3 getAllNodeAttribs
Description: Get all the node attributes values for the input table on the
attribute list
@ -1194,9 +1195,9 @@ sub getAllAttribsWhere
Returns:
Array of attribute values
Globals:
Error:
Example:
my @entries = $self->{switchtab}->getAllNodeAttribs(['port','switch']);
Comments:
@ -1259,7 +1260,7 @@ sub getAllNodeAttribs
#--------------------------------------------------------------------------
=head3 getAllAttribs
=head3 getAllAttribs
Description: Returns a list of records in the input table for the input
list of attributes.
@ -1270,9 +1271,9 @@ sub getAllNodeAttribs
Returns:
Array of attribute values
Globals:
Error:
Example:
$nodelisttab = xCAT::Table->new("nodelist");
my @attribs = ("node");
@ -1316,7 +1317,7 @@ sub getAllAttribs
#--------------------------------------------------------------------------
=head3 delEntries
=head3 delEntries
Description: Delete table entries
@ -1324,11 +1325,11 @@ sub getAllAttribs
Table Handle
Entry to delete
Returns:
Globals:
Error:
Example:
my $table=xCAT::Table->new("notification", -create => 1,-autocommit => 0);
my %key_col = (filename=>$fname);
@ -1408,7 +1409,7 @@ sub delEntries
#--------------------------------------------------------------------------
=head3 getAttribs
=head3 getAttribs
Description:
@ -1416,11 +1417,11 @@ sub delEntries
key
List of attributes
Returns:
Hash of requested attributes
Hash of requested attributes
Globals:
Error:
Example:
$table = xCAT::Table->new('passwd');
@tmp=$table->getAttribs({'key'=>'ipmi'},('username','password');
@ -1497,7 +1498,7 @@ sub getAttribs
#--------------------------------------------------------------------------
=head3 getTable
=head3 getTable
Description: Read entire Table
@ -1505,11 +1506,11 @@ sub getAttribs
Table Handle
Returns:
Array of table rows
Array of table rows
Globals:
Error:
Example:
my $table=xCAT::Table->new("notification", -create =>0);
my @row_array= $table->getTable;
@ -1556,18 +1557,18 @@ sub getTable
#--------------------------------------------------------------------------
=head3 close
=head3 close
Description: Close out Table transaction
Arguments:
Table Handle
Table Handle
Returns:
Globals:
Error:
Example:
my $mactab = xCAT::Table->new('mac');
$mactab->setNodeAttribs($macmap{$mac},{mac=>$mac});
@ -1592,20 +1593,20 @@ sub close
#--------------------------------------------------------------------------
=head3 open
=head3 open
Description: Connect to Database
Arguments:
Empty Hash
Empty Hash
Returns:
Data Base Handle
Data Base Handle
Globals:
Error:
Example:
Comments:
none
@ -1620,20 +1621,20 @@ sub open
#--------------------------------------------------------------------------
=head3 DESTROY
=head3 DESTROY
Description: Disconnect from Database
Arguments:
Database Handle
Database Handle
Returns:
Globals:
Error:
Example:
Comments:
none
@ -1649,5 +1650,33 @@ sub DESTROY
undef $self->{nodelist}; #Could be circular
}
=head3 getTableList
Description: Returns a list of the table names in the xCAT database.
=cut
sub getTableList { return keys %xCAT::Schema::tabspec; }
=head3 getTableSchema
Description: Returns the db schema for the specified table.
Returns: A reference to a hash that contains the cols, keys, etc. for this table. (See Schema.pm for details.)
=cut
sub getTableSchema { return $xCAT::Schema::tabspec{$_[1]}; }
=head3 getTableList
Description: Returns a summary description for each table.
Returns: A reference to a hash. Each key is the table name.
Each value is the table description.
=cut
sub getDescriptions {
my $classname = shift; # we ignore this because this function is static
# List each table name and the value for table_desc.
my $ret = {};
#my @a = keys %{$xCAT::Schema::tabspec{nodelist}}; print 'a=', @a, "\n";
foreach my $t (keys %xCAT::Schema::tabspec) { $ret->{$t} = $xCAT::Schema::tabspec{$t}->{table_desc}; }
return $ret;
}
1;

View File

@ -8,7 +8,7 @@ use lib "$::XCATROOT/lib/perl";
use File::Basename;
use xCAT::MsgUtils;
use xCAT::Client submit_request;
use xCAT::Client;
my $bname = basename($0);
@ -25,7 +25,7 @@ my $bname = basename($0);
# are, for the most part, in:
# /opt/xcat/lib/perl/xCAT_plugin/DBobjectdefs.pm
# /opt/xcat/lib/perl/xCAT_plugin/xcat2nim.pm
# /opt/xcat/lib/perl/xCAT/DBobjUtils.pm
# /opt/xcat/lib/perl/xCAT/DBobjUtils.pm
# -on the xCAT management node
#
#########################################

View File

@ -1,5 +1,4 @@
#!/usr/bin/perl
# !/usr/bin/env perl
#!/usr/bin/env perl
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
BEGIN
{

View File

@ -4,19 +4,21 @@ B<tabdump> - display a database table in csv format.
=head1 SYNOPSIS
I<tabdump [table]>
I<tabdump [-d] [table]>
I<tabdump [? | -h | --help]>
=head1 DESCRIPTION
The tabdump command displays the header and all the rows of the specified table in csv format.
The tabdump command displays the header and all the rows of the specified table in CSV (comma separated values) format.
Only one table can be specified. If no table is specified, the list of existing
tables will be displayed.
=head1 OPTIONS
B<-?|-h|--help> Display usage message.
B<-?|-h|--help> Display usage message.
B<-d> Show descriptions of the tables, instead of the contents of the tables. If a table name is also specified, descriptions of the columns (attributes) of the table will be displayed. Otherwise, a summary of each table will be displayed.
=head1 RETURN VALUE
@ -34,11 +36,19 @@ B<-?|-h|--help> Display usage message.
tabdump
3. To see what tables exist in the xCAT database:
3. To back up all the xCAT database tables:
mkdir -p /tmp/xcatdb.backup
for i in `tabdump`;do echo "Dumping $i..."; tabdump $i > /tmp/xcatdb.backup/$i.csv; done
4. To display a summary description of each table:
tabdump -d
5. To display a description of each column in the nodehm table:
tabdump -d nodehm
=head1 FILES
/opt/xcat/sbin/tabdump

View File

@ -129,22 +129,24 @@
.\" ========================================================================
.\"
.IX Title "TABDUMP.1 1"
.TH TABDUMP.1 1 "2008-02-18" "perl v5.8.8" "User Contributed Perl Documentation"
.TH TABDUMP.1 1 "2008-02-20" "perl v5.8.8" "User Contributed Perl Documentation"
.SH "NAME"
\&\fBtabdump\fR \- display a database table in csv format.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fItabdump [table]\fR
\&\fItabdump [\-d] [table]\fR
.PP
\&\fItabdump [? | \-h | \-\-help]\fR
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The tabdump command displays the header and all the rows of the specified table in csv format.
The tabdump command displays the header and all the rows of the specified table in \s-1CSV\s0 (comma separated values) format.
Only one table can be specified. If no table is specified, the list of existing
tables will be displayed.
.SH "OPTIONS"
.IX Header "OPTIONS"
\&\fB\-?|\-h|\-\-help\fR Display usage message.
\&\fB\-?|\-h|\-\-help\fR Display usage message.
.PP
\&\fB\-d\fR Show descriptions of the tables, instead of the contents of the tables. If a table name is also specified, descriptions of the columns (attributes) of the table will be displayed. Otherwise, a summary of each table will be displayed.
.SH "RETURN VALUE"
.IX Header "RETURN VALUE"
0 The command completed successfully.
@ -164,12 +166,24 @@ tables will be displayed.
\& tabdump
.Ve
.PP
3. To see what tables exist in the xCAT database:
3. To back up all the xCAT database tables:
.PP
.Vb 2
\& mkdir -p /tmp/xcatdb.backup
\& for i in `tabdump`;do echo "Dumping $i..."; tabdump $i > /tmp/xcatdb.backup/$i.csv; done
.Ve
.PP
4. To display a summary description of each table:
.PP
.Vb 1
\& tabdump -d
.Ve
.PP
5. To display a description of each column in the nodehm table:
.PP
.Vb 1
\& tabdump -d nodehm
.Ve
.SH "FILES"
.IX Header "FILES"
/opt/xcat/sbin/tabdump

View File

@ -52,7 +52,7 @@ $Getopt::Long::ignorecase = 0;
=head1 DBobjectdefs
This program module file supports the management of the xCAT data object
This program module file supports the management of the xCAT data object
definitions.
Supported xCAT data object commands:
@ -108,12 +108,12 @@ sub handled_commands
Check for xCAT command and call the appropriate subroutine.
Arguments:
Returns:
0 - OK
1 - error
Globals:
Error:
Example:
@ -179,7 +179,7 @@ sub process_request
1 - just print usage
2 - error
Globals:
Error:
Example:
@ -194,7 +194,7 @@ sub processArgs
my $gotattrs = 0;
@ARGV = @{$::args};
if (scalar(@ARGV) <= 0) {
return 2;
}
@ -426,8 +426,7 @@ sub processArgs
}
my $rsp;
$rsp->{data}->[0] =
"\nThe valid attribute names for object type \'$t\' are:\n\n";
$rsp->{data}->[0] = "The valid attribute names for object type '$t' are:\n";
# get the data type definition from Schema.pm
my $datatype = $xCAT::Schema::defspec{$t};
@ -444,20 +443,27 @@ sub processArgs
{
my $attr = $this_attr->{attr_name};
my $desc = $this_attr->{description};
if (!defined($desc)) { # description key not there, so go to the corresponding entry in tabspec to get the description
my ($tab, $at) = split(/\./, $this_attr->{tabentry});
my $schema = xCAT::Table->getTableSchema($tab);
$desc = $schema->{descriptions}->{$at};
}
# could display the table that the attr is in
# could display the table that the attr is in
# however some attrs are in more than one table!!!
my ($tab, $junk) = split('\.', $this_attr->{tabentry});
#my ($tab, $junk) = split('\.', $this_attr->{tabentry});
if (!grep(/^$attr$/, @alreadydone))
{
{
# $outstr .= "$attr\n\t\t- $desc \n\t\t(Table: $tab)\n\n";
$outstr .= "$attr\n\t\t- $desc\n\n";
#$outstr .= "$attr\n\t\t- $desc\n\n";
my $space = (length($attr)<7 ? "\t\t" : "\t");
$outstr .= "$attr:$space$desc\n\n";
}
push(@alreadydone, $attr);
}
chop($outstr); chop($outstr);
$rsp->{data}->[2] = $outstr;
xCAT::MsgUtils->message("I", $rsp, $::callback);
}
@ -479,10 +485,10 @@ sub processArgs
if (($::opt_t eq 'site') && ($::opt_o ne 'clustersite'))
{
push(@::clobjnames, 'clustersite');
my $rsp;
my $rsp;
$rsp->{data}->[0] ="Only one site definition is supported.";
$rsp->{data}->[1] = "Setting the name of the site definition to \'clustersite\'.\n";
xCAT::MsgUtils->message("I", $rsp, $::callback);
xCAT::MsgUtils->message("I", $rsp, $::callback);
}
elsif ($::opt_t eq 'node')
@ -515,7 +521,7 @@ sub processArgs
# special case for site table!!!!!!!!!!!!!!
if (($::opt_t eq 'site') && !$::opt_o)
{
my $rsp;
my $rsp;
$rsp->{data}->[0] ="Setting the name of the site definition to \'clustersite\'.";
xCAT::MsgUtils->message("I", $rsp, $::callback);
push(@::clobjnames, 'clustersite');
@ -700,7 +706,7 @@ sub processArgs
Example:
Comments:
Object names to create are derived from
Object names to create are derived from
-o, -t, w, -z, -x, or noderange!
Attr=val pairs come from cmd line args or -z/-x files
=cut
@ -1147,7 +1153,7 @@ sub defmk
Example:
Comments:
Object names to create are derived from
Object names to create are derived from
-o, -t, w, -z, -x, or noderange!
Attr=val pairs come from cmd line args or -z/-x files
=cut
@ -1878,7 +1884,7 @@ sub setFINALattrs
Object names derived from -o, -t, w, -a or noderange!
List of attrs to display is given by -i.
Output goes to standard out or a stanza/xml file (-z or -x)
=cut
#-----------------------------------------------------------------------------
@ -2442,7 +2448,7 @@ sub defls
0 - OK
1 - error
Globals:
Error:
Example:

View File

@ -345,11 +345,12 @@ sub tabdump
my $cb = shift;
my $table = "";
my $HELP;
my $DESC;
sub tabdump_usage {
my $exitcode = shift @_;
my %rsp;
push @{$rsp{data}}, "Usage: tabdump [table]";
push @{$rsp{data}}, "Usage: tabdump [-d] [table]";
push @{$rsp{data}}, " tabdump [-?|-h|--help]";
if ($exitcode) { $rsp{errorcode} = $exitcode; }
$cb->(\%rsp);
@ -357,7 +358,7 @@ sub tabdump
# Process arguments
@ARGV = @{$args};
if (!GetOptions('h|?|help' => \$HELP)) { tabdump_usage(1); return; }
if (!GetOptions('h|?|help' => \$HELP, 'd' => \$DESC)) { tabdump_usage(1); return; }
if ($HELP) { tabdump_usage(0); return; }
if (scalar(@ARGV)>1) { tabdump_usage(1); return; }
@ -365,12 +366,35 @@ sub tabdump
my %rsp;
# If no arguments given, we display a list of the tables
if (!scalar(@ARGV)) {
push @{$rsp{data}}, keys %xCAT::Schema::tabspec;
if ($DESC) { # display the description of each table
my $tab = xCAT::Table->getDescriptions();
foreach my $key (keys %$tab) {
my $space = (length($key)<7 ? "\t\t" : "\t");
push @{$rsp{data}}, "$key:$space".$tab->{$key}."\n";
}
}
else { push @{$rsp{data}}, xCAT::Table->getTableList(); } # if no descriptions, just display the list of table names
@{$rsp{data}} = sort @{$rsp{data}};
if ($DESC && scalar(@{$rsp{data}})) { chop($rsp{data}->[scalar(@{$rsp{data}})-1]); } # remove the final newline
$cb->(\%rsp);
return;
}
$table = $ARGV[0];
if ($DESC) { # only show the attribute descriptions, not the values
my $schema = xCAT::Table->getTableSchema($table);
if (!$schema) { $cb->({error => "table $table does not exist.",errorcode=>1}); return; }
my $desc = $schema->{descriptions};
foreach my $c (@{$schema->{cols}}) {
my $space = (length($c)<7 ? "\t\t" : "\t");
push @{$rsp{data}}, "$c:$space".$desc->{$c}."\n";
}
if (scalar(@{$rsp{data}})) { chop($rsp{data}->[scalar(@{$rsp{data}})-1]); } # remove the final newline
$cb->(\%rsp);
return;
}
my $tabh = xCAT::Table->new($table);
sub tabdump_header {