Skip to content

Commit c17939e

Browse files
authoredMar 17, 2024··
Fixed case where mapper could fail to initialize when domain name Internet intents were enabled (#195)
1 parent f5d36b8 commit c17939e

File tree

3 files changed

+48
-30
lines changed

3 files changed

+48
-30
lines changed
 

‎src/mapper/cmd/main.go

+10-29
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"k8s.io/client-go/metadata"
2828
"net/http"
2929
"os"
30-
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
3130
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
3231
"sigs.k8s.io/controller-runtime/pkg/webhook"
3332
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
@@ -112,6 +111,10 @@ func main() {
112111
errgrp, errGroupCtx := errgroup.WithContext(signals.SetupSignalHandler())
113112

114113
dnsCache := dnscache.NewDNSCache()
114+
dnsPublisher, dnsPublisherEnabled, err := dnsintentspublisher.InitWithManager(errGroupCtx, mgr, dnsCache)
115+
if err != nil {
116+
logrus.WithError(err).Panic("Failed to initialize DNS publisher")
117+
}
115118

116119
mapperServer := echo.New()
117120
mapperServer.HideBanner = true
@@ -259,9 +262,12 @@ func main() {
259262
intentsHolder.RegisterNotifyIntents(otelExporter.NotifyIntents)
260263
}
261264

262-
err = StartDNSClientIntentsPublisher(mgr, dnsCache, errGroupCtx, errgrp)
263-
if err != nil {
264-
logrus.WithError(err).Panic("failed to initialize DNS client intents publisher")
265+
if dnsPublisherEnabled {
266+
errgrp.Go(func() error {
267+
defer errorreporter.AutoNotify()
268+
dnsPublisher.RunForever(errGroupCtx)
269+
return nil
270+
})
265271
}
266272

267273
errgrp.Go(func() error {
@@ -311,31 +317,6 @@ func main() {
311317
}
312318
}
313319

314-
func StartDNSClientIntentsPublisher(mgr manager.Manager, dnsCache *dnscache.DNSCache, errGroupCtx context.Context, errgrp *errgroup.Group) error {
315-
if viper.GetBool(config.DNSClientIntentsUpdateEnabledKey) {
316-
dnsPublisher := dnsintentspublisher.NewPublisher(mgr.GetClient(), dnsCache)
317-
err := dnsPublisher.InitIndices(errGroupCtx, mgr)
318-
if err != nil {
319-
if discoveryErr := (&apiutil.ErrResourceDiscoveryFailed{}); errors.As(err, &discoveryErr) {
320-
for gvk := range *discoveryErr {
321-
if gvk.Group == "k8s.otterize.com" {
322-
logrus.Debugf("DNS client intents publishing is not enabled due to missing CRD %v", gvk)
323-
// This can happen if the network mapper is deployed without the intents operator, which is normal.
324-
return nil
325-
}
326-
}
327-
}
328-
return errors.Wrap(err)
329-
}
330-
errgrp.Go(func() error {
331-
defer errorreporter.AutoNotify()
332-
dnsPublisher.RunForever(errGroupCtx)
333-
return nil
334-
})
335-
}
336-
return nil
337-
}
338-
339320
func shutdownGracefullyOnCancel(errGroupCtx context.Context, server *echo.Echo) {
340321
<-errGroupCtx.Done()
341322
timeoutCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package dnsintentspublisher
2+
3+
import (
4+
"context"
5+
"github.com/otterize/intents-operator/src/shared/errors"
6+
"github.com/otterize/network-mapper/src/mapper/pkg/config"
7+
"github.com/otterize/network-mapper/src/mapper/pkg/dnscache"
8+
"github.com/sirupsen/logrus"
9+
"github.com/spf13/viper"
10+
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
11+
"sigs.k8s.io/controller-runtime/pkg/manager"
12+
)
13+
14+
func InitWithManager(ctx context.Context, mgr manager.Manager, dnsCache *dnscache.DNSCache) (*Publisher, bool, error) {
15+
if !viper.GetBool(config.DNSClientIntentsUpdateEnabledKey) {
16+
return nil, false, nil
17+
}
18+
19+
dnsPublisher := NewPublisher(mgr.GetClient(), dnsCache)
20+
err := dnsPublisher.InitIndices(ctx, mgr)
21+
if err != nil {
22+
discoveryErr := (&apiutil.ErrResourceDiscoveryFailed{})
23+
if errors.As(err, &discoveryErr) {
24+
for gvk := range *discoveryErr {
25+
if gvk.Group == "k8s.otterize.com" {
26+
// This can happen if the network mapper is deployed without the intents operator, which is normal.
27+
logrus.Debugf("DNS client intents publishing is not enabled due to missing CRD %v", gvk)
28+
return nil, false, nil
29+
}
30+
}
31+
}
32+
return nil, false, errors.Wrap(err)
33+
}
34+
35+
return dnsPublisher, true, nil
36+
}

‎src/mapper/pkg/resolvers/resolver_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"k8s.io/apimachinery/pkg/types"
2424
"k8s.io/apimachinery/pkg/util/wait"
2525
"net/http/httptest"
26+
"sigs.k8s.io/controller-runtime/pkg/client"
2627
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2728
"testing"
2829
"time"
@@ -267,7 +268,7 @@ func (s *ResolverTestSuite) TestReportCaptureResultsPodDeletion() {
267268
err := s.Mgr.GetClient().Get(context.Background(), types.NamespacedName{Name: pod.GetName(), Namespace: pod.GetNamespace()}, &podToUpdate)
268269
s.Require().NoError(err)
269270
s.Require().True(controllerutil.AddFinalizer(&podToUpdate, "intents.otterize.com/finalizer-so-that-object-cant-be-deleted-for-this-test"))
270-
err = s.Mgr.GetClient().Update(context.Background(), &podToUpdate)
271+
err = s.Mgr.GetClient().Patch(context.Background(), &podToUpdate, client.MergeFrom(pod))
271272
s.Require().NoError(err)
272273

273274
interval := 1 * time.Second

0 commit comments

Comments
 (0)
Please sign in to comment.