[pve-devel] [PATCH pve-container 2/2] Replace parsing code for -net* and -mp*

Wolfgang Bumiller w.bumiller at proxmox.com
Tue Sep 22 13:48:52 CEST 2015


Use the new JSONSchema provided parser which also verifies
the parameters with their schemas.
---
 src/PVE/LXC.pm | 33 +++++++++------------------------
 1 file changed, 9 insertions(+), 24 deletions(-)

diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm
index f5b3a5b..7a6803e 100644
--- a/src/PVE/LXC.pm
+++ b/src/PVE/LXC.pm
@@ -862,28 +862,15 @@ sub parse_ct_mountpoint {
 
     $data //= '';
 
-    my $res = {};
-
-    foreach my $p (split (/,/, $data)) {
-	next if $p =~ m/^\s*$/;
-
-	if ($p =~ m/^(volume|backup|size|mp)=(.+)$/) {
-	    my ($k, $v) = ($1, $2);
-	    return undef if defined($res->{$k});
-	    $res->{$k} = $v;
-	} else {
-	    if (!$res->{volume} && $p !~ m/=/) {
-		$res->{volume} = $p;
-	    } else {
-		return undef;
-	    }
-	}
+    my $res;
+    eval { $res = PVE::JSONSchema::parse_property_string($mp_desc, $data) };
+    if ($@) {
+	warn $@;
+	return undef;
     }
 
     return undef if !defined($res->{volume});
 
-    return undef if $res->{backup} && $res->{backup} !~ m/^(yes|no)$/;
-
     if ($res->{size}) {
 	return undef if !defined($res->{size} = &$parse_size($res->{size}));
     }
@@ -933,12 +920,10 @@ sub parse_lxc_network {
 
     return $res if !$data;
 
-    foreach my $pv (split (/,/, $data)) {
-	if ($pv =~ m/^(bridge|hwaddr|mtu|name|ip|ip6|gw|gw6|firewall|tag)=(\S+)$/) {
-	    $res->{$1} = $2;
-	} else {
-	    return undef;
-	}
+    eval { $res = PVE::JSONSchema::parse_property_string($netconf_desc, $data) };
+    if ($@) {
+	warn $@;
+	return undef;
     }
 
     $res->{type} = 'veth';
-- 
2.1.4




More information about the pve-devel mailing list