Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> --- Changes from v3: * also escape \\ and \n
PVE/VZDump.pm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm index de29ca60..5f78746d 100644 --- a/PVE/VZDump.pm +++ b/PVE/VZDump.pm @@ -70,6 +70,29 @@ sub run_command { PVE::Tools::run_command($cmdstr, %param, logfunc => $logfunc); } +my $generate_notes = sub { + my ($notes_template, $task) = @_; + + my $info = { + cluster => PVE::Cluster::get_clinfo()->{cluster}->{name}, + guestname => $task->{hostname}, + node => PVE::INotify::nodename(), + vmid => $task->{vmid}, + }; + + my $unescape = { + '\\\\' => '\\', # replace \\ by \ + '\n' => "\n", # turn literal \n into real newline + }; + + $notes_template =~ s/(\Q\\\E|\Q\n\E)/$unescape->{$1}/g; + + my $vars = join('|', keys $info->%*); + $notes_template =~ s/\{\{($vars)\}\}/\Q$info->{$1}\E/g; + + return $notes_template; +}; + my $parse_prune_backups_maxfiles = sub { my ($param, $kind) = @_; @@ -1017,6 +1040,13 @@ sub exec_backup_task { my $volname = $opts->{pbs} ? $task->{target} : basename($task->{target}); my $volid = "${storeid}:backup/${volname}"; + if ($opts->{'notes-template'} && $opts->{'notes-template'} ne '') { + debugmsg('info', "adding notes to backup", $logfd); + my $notes = $generate_notes->($opts->{'notes-template'}, $task); + eval { PVE::Storage::update_volume_attribute($cfg, $volid, 'notes', $notes) }; + debugmsg('warn', "unable to add notes - $@", $logfd) if $@; + } + if ($opts->{protected}) { debugmsg('info', "marking backup as protected", $logfd); eval { PVE::Storage::update_volume_attribute($cfg, $volid, 'protected', 1) }; -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel