]> git.proxmox.com Git - pve-storage.git/commitdiff
register ceph.conf parser/writer
authorDominik Csapak <d.csapak@proxmox.com>
Wed, 19 Dec 2018 10:24:40 +0000 (11:24 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 20 Dec 2018 08:26:11 +0000 (09:26 +0100)
With this we can use cfs_read_file/cfs_write_file and cfs_lock_file.

Code for writing is mostly copied from pve-managers CephTools.pm,
with the addition of mgr sections.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
PVE/CephConfig.pm

index c851ea29121edb087e8b85b5fb60d7b8038ce983..5b2d19e786a99b8bb87cbbfae94da4e444b5f0a2 100644 (file)
@@ -4,16 +4,18 @@ use strict;
 use warnings;
 use Net::IP;
 use PVE::Tools qw(run_command);
+use PVE::Cluster qw(cfs_register_file);
 
-my $parse_ceph_file = sub {
-    my ($filename) = @_;
+cfs_register_file('ceph.conf',
+                 \&parse_ceph_config,
+                 \&write_ceph_config);
 
-    my $cfg = {};
+sub parse_ceph_config {
+    my ($filename, $raw) = @_;
 
-    return $cfg if ! -f $filename;
+    my $cfg = {};
 
-    my $content = PVE::Tools::file_get_contents($filename);
-    my @lines = split /\n/, $content;
+    my @lines = split /\n/, $raw;
 
     my $section;
 
@@ -36,8 +38,54 @@ my $parse_ceph_file = sub {
     }
 
     return $cfg;
+}
+
+my $parse_ceph_file = sub {
+    my ($filename) = @_;
+
+    my $cfg = {};
+
+    return $cfg if ! -f $filename;
+
+    my $content = PVE::Tools::file_get_contents($filename);
+
+    return parse_ceph_config($filename, $content);
 };
 
+sub write_ceph_config {
+    my ($filename, $cfg) = @_;
+
+    my $out = '';
+
+    my $cond_write_sec = sub {
+       my $re = shift;
+
+       foreach my $section (keys %$cfg) {
+           next if $section !~ m/^$re$/;
+           $out .= "[$section]\n";
+           foreach my $key (sort keys %{$cfg->{$section}}) {
+               $out .= "\t $key = $cfg->{$section}->{$key}\n";
+           }
+           $out .= "\n";
+       }
+    };
+
+    &$cond_write_sec('global');
+    &$cond_write_sec('client');
+
+    &$cond_write_sec('mds');
+    &$cond_write_sec('mon');
+    &$cond_write_sec('osd');
+    &$cond_write_sec('mgr');
+
+    &$cond_write_sec('mds\..*');
+    &$cond_write_sec('mon\..*');
+    &$cond_write_sec('osd\..*');
+    &$cond_write_sec('mgr\..*');
+
+    return $out;
+}
+
 my $ceph_get_key = sub {
     my ($keyfile, $username) = @_;