Skip to content

Commit b707bf8

Browse files
Enable DNS intents support by default (#217)
1 parent 49fa418 commit b707bf8

File tree

5 files changed

+44
-15
lines changed

5 files changed

+44
-15
lines changed

src/go.mod

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/mapper/cmd/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/otterize/network-mapper/src/mapper/pkg/pod_webhook"
2323
"github.com/otterize/network-mapper/src/shared/echologrus"
2424
"golang.org/x/sync/errgroup"
25+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2526
"k8s.io/apimachinery/pkg/runtime"
2627
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2728
"net/http"
@@ -61,6 +62,7 @@ var (
6162
)
6263

6364
func init() {
65+
utilruntime.Must(apiextensionsv1.AddToScheme(scheme))
6466
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
6567
utilruntime.Must(otterizev1alpha2.AddToScheme(scheme))
6668
utilruntime.Must(otterizev1alpha3.AddToScheme(scheme))

src/mapper/pkg/config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const (
3333
DNSClientIntentsUpdateIntervalKey = "dns-client-intents-update-interval"
3434
DNSClientIntentsUpdateIntervalDefault = 1 * time.Second
3535
DNSClientIntentsUpdateEnabledKey = "dns-client-intents-update-enabled"
36-
DNSClientIntentsUpdateEnabledDefault = false
36+
DNSClientIntentsUpdateEnabledDefault = true
3737

3838
EnableIstioCollectionKey = "enable-istio-collection"
3939
EnableIstioCollectionDefault = false

src/mapper/pkg/dnsintentspublisher/init.go

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,57 @@ import (
77
"github.com/otterize/network-mapper/src/mapper/pkg/dnscache"
88
"github.com/sirupsen/logrus"
99
"github.com/spf13/viper"
10-
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
10+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
11+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
12+
"k8s.io/apimachinery/pkg/types"
13+
"sigs.k8s.io/controller-runtime/pkg/client"
1114
"sigs.k8s.io/controller-runtime/pkg/manager"
1215
)
1316

17+
const (
18+
clientIntentsCRDName = "clientintents.k8s.otterize.com"
19+
)
20+
1421
func InitWithManager(ctx context.Context, mgr manager.Manager, dnsCache *dnscache.DNSCache) (*Publisher, bool, error) {
1522
if !viper.GetBool(config.DNSClientIntentsUpdateEnabledKey) {
1623
return nil, false, nil
1724
}
1825

26+
installed, err := IsClientIntentsInstalled(ctx, mgr)
27+
if err != nil {
28+
return nil, false, errors.Wrap(err)
29+
}
30+
31+
if !installed {
32+
logrus.Debugf("DNS client intents publishing is not enabled due to missing CRD %s", clientIntentsCRDName)
33+
return nil, false, nil
34+
}
35+
1936
dnsPublisher := NewPublisher(mgr.GetClient(), dnsCache)
20-
err := dnsPublisher.InitIndices(ctx, mgr)
37+
err = dnsPublisher.InitIndices(ctx, mgr)
2138
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-
}
3239
return nil, false, errors.Wrap(err)
3340
}
3441

3542
return dnsPublisher, true, nil
3643
}
44+
45+
func IsClientIntentsInstalled(ctx context.Context, mgr manager.Manager) (bool, error) {
46+
directClient, err := client.New(mgr.GetConfig(), client.Options{Scheme: mgr.GetScheme()})
47+
if err != nil {
48+
logrus.WithError(err).Error("unable to create kubernetes API client")
49+
return false, errors.Wrap(err)
50+
}
51+
52+
crd := apiextensionsv1.CustomResourceDefinition{}
53+
err = directClient.Get(ctx, types.NamespacedName{Name: clientIntentsCRDName}, &crd)
54+
if err != nil && !k8serrors.IsNotFound(err) {
55+
return false, errors.Wrap(err)
56+
}
57+
58+
if k8serrors.IsNotFound(err) {
59+
return false, nil
60+
}
61+
62+
return true, nil
63+
}

0 commit comments

Comments
 (0)