Skip to content

Commit 0bae5ef

Browse files
committed
fix: detect prometheus crd support
Signed-off-by: Peter Wilcsinszky <[email protected]>
1 parent 8462ad3 commit 0bae5ef

File tree

6 files changed

+62
-22
lines changed

6 files changed

+62
-22
lines changed

controllers/logging/logging_controller.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/cisco-open/operator-tools/pkg/secret"
2828
"github.com/cisco-open/operator-tools/pkg/utils"
2929
"github.com/go-logr/logr"
30+
v1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
3031
"github.com/prometheus/client_golang/prometheus"
3132
corev1 "k8s.io/api/core/v1"
3233
"k8s.io/apimachinery/pkg/types"
@@ -92,6 +93,20 @@ func (r *LoggingReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
9293
return reconcile.Result{}, client.IgnoreNotFound(err)
9394
}
9495

96+
if err := r.Client.List(ctx, &v1.ServiceMonitorList{}); err == nil {
97+
//nolint:staticcheck
98+
ctx = context.WithValue(ctx, resources.ServiceMonitorKey, true)
99+
} else {
100+
log.Info("WARNING ServiceMonitor is not supported in the cluster")
101+
}
102+
103+
if err := r.Client.List(ctx, &v1.PrometheusRuleList{}); err == nil {
104+
//nolint:staticcheck
105+
ctx = context.WithValue(ctx, resources.PrometheusRuleKey, true)
106+
} else {
107+
log.Info("WARNING PormetheusRule is not supported in the cluster")
108+
}
109+
95110
if err := logging.SetDefaults(); err != nil {
96111
return reconcile.Result{}, err
97112
}

pkg/resources/features.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,18 @@
1414

1515
package resources
1616

17+
import (
18+
"context"
19+
20+
"github.com/spf13/cast"
21+
)
22+
1723
var PSPEnabled bool
24+
25+
const ServiceMonitorKey = "ServiceMonitor"
26+
const PrometheusRuleKey = "PrometheusRule"
27+
28+
func IsSupported(ctx context.Context, key string) bool {
29+
value := ctx.Value(key)
30+
return cast.ToBool(value)
31+
}

pkg/resources/fluentbit/fluentbit.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,17 @@ func (r *Reconciler) Reconcile(ctx context.Context) (*reconcile.Result, error) {
126126
r.configSecret,
127127
r.daemonSet,
128128
r.serviceMetrics,
129-
r.monitorServiceMetrics,
130129
r.serviceBufferMetrics,
131-
r.monitorBufferServiceMetrics,
132-
r.prometheusRules,
133-
r.bufferVolumePrometheusRules,
134130
}
135131
if resources.PSPEnabled {
136132
objects = append(objects, r.clusterPodSecurityPolicy, r.pspClusterRole, r.pspClusterRoleBinding)
137133
}
134+
if resources.IsSupported(ctx, resources.ServiceMonitorKey) {
135+
objects = append(objects, r.monitorServiceMetrics, r.monitorBufferServiceMetrics)
136+
}
137+
if resources.IsSupported(ctx, resources.PrometheusRuleKey) {
138+
objects = append(objects, r.prometheusRules, r.bufferVolumePrometheusRules)
139+
}
138140
for _, factory := range objects {
139141
o, state, err := factory()
140142
if err != nil {

pkg/resources/fluentd/fluentd.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,19 +215,23 @@ func (r *Reconciler) Reconcile(ctx context.Context) (*reconcile.Result, error) {
215215
return result, nil
216216
}
217217
}
218-
for _, res := range []resources.Resource{
218+
219+
resourceObjects := []resources.Resource{
219220
r.secretConfig,
220221
r.appConfigSecret,
221222
r.statefulset,
222223
r.service,
223224
r.headlessService,
224225
r.serviceMetrics,
225-
r.monitorServiceMetrics,
226226
r.serviceBufferMetrics,
227-
r.monitorBufferServiceMetrics,
228-
r.prometheusRules,
229-
r.bufferVolumePrometheusRules,
230-
} {
227+
}
228+
if resources.IsSupported(ctx, resources.ServiceMonitorKey) {
229+
resourceObjects = append(objects, r.monitorServiceMetrics, r.monitorBufferServiceMetrics)
230+
}
231+
if resources.IsSupported(ctx, resources.PrometheusRuleKey) {
232+
resourceObjects = append(objects, r.prometheusRules, r.bufferVolumePrometheusRules)
233+
}
234+
for _, res := range resourceObjects {
231235
o, state, err := res()
232236
if err != nil {
233237
return nil, errors.WrapIf(err, "failed to create desired object")

pkg/resources/nodeagent/nodeagent.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -293,16 +293,16 @@ type nodeAgentInstance struct {
293293
}
294294

295295
// Reconcile reconciles the InlineNodeAgent resource
296-
func (r *Reconciler) Reconcile(_ context.Context) (*reconcile.Result, error) {
296+
func (r *Reconciler) Reconcile(ctx context.Context) (*reconcile.Result, error) {
297297
combinedResult := reconciler.CombinedResult{}
298298
for name, userDefinedAgent := range r.agents {
299-
result, err := r.processAgent(name, userDefinedAgent)
299+
result, err := r.processAgent(ctx, name, userDefinedAgent)
300300
combinedResult.Combine(result, err)
301301
}
302302
return &combinedResult.Result, combinedResult.Err
303303
}
304304

305-
func (r *Reconciler) processAgent(name string, userDefinedAgent v1beta1.NodeAgentConfig) (*reconcile.Result, error) {
305+
func (r *Reconciler) processAgent(ctx context.Context, name string, userDefinedAgent v1beta1.NodeAgentConfig) (*reconcile.Result, error) {
306306
var instance nodeAgentInstance
307307
NodeAgentFluentbitDefaults, err := NodeAgentFluentbitDefaults(userDefinedAgent)
308308
if err != nil {
@@ -339,23 +339,25 @@ func (r *Reconciler) processAgent(name string, userDefinedAgent v1beta1.NodeAgen
339339
loggingDataProvider: r.fluentdDataProvider,
340340
}
341341

342-
return instance.Reconcile()
342+
return instance.Reconcile(ctx)
343343
}
344344

345345
// Reconcile reconciles the nodeAgentInstance resource
346-
func (n *nodeAgentInstance) Reconcile() (*reconcile.Result, error) {
346+
func (n *nodeAgentInstance) Reconcile(ctx context.Context) (*reconcile.Result, error) {
347347
objects := []resources.Resource{
348348
n.serviceAccount,
349349
n.clusterRole,
350350
n.clusterRoleBinding,
351351
n.configSecret,
352352
n.daemonSet,
353353
n.serviceMetrics,
354-
n.monitorServiceMetrics,
355354
}
356355
if resources.PSPEnabled {
357356
objects = append(objects, n.clusterPodSecurityPolicy, n.pspClusterRole, n.pspClusterRoleBinding)
358357
}
358+
if resources.IsSupported(ctx, resources.ServiceMonitorKey) {
359+
objects = append(objects, n.monitorServiceMetrics)
360+
}
359361
for _, factory := range objects {
360362
o, state, err := factory()
361363
if err != nil {

pkg/resources/syslogng/syslogng.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,18 +214,21 @@ func (r *Reconciler) Reconcile(ctx context.Context) (*reconcile.Result, error) {
214214
return result, nil
215215
}
216216
}
217-
for _, res := range []resources.Resource{
217+
resourceObjects := []resources.Resource{
218218
r.configSecret,
219219
r.statefulset,
220220
r.service,
221221
r.headlessService,
222222
r.serviceMetrics,
223-
r.monitorServiceMetrics,
224223
r.serviceBufferMetrics,
225-
r.monitorBufferServiceMetrics,
226-
r.prometheusRules,
227-
r.bufferVolumePrometheusRules,
228-
} {
224+
}
225+
if resources.IsSupported(ctx, resources.ServiceMonitorKey) {
226+
resourceObjects = append(resourceObjects, r.monitorServiceMetrics, r.monitorBufferServiceMetrics)
227+
}
228+
if resources.IsSupported(ctx, resources.PrometheusRuleKey) {
229+
resourceObjects = append(resourceObjects, r.prometheusRules, r.bufferVolumePrometheusRules)
230+
}
231+
for _, res := range resourceObjects {
229232
o, state, err := res()
230233
if err != nil {
231234
return nil, errors.WrapIf(err, "failed to create desired object")

0 commit comments

Comments
 (0)