From: Alexandre Derumier Date: Mon, 6 May 2019 12:47:12 +0000 (+0200) Subject: vlan, vxlan plugin : add on_delete_hook X-Git-Url: https://git.proxmox.com/?p=pve-network.git;a=commitdiff_plain;h=a8ad27897ab1e288d749a92b0ce4e788d550a9f0 vlan, vxlan plugin : add on_delete_hook verify that a vnet is not using this transport Signed-off-by: Alexandre Derumier --- diff --git a/PVE/API2/Network/Network.pm b/PVE/API2/Network/Network.pm index 3dd0a57..524c6c3 100644 --- a/PVE/API2/Network/Network.pm +++ b/PVE/API2/Network/Network.pm @@ -234,7 +234,7 @@ __PACKAGE__->register_method ({ my $scfg = PVE::Network::Network::network_config($cfg, $networkid); my $plugin = PVE::Network::Network::Plugin->lookup($scfg->{type}); - $plugin->on_delete_hook($networkid, $scfg); + $plugin->on_delete_hook($networkid, $cfg); delete $cfg->{ids}->{$networkid}; PVE::Network::Network::write_config($cfg); diff --git a/PVE/Network/Network/VlanPlugin.pm b/PVE/Network/Network/VlanPlugin.pm index 4f553ab..affa274 100644 --- a/PVE/Network/Network/VlanPlugin.pm +++ b/PVE/Network/Network/VlanPlugin.pm @@ -99,9 +99,14 @@ sub generate_network_config { } sub on_delete_hook { - my ($class, $networkid, $scfg) = @_; + my ($class, $transportid, $network_cfg) = @_; - # verify that no vnet are associated to this transport + # verify that no vnet are associated to this transport + foreach my $id (keys %{$network_cfg->{ids}}) { + my $network = $network_cfg->{ids}->{$id}; + die "transport $transportid is used by vnet $id" + if ($network->{type} eq 'vnet' && defined($network->{transportzone}) && $network->{transportzone} eq $transportid); + } } sub on_update_hook { diff --git a/PVE/Network/Network/VnetPlugin.pm b/PVE/Network/Network/VnetPlugin.pm index 593e475..b255691 100644 --- a/PVE/Network/Network/VnetPlugin.pm +++ b/PVE/Network/Network/VnetPlugin.pm @@ -81,7 +81,7 @@ sub options { } sub on_delete_hook { - my ($class, $networkid, $scfg) = @_; + my ($class, $networkid, $network_cfg) = @_; # verify than no vm or ct have interfaces in this bridge my $vmdata = read_cluster_vm_config(); diff --git a/PVE/Network/Network/VxlanMulticastPlugin.pm b/PVE/Network/Network/VxlanMulticastPlugin.pm index d6cc4f6..f71094a 100644 --- a/PVE/Network/Network/VxlanMulticastPlugin.pm +++ b/PVE/Network/Network/VxlanMulticastPlugin.pm @@ -84,9 +84,14 @@ sub generate_network_config { } sub on_delete_hook { - my ($class, $networkid, $scfg) = @_; + my ($class, $transportid, $network_cfg) = @_; # verify that no vnet are associated to this transport + foreach my $id (keys %{$network_cfg->{ids}}) { + my $network = $network_cfg->{ids}->{$id}; + die "transport $transportid is used by vnet $id" + if ($network->{type} eq 'vnet' && defined($network->{transportzone}) && $network->{transportzone} eq $transportid); + } } sub on_update_hook {