[pve-devel] [PATCH cluster] allow also deleting a node by name when ringX_addr is a IP
Fabian Grünbichler
f.gruenbichler at proxmox.com
Tue Sep 20 10:42:18 CEST 2016
On Tue, Sep 20, 2016 at 10:17:44AM +0200, Thomas Lamprecht wrote:
> This is an additional (convenience) fix for the delnode param.
> As we always have the node name in our config - either the 'name'
> (preferred) or the 'ring0_addr' property of a node entry in the
> corosync.conf holds it - allow also deleting by it if the ringX_addr
> is set to an IP, else this may be confusing as the user uses
> normally the node name only to do things.
>
> Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
> ---
>
> This is a follow up patch for the recently pushed commits
> 7aed82482c7a0eef13582f61ed6bfd69cb7ff33c
> d09373b46d6ffdc260e842dd3946e732ec0233ee
> which patch set I overlooked on the mailing list
>
> data/PVE/CLI/pvecm.pm | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/data/PVE/CLI/pvecm.pm b/data/PVE/CLI/pvecm.pm
> index b26a1ec..b72fb00 100755
> --- a/data/PVE/CLI/pvecm.pm
> +++ b/data/PVE/CLI/pvecm.pm
> @@ -414,9 +414,11 @@ __PACKAGE__->register_method ({
>
> foreach my $tmp_node (keys %$nodelist) {
> my $d = $nodelist->{$tmp_node};
> + my $name = $d->{name};
> my $ring0_addr = $d->{ring0_addr};
> my $ring1_addr = $d->{ring1_addr};
> if (($tmp_node eq $param->{node}) ||
> + (defined($name) && ($name eq $param->{node})) ||
> (defined($ring0_addr) && ($ring0_addr eq $param->{node})) ||
> (defined($ring1_addr) && ($ring1_addr eq $param->{node}))) {
> $node = $tmp_node;
> --
> 2.1.4
but the name information is stored redundantely in the nodelist - once
as key of the node element, once as sub element with the key name:
perl -e 'use strict; use warnings; use Data::Dumper; use PVE::CLI::pvecm; use PVE::Cluster; print Dumper(PVE::CLI::pvecm::corosync_nodelist(PVE::Cluster::cfs_read_file("corosync.conf")));'
$VAR1 = {
'nodename2' => {
'nodeid' => '2',
'ring0_addr' => '10.0.1.12',
'name' => 'nodename2',
'quorum_votes' => '1'
},
'nodename3' => {
'name' => 'nodename3',
'nodeid' => '3',
'ring0_addr' => '10.0.1.13',
'quorum_votes' => '1'
},
'nodename1' => {
'quorum_votes' => '1',
'ring0_addr' => '10.0.1.11',
'nodeid' => '1',
'name' => 'nodename1'
}
};
pve-cluster/data/PVE/CLI/pvecm.pm:736
foreach my $child (@{$ne->{children}}) {
next if !defined($child->{key});
$node->{$child->{key}} = $child->{value};
# use 'name' over 'ring0_addr' if set
if ($child->{key} eq 'name') {
delete $nodelist->{$name} if $name;
$name = $child->{value};
$nodelist->{$name} = $node;
} elsif(!$name && $child->{key} eq 'ring0_addr') {
$name = $child->{value};
$nodelist->{$name} = $node;
}
}
since we are iterating over the nodelist's keys, $tmp_node is always
equal to $d->{name}, so this patch does not make any sense? or am I
missing something here?
More information about the pve-devel
mailing list