public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Alexandre Derumier <aderumier@odiso.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v7 pve-network 03/21] add subnets verifications hooks
Date: Fri, 28 Aug 2020 14:36:31 +0200	[thread overview]
Message-ID: <20200828123649.11125-4-aderumier@odiso.com> (raw)
In-Reply-To: <20200828123649.11125-1-aderumier@odiso.com>

---
 PVE/API2/Network/SDN/Subnets.pm |  5 ++++-
 PVE/API2/Network/SDN/Vnets.pm   |  9 +++++++--
 PVE/Network/SDN/SubnetPlugin.pm | 15 +++++++++++++++
 PVE/Network/SDN/VnetPlugin.pm   |  8 +++++---
 4 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/PVE/API2/Network/SDN/Subnets.pm b/PVE/API2/Network/SDN/Subnets.pm
index 26b2aa5..3ef1d11 100644
--- a/PVE/API2/Network/SDN/Subnets.pm
+++ b/PVE/API2/Network/SDN/Subnets.pm
@@ -9,6 +9,7 @@ use PVE::Cluster qw(cfs_read_file cfs_write_file);
 use PVE::Network::SDN;
 use PVE::Network::SDN::Subnets;
 use PVE::Network::SDN::SubnetPlugin;
+use PVE::Network::SDN::Vnets;
 
 use Storable qw(dclone);
 use PVE::JSONSchema qw(get_standard_option);
@@ -204,9 +205,11 @@ __PACKAGE__->register_method ({
 
 		my $scfg = PVE::Network::SDN::Subnets::sdn_subnets_config($cfg, $id);
 
-		my $subnet_cfg = PVE::Network::SDN::Subnets::config();
+		my $subnets_cfg = PVE::Network::SDN::Subnets::config();
+		my $vnets_cfg = PVE::Network::SDN::Vnets::config();
 
 		delete $cfg->{ids}->{$id};
+		PVE::Network::SDN::SubnetPlugin->on_delete_hook($id, $subnets_cfg, $vnets_cfg);
 		PVE::Network::SDN::Subnets::write_config($cfg);
 		PVE::Network::SDN::increase_version();
 
diff --git a/PVE/API2/Network/SDN/Vnets.pm b/PVE/API2/Network/SDN/Vnets.pm
index c5860c8..23bc8bb 100644
--- a/PVE/API2/Network/SDN/Vnets.pm
+++ b/PVE/API2/Network/SDN/Vnets.pm
@@ -11,6 +11,7 @@ use PVE::Network::SDN::Zones;
 use PVE::Network::SDN::Zones::Plugin;
 use PVE::Network::SDN::Vnets;
 use PVE::Network::SDN::VnetPlugin;
+use PVE::Network::SDN::Subnets;
 
 use Storable qw(dclone);
 use PVE::JSONSchema qw(get_standard_option);
@@ -132,7 +133,9 @@ __PACKAGE__->register_method ({
 	    my $plugin = PVE::Network::SDN::Zones::Plugin->lookup($plugin_config->{type});
 	    $plugin->verify_tag($opts->{tag});
 
-	    PVE::Network::SDN::VnetPlugin->on_update_hook($id, $cfg);
+	    my $subnet_cfg = PVE::Network::SDN::Subnets::config();
+
+	    PVE::Network::SDN::VnetPlugin->on_update_hook($id, $cfg, $subnet_cfg);
 
 	    PVE::Network::SDN::Vnets::write_config($cfg);
 	    PVE::Network::SDN::increase_version();
@@ -173,7 +176,9 @@ __PACKAGE__->register_method ({
 	    my $plugin = PVE::Network::SDN::Zones::Plugin->lookup($plugin_config->{type});
 	    $plugin->verify_tag($opts->{tag});
 
-	    PVE::Network::SDN::VnetPlugin->on_update_hook($id, $cfg);
+	    my $subnet_cfg = PVE::Network::SDN::Subnets::config();
+
+	    PVE::Network::SDN::VnetPlugin->on_update_hook($id, $cfg, $subnet_cfg);
 
 	    PVE::Network::SDN::Vnets::write_config($cfg);
 	    PVE::Network::SDN::increase_version();
diff --git a/PVE/Network/SDN/SubnetPlugin.pm b/PVE/Network/SDN/SubnetPlugin.pm
index 8900681..1b790a6 100644
--- a/PVE/Network/SDN/SubnetPlugin.pm
+++ b/PVE/Network/SDN/SubnetPlugin.pm
@@ -112,4 +112,19 @@ sub on_update_hook {
     raise_param_exc({ gateway => "$gateway is not in subnet $subnet"}) if $gateway && !$subnet_matcher->($gateway);
 }
 
+sub on_delete_hook {
+    my ($class, $subnetid, $subnet_cfg, $vnet_cfg) = @_;
+
+    #verify if vnets have subnet
+    foreach my $id (keys %{$vnet_cfg->{ids}}) {
+	my $vnet = $vnet_cfg->{ids}->{$id};
+	my @subnets = PVE::Tools::split_list($vnet->{subnets}) if $vnet->{subnets};
+	foreach my $subnet (@subnets) {
+	    raise_param_exc({ subnet => "$subnet is attached to vnet $id"}) if $subnet eq $subnetid;
+	}
+    }
+
+    return;
+}
+
 1;
diff --git a/PVE/Network/SDN/VnetPlugin.pm b/PVE/Network/SDN/VnetPlugin.pm
index 47ca50b..430b3bf 100644
--- a/PVE/Network/SDN/VnetPlugin.pm
+++ b/PVE/Network/SDN/VnetPlugin.pm
@@ -111,10 +111,12 @@ sub on_update_hook {
 	    }
 	}
     }
-    #verify subnet
-    my $subnets = $vnet_cfg->{ids}->{$vnetid}->{subnets};
-    my @subnets = PVE::Tools::split_list($vnet_cfg->{ids}->{$vnetid}->{subnets}) if $plugin_config->{'peers'};
 
+    #verify subnet
+    my @subnets = PVE::Tools::split_list($vnet_cfg->{ids}->{$vnetid}->{subnets}) if $vnet_cfg->{ids}->{$vnetid}->{subnets};
+    foreach my $subnet (@subnets) {
+	raise_param_exc({ subnet => "$subnet not existing"}) if !$subnet_cfg->{ids}->{$subnet};
+    }
 }
 
 1;
-- 
2.20.1




  parent reply	other threads:[~2020-08-28 12:37 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-28 12:36 [pve-devel] [PATCH v7 pve-network 00/21] sdn : add subnets management Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 01/21] add subnet plugin Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 02/21] vnets: add subnets Alexandre Derumier
2020-08-28 12:36 ` Alexandre Derumier [this message]
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 04/21] zones: simple|evpn: add gateway ip from subnets to vnet Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 05/21] zone: add vnet_update_hook Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 06/21] vnets: subnets: use cidr Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 07/21] subnet: fix on_delete_hook Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 08/21] api2: subnet create: convert cidr to subnetid Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 09/21] api2: increase version on apply/reload only Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 10/21] add ipams plugins Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 11/21] add pve internal ipam plugin Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 12/21] vnets: find_free_ip : add ipversion detection Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 13/21] vnets: add add_ip Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 14/21] vnets: add del_ip + rework add_ip/find_free_ip Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 15/21] add dns plugin Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 16/21] Fix vnet gateway for routed setup + /32 pointopoint subnet Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 17/21] ipam : pveplugin : fix find_next_free_ip Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 18/21] add vnet to subnets && remove subnetlist from vnet Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 19/21] zones: evpn|simple: add snat iptables rules Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 20/21] subnet: disable route option for now and add dns domain format Alexandre Derumier
2020-08-28 12:36 ` [pve-devel] [PATCH v7 pve-network 21/21] dns: fix reverse dns Alexandre Derumier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200828123649.11125-4-aderumier@odiso.com \
    --to=aderumier@odiso.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal