]> git.proxmox.com Git - pve-network.git/commitdiff
add nodes option to zones
authorAlexandre Derumier <aderumier@odiso.com>
Tue, 26 Nov 2019 09:00:23 +0000 (10:00 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 26 Nov 2019 11:33:40 +0000 (12:33 +0100)
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
PVE/API2/Network/SDN/Zones.pm
PVE/Network/SDN/Zones.pm
PVE/Network/SDN/Zones/EvpnPlugin.pm
PVE/Network/SDN/Zones/FaucetPlugin.pm
PVE/Network/SDN/Zones/Plugin.pm
PVE/Network/SDN/Zones/QinQPlugin.pm
PVE/Network/SDN/Zones/VlanPlugin.pm
PVE/Network/SDN/Zones/VxlanPlugin.pm

index ce99bd80d761ebd81d0dd202fa026b413597fc34..16c90cc3174af236b01d534529f2bbe18e98d4de 100644 (file)
@@ -32,6 +32,10 @@ my $api_sdn_zones_config = sub {
     $scfg->{zone} = $id;
     $scfg->{digest} = $cfg->{digest};
 
+    if ($scfg->{nodes}) {
+        $scfg->{nodes} = PVE::Storage::Plugin->encode_value($scfg->{type}, 'nodes', $scfg->{nodes});
+    }
+
     return $scfg;
 };
 
index d481d5c0f475fea3ae31f2c0757921090bf940af..d7afba147e9bdb5c4f407e97cee978f2d3fc1aff 100644 (file)
@@ -97,6 +97,8 @@ sub generate_etc_network_config {
 
     #generate configuration
     my $config = {};
+    my $nodename = PVE::INotify::nodename();
+
     foreach my $id (keys %{$vnet_cfg->{ids}}) {
        my $vnet = $vnet_cfg->{ids}->{$id};
        my $zone = $vnet->{zone};
@@ -113,6 +115,8 @@ sub generate_etc_network_config {
            next;
        }
 
+       next if defined($plugin_config->{nodes}) && !$plugin_config->{nodes}->{$nodename};
+
        my $plugin = PVE::Network::SDN::Zones::Plugin->lookup($plugin_config->{type});
        $plugin->generate_sdn_config($plugin_config, $zone, $id, $vnet, $uplinks, $config);
     }
@@ -196,12 +200,16 @@ sub status {
     my $status = ifquery_check();
 
     my $vnet_cfg = PVE::Cluster::cfs_read_file('sdn/vnets.cfg');
+    my $zone_cfg = PVE::Cluster::cfs_read_file('sdn/zones.cfg');
+    my $nodename = PVE::INotify::nodename();
 
     my $vnet_status = {};
     my $transport_status = {};
 
     foreach my $id (keys %{$vnet_cfg->{ids}}) {
        my $zone = $vnet_cfg->{ids}->{$id}->{zone};
+       next if defined($zone_cfg->{ids}->{$zone}->{nodes}) && !$zone_cfg->{ids}->{$zone}->{nodes}->{$nodename};
+
        $vnet_status->{$id}->{zone} = $zone;
        $transport_status->{$zone}->{status} = 'available' if !defined($transport_status->{$zone}->{status});
 
index 2acb9ae869f62cb4c2cd1d2af48bf231a3b42a93..f9998472cdb3ac8e01f6b6cd4ddbf8fa8cf91efa 100644 (file)
@@ -38,6 +38,7 @@ sub properties {
 sub options {
 
     return {
+        nodes => { optional => 1},
        'uplink-id' => { optional => 0 },
         'vrf' => { optional => 0 },
         'vrf-vxlan' => { optional => 0 },
index e9c07a6f8721e13cca3f2d427b03c239c64a1a07..2a196bd92835aaa2a87f683e2d965e0135d93616 100644 (file)
@@ -28,6 +28,7 @@ sub properties {
 sub options {
 
     return {
+        nodes => { optional => 1},
        'dp-id' => { optional => 0 },
        'uplink-id' => { optional => 0 },
         'controller' => { optional => 0 },
index 7e820cd279e5922d788cf39ac3e620a24eb06b47..62db9cd90aa7b13e0bfe59f74dc2bbc4433b613f 100644 (file)
@@ -42,6 +42,7 @@ my $defaultData = {
            type => 'string', format => 'pve-configid',
            type => 'string',
        },
+        nodes => get_standard_option('pve-node-list', { optional => 1 }),
         zone => get_standard_option('pve-sdn-zone-id',
             { completion => \&PVE::Network::SDN::Zones::complete_sdn_zone }),
     },
@@ -51,6 +52,34 @@ 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) = @_;
 
index 734c56bbcf582f92bf32cc6584f16cd6b7ac9a90..c9f522bf6a22bd3b170ae0f0cd7bfc564c0c4b35 100644 (file)
@@ -29,6 +29,7 @@ sub properties {
 sub options {
 
     return {
+        nodes => { optional => 1},
        'uplink-id' => { optional => 0 },
        'tag' => { optional => 0 },
        'vlan-protocol' => { optional => 1 },
index 07188f6ae8324ca974f8951a4fdfa41aa063a8ed..39f103e374c2e86276b626ec5bb61f0943ccb227 100644 (file)
@@ -32,6 +32,7 @@ sub properties {
 sub options {
 
     return {
+        nodes => { optional => 1},
        'uplink-id' => { optional => 0 },
     };
 }
index 8ae3ce8a8a42cc5b2e370cb755e8d134bf66141a..e3624ea6a8d576d26b238eed702bb80535341133 100644 (file)
@@ -56,6 +56,7 @@ sub properties {
 sub options {
 
     return {
+        nodes => { optional => 1},
        'uplink-id' => { optional => 0 },
         'multicast-address' => { optional => 1 },
         'unicast-address' => { optional => 1 },