Skip to content

Commit 062cc53

Browse files
authored
Merge pull request #371 from dminnear-rh/disable-analytics
add value to operator configmap for enabling/disabling analytics
2 parents e062938 + c82747f commit 062cc53

File tree

3 files changed

+98
-2
lines changed

3 files changed

+98
-2
lines changed

cmd/main.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
3535
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3636
ctrl "sigs.k8s.io/controller-runtime"
37+
crclient "sigs.k8s.io/controller-runtime/pkg/client"
3738
"sigs.k8s.io/controller-runtime/pkg/healthz"
3839
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3940
"sigs.k8s.io/controller-runtime/pkg/manager"
@@ -103,11 +104,12 @@ func main() {
103104

104105
registerComponentOrExit(mgr, argov1beta1api.AddToScheme)
105106

106-
isAnalyticsDisabled := strings.ToLower(os.Getenv("ANALYTICS")) == "false"
107+
analyticsEnabled := areAnalyticsEnabled(mgr.GetAPIReader())
108+
setupLog.Info("analytics enabled", "enabled", analyticsEnabled)
107109
if err = (&controllers.PatternReconciler{
108110
Client: mgr.GetClient(),
109111
Scheme: mgr.GetScheme(),
110-
AnalyticsClient: controllers.AnalyticsInit(isAnalyticsDisabled, setupLog),
112+
AnalyticsClient: controllers.AnalyticsInit(!analyticsEnabled, setupLog),
111113
}).SetupWithManager(mgr); err != nil {
112114
setupLog.Error(err, "unable to create controller", "controller", "Pattern")
113115
os.Exit(1)
@@ -184,3 +186,22 @@ func registerComponentOrExit(mgr manager.Manager, f func(*k8sruntime.Scheme) err
184186
}
185187
setupLog.Info(fmt.Sprintf("Component registered: %v", reflect.ValueOf(f)))
186188
}
189+
190+
// areAnalyticsEnabled determines whether analytics are enabled.
191+
// Precedence: Operator ConfigMap key "analytics.enabled" (true/false) > ENV ANALYTICS (false means disabled)
192+
func areAnalyticsEnabled(reader crclient.Reader) bool {
193+
enabled := strings.ToLower(os.Getenv("ANALYTICS")) != "false"
194+
195+
var cm corev1.ConfigMap
196+
err := reader.Get(context.Background(), crclient.ObjectKey{Namespace: controllers.OperatorNamespace, Name: controllers.OperatorConfigMap}, &cm)
197+
if err != nil {
198+
setupLog.Error(err, "error reading operator configmap for analytics setting")
199+
return enabled
200+
}
201+
202+
if v, ok := cm.Data["analytics.enabled"]; ok {
203+
return strings.EqualFold(v, "true")
204+
}
205+
206+
return enabled
207+
}

cmd/main_test.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package main
2+
3+
import (
4+
"os"
5+
"testing"
6+
7+
corev1 "k8s.io/api/core/v1"
8+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+
"k8s.io/apimachinery/pkg/runtime"
10+
crclient "sigs.k8s.io/controller-runtime/pkg/client"
11+
"sigs.k8s.io/controller-runtime/pkg/client/fake"
12+
13+
controllers "github.com/hybrid-cloud-patterns/patterns-operator/internal/controller"
14+
)
15+
16+
func newFakeReader(objs ...crclient.Object) crclient.Reader {
17+
scheme := runtime.NewScheme()
18+
_ = corev1.AddToScheme(scheme)
19+
builder := fake.NewClientBuilder().WithScheme(scheme)
20+
if len(objs) > 0 {
21+
builder = builder.WithObjects(objs...)
22+
}
23+
return builder.Build()
24+
}
25+
26+
func newOperatorConfigMap(analyticsEnabled string) *corev1.ConfigMap {
27+
return &corev1.ConfigMap{
28+
ObjectMeta: metav1.ObjectMeta{
29+
Namespace: controllers.OperatorNamespace,
30+
Name: controllers.OperatorConfigMap,
31+
},
32+
Data: map[string]string{
33+
"analytics.enabled": analyticsEnabled,
34+
},
35+
}
36+
}
37+
38+
func TestAreAnalyticsEnabledWithReader_ConfigMapTrue(t *testing.T) {
39+
cm := newOperatorConfigMap("true")
40+
reader := newFakeReader(cm)
41+
42+
if got := areAnalyticsEnabled(reader); got != true {
43+
t.Fatalf("expected true when configmap sets analytics.enabled=true, got %v", got)
44+
}
45+
}
46+
47+
func TestAreAnalyticsEnabledWithReader_ConfigMapFalse(t *testing.T) {
48+
cm := newOperatorConfigMap("false")
49+
reader := newFakeReader(cm)
50+
51+
if got := areAnalyticsEnabled(reader); got != false {
52+
t.Fatalf("expected false when configmap sets analytics.enabled=false, got %v", got)
53+
}
54+
}
55+
56+
func TestAreAnalyticsEnabledWithReader_NoConfigMap_EnvFalseDisables(t *testing.T) {
57+
_ = os.Setenv("ANALYTICS", "false")
58+
t.Cleanup(func() { _ = os.Unsetenv("ANALYTICS") })
59+
60+
reader := newFakeReader()
61+
if got := areAnalyticsEnabled(reader); got != false {
62+
t.Fatalf("expected false when no configmap and ANALYTICS=false, got %v", got)
63+
}
64+
}
65+
66+
func TestAreAnalyticsEnabledWithReader_NoConfigMap_EnvTrueEnables(t *testing.T) {
67+
_ = os.Setenv("ANALYTICS", "true")
68+
t.Cleanup(func() { _ = os.Unsetenv("ANALYTICS") })
69+
70+
reader := newFakeReader()
71+
if got := areAnalyticsEnabled(reader); got != true {
72+
t.Fatalf("expected true when no configmap and ANALYTICS=true, got %v", got)
73+
}
74+
}

internal/controller/defaults.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ var DefaultPatternOperatorConfig = map[string]string{
7575
"gitea.chartName": GiteaChartName,
7676
"gitea.helmRepoUrl": GiteaHelmRepoUrl,
7777
"gitea.chartVersion": GiteaDefaultChartVersion,
78+
"analytics.enabled": "true",
7879
}
7980

8081
type GitOpsConfig map[string]string

0 commit comments

Comments
 (0)