mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-08-15 05:45:00 +00:00
api: ceph: mon: factor out mon_host regex address removal
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
This commit is contained in:
parent
9e989449ae
commit
3e10f0fcdb
@ -127,6 +127,34 @@ my $assert_mon_can_remove = sub {
|
|||||||
die "can't remove last monitor\n" if scalar(@$monlist) <= 1;
|
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 ({
|
__PACKAGE__->register_method ({
|
||||||
name => 'listmon',
|
name => 'listmon',
|
||||||
path => '',
|
path => '',
|
||||||
@ -471,29 +499,7 @@ __PACKAGE__->register_method ({
|
|||||||
|
|
||||||
# delete from mon_host
|
# delete from mon_host
|
||||||
if (my $monhost = $cfg->{global}->{mon_host}) {
|
if (my $monhost = $cfg->{global}->{mon_host}) {
|
||||||
# various replaces to remove the ip
|
$cfg->{global}->{mon_host} = $remove_addr_from_mon_host->($monhost, $addr);
|
||||||
# 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cfs_write_file('ceph.conf', $cfg);
|
cfs_write_file('ceph.conf', $cfg);
|
||||||
|
Loading…
Reference in New Issue
Block a user