Signed-off-by: Alexandre Derumier <aderum...@odiso.com>
---
 PVE/API2/Network/SDN/Zones.pm         | 22 +++++-----
 PVE/Network/SDN/Zones/EvpnPlugin.pm   | 63 ++++++++++-----------------
 PVE/Network/SDN/Zones/FaucetPlugin.pm |  6 ---
 PVE/Network/SDN/Zones/Plugin.pm       |  2 +-
 4 files changed, 37 insertions(+), 56 deletions(-)

diff --git a/PVE/API2/Network/SDN/Zones.pm b/PVE/API2/Network/SDN/Zones.pm
index 16c90cc..00380dc 100644
--- a/PVE/API2/Network/SDN/Zones.pm
+++ b/PVE/API2/Network/SDN/Zones.pm
@@ -142,17 +142,18 @@ __PACKAGE__->register_method ({
         PVE::Network::SDN::Zones::lock_sdn_zones_config(
            sub {
 
-               my $cfg = PVE::Network::SDN::Zones::config();
+               my $zone_cfg = PVE::Network::SDN::Zones::config();
+               my $controller_cfg = PVE::Network::SDN::Controllers::config();
 
                my $scfg = undef;
-               if ($scfg = PVE::Network::SDN::Zones::sdn_zones_config($cfg, 
$id, 1)) {
+               if ($scfg = 
PVE::Network::SDN::Zones::sdn_zones_config($zone_cfg, $id, 1)) {
                    die "sdn zone object ID '$id' already defined\n";
                }
 
-               $cfg->{ids}->{$id} = $opts;
-               $plugin->on_update_hook($id, $cfg);
+               $zone_cfg->{ids}->{$id} = $opts;
+               $plugin->on_update_hook($id, $zone_cfg, $controller_cfg);
 
-               PVE::Network::SDN::Zones::write_config($cfg);
+               PVE::Network::SDN::Zones::write_config($zone_cfg);
 
            }, "create sdn zone object failed");
 
@@ -201,11 +202,12 @@ __PACKAGE__->register_method ({
         PVE::Network::SDN::Zones::lock_sdn_zones_config(
         sub {
 
-           my $cfg = PVE::Network::SDN::Zones::config();
+           my $zone_cfg = PVE::Network::SDN::Zones::config();
+           my $controller_cfg = PVE::Network::SDN::Controllers::config();
 
-           PVE::SectionConfig::assert_if_modified($cfg, $digest);
+           PVE::SectionConfig::assert_if_modified($zone_cfg, $digest);
 
-           my $scfg = PVE::Network::SDN::Zones::sdn_zones_config($cfg, $id);
+           my $scfg = PVE::Network::SDN::Zones::sdn_zones_config($zone_cfg, 
$id);
 
            my $plugin = 
PVE::Network::SDN::Zones::Plugin->lookup($scfg->{type});
            my $opts = $plugin->check_config($id, $param, 0, 1);
@@ -214,9 +216,9 @@ __PACKAGE__->register_method ({
                $scfg->{$k} = $opts->{$k};
            }
 
-           $plugin->on_update_hook($id, $cfg);
+           $plugin->on_update_hook($id, $zone_cfg, $controller_cfg);
 
-           PVE::Network::SDN::Zones::write_config($cfg);
+           PVE::Network::SDN::Zones::write_config($zone_cfg);
 
            }, "update sdn zone object failed");
 
diff --git a/PVE/Network/SDN/Zones/EvpnPlugin.pm 
b/PVE/Network/SDN/Zones/EvpnPlugin.pm
index 012274f..1119226 100644
--- a/PVE/Network/SDN/Zones/EvpnPlugin.pm
+++ b/PVE/Network/SDN/Zones/EvpnPlugin.pm
@@ -12,12 +12,6 @@ sub type {
     return 'evpn';
 }
 
-sub plugindata {
-    return {
-        role => 'transport',
-    };
-}
-
 sub properties {
     return {
        'vrf' => {
@@ -133,41 +127,32 @@ sub generate_sdn_config {
 }
 
 sub on_update_hook {
-    my ($class, $transportid, $sdn_cfg) = @_;
-
-    # verify that router exist
-    if (defined($sdn_cfg->{ids}->{$transportid}->{controller})) {
-       my $controller = $sdn_cfg->{ids}->{$transportid}->{controller};
-       if (!defined($sdn_cfg->{ids}->{$controller})) {
-           die "controller $controller don't exist";
-       } else {
-           die "$controller is not a evpn controller type" if 
$sdn_cfg->{ids}->{$controller}->{type} ne 'evpn';
-       }
+    my ($class, $zoneid, $zone_cfg, $controller_cfg) = @_;
+
+    # verify that controller exist
+    my $controller = $zone_cfg->{ids}->{$zoneid}->{controller};
+    if (!defined($controller_cfg->{ids}->{$controller})) {
+       die "controller $controller don't exist";
+    } else {
+       die "$controller is not a evpn controller type" if 
$controller_cfg->{ids}->{$controller}->{type} ne 'evpn';
+    }
 
-       #vrf && vrf-vxlan need to be defined with controller
-       my $vrf = $sdn_cfg->{ids}->{$transportid}->{vrf};
-       if (!defined($vrf)) {
-           die "missing vrf option";
-       } else {
-           # verify that vrf is not already declared in another transport
-           foreach my $id (keys %{$sdn_cfg->{ids}}) {
-               next if $id eq $transportid;
-               die "vrf $vrf is already declared in $id"
-                       if (defined($sdn_cfg->{ids}->{$id}->{vrf}) && 
$sdn_cfg->{ids}->{$id}->{vrf} eq $vrf);
-           }
-       }
+    #vrf && vrf-vxlan need to be defined
+    my $vrf = $zone_cfg->{ids}->{$zoneid}->{vrf};
 
-       my $vrfvxlan = $sdn_cfg->{ids}->{$transportid}->{'vrf-vxlan'};
-       if (!defined($vrfvxlan)) {
-           die "missing vrf-vxlan option";
-       } else {
-           # verify that vrf-vxlan is not already declared in another transport
-           foreach my $id (keys %{$sdn_cfg->{ids}}) {
-               next if $id eq $transportid;
-               die "vrf-vxlan $vrfvxlan is already declared in $id"
-                       if (defined($sdn_cfg->{ids}->{$id}->{'vrf-vxlan'}) && 
$sdn_cfg->{ids}->{$id}->{'vrf-vxlan'} eq $vrfvxlan);
-           }
-       }
+    # verify that vrf is not already declared in another zone
+    foreach my $id (keys %{$zone_cfg->{ids}}) {
+       next if $id eq $zoneid;
+       die "vrf $vrf is already declared in $id"
+               if (defined($zone_cfg->{ids}->{$id}->{vrf}) && 
$zone_cfg->{ids}->{$id}->{vrf} eq $vrf);
+    }
+
+    my $vrfvxlan = $zone_cfg->{ids}->{$zoneid}->{'vrf-vxlan'};
+    # verify that vrf-vxlan is not already declared in another zone
+    foreach my $id (keys %{$zone_cfg->{ids}}) {
+       next if $id eq $zoneid;
+       die "vrf-vxlan $vrfvxlan is already declared in $id"
+               if (defined($zone_cfg->{ids}->{$id}->{'vrf-vxlan'}) && 
$zone_cfg->{ids}->{$id}->{'vrf-vxlan'} eq $vrfvxlan);
     }
 }
 
diff --git a/PVE/Network/SDN/Zones/FaucetPlugin.pm 
b/PVE/Network/SDN/Zones/FaucetPlugin.pm
index 2a196bd..bece4e4 100644
--- a/PVE/Network/SDN/Zones/FaucetPlugin.pm
+++ b/PVE/Network/SDN/Zones/FaucetPlugin.pm
@@ -10,12 +10,6 @@ sub type {
     return 'faucet';
 }
 
-sub plugindata {
-    return {
-       role => 'transport',
-    };
-}
-
 sub properties {
     return {
         'dp-id' => {
diff --git a/PVE/Network/SDN/Zones/Plugin.pm b/PVE/Network/SDN/Zones/Plugin.pm
index 62db9cd..c252dfc 100644
--- a/PVE/Network/SDN/Zones/Plugin.pm
+++ b/PVE/Network/SDN/Zones/Plugin.pm
@@ -130,7 +130,7 @@ sub on_delete_hook {
 }
 
 sub on_update_hook {
-    my ($class, $sdnid, $scfg) = @_;
+    my ($class, $zoneid, $zone_cfg, $controller_cfg) = @_;
 
     # do nothing by default
 }
-- 
2.20.1

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

Reply via email to