my $cond_write_sec = sub {
my $re = shift;
- foreach my $section (keys %$cfg) {
+ foreach my $section (sort keys %$cfg) {
next if $section !~ m/^$re$/;
$out .= "[$section]\n";
foreach my $key (sort keys %{$cfg->{$section}}) {
my $config = $parse_ceph_file->($configfile);
- my @monids = grep { /mon\./ && defined($config->{$_}->{'mon addr'}) } %{$config};
+ my $monhostlist = {};
- return join(',', sort map { $config->{$_}->{'mon addr'} } @monids);
-};
+ # get all ip adresses from mon_host
+ my $monhosts = [ split (/[ ,;]+/, $config->{global}->{mon_host} // "") ];
+
+ foreach my $monhost (@$monhosts) {
+ $monhost =~ s/^\[?v\d\://; # remove beginning of vector
+ $monhost =~ s|/\d+\]?||; # remove end of vector
+ my $host = $get_host->($monhost);
+ if ($host ne "") {
+ $monhostlist->{$host} = 1;
+ }
+ }
+
+ # then get all addrs from mon. sections
+ for my $section ( keys %$config ) {
+ next if $section !~ m/^mon\./;
+
+ if (my $addr = $config->{$section}->{mon_addr}) {
+ $monhostlist->{$addr} = 1;
+ }
+ }
+
+ return join(',', sort keys %$monhostlist);
+}
sub hostlist {
my ($list_text, $separator) = @_;
}
}
+my $ceph_version_parser = sub {
+ my $ceph_version = shift;
+ # FIXME this is the same as pve-manager PVE::Ceph::Tools get_local_version
+ if ($ceph_version =~ /^ceph.*\s(\d+(?:\.\d+)+(?:-pve\d+)?)\s+(?:\(([a-zA-Z0-9]+)\))?/) {
+ my ($version, $buildcommit) = ($1, $2);
+ my $subversions = [ split(/\.|-/, $version) ];
+
+ return ($subversions, $version, $buildcommit);
+ }
+ warn "Could not parse Ceph version: '$ceph_version'\n";
+};
+
+sub local_ceph_version {
+ my ($cache) = @_;
+
+ my $version_string = $cache;
+ if (!defined($version_string)) {
+ run_command('ceph --version', outfunc => sub {
+ $version_string = shift;
+ });
+ }
+ return undef if !defined($version_string);
+ # subversion is an array ref. with the version parts from major to minor
+ # version is the filtered version string
+ my ($subversions, $version) = $ceph_version_parser->($version_string);
+
+ return wantarray ? ($subversions, $version) : $version;
+}
+
1;