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>
This commit is contained in:
Stefan Hanreich 2023-11-17 12:39:40 +01:00 committed by Thomas Lamprecht
parent e8ca5bc603
commit a1845dad80
3 changed files with 51 additions and 35 deletions

View file

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

View file

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

View file

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