all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH pve-cluster] dc.cfg: Add notes to datacenter config
@ 2021-07-08 11:41 Dominic Jäger
  2021-07-08 11:41 ` [pve-devel] [PATCH manager] dc menu: close 3504: Add datacenter notes Dominic Jäger
  0 siblings, 1 reply; 2+ messages in thread
From: Dominic Jäger @ 2021-07-08 11:41 UTC (permalink / raw)
  To: pve-devel

Similar to notes for nodes.
datacenter.cfg normally uses key-value pairs defined in the schema.
We bypass this to allow potentially long comments at the top.

Signed-off-by: Dominic Jäger <d.jaeger@proxmox.com>
---
 data/PVE/DataCenterConfig.pm | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/data/PVE/DataCenterConfig.pm b/data/PVE/DataCenterConfig.pm
index 24ebf3f..558cf78 100644
--- a/data/PVE/DataCenterConfig.pm
+++ b/data/PVE/DataCenterConfig.pm
@@ -181,6 +181,13 @@ my $datacenter_schema = {
 	    format => $u2f_format,
 	    description => 'u2f',
 	},
+	description => {
+	    type => 'string',
+	    description => "Datacenter description. Shown in the web-interface datacenter notes panel."
+		." This is saved as comment inside the configuration file.",
+	    maxLength => 64 * 1024,
+	    optional => 1,
+	},
     },
 };
 
@@ -190,8 +197,24 @@ sub get_datacenter_schema { return $datacenter_schema };
 sub parse_datacenter_config {
     my ($filename, $raw) = @_;
 
+    # description may be comment or key-value pair (or both)
+    my $comment = '';
+    my @lines = split(/\n/, $raw);
+    foreach my $line (@lines) {
+	if ($line =~ /^\#(.*)\s*$/) {
+	    $comment .= PVE::Tools::decode_text($1) . "\n";
+	}
+    }
+
+    # parse_config ignores lines with # => use $raw
     my $res = PVE::JSONSchema::parse_config($datacenter_schema, $filename, $raw // '');
 
+    my @description = ();
+    push(@description, $res->{description}) if defined($res->{description});
+    push(@description, $comment) if $comment;
+    $res->{description} = join("\n\n", @description) if @description;
+
+
     if (my $migration = $res->{migration}) {
 	$res->{migration} = PVE::JSONSchema::parse_property_string($migration_format, $migration);
     }
@@ -251,7 +274,16 @@ sub write_datacenter_config {
 	$cfg->{u2f} = PVE::JSONSchema::print_property_string($u2f, $u2f_format);
     }
 
-    return PVE::JSONSchema::dump_config($datacenter_schema, $filename, $cfg);
+    my $comment = '';
+    # add description as comment to top of file
+    my $description = $cfg->{description} || '';
+    foreach my $line (split(/\n/, $description)) {
+	$comment .= '#' .  PVE::Tools::encode_text($line) . "\n";
+    }
+    delete $cfg->{description}; # add only as comment, no additional key-value pair
+    my $dump = PVE::JSONSchema::dump_config($datacenter_schema, $filename, $cfg);
+
+    return $comment . "\n" . $dump;
 }
 
 PVE::Cluster::cfs_register_file('datacenter.cfg',
-- 
2.30.2





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-07-08 11:42 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-08 11:41 [pve-devel] [PATCH pve-cluster] dc.cfg: Add notes to datacenter config Dominic Jäger
2021-07-08 11:41 ` [pve-devel] [PATCH manager] dc menu: close 3504: Add datacenter notes Dominic Jäger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal