This adds support for writing arbitrary sections to 'ceph.conf' while
ensuring that already written sections are not duplicated.

Sections that are associated with the client, for example
'[client.foo]', are written directly after the '[client]' section.

Signed-off-by: Max Carrara <m.carr...@proxmox.com>
---
Changes v1 --> v2:
  * Instead of just adding 'client.crash' as a separate section,
    also allow writing arbitrary sections

 src/PVE/CephConfig.pm | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/PVE/CephConfig.pm b/src/PVE/CephConfig.pm
index 77b745f..86d3079 100644
--- a/src/PVE/CephConfig.pm
+++ b/src/PVE/CephConfig.pm
@@ -60,23 +60,30 @@ my $parse_ceph_file = sub {
 sub write_ceph_config {
     my ($filename, $cfg) = @_;
 
+    my $written_sections = {};
     my $out = '';
 
     my $cond_write_sec = sub {
        my $re = shift;
 
-       foreach my $section (sort keys %$cfg) {
-           next if $section !~ m/^$re$/;
+       for my $section (sort keys %$cfg) {
+           if ($section !~ m/^$re$/ || exists($written_sections->{$section})) {
+               next;
+           }
+
            $out .= "[$section]\n";
-           foreach my $key (sort keys %{$cfg->{$section}}) {
-               $out .= "\t $key = $cfg->{$section}->{$key}\n";
+           for my $key (sort keys %{$cfg->{$section}}) {
+               $out .= "\t$key = $cfg->{$section}->{$key}\n";
            }
            $out .= "\n";
+
+           $written_sections->{$section} = 1;
        }
     };
 
     &$cond_write_sec('global');
     &$cond_write_sec('client');
+    &$cond_write_sec('client\..*');
 
     &$cond_write_sec('mds');
     &$cond_write_sec('mon');
@@ -88,6 +95,8 @@ sub write_ceph_config {
     &$cond_write_sec('osd\..*');
     &$cond_write_sec('mgr\..*');
 
+    &$cond_write_sec('.*');
+
     return $out;
 }
 
-- 
2.39.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to