config parser can now read/write [pve:pending] section. this was named such, instead of [PENDING], after on- and offline discussion regarding namespacing the pending section and snapshots.
this also adds an optional non-capturing regex group into the parser for [snap: snapname] entries which can be supported in PVE 7.0 Signed-off-by: Oguz Bektas <o.bek...@proxmox.com> --- src/PVE/LXC/Config.pm | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm index 9790345..47bd4bb 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,14 @@ 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/^\[pve:pending\]\s*$/i) { + $section = 'pending'; + $conf->{description} = $descr if $descr; + $descr = ''; + $conf = $res->{$section} = {}; + next; + } elsif ($line =~ m/^\[(?:snap:)?([a-z][a-z0-9_\-]+)\]\s*$/i) { + # extended regex for namespacing snapshots in PVE 7.0 $section = $1; $conf->{description} = $descr if $descr; $descr = ''; @@ -794,6 +802,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 [pve:pending]\n"; + } } elsif ($line =~ m/^([a-z][a-z_]*\d*):\s*(\S.*)\s*$/) { my $key = $1; my $value = $2; @@ -832,14 +847,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 +884,14 @@ sub write_pct_config { my $raw = &$generate_raw_config($conf); + if (scalar(keys %{$conf->{pending}})){ + $raw .= "\n[pve:pending]\n"; + $raw .= &$generate_raw_config($conf->{pending}, 1); + } + foreach my $snapname (sort keys %{$conf->{snapshots}}) { + # TODO: namespace snapshots for PVE 7.0 + #$raw .= "\n[snap:$snapname]\n"; $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