]> git.proxmox.com Git - pve-storage.git/blobdiff - PVE/CephConfig.pm
tree-wide: fix typos with codespell
[pve-storage.git] / PVE / CephConfig.pm
index 4a303c27111819ad5e1948508e0833187e3f3519..83d72fce94b6aa3507b8e3ab245638ef1f431d5f 100644 (file)
@@ -65,7 +65,7 @@ sub write_ceph_config {
     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}}) {
@@ -123,7 +123,7 @@ sub get_monaddr_list {
 
     my $monhostlist = {};
 
-    # get all ip adresses from mon_host
+    # get all ip addresses from mon_host
     my $monhosts = [ split (/[ ,;]+/, $config->{global}->{mon_host} // "") ];
 
     foreach my $monhost (@$monhosts) {
@@ -255,4 +255,33 @@ sub ceph_remove_keyfile {
     }
 }
 
+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.*\sv?(\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;