From 7128a728b86ef1722d628cffc3138450a65c98be Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Sun, 7 Sep 2025 15:49:58 +1000 Subject: [PATCH] feat: update ospf source for learned routes - enable changing the source address for learned ospf routes - this enables the loopback0 interface to be used as a default src address - ensure k8s nodes use loopback0 as default src - ensure incus nodes use loopback0 as default src --- hieradata/roles/infra/incus/node.yaml | 2 ++ hieradata/roles/infra/k8s/node.yaml | 2 ++ modules/frrouting/manifests/init.pp | 2 ++ modules/frrouting/templates/frr.conf.erb | 8 ++++++++ 4 files changed, 14 insertions(+) diff --git a/hieradata/roles/infra/incus/node.yaml b/hieradata/roles/infra/incus/node.yaml index 99e0815..fc835cd 100644 --- a/hieradata/roles/infra/incus/node.yaml +++ b/hieradata/roles/infra/incus/node.yaml @@ -158,6 +158,8 @@ networking::interfaces: # frrouting exporters::frr_exporter::enable: true frrouting::ospfd_router_id: "%{hiera('networking_loopback0_ip')}" +frrouting::ospf_preferred_source_enable: true +frrouting::ospf_preferred_source: "%{hiera('networking_loopback0_ip')}" frrouting::ospfd_redistribute: - connected frrouting::ospfd_interfaces: diff --git a/hieradata/roles/infra/k8s/node.yaml b/hieradata/roles/infra/k8s/node.yaml index 67e7c01..366a928 100644 --- a/hieradata/roles/infra/k8s/node.yaml +++ b/hieradata/roles/infra/k8s/node.yaml @@ -100,6 +100,8 @@ profiles::consul::client::node_rules: # frrouting exporters::frr_exporter::enable: true frrouting::ospfd_router_id: "%{hiera('networking_loopback0_ip')}" +frrouting::ospf_preferred_source_enable: true +frrouting::ospf_preferred_source: "%{hiera('networking_loopback0_ip')}" frrouting::ospfd_redistribute: - connected frrouting::ospfd_interfaces: diff --git a/modules/frrouting/manifests/init.pp b/modules/frrouting/manifests/init.pp index 6c7d755..92fcdcb 100644 --- a/modules/frrouting/manifests/init.pp +++ b/modules/frrouting/manifests/init.pp @@ -14,6 +14,8 @@ class frrouting ( Optional[String] $mpls_ldp_router_id = undef, Optional[String] $mpls_ldp_transport_addr = undef, Array[String] $mpls_ldp_interfaces = [], + Boolean $ospf_preferred_source_enable = false, + Optional[Stdlib::IP::Address] $ospf_preferred_source = undef, ) { $daemons_defaults = { diff --git a/modules/frrouting/templates/frr.conf.erb b/modules/frrouting/templates/frr.conf.erb index 4e6668b..e2c7040 100644 --- a/modules/frrouting/templates/frr.conf.erb +++ b/modules/frrouting/templates/frr.conf.erb @@ -43,3 +43,11 @@ mpls ldp exit-address-family exit <% end -%> +<% if @ospf_preferred_source_enable && @ospf_preferred_source -%> +ip prefix-list ANY seq 5 permit 0.0.0.0/0 le 32 +route-map OSPF-SRC permit 10 + match ip address prefix-list ANY + set src <%= @ospf_preferred_source %> +exit +ip protocol ospf route-map OSPF-SRC +<% end -%>