-
-
Save CMGS/9bfc4729696dc552e317 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Generated by confd | |
include "bird_aggr.cfg"; | |
include "bird_ipam.cfg"; | |
router id {{getenv "IP"}}; | |
{{define "LOGGING"}} | |
{{$node_logging_key := printf "/host/%s/loglevel" (getenv "HOSTNAME")}}{{if exists $node_logging_key}}{{$logging := getv $node_logging_key}} | |
{{if eq $logging "debug"}} debug all;{{else if ne $logging "none"}} debug { states };{{end}} | |
{{else if exists "/global/loglevel"}}{{$logging := getv "/global/loglevel"}} | |
{{if eq $logging "debug"}} debug all;{{else if ne $logging "none"}} debug { states };{{end}} | |
{{else}} debug { states };{{end}} | |
{{end}} | |
# Configure synchronization between routing tables and kernel. | |
protocol kernel { | |
learn; # Learn all alien routes from the kernel | |
persist; # Don't remove routes on bird shutdown | |
scan time 2; # Scan kernel routing table every 2 seconds | |
import all; | |
export filter calico_ipip; # Default is export none | |
graceful restart; # Turn on graceful restart to reduce potential flaps in | |
# routes when reloading BIRD configuration. With a full | |
# automatic mesh, there is no way to prevent BGP from | |
# flapping since multiple nodes update their BGP | |
# configuration at the same time, GR is not guaranteed to | |
# work correctly in this scenario. | |
} | |
# Watch interface up/down events. | |
protocol device { | |
{{template "LOGGING"}} | |
scan time 2; # Scan interfaces every 2 seconds | |
} | |
protocol direct { | |
{{template "LOGGING"}} | |
interface -"cali*", -"vnbe*", "*"; # Exclude cali* but include everything else. | |
} | |
{{$node_as_key := printf "/host/%s/as_num" (getenv "HOSTNAME")}} | |
# Template for all BGP clients | |
template bgp bgp_template { | |
{{template "LOGGING"}} | |
description "Connection to BGP peer"; | |
local as {{if exists $node_as_key}}{{getv $node_as_key}}{{else}}{{getv "/global/as_num"}}{{end}}; | |
multihop; | |
gateway recursive; # This should be the default, but just in case. | |
import all; # Import all routes, since we don't know what the upstream | |
# topology is and therefore have to trust the ToR/RR. | |
export filter calico_pools; # Only want to export routes for workloads. | |
next hop self; # Disable next hop processing and always advertise our | |
# local address as nexthop | |
source address {{getenv "IP"}}; # The local address we use for the TCP connection | |
add paths on; | |
graceful restart; # See comment in kernel section about graceful restart. | |
} | |
# ------------- Node-to-node mesh ------------- | |
{{if (json (getv "/global/node_mesh")).enabled}} | |
{{range $host := lsdir "/host"}} | |
{{$onode_as_key := printf "/host/%s/as_num" .}} | |
{{$onode_ip_key := printf "/host/%s/ip_addr_v4" .}}{{$onode_ip := getv $onode_ip_key}} | |
{{$nums := split $onode_ip "."}}{{$id := join $nums "_"}} | |
# For peer {{$onode_ip_key}} | |
{{if eq $onode_ip (getenv "IP") }}# Skipping ourselves ({{getenv "IP"}}) | |
{{else if ne "" $onode_ip}}protocol bgp Mesh_{{$id}} from bgp_template { | |
neighbor {{$onode_ip}} as {{if exists $onode_as_key}}{{getv $onode_as_key}}{{else}}{{getv "/global/as_num"}}{{end}}; | |
}{{end}}{{end}} | |
{{else}} | |
# Node-to-node mesh disabled | |
{{end}} | |
# ------------- Global peers ------------- | |
{{if ls "/global/peer_v4"}} | |
{{range gets "/global/peer_v4/*"}}{{$data := json .Value}} | |
{{$nums := split $data.ip "."}}{{$id := join $nums "_"}} | |
# For peer {{.Key}} | |
protocol bgp Global_{{$id}} from bgp_template { | |
neighbor {{$data.ip}} as {{$data.as_num}}; | |
} | |
{{end}} | |
{{else}}# No global peers configured.{{end}} | |
# ------------- Node-specific peers ------------- | |
{{$node_peers_key := printf "/host/%s/peer_v4" (getenv "HOSTNAME")}} | |
{{if ls $node_peers_key}} | |
{{range gets (printf "%s/*" $node_peers_key)}}{{$data := json .Value}} | |
{{$nums := split $data.ip "."}}{{$id := join $nums "_"}} | |
# For peer {{.Key}} | |
protocol bgp Node_{{$id}} from bgp_template { | |
neighbor {{$data.ip}} as {{$data.as_num}}; | |
} | |
{{end}} | |
{{else}}# No node-specific peers configured.{{end}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment