From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 07AE17AC5F for ; Mon, 10 May 2021 14:19:07 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id ABCDF17D00 for ; Mon, 10 May 2021 14:18:35 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 049DB17C5C for ; Mon, 10 May 2021 14:18:32 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id C895E45A88 for ; Mon, 10 May 2021 14:18:31 +0200 (CEST) From: Fabian Ebner To: pve-devel@lists.proxmox.com Date: Mon, 10 May 2021 14:18:24 +0200 Message-Id: <20210510121826.8543-13-f.ebner@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210510121826.8543-1-f.ebner@proxmox.com> References: <20210510121826.8543-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.002 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH v2 manager 12/14] api: ceph: mon: factor out mon_host regex address removal X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 May 2021 12:19:07 -0000 Signed-off-by: Fabian Ebner --- New in v2. PVE/API2/Ceph/MON.pm | 52 ++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/PVE/API2/Ceph/MON.pm b/PVE/API2/Ceph/MON.pm index 27278bc1..e5f11c8a 100644 --- a/PVE/API2/Ceph/MON.pm +++ b/PVE/API2/Ceph/MON.pm @@ -127,6 +127,34 @@ my $assert_mon_can_remove = sub { die "can't remove last monitor\n" if scalar(@$monlist) <= 1; }; +my $remove_addr_from_mon_host = sub { + my ($monhost, $addr) = @_; + + # 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 + # e.g. removing 10.0.0.1 should not remove 10.0.0.101 or 110.0.0.1 + + # remove vector containing this ip + # format is [vX:ip:port/nonce,vY:ip:port/nonce] + my $vectorpart_re = "v\\d+:\Q$addr\E:\\d+\\/\\d+"; + $monhost =~ s/(^|[ ,;]*)\[$vectorpart_re(?:,$vectorpart_re)*\](?:[ ,;]+|$)/$1/; + + # ip (+ port) + $monhost =~ s/(^|[ ,;]+)\Q$addr\E(?::\d+)?(?:[ ,;]+|$)/$1/; + + # ipv6 only without brackets + if ($addr =~ m/^\[?(.*?:.*?)\]?$/) { + $addr = $1; + $monhost =~ s/(^|[ ,;]+)\Q$addr\E(?:[ ,;]+|$)/$1/; + } + + # remove trailing separators + $monhost =~ s/[ ,;]+$//; + + return $monhost; +}; + __PACKAGE__->register_method ({ name => 'listmon', path => '', @@ -471,29 +499,7 @@ __PACKAGE__->register_method ({ # delete from mon_host if (my $monhost = $cfg->{global}->{mon_host}) { - # 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 - # e.g. removing 10.0.0.1 should not remove 10.0.0.101 or 110.0.0.1 - - # remove vector containing this ip - # format is [vX:ip:port/nonce,vY:ip:port/nonce] - my $vectorpart_re = "v\\d+:\Q$addr\E:\\d+\\/\\d+"; - $monhost =~ s/(^|[ ,;]*)\[$vectorpart_re(?:,$vectorpart_re)*\](?:[ ,;]+|$)/$1/; - - # ip (+ port) - $monhost =~ s/(^|[ ,;]+)\Q$addr\E(?::\d+)?(?:[ ,;]+|$)/$1/; - - # ipv6 only without brackets - if ($addr =~ m/^\[?(.*?:.*?)\]?$/) { - $addr = $1; - $monhost =~ s/(^|[ ,;]+)\Q$addr\E(?:[ ,;]+|$)/$1/; - } - - # remove trailing separators - $monhost =~ s/[ ,;]+$//; - - $cfg->{global}->{mon_host} = $monhost; + $cfg->{global}->{mon_host} = $remove_addr_from_mon_host->($monhost, $addr); } cfs_write_file('ceph.conf', $cfg); -- 2.20.1