[pve-devel] [PATCH container 1/9] add pending section to lxc config parser/writer
Oguz Bektas
o.bektas at proxmox.com
Thu Sep 5 16:11:13 CEST 2019
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";
+ }
} 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
More information about the pve-devel
mailing list