[pve-devel] [PATCH manager 3/3] Fix #2422: allow multiple Ceph public networks
Fabian Grünbichler
f.gruenbichler at proxmox.com
Wed Apr 15 10:30:49 CEST 2020
On March 11, 2020 4:22 pm, Alwin Antreich wrote:
> Multiple public networks can be defined in the ceph.conf. The networks
> need to be routed to each other.
>
> On first service start the Ceph MON will register itself with one of the
> IPs configured locally, matching one of the public networks defined in
> the ceph.conf.
>
> Signed-off-by: Alwin Antreich <a.antreich at proxmox.com>
> ---
> PVE/API2/Ceph/MON.pm | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/PVE/API2/Ceph/MON.pm b/PVE/API2/Ceph/MON.pm
> index 3baeac52..5128fea2 100644
> --- a/PVE/API2/Ceph/MON.pm
> +++ b/PVE/API2/Ceph/MON.pm
> @@ -33,11 +33,19 @@ my $find_mon_ip = sub {
> }
> $pubnet //= $cfg->{global}->{public_network};
>
> + my $public_nets = [ PVE::Tools::split_list($pubnet) ];
> + warn "Multiple ceph public networks detected on $node: $pubnet\n".
> + "Networks must be capable of routing to each other.\n" if scalar(@$public_nets) > 1;
> +
style nit: indentation/alignment, also - postfix if for multiline
statement is confusing.
> if (!$pubnet) {
> return $overwrite_ip // PVE::Cluster::remote_node_ip($node);
> }
so here we check whether $pubnet is true, but in the new hunk above we
already split and print it? works in practice (PVE::Tools::split_list
handles undef fine, and then $public_nets does not have entries, so the
warn does not trigger), but is the wrong way round ;)
>
> - my $allowed_ips = PVE::Network::get_local_ip_from_cidr($pubnet);
> + my $allowed_ips;
could possibly be converted to a hash, and make the code using it below
more readably by getting rid of 'check for duplicate/set membership via grep'
> + foreach my $net (@$public_nets) {
> + push @$allowed_ips, @{ PVE::Network::get_local_ip_from_cidr($net) };
would it make sense to catch errors from $net not being a valid CIDR
string here? so that we get a nice error message, instead of whatever
'ip' does with the invalid input/command line..
> + }
> +
> die "No active IP found for the requested ceph public network '$pubnet' on node '$node'\n"
> if scalar(@$allowed_ips) < 1;
further below there is still a code path that treats $pubnet as
containing a single CIDR string:
62 die "Monitor IP '$overwrite_ip' not in ceph public network '$pubnet'\n"
63 if !PVE::Network::is_ip_in_cidr($overwrite_ip, $pubnet);
>
> --
> 2.20.1
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
More information about the pve-devel
mailing list