by also comparing the canonical form to decide when to remove an address. When getting the IP from the rados information, also drop eventual brackets, so our existing function can handle it. Add the brackets back within the remove_addr_from_mon_host function.
Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> --- New in v2. PVE/API2/Ceph/MON.pm | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/PVE/API2/Ceph/MON.pm b/PVE/API2/Ceph/MON.pm index e5f11c8a..6244655d 100644 --- a/PVE/API2/Ceph/MON.pm +++ b/PVE/API2/Ceph/MON.pm @@ -130,6 +130,8 @@ my $assert_mon_can_remove = sub { my $remove_addr_from_mon_host = sub { my ($monhost, $addr) = @_; + $addr = "[$addr]" if PVE::JSONSchema::pve_verify_ipv6($addr, 1); + # various replaces to remove the ip # we always match the beginning or a separator (also at the end) # so we do not accidentally remove a wrong ip @@ -485,6 +487,7 @@ __PACKAGE__->register_method ({ if ($mon->{name} eq $monid) { $addr = $mon->{public_addr} // $mon->{addr}; ($addr) = $addr =~ m|^(.*):\d+/\d+$|; # extract the ip without port/nonce + ($addr) = $addr =~ m|^\[?(.*?)\]?$|; # remove brackets last; } } @@ -499,7 +502,22 @@ __PACKAGE__->register_method ({ # delete from mon_host if (my $monhost = $cfg->{global}->{mon_host}) { - $cfg->{global}->{mon_host} = $remove_addr_from_mon_host->($monhost, $addr); + $monhost = $remove_addr_from_mon_host->($monhost, $addr); + + # also remove matching IPs that differ syntactically + if (PVE::JSONSchema::pve_verify_ip($addr, 1)) { + $addr = PVE::Network::canonical_ip($addr); + + my $mon_host_ips = $ips_from_mon_host->($cfg->{global}->{mon_host}); + + for my $mon_host_ip (@{$mon_host_ips}) { + # match canonical addresses, but remove as present in mon_host + if (PVE::Network::canonical_ip($mon_host_ip) eq $addr) { + $monhost = $remove_addr_from_mon_host->($monhost, $mon_host_ip); + } + } + } + $cfg->{global}->{mon_host} = $monhost; } cfs_write_file('ceph.conf', $cfg); -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel