diff --git a/controllers/firewall_monitor_controller.go b/controllers/firewall_monitor_controller.go index 1722cc89..dd2cc57b 100644 --- a/controllers/firewall_monitor_controller.go +++ b/controllers/firewall_monitor_controller.go @@ -24,12 +24,14 @@ import ( // FirewallMonitorReconciler reconciles a firewall monitor object type FirewallMonitorReconciler struct { ShootClient client.Client + SeedClient client.Client Recorder record.EventRecorder Log logr.Logger - FirewallName string - Namespace string + FirewallName string + Namespace string + SeedNamespace string IDSEnabled bool Interval time.Duration @@ -57,6 +59,9 @@ func (r *FirewallMonitorReconciler) SetupWithManager(mgr ctrl.Manager) error { return false }, }). + WithEventFilter(predicate.NewPredicateFuncs(func(object client.Object) bool { + return object.GetNamespace() == r.Namespace && object.GetName() == r.FirewallName + })). Complete(r) } @@ -70,6 +75,13 @@ func (r *FirewallMonitorReconciler) Reconcile(ctx context.Context, req ctrl.Requ return ctrl.Result{}, err } + f := &firewallv2.Firewall{} + if err := r.SeedClient.Get(ctx, req.NamespacedName, f); err != nil { + return ctrl.Result{}, fmt.Errorf("error retrieving resource: %w", err) + } + + r.Log.Info("firewall fetched from Seed in Monitor", "Fw Distance", f.Distance, "Fw Name", f.Name) + idsStats := firewallv2.IDSStatsByDevice{} if r.IDSEnabled { s := suricata.New() @@ -119,8 +131,8 @@ func (r *FirewallMonitorReconciler) Reconcile(ctx context.Context, req ctrl.Requ ControllerVersion: v.Version, NftablesExporterVersion: "", // TODO Updated: metav1.NewTime(now), - Distance: 0, - DistanceSupported: false, + Distance: f.Distance, + DistanceSupported: true, } if !r.seedUpdated.IsZero() { diff --git a/main.go b/main.go index 4029390d..d8b272f9 100644 --- a/main.go +++ b/main.go @@ -206,19 +206,23 @@ func main() { panic(err) } - shootClient, err := controllerclient.New(shootConfig, controllerclient.Options{Scheme: scheme}) + shootClient, err := controllerclient.New(shootConfig, controllerclient.Options{ + Scheme: scheme, + }) if err != nil { l.Error("unable to create shoot client", "error", err) panic(err) } fwmReconciler := &controllers.FirewallMonitorReconciler{ - ShootClient: shootMgr.GetClient(), - Log: ctrl.Log.WithName("controllers").WithName("FirewallMonitorReconciler"), - Recorder: shootMgr.GetEventRecorderFor("FirewallMonitorController"), - IDSEnabled: enableIDS, - FirewallName: firewallName, - Namespace: firewallv2.FirewallShootNamespace, + ShootClient: shootMgr.GetClient(), + SeedClient: seedMgr.GetClient(), + Log: ctrl.Log.WithName("controllers").WithName("FirewallMonitorReconciler"), + Recorder: shootMgr.GetEventRecorderFor("FirewallMonitorController"), + IDSEnabled: enableIDS, + FirewallName: firewallName, + Namespace: firewallv2.FirewallShootNamespace, + SeedNamespace: seedNamespace, } frrVersion, err := frr.DetectVersion() diff --git a/pkg/network/network.go b/pkg/network/network.go index c137c844..c618cdd1 100644 --- a/pkg/network/network.go +++ b/pkg/network/network.go @@ -70,6 +70,7 @@ func ReconcileNetwork(f *firewallv2.Firewall, frrVersion *semver.Version) (chang return false, fmt.Errorf("failed to init networker config: %w", err) } c.Networks = GetNewNetworks(f, c.Networks) + c.FirewallDistance = uint8(f.Distance) a := netconf.NewFrrConfigApplier(netconf.Firewall, *c, tmpFile, frrVersion) tpl := netconf.MustParseTpl(netconf.TplFirewallFRR)