diff options
Diffstat (limited to 'src/PVE/Network/SDN.pm')
| -rw-r--r-- | src/PVE/Network/SDN.pm | 69 |
1 files changed, 56 insertions, 13 deletions
diff --git a/src/PVE/Network/SDN.pm b/src/PVE/Network/SDN.pm index 46c8580..8c584f6 100644 --- a/src/PVE/Network/SDN.pm +++ b/src/PVE/Network/SDN.pm @@ -251,19 +251,62 @@ sub get_local_vnets { return $vnets; } -sub generate_zone_config { - my $raw_config = PVE::Network::SDN::Zones::generate_etc_network_config(); - if ($raw_config) { - eval { - my $net_cfg = PVE::INotify::read_file('interfaces', 1); - my $opts = $net_cfg->{data}->{options}; - log_warn( - "missing 'source /etc/network/interfaces.d/sdn' directive for SDN support!\n") - if !grep { $_->[1] =~ m!^source /etc/network/interfaces.d/(:?sdn|\*)! } @$opts; - }; - log_warn("Failed to read network interfaces definition - $@") if $@; - } - PVE::Network::SDN::Zones::write_etc_network_config($raw_config); +=head3 generate_raw_etc_network_config() + +Generate the /etc/network/interfaces.d/sdn config file from the Zones +and Fabrics configuration and return it as a String. + +=cut + +sub generate_raw_etc_network_config { + my $raw_config = ""; + + my $zone_config = PVE::Network::SDN::Zones::generate_etc_network_config(); + $raw_config .= $zone_config if $zone_config; + + my $fabric_config = PVE::Network::SDN::Fabrics::generate_etc_network_config(); + $raw_config .= $fabric_config if $fabric_config; + + return $raw_config; +} + +=head3 ⋅write_raw_etc_network_config($raw_config) + +Writes a network configuration as generated by C<generate_raw_etc_network_config> +to /etc/network/interfaces.d/sdn. + +=cut + +sub write_raw_etc_network_config { + my ($raw_config) = @_; + my $local_network_sdn_file = "/etc/network/interfaces.d/sdn"; + + die "no network config supplied" if !defined $raw_config; + + eval { + my $net_cfg = PVE::INotify::read_file('interfaces', 1); + my $opts = $net_cfg->{data}->{options}; + log_warn("missing 'source /etc/network/interfaces.d/sdn' directive for SDN support!\n") + if !grep { $_->[1] =~ m!^source /etc/network/interfaces.d/(:?sdn|\*)! } @$opts; + }; + + log_warn("Failed to read network interfaces definition - $@") if $@; + + my $writefh = IO::File->new($local_network_sdn_file, ">"); + print $writefh $raw_config; + $writefh->close(); +} + +=head3 ⋅generate_etc_network_config() + +Generates the network configuration for all SDN plugins and writes it to the SDN +interfaces files (/etc/network/interfaces.d/sdn). + +=cut + +sub generate_etc_network_config { + my $raw_config = PVE::Network::SDN::generate_raw_etc_network_config(); + PVE::Network::SDN::write_raw_etc_network_config($raw_config); } =head3 generate_frr_raw_config(\%running_config, \%fabric_config) |
