Skip to content

Commit

Permalink
Merge pull request #12 from sapcc/enh/bgp-filters
Browse files Browse the repository at this point in the history
Allow setting  `BgpFilters` to discovered bgp peers
  • Loading branch information
defo89 authored Nov 27, 2024
2 parents 1ce918c + 9c94d62 commit 63a2e80
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 7 deletions.
8 changes: 8 additions & 0 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package main
import (
"flag"
"os"
"strings"
"time"

"github.com/sapcc/cni-nanny/internal/controller/calico"
Expand Down Expand Up @@ -65,6 +66,7 @@ func main() {
var enableLeaderElection bool
var probeAddr string
var requeueInterval int
var bgpFilters string
flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.")
flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.")
flag.StringVar(&config.Cfg.DefaultName, "default-name", "default", "The default resource name.")
Expand All @@ -74,6 +76,7 @@ func main() {
flag.StringVar(&config.Cfg.JobImageTag, "job-image-tag", "latest", "The tag of bgp peer discovery image.")
flag.StringVar(&config.Cfg.ServiceAccount, "service-account-name", "cni-nanny-controller-manager", "The name of service account for bgp peer discovery.")
flag.IntVar(&config.Cfg.BgpRemoteAs, "bgp-remote-as", 12345, "The remote autonomous system of bgp peers.")
flag.StringVar(&bgpFilters, "bgp-filters", "", "The BGP filters to apply to peers.")
flag.IntVar(&requeueInterval, "requeue-interval", 10, "requeue interval in minutes")
flag.BoolVar(&enableLeaderElection, "leader-elect", false,
"Enable leader election for controller manager. "+
Expand All @@ -86,6 +89,11 @@ func main() {

ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))

config.Cfg.BgpFilters = []string{}
if bgpFilters != "" {
config.Cfg.BgpFilters = strings.Split(bgpFilters, ",")
}

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
Scheme: scheme,
Metrics: metricsserver.Options{BindAddress: metricsAddr},
Expand Down
1 change: 1 addition & 0 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,5 @@ type Config struct {
ServiceAccount string
BgpNeighborCount int
BgpRemoteAs int
BgpFilters []string
}
11 changes: 4 additions & 7 deletions internal/controller/calico/calicobgp_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,16 @@ func (r *CalicoBgpReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
ASNumber: numorstring.ASNumber(asNumber),
NodeSelector: config.Cfg.NodeTopologyLabel + " == " + fmt.Sprintf("%q", req.Name),
}
if len(config.Cfg.BgpFilters) > 0 {
spec.Filters = config.Cfg.BgpFilters
}
err = r.Get(ctx, nsName, &calicoBgpPeer)
if err != nil {
if k8serrors.IsNotFound(err) {
calicoPeer := generateCalicoBgpPeer(nsName, spec, &calicoBgpPeer)
log.FromContext(ctx).Info("creating calico peer", calicoPeer.Name, calicoPeer.Spec.PeerIP)
err = r.Create(ctx, calicoPeer)
if err != nil {
if err != nil && !k8serrors.IsAlreadyExists(err) {
log.FromContext(ctx).Error(err, "error creating calicoBgpPeer")
return ctrl.Result{}, err
}
Expand All @@ -106,12 +109,6 @@ func (r *CalicoBgpReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
}
}
}
/*
err = controllerutil.SetOwnerReference(bgpPeerDiscovery, &calicoBgpPeer, r.Scheme)
if err != nil {
log.FromContext(ctx).Error(err, "error setting owner reference")
}
*/

labelDiscovery := &topologyv1alpha1.LabelDiscovery{}
nsName.Name = config.Cfg.DefaultName
Expand Down

0 comments on commit 63a2e80

Please sign in to comment.