The code drop for the changing object name by chdef command

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@7375 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
daniceexi 2010-09-08 10:38:12 +00:00
parent dfde8fc75c
commit 303d79fbe3

View File

@ -231,6 +231,7 @@ sub processArgs
'long|l' => \$::opt_l,
'short|s' => \$::opt_s,
'm|minus' => \$::opt_m,
'n=s' => \$::opt_n,
'o=s' => \$::opt_o,
'p|plus' => \$::opt_p,
't=s' => \$::opt_t,
@ -1451,6 +1452,81 @@ sub defch
#
# check options unique to this command
#
if ($::opt_n) {
# check the option for changing object name
if ($::opt_n && ($::opt_d || $::opt_p || $::opt_m || $::opt_z || $::opt_w)) {
my $rsp;
$rsp->{data}->[0] = "Cannot combine \'-n\' and \'-d\',\'-p\',\'-m\',\'-z\',\'-w\' options.";
xCAT::MsgUtils->message("E", $rsp, $::callback);
&defch_usage;
return 1;
}
if (scalar (@::clobjnames) > 1) {
my $rsp;
$rsp->{data}->[0] =
"The \'-n\' option (changing object name) can only work on one object.";
xCAT::MsgUtils->message("E", $rsp, $::callback);
&defch_usage;
return 1;
}
my %objhash = ($::clobjnames[0] => $::clobjtypes[0]);
my @validnode = xCAT::DBobjUtils->getObjectsOfType($::clobjtypes[0]);
if (! grep /^$::clobjnames[0]$/, @validnode) {
my $rsp;
$rsp->{data}->[0] =
"The $::clobjnames[0] is not a valid object.";
xCAT::MsgUtils->message("E", $rsp, $::callback);
return 1;
}
# Use the getobjdefs function to get a hash which including
# all the records in the table that should be changed
my %chnamehash = ();
xCAT::DBobjUtils->getobjdefs(\%objhash, $::VERBOSE, undef, \%chnamehash);
foreach my $tb (keys %chnamehash) {
my $tab = xCAT::Table->new( $tb);
unless ( $tab) {
my $rsp;
push @{$rsp->{data}}, "Unable to open $tb table.";
xCAT::MsgUtils->message("E", $rsp, $::callback);
return 1;
}
my $index = 0;
my @taben = @{$chnamehash{$tb}};
# In the @taben, there are several pair of value for
# changing the key value of a table entry
my @keystrs = ();
while ($taben[$index]) {
# Make a key word string to avoid that changing
# one table record multiple times
my $keystr;
foreach my $key (sort(keys %{$taben[$index]})) {
$keystr .= "$key:$taben[$index]{$key}:";
}
if (grep /^$keystr$/, @keystrs) {
$index += 2;
next;
}
push @keystrs, $keystr;
my %chname = ($taben[$index+1] => $::opt_n);
$tab->setAttribs($taben[$index], \%chname);
$index += 2;
}
}
my $rsp;
push @{$rsp->{data}}, "Changed the object name from $::clobjnames[0] to $::opt_n.";
xCAT::MsgUtils->message("I", $rsp, $::callback);
return 0;
}
if ($::opt_f)
{
@ -3172,15 +3248,16 @@ sub defch_usage
$rsp->{data}->[0] =
"\nUsage: chdef - Change xCAT data object definitions.\n";
$rsp->{data}->[1] = " chdef [-h | --help ] [-t object-types]\n";
$rsp->{data}->[2] =
" chdef [-V | --verbose] [-t object-types] [-o object-names] [-d | --dynamic]";
$rsp->{data}->[2] = " chdef [-t object-types] [-o object-names] [-n new-name] [node]\n";
$rsp->{data}->[3] =
" [-z | --stanza] [-m | --minus] [-p | --plus]";
" chdef [-V | --verbose] [-t object-types] [-o object-names] [-d | --dynamic]";
$rsp->{data}->[4] =
" [-w attr==val [-w attr=~val] ... ] [noderange] [attr=val [attr=val...]]\n";
" [-z | --stanza] [-m | --minus] [-p | --plus]";
$rsp->{data}->[5] =
" [-w attr==val [-w attr=~val] ... ] [noderange] [attr=val [attr=val...]]\n";
$rsp->{data}->[6] =
"\nThe following data object types are supported by xCAT.\n";
my $n = 6;
my $n = 7;
foreach my $t (sort(keys %{xCAT::Schema::defspec}))
{