From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 84BF262C93 for ; Tue, 24 Nov 2020 14:30:10 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 771C7CF06 for ; Tue, 24 Nov 2020 14:29:40 +0100 (CET) Received: from kvmformation1.odiso.net (globalOdiso.M6Lille.odiso.net [89.248.211.242]) by firstgate.proxmox.com (Proxmox) with ESMTP id C2F05CEDC for ; Tue, 24 Nov 2020 14:29:38 +0100 (CET) Received: by kvmformation1.odiso.net (Postfix, from userid 0) id 613461132B0C; Tue, 24 Nov 2020 14:29:32 +0100 (CET) From: Alexandre Derumier To: pve-devel@lists.proxmox.com Date: Tue, 24 Nov 2020 14:29:31 +0100 Message-Id: <20201124132931.2842706-5-aderumier@odiso.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201124132931.2842706-1-aderumier@odiso.com> References: <20201124132931.2842706-1-aderumier@odiso.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 1 AWL -0.252 Adjusted score from AWL reputation of From: address HEADER_FROM_DIFFERENT_DOMAINS 0.249 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods KHOP_HELO_FCRDNS 0.399 Relay HELO differs from its IP's reverse DNS NO_DNS_FOR_FROM 0.379 Envelope sender has no MX or A DNS records SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [sdn.pm, plugin.pm, zones.pm] Subject: [pve-devel] [PATCH pve-network 4/4] sdn: fix : pending parser X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Nov 2020 13:30:10 -0000 Signed-off-by: Alexandre Derumier --- PVE/API2/Network/SDN/Zones.pm | 12 +++++++-- PVE/Network/SDN.pm | 45 ++++++++++++++++++++++++++++++--- PVE/Network/SDN/Zones/Plugin.pm | 28 -------------------- 3 files changed, 52 insertions(+), 33 deletions(-) diff --git a/PVE/API2/Network/SDN/Zones.pm b/PVE/API2/Network/SDN/Zones.pm index 5ae577b..5bbdd36 100644 --- a/PVE/API2/Network/SDN/Zones.pm +++ b/PVE/API2/Network/SDN/Zones.pm @@ -38,12 +38,20 @@ my $api_sdn_zones_config = sub { $scfg->{digest} = $cfg->{digest}; if ($scfg->{nodes}) { - $scfg->{nodes} = PVE::Network::SDN::Zones::Plugin->encode_value($scfg->{type}, 'nodes', $scfg->{nodes}); + $scfg->{nodes} = PVE::Network::SDN::encode_value($scfg->{type}, 'nodes', $scfg->{nodes}); + } + + if ($scfg->{exitnodes}) { + $scfg->{exitnodes} = PVE::Network::SDN::encode_value($scfg->{type}, 'exitnodes', $scfg->{exitnodes}); } my $pending = $scfg->{pending}; if ($pending->{nodes}) { - $pending->{nodes} = PVE::Network::SDN::Zones::Plugin->encode_value($scfg->{type}, 'nodes', $pending->{nodes}); + $pending->{nodes} = PVE::Network::SDN::encode_value($scfg->{type}, 'nodes', $pending->{nodes}); + } + + if ($pending->{exitnodes}) { + $pending->{exitnodes} = PVE::Network::SDN::encode_value($scfg->{type}, 'exitnodes', $pending->{exitnodes}); } return $scfg; diff --git a/PVE/Network/SDN.pm b/PVE/Network/SDN.pm index 3cd73ff..c0c5672 100644 --- a/PVE/Network/SDN.pm +++ b/PVE/Network/SDN.pm @@ -6,6 +6,8 @@ use warnings; use Data::Dumper; use JSON; +use PVE::JSONSchema; + use PVE::Network::SDN::Vnets; use PVE::Network::SDN::Zones; use PVE::Network::SDN::Controllers; @@ -96,7 +98,11 @@ sub pending_config { $pending->{$id}->{$key} = $running_object->{$key}; if(!keys %{$config_object}) { $pending->{$id}->{state} = "deleted"; - } elsif ($running_object->{$key} ne $config_object->{$key}) { + } elsif (!defined($config_object->{$key})) { + $pending->{$id}->{"pending"}->{$key} = 'deleted'; + $pending->{$id}->{state} = "changed"; + } elsif (PVE::Network::SDN::encode_value(undef, $key, $running_object->{$key}) + ne PVE::Network::SDN::encode_value(undef, $key, $config_object->{$key})) { $pending->{$id}->{state} = "changed"; } } @@ -107,8 +113,8 @@ sub pending_config { my $config_object = $config_objects->{$id}; foreach my $key (sort keys %{$config_object}) { - my $config_value = $config_object->{$key} if $config_object->{$key}; - my $running_value = $running_object->{$key} if $running_object->{$key}; + my $config_value = PVE::Network::SDN::encode_value(undef, $key, $config_object->{$key}) if $config_object->{$key}; + my $running_value = PVE::Network::SDN::encode_value(undef, $key, $running_object->{$key}) if $running_object->{$key}; if($key eq 'type' || $key eq 'vnet') { $pending->{$id}->{$key} = $config_value; } else { @@ -210,5 +216,38 @@ sub generate_controller_config { PVE::Network::SDN::Controllers::reload_controller() if $reload; } + +sub decode_value { + my ($type, $key, $value) = @_; + + if ($key eq 'nodes') { + my $res = {}; + + foreach my $node (PVE::Tools::split_list($value)) { + if (PVE::JSONSchema::pve_verify_node_name($node)) { + $res->{$node} = 1; + } + } + + return $res; + } + + return $value; +} + +sub encode_value { + my ($type, $key, $value) = @_; + + if ($key eq 'nodes' || $key eq 'exitnodes') { + if(ref($value) eq 'HASH') { + return join(',', sort keys(%$value)); + } else { + return $value; + } + } + + return $value; +} + 1; diff --git a/PVE/Network/SDN/Zones/Plugin.pm b/PVE/Network/SDN/Zones/Plugin.pm index 8592e3c..ebb5c7e 100644 --- a/PVE/Network/SDN/Zones/Plugin.pm +++ b/PVE/Network/SDN/Zones/Plugin.pm @@ -55,34 +55,6 @@ sub private { return $defaultData; } -sub decode_value { - my ($class, $type, $key, $value) = @_; - - if ($key eq 'nodes') { - my $res = {}; - - foreach my $node (PVE::Tools::split_list($value)) { - if (PVE::JSONSchema::pve_verify_node_name($node)) { - $res->{$node} = 1; - } - } - - return $res; - } - - return $value; -} - -sub encode_value { - my ($class, $type, $key, $value) = @_; - - if ($key eq 'nodes') { - return join(',', keys(%$value)); - } - - return $value; -} - sub parse_section_header { my ($class, $line) = @_; -- 2.20.1