[pve-devel] [PATCH container 1/9] add pending section to lxc config parser/writer

Fabian Grünbichler f.gruenbichler at proxmox.com
Wed Sep 11 09:39:01 CEST 2019


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.bektas at 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 at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
> 
> 




More information about the pve-devel mailing list