chdef,mkdef enhancements to support nic attributes
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@15602 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
079665a651
commit
83bed2cb04
@ -2676,4 +2676,81 @@ sub expandnicsattr()
|
||||
return $ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
=head3 collapsenicsattr
|
||||
Collapse the nics related attributes into the database format,
|
||||
for example,
|
||||
nicsips.eth0=1.1.1.1|2.1.1.1
|
||||
nicsips.eth1=3.1.1.1|4.1.1.1
|
||||
|
||||
the collapsed format:
|
||||
nicsips=eth0!1.1.1.1|2.1.1.1,eth1!3.1.1.1|4.1.1.1
|
||||
|
||||
The collapse will be done against the hash %::FILEATTRS or %::CLIATTRS,
|
||||
remove the nicips.thx attributes from %::FILEATTRS or %::CLIATTRS,
|
||||
add the collapsed info nicips into %::FILEATTRS or %::CLIATTRS.
|
||||
|
||||
Arguments:
|
||||
$::FILEATTRS{$objname} or $::CLIATTRS{$objname}
|
||||
$objname
|
||||
|
||||
Returns:
|
||||
None, update %::FILEATTRS or %::CLIATTRS directly
|
||||
|
||||
Error:
|
||||
none
|
||||
|
||||
Example:
|
||||
xCAT::DBobjUtils->collapsenicsattr($nodeattrhash);
|
||||
|
||||
Comments:
|
||||
none
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
sub collapsenicsattr()
|
||||
{
|
||||
my $nodeattrhash = shift;
|
||||
if (($nodeattrhash) && ($nodeattrhash =~ /xCAT::/))
|
||||
{
|
||||
$nodeattrhash = shift;
|
||||
}
|
||||
my $objname = shift;
|
||||
|
||||
my %nicattrs = ();
|
||||
foreach my $nodeattr (keys %{$nodeattrhash})
|
||||
{
|
||||
# e.g nicips.eth0
|
||||
# do not need to handle nic attributes without the postfix .ethx,
|
||||
# it will be overwritten by the attributes with the postfix .ethx,
|
||||
if ($nodeattr =~ /^(nic\w+)\.(\w+)$/)
|
||||
{
|
||||
if ($1 && $2)
|
||||
{
|
||||
# $nicattrs{nicips}{eth0} = "1.1.1.1|1.2.1.1"
|
||||
$nicattrs{$1}{$2} = $nodeattrhash->{$nodeattr};
|
||||
|
||||
# remove nicips.eth0 from the %::FILEATTRS
|
||||
delete $nodeattrhash->{$nodeattr};
|
||||
}
|
||||
}
|
||||
}
|
||||
# $nicattrs{'nicips'}{'eth0'} = "1.1.1.1|1.2.1.1"
|
||||
# $nicattrs{'nicips'}{'eth1'} = "2.1.1.1|2.2.1.1"
|
||||
foreach my $nicattr (keys %nicattrs)
|
||||
{
|
||||
my @tmparray = ();
|
||||
foreach my $nicname (keys %{$nicattrs{$nicattr}})
|
||||
{
|
||||
# eth0!1.1.1.1|1.2.1.1
|
||||
push @tmparray, "$nicname!$nicattrs{$nicattr}{$nicname}";
|
||||
}
|
||||
# eth0!1.1.1.1|1.2.1.1,eth1!2.1.1.1|2.2.1.1
|
||||
$nodeattrhash->{$nicattr} = join(',', @tmparray);
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -160,6 +160,12 @@ To change the policy table for policy number 7.0 for admin1
|
||||
|
||||
chdef -t policy -o 7.0 name=admin1 rule=allow
|
||||
|
||||
=item 11.
|
||||
|
||||
To change the node nic attributes
|
||||
|
||||
chdef -t node -o cn1 nicips.eth0="1.1.1.1|1.2.1.1" nicnetworks.eth0="net1|net2" nictypes.eth0="Ethernet"
|
||||
|
||||
=back
|
||||
|
||||
|
||||
|
@ -146,6 +146,12 @@ To create a entry (7.0) in the policy table for user admin1
|
||||
|
||||
mkdef -t policy -o 7.0 name=admin1 rule=allow
|
||||
|
||||
=item 11.
|
||||
|
||||
To create a node definition with nic attributes
|
||||
|
||||
mkdef -t node cn1 groups=all nicips.eth0="1.1.1.1|1.2.1.1" nicnetworks.eth0="net1|net2" nictypes.eth0="Ethernet"
|
||||
|
||||
=back
|
||||
|
||||
|
||||
|
@ -445,6 +445,26 @@ sub processArgs
|
||||
}
|
||||
}
|
||||
|
||||
if ((!$::opt_t || $::opt_t eq 'node') && ($::command eq 'chdef') && ($::opt_m || $::opt_p))
|
||||
{
|
||||
my $nicattrs = 0;
|
||||
foreach my $kattr (keys %::ATTRS)
|
||||
{
|
||||
if ($kattr =~ /^nic\w+\.\w+$/)
|
||||
{
|
||||
$nicattrs = 1;
|
||||
}
|
||||
last;
|
||||
}
|
||||
if ($nicattrs)
|
||||
{
|
||||
my $rsp;
|
||||
$rsp->{data}->[0] = "chdef does not support to change the nic related attributes with -m or -p flag.";
|
||||
xCAT::MsgUtils->message("E", $rsp, $::callback);
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
# Check arguments for rmdef command
|
||||
# rmdef is very dangerous if wrong flag is specified
|
||||
# it may cause all the objects to be deleted, check the flags
|
||||
@ -1088,6 +1108,12 @@ sub defmk
|
||||
# set the attrs from the attr=val pairs
|
||||
foreach my $attr (keys %::ATTRS)
|
||||
{
|
||||
my $attrorig = $attr;
|
||||
# nicips.eth0 => nicips
|
||||
if ($attr =~ /^(nic\w+)\.\w+$/)
|
||||
{
|
||||
$attr = $1;
|
||||
}
|
||||
if (!grep(/^$attr$/, @list) && ($::objtype ne 'site') && ($::objtype ne 'monitoring'))
|
||||
{
|
||||
my $rsp;
|
||||
@ -1100,12 +1126,12 @@ sub defmk
|
||||
}
|
||||
else
|
||||
{
|
||||
$::CLIATTRS{$objname}{$attr} = $::ATTRS{$attr};
|
||||
$::CLIATTRS{$objname}{$attrorig} = $::ATTRS{$attrorig};
|
||||
if ($::verbose)
|
||||
{
|
||||
my $rsp;
|
||||
$rsp->{data}->[0] = "\nFunction: defmk-->set the attrs for each object definition";
|
||||
$rsp->{data}->[1] = "defmk: objname=$objname, attr=$attr, value=$::ATTRS{$attr}";
|
||||
$rsp->{data}->[1] = "defmk: objname=$objname, attr=$attrorig, value=$::ATTRS{$attrorig}";
|
||||
xCAT::MsgUtils->message("I", $rsp, $::callback);
|
||||
}
|
||||
}
|
||||
@ -1712,6 +1738,12 @@ sub defch
|
||||
# set the attrs from the attr=val pairs
|
||||
foreach my $attr (keys %::ATTRS)
|
||||
{
|
||||
my $attrorig = $attr;
|
||||
# nicips.eth0 => nicips
|
||||
if ($attr =~ /^(nic\w+)\.\w+$/)
|
||||
{
|
||||
$attr = $1;
|
||||
}
|
||||
if (!defined($list{$attr}) && ($::objtype ne 'site') && ($::objtype ne 'monitoring'))
|
||||
{
|
||||
my $rsp;
|
||||
@ -1724,7 +1756,7 @@ sub defch
|
||||
}
|
||||
else
|
||||
{
|
||||
$::CLIATTRS{$objname}{$attr} = $::ATTRS{$attr};
|
||||
$::CLIATTRS{$objname}{$attrorig} = $::ATTRS{$attrorig};
|
||||
}
|
||||
}
|
||||
|
||||
@ -2305,6 +2337,13 @@ sub setFINALattrs
|
||||
next;
|
||||
}
|
||||
|
||||
# special case for the nic* attributes
|
||||
# merge nic*.eth0, nic*.eth1
|
||||
if ($::FILEATTRS{$objname}{objtype} eq 'node')
|
||||
{
|
||||
xCAT::DBobjUtils->collapsenicsattr($::FILEATTRS{$objname}, $objname);
|
||||
}
|
||||
|
||||
my $datatype =
|
||||
$xCAT::Schema::defspec{$::FILEATTRS{$objname}{objtype}};
|
||||
my @list;
|
||||
@ -2350,6 +2389,58 @@ sub setFINALattrs
|
||||
|
||||
foreach my $objname (@::clobjnames)
|
||||
{
|
||||
# special case for the nic* attributes
|
||||
# merge nic*.eth0, nic*.eth1
|
||||
if ($::CLIATTRS{$objname}{objtype} eq 'node')
|
||||
{
|
||||
# Even if only the nicips.eth0 is specified with CLI,
|
||||
# need to read the whole nicips attribute from the nics table,
|
||||
# then merge the nicips.eth0 into the nicips attribute,
|
||||
my %tmphash = ();
|
||||
foreach my $nodeattr (keys %{$::CLIATTRS{$objname}})
|
||||
{
|
||||
if ($nodeattr =~ /^(nic\w+)\.\w+$/)
|
||||
{
|
||||
my $tmpnicattr = $1;
|
||||
if (!defined($tmphash{$tmpnicattr}))
|
||||
{
|
||||
my $nicstable = xCAT::Table->new("nics", -create => 1, -autocommit => 0);
|
||||
if (!$nicstable) {
|
||||
my $rsp;
|
||||
$rsp->{data}->[0] = "Could not open the \'nics\' table.";
|
||||
xCAT::MsgUtils->message("E", $rsp, $::callback);
|
||||
return 1;
|
||||
}
|
||||
my $nichash = $nicstable->getNodeAttribs($objname, [$tmpnicattr]);
|
||||
if ($nichash && $nichash->{$tmpnicattr})
|
||||
{
|
||||
$tmphash{$tmpnicattr} = $nichash->{$tmpnicattr};
|
||||
}
|
||||
$nicstable->close();
|
||||
}
|
||||
}
|
||||
}
|
||||
# $tmphash{nicips} = "eth0!1.1.1.1|1.2.1.1,eth1!2.1.1.1|2.2.1.1"
|
||||
foreach my $nicattr (keys %tmphash)
|
||||
{
|
||||
# eth0!1.1.1.1|1.2.1.1,eth1!2.1.1.1|2.2.1.1
|
||||
my $nicval = $tmphash{$nicattr};
|
||||
my @nicarray = split(/,/, $nicval);
|
||||
foreach my $nicv (@nicarray)
|
||||
{
|
||||
my @nica = split(/!/, $nicv);
|
||||
|
||||
# put the additional nicips.eth1, nicips.eth2 into %::CLIATTRS
|
||||
if (!defined $::CLIATTRS{$objname}{"$nicattr.$nica[0]"})
|
||||
{
|
||||
$::CLIATTRS{$objname}{"$nicattr.$nica[0]"} = $nica[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
xCAT::DBobjUtils->collapsenicsattr($::CLIATTRS{$objname}, $objname);
|
||||
}
|
||||
|
||||
foreach my $attr (keys %{$::CLIATTRS{$objname}})
|
||||
{
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user