diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/PVE/Network/SDN.pm | 45 | ||||
| -rw-r--r-- | src/PVE/Network/SDN/Fabrics.pm | 13 | ||||
| -rwxr-xr-x | src/test/run_test_zones.pl | 9 |
3 files changed, 57 insertions, 10 deletions
diff --git a/src/PVE/Network/SDN.pm b/src/PVE/Network/SDN.pm index 892d5d8..ce4b41e 100644 --- a/src/PVE/Network/SDN.pm +++ b/src/PVE/Network/SDN.pm @@ -20,6 +20,8 @@ use PVE::Network::SDN::Zones; use PVE::Network::SDN::Controllers; use PVE::Network::SDN::Subnets; use PVE::Network::SDN::Dhcp; +use PVE::Network::SDN::Frr; +use PVE::Network::SDN::Fabrics; my $running_cfg = "sdn/.running-config"; @@ -240,13 +242,46 @@ sub generate_zone_config { PVE::Network::SDN::Zones::write_etc_network_config($raw_config); } -sub generate_controller_config { - my ($reload) = @_; +=head3 generate_frr_raw_config(\%running_config, \%fabric_config) + +Generates the raw frr config (as documented in the C<PVE::Network::SDN::Frr> +module) for all SDN plugins combined. + +If provided, uses the passed C<\%running_config> und C<\%fabric_config> to avoid +re-parsing and re-reading both configurations. If not provided, this function +will obtain them via the SDN and SDN::Fabrics modules and then generate the FRR +configuration. + +=cut + +sub generate_frr_raw_config { + my ($running_config, $fabric_config) = @_; + + $running_config = PVE::Network::SDN::running_config() if !$running_config; + $fabric_config = PVE::Network::SDN::Fabrics::config(1) if !$fabric_config; + + my $frr_config = {}; + PVE::Network::SDN::Controllers::generate_frr_config($frr_config, $running_config); + PVE::Network::SDN::Frr::append_local_config($frr_config); + + my $raw_config = PVE::Network::SDN::Frr::to_raw_config($frr_config); + + my $fabrics_config = PVE::Network::SDN::Fabrics::generate_frr_raw_config($fabric_config); + push @$raw_config, @$fabrics_config; + + return $raw_config; +} + +sub generate_frr_config { + my ($apply) = @_; + + my $running_config = PVE::Network::SDN::running_config(); + my $fabric_config = PVE::Network::SDN::Fabrics::config(1); - my $raw_config = PVE::Network::SDN::Controllers::generate_controller_config(); - PVE::Network::SDN::Controllers::write_controller_config($raw_config); + my $raw_config = PVE::Network::SDN::generate_frr_raw_config($running_config, $fabric_config); + PVE::Network::SDN::Frr::write_raw_config($raw_config); - PVE::Network::SDN::Controllers::reload_controller() if $reload; + PVE::Network::SDN::Frr::apply() if $apply; } sub generate_dhcp_config { diff --git a/src/PVE/Network/SDN/Fabrics.pm b/src/PVE/Network/SDN/Fabrics.pm index 89a8ae8..e5e3428 100644 --- a/src/PVE/Network/SDN/Fabrics.pm +++ b/src/PVE/Network/SDN/Fabrics.pm @@ -44,4 +44,17 @@ sub write_config { cfs_write_file("sdn/fabrics.cfg", $config->to_raw(), 1); } +sub generate_frr_raw_config { + my ($fabric_config) = @_; + + my @raw_config = (); + + my $nodename = PVE::INotify::nodename(); + + my $frr_config = $fabric_config->get_frr_raw_config($nodename); + push @raw_config, @$frr_config if @$frr_config; + + return \@raw_config; +} + 1; diff --git a/src/test/run_test_zones.pl b/src/test/run_test_zones.pl index e50dd76..266bd9b 100755 --- a/src/test/run_test_zones.pl +++ b/src/test/run_test_zones.pl @@ -145,18 +145,17 @@ foreach my $test (@tests) { if ($sdn_config->{controllers}) { my $expected = read_file("./$test/expected_controller_config"); - my $controller_rawconfig = ""; + my $config = ""; eval { - my $config = PVE::Network::SDN::Controllers::generate_controller_config(); - $controller_rawconfig = - PVE::Network::SDN::Controllers::generate_controller_rawconfig($config); + my $raw_config = PVE::Network::SDN::generate_frr_raw_config(); + $config = PVE::Network::SDN::Frr::raw_config_to_string($raw_config); }; if (my $err = $@) { diag("got unexpected error - $err"); fail($name); } else { - is($controller_rawconfig, $expected, $name); + is($config, $expected, $name); } } } |
