diff --git a/pkg/iptables/iptables.go b/pkg/iptables/iptables.go index f72365b..99c5613 100644 --- a/pkg/iptables/iptables.go +++ b/pkg/iptables/iptables.go @@ -221,6 +221,7 @@ type Controller struct { errors chan error logger log.Logger resyncPeriod time.Duration + registerer prometheus.Registerer sync.Mutex rules []Rule @@ -252,10 +253,16 @@ func WithClients(v4, v6 Client) ControllerOption { } } +func WithRegisterer(registerer prometheus.Registerer) ControllerOption { + return func(c *Controller) { + c.registerer = registerer + } +} + // New generates a new iptables rules controller. // If no options are given, IPv4 and IPv6 clients // will be instantiated using the regular iptables backend. -func New(registerer prometheus.Registerer, opts ...ControllerOption) (*Controller, error) { +func New(opts ...ControllerOption) (*Controller, error) { c := &Controller{ errors: make(chan error), logger: log.NewNopLogger(), @@ -268,7 +275,11 @@ func New(registerer prometheus.Registerer, opts ...ControllerOption) (*Controlle if err != nil { return nil, fmt.Errorf("failed to create iptables IPv4 client: %v", err) } - c.v4 = wrapWithMetrics(v4, "IPv4", registerer) + if c.registerer != nil { + c.v4 = wrapWithMetrics(v4, "IPv4", c.registerer) + } else { + c.v4 = v4 + } } if c.v6 == nil { disabled, err := ipv6Disabled() @@ -283,7 +294,11 @@ func New(registerer prometheus.Registerer, opts ...ControllerOption) (*Controlle if err != nil { return nil, fmt.Errorf("failed to create iptables IPv6 client: %v", err) } - c.v6 = wrapWithMetrics(v6, "IPv6", registerer) + if c.registerer != nil { + c.v6 = wrapWithMetrics(v6, "IPv6", c.registerer) + } else { + c.v6 = v6 + } } } return c, nil diff --git a/pkg/iptables/iptables_test.go b/pkg/iptables/iptables_test.go index a95ddb4..25c5c17 100644 --- a/pkg/iptables/iptables_test.go +++ b/pkg/iptables/iptables_test.go @@ -15,7 +15,6 @@ package iptables import ( - "github.com/prometheus/client_golang/prometheus" "testing" ) @@ -85,7 +84,7 @@ func TestSet(t *testing.T) { }, } { client := &fakeClient{} - controller, err := New(prometheus.NewRegistry(), WithClients(client, client)) + controller, err := New(WithClients(client, client)) if err != nil { t.Fatalf("test case %q: got unexpected error instantiating controller: %v", tc.name, err) } @@ -142,7 +141,7 @@ func TestCleanUp(t *testing.T) { }, } { client := &fakeClient{} - controller, err := New(prometheus.NewRegistry(), WithClients(client, client)) + controller, err := New(WithClients(client, client)) if err != nil { t.Fatalf("test case %q: got unexpected error instantiating controller: %v", tc.name, err) } diff --git a/pkg/mesh/mesh.go b/pkg/mesh/mesh.go index 728372d..040790d 100644 --- a/pkg/mesh/mesh.go +++ b/pkg/mesh/mesh.go @@ -156,7 +156,7 @@ func New(backend Backend, enc encapsulation.Encapsulator, granularity Granularit externalIP = publicIP } level.Debug(logger).Log("msg", fmt.Sprintf("using %s as the public IP address", publicIP.String())) - ipTables, err := iptables.New(registerer, iptables.WithLogger(log.With(logger, "component", "iptables")), iptables.WithResyncPeriod(resyncPeriod)) + ipTables, err := iptables.New(iptables.WithRegisterer(registerer), iptables.WithLogger(log.With(logger, "component", "iptables")), iptables.WithResyncPeriod(resyncPeriod)) if err != nil { return nil, fmt.Errorf("failed to IP tables controller: %v", err) }