diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 9c6d7142..2a370dab 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -1963,6 +1963,11 @@ __PACKAGE__->register_method({ type => 'boolean', description => "Freeze the filesystem", }, + description => { + optional => 1, + type => 'string', + description => "A textual description or comment.", + }, }, }, returns => { @@ -1982,13 +1987,10 @@ __PACKAGE__->register_method({ my $snapname = extract_param($param, 'snapname'); - my $vmstate = extract_param($param, 'vmstate'); - - my $freezefs = extract_param($param, 'freezefs'); - my $realcmd = sub { PVE::Cluster::log_msg('info', $authuser, "snapshot VM $vmid: $snapname"); - PVE::QemuServer::snapshot_create($vmid, $snapname, $vmstate, $freezefs); + PVE::QemuServer::snapshot_create($vmid, $snapname, $param->{vmstate}, + $param->{freezefs}, $param->{description}); }; return $rpcenv->fork_worker('qmsnapshot', $vmid, $authuser, $realcmd); diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 9f554604..c51bc618 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -1583,7 +1583,7 @@ sub parse_vm_config { if ($line =~ m/^\[([a-z][a-z0-9_\-]+)\]\s*$/i) { my $snapname = $1; $conf->{description} = $descr if $descr; - my $descr = ''; + $descr = ''; $conf = $res->{snapshots}->{$snapname} = {}; next; } @@ -3611,7 +3611,7 @@ my $snapshot_apply_config = sub { }; my $snapshot_prepare = sub { - my ($vmid, $snapname) = @_; + my ($vmid, $snapname, $comment) = @_; my $snap; @@ -3648,13 +3648,14 @@ my $snapshot_prepare = sub { } }); - $snap = $conf->{snapshots}->{$snapname} = { - snapstate => "prepare", - snaptime => time(), - }; + $snap = $conf->{snapshots}->{$snapname} = {}; &$snapshot_copy_config($conf, $snap); + $snap->{snapstate} = "prepare"; + $snap->{snaptime} = time(); + $snap->{description} = $comment if $comment; + update_config_nolock($vmid, $conf, 1); }; @@ -3750,9 +3751,9 @@ sub snapshot_rollback { } sub snapshot_create { - my ($vmid, $snapname, $vmstate, $freezefs) = @_; + my ($vmid, $snapname, $vmstate, $freezefs, $comment) = @_; - my $snap = &$snapshot_prepare($vmid, $snapname); + my $snap = &$snapshot_prepare($vmid, $snapname, $comment); eval { # create internal snapshots of all drives