---
 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


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to