NAK, this breaks existing configs with a snapshot called pending (which is an allowed snapshot name, and not such an uncommon word that we can confidently say that noone would be affected). we could do _PENDING_ or __PENDING__ (similar to what we do with __base__ and __replicate__ and __migration__ storage snapshots).
in general, this would align the VM and CT config parser/writer pairs more closely, so it's a step in the right direction. On September 5, 2019 4:11 pm, Oguz Bektas wrote: > allow parsing and writing of the pending changes section in CTID.conf > files. > > Signed-off-by: Oguz Bektas <o.bek...@proxmox.com> > --- > src/PVE/LXC/Config.pm | 35 ++++++++++++++++++++++++++++++----- > 1 file changed, 30 insertions(+), 5 deletions(-) > > diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm > index 9790345..08b958f 100644 > --- a/src/PVE/LXC/Config.pm > +++ b/src/PVE/LXC/Config.pm > @@ -751,6 +751,7 @@ sub parse_pct_config { > my $res = { > digest => Digest::SHA::sha1_hex($raw), > snapshots => {}, > + pending => {}, > }; > > $filename =~ m|/lxc/(\d+).conf$| > @@ -766,7 +767,13 @@ sub parse_pct_config { > foreach my $line (@lines) { > next if $line =~ m/^\s*$/; > > - if ($line =~ m/^\[([a-z][a-z0-9_\-]+)\]\s*$/i) { > + if ($line =~ m/^\[PENDING\]\s*$/i) { > + $section = 'pending'; > + $conf->{description} = $descr if $descr; > + $descr = ''; > + $conf = $res->{$section} = {}; > + next; > + } elsif ($line =~ m/^\[([a-z][a-z0-9_\-]+)\]\s*$/i) { > $section = $1; > $conf->{description} = $descr if $descr; > $descr = ''; > @@ -794,6 +801,13 @@ sub parse_pct_config { > $descr .= PVE::Tools::decode_text($2); > } elsif ($line =~ m/snapstate:\s*(prepare|delete)\s*$/) { > $conf->{snapstate} = $1; > + } elsif ($line =~ m/^delete:\s*(.*\S)\s*$/) { > + my $value = $1; > + if ($section eq 'pending') { > + $conf->{delete} = $value; > + } else { > + warn "vm $vmid - property 'delete' is only allowed in > [PENDING]\n"; you copied this without the typo, but did not fix it in the original ;) > + } > } elsif ($line =~ m/^([a-z][a-z_]*\d*):\s*(\S.*)\s*$/) { > my $key = $1; > my $value = $2; > @@ -832,14 +846,19 @@ sub write_pct_config { > } > > my $generate_raw_config = sub { > - my ($conf) = @_; > + my ($conf, $pending) = @_; > > my $raw = ''; > > # add description as comment to top of file > - my $descr = $conf->{description} || ''; > - foreach my $cl (split(/\n/, $descr)) { > - $raw .= '#' . PVE::Tools::encode_text($cl) . "\n"; > + if (defined(my $descr = $conf->{description})) { > + if ($descr) { > + foreach my $cl (split(/\n/, $descr)) { > + $raw .= '#' . PVE::Tools::encode_text($cl) . "\n"; > + } > + } else { > + $raw .= "#\n" if $pending; > + } > } > > foreach my $key (sort keys %$conf) { > @@ -864,7 +883,13 @@ sub write_pct_config { > > my $raw = &$generate_raw_config($conf); > > + if (scalar(keys %{$conf->{pending}})){ > + $raw .= "\n[PENDING]\n"; > + $raw .= &$generate_raw_config($conf->{pending}, 1); > + } > + > foreach my $snapname (sort keys %{$conf->{snapshots}}) { > + die "internal error" if $snapname eq 'pending'; > $raw .= "\n[$snapname]\n"; > $raw .= &$generate_raw_config($conf->{snapshots}->{$snapname}); > } > -- > 2.20.1 > > _______________________________________________ > pve-devel mailing list > pve-devel@pve.proxmox.com > https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel > > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel