summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Hanreich <s.hanreich@proxmox.com>2023-11-17 12:39:40 +0100
committerThomas Lamprecht <t.lamprecht@proxmox.com>2023-11-18 15:59:50 +0100
commita1845dad8032395f6679300af3d3100b5ded31d9 (patch)
tree0e5ceb011e98cab2f9087a1193bc448e31b0f489
parente8ca5bc60308d0c3ae16e0551179cbe9b681f8d3 (diff)
sdn: preparations for DHCP plugin
Add the option to retrieve the running configuration instead of only the pending configuration via the config methods. Refactor methods using the running config to utilize the new parameter. Add helper methods and return additional attributes from the getter functions that are needed by the dhcp plugins. Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
-rw-r--r--src/PVE/Network/SDN/Subnets.pm25
-rw-r--r--src/PVE/Network/SDN/Vnets.pm27
-rw-r--r--src/PVE/Network/SDN/Zones.pm34
3 files changed, 51 insertions, 35 deletions
diff --git a/src/PVE/Network/SDN/Subnets.pm b/src/PVE/Network/SDN/Subnets.pm
index 6bb42e5..f654d3a 100644
--- a/src/PVE/Network/SDN/Subnets.pm
+++ b/src/PVE/Network/SDN/Subnets.pm
@@ -23,7 +23,9 @@ sub sdn_subnets_config {
my $scfg = $cfg->{ids}->{$id};
die "sdn subnet '$id' does not exist\n" if (!$noerr && !$scfg);
- if($scfg) {
+ if ($scfg) {
+ $scfg->{id} = $id;
+
my ($zone, $network, $mask) = split(/-/, $id);
$scfg->{cidr} = "$network/$mask";
$scfg->{zone} = $zone;
@@ -35,7 +37,14 @@ sub sdn_subnets_config {
}
sub config {
- my $config = cfs_read_file("sdn/subnets.cfg");
+ my ($running) = @_;
+
+ if ($running) {
+ my $cfg = PVE::Network::SDN::running_config();
+ return $cfg->{subnets};
+ }
+
+ return cfs_read_file("sdn/subnets.cfg");
}
sub write_config {
@@ -61,16 +70,8 @@ sub complete_sdn_subnet {
sub get_subnet {
my ($subnetid, $running) = @_;
- my $cfg = {};
- if($running) {
- my $cfg = PVE::Network::SDN::running_config();
- $cfg = $cfg->{subnets};
- } else {
- $cfg = PVE::Network::SDN::Subnets::config();
- }
-
- my $subnet = PVE::Network::SDN::Subnets::sdn_subnets_config($cfg, $subnetid, 1);
- return $subnet;
+ my $cfg = PVE::Network::SDN::Subnets::config($running);
+ return PVE::Network::SDN::Subnets::sdn_subnets_config($cfg, $subnetid, 1);
}
sub find_ip_subnet {
diff --git a/src/PVE/Network/SDN/Vnets.pm b/src/PVE/Network/SDN/Vnets.pm
index 1106c9f..39bdda0 100644
--- a/src/PVE/Network/SDN/Vnets.pm
+++ b/src/PVE/Network/SDN/Vnets.pm
@@ -26,6 +26,13 @@ sub sdn_vnets_config {
}
sub config {
+ my ($running) = @_;
+
+ if ($running) {
+ my $cfg = PVE::Network::SDN::running_config();
+ return $cfg->{vnets};
+ }
+
return cfs_read_file("sdn/vnets.cfg");
}
@@ -54,31 +61,23 @@ sub get_vnet {
return if !$vnetid;
- my $scfg = {};
- if($running) {
- my $cfg = PVE::Network::SDN::running_config();
- $scfg = $cfg->{vnets};
- } else {
- $scfg = PVE::Network::SDN::Vnets::config();
- }
-
- my $vnet = PVE::Network::SDN::Vnets::sdn_vnets_config($scfg, $vnetid, 1);
-
- return $vnet;
+ my $cfg = PVE::Network::SDN::Vnets::config($running);
+ return PVE::Network::SDN::Vnets::sdn_vnets_config($cfg, $vnetid, 1);
}
sub get_subnets {
- my ($vnetid) = @_;
+ my ($vnetid, $running) = @_;
my $subnets = undef;
- my $subnets_cfg = PVE::Network::SDN::Subnets::config();
+ my $subnets_cfg = PVE::Network::SDN::Subnets::config($running);
+
foreach my $subnetid (sort keys %{$subnets_cfg->{ids}}) {
my $subnet = PVE::Network::SDN::Subnets::sdn_subnets_config($subnets_cfg, $subnetid);
next if !$subnet->{vnet} || ($vnetid && $subnet->{vnet} ne $vnetid);
$subnets->{$subnetid} = $subnet;
}
- return $subnets;
+ return $subnets;
}
sub get_subnet_from_vnet_cidr {
diff --git a/src/PVE/Network/SDN/Zones.pm b/src/PVE/Network/SDN/Zones.pm
index 4ad4e4d..5bd3536 100644
--- a/src/PVE/Network/SDN/Zones.pm
+++ b/src/PVE/Network/SDN/Zones.pm
@@ -40,8 +40,14 @@ sub sdn_zones_config {
}
sub config {
- my $config = cfs_read_file("sdn/zones.cfg");
- return $config;
+ my ($running) = @_;
+
+ if ($running) {
+ my $cfg = PVE::Network::SDN::running_config();
+ return $cfg->{zones};
+ }
+
+ return cfs_read_file("sdn/zones.cfg");
}
sub get_plugin_config {
@@ -74,19 +80,29 @@ sub complete_sdn_zone {
sub get_zone {
my ($zoneid, $running) = @_;
- my $cfg = {};
- if($running) {
- my $cfg = PVE::Network::SDN::running_config();
- $cfg = $cfg->{vnets};
- } else {
- $cfg = PVE::Network::SDN::Zones::config();
- }
+ my $cfg = PVE::Network::SDN::Zones::config($running);
my $zone = PVE::Network::SDN::Zones::sdn_zones_config($cfg, $zoneid, 1);
return $zone;
}
+sub get_vnets {
+ my ($zoneid, $running) = @_;
+
+ return if !$zoneid;
+
+ my $vnets_config = PVE::Network::SDN::Vnets::config($running);
+ my $vnets = undef;
+
+ for my $vnetid (keys %{$vnets_config->{ids}}) {
+ my $vnet = PVE::Network::SDN::Vnets::sdn_vnets_config($vnets_config, $vnetid);
+ next if !$vnet->{zone} || $vnet->{zone} ne $zoneid;
+ $vnets->{$vnetid} = $vnet;
+ }
+
+ return $vnets;
+}
sub generate_etc_network_config {