@@ -17,24 +17,32 @@ package controllers
17
17
18
18
import (
19
19
"context"
20
+ "fmt"
20
21
21
22
"github.com/go-logr/logr"
23
+ routev1 "github.com/openshift/api/route/v1"
22
24
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
23
25
appsv1 "k8s.io/api/apps/v1"
24
26
autoscalingv2 "k8s.io/api/autoscaling/v2"
25
27
corev1 "k8s.io/api/core/v1"
28
+ networkingv1 "k8s.io/api/networking/v1"
26
29
policyV1 "k8s.io/api/policy/v1"
27
30
rbacv1 "k8s.io/api/rbac/v1"
28
31
apierrors "k8s.io/apimachinery/pkg/api/errors"
32
+ "k8s.io/apimachinery/pkg/labels"
29
33
"k8s.io/apimachinery/pkg/runtime"
34
+ "k8s.io/apimachinery/pkg/types"
30
35
"k8s.io/client-go/tools/record"
31
36
ctrl "sigs.k8s.io/controller-runtime"
32
37
"sigs.k8s.io/controller-runtime/pkg/client"
33
38
34
39
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
35
40
"github.com/open-telemetry/opentelemetry-operator/internal/api/convert"
41
+ "github.com/open-telemetry/opentelemetry-operator/internal/autodetect/openshift"
36
42
"github.com/open-telemetry/opentelemetry-operator/internal/config"
37
43
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
44
+ "github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector"
45
+ "github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
38
46
collectorStatus "github.com/open-telemetry/opentelemetry-operator/internal/status/collector"
39
47
"github.com/open-telemetry/opentelemetry-operator/pkg/featuregate"
40
48
)
@@ -57,6 +65,71 @@ type Params struct {
57
65
Config config.Config
58
66
}
59
67
68
+ func (r * OpenTelemetryCollectorReconciler ) findOtelOwnedObjects (ctx context.Context , params manifests.Params ) (map [types.UID ]client.Object , error ) {
69
+ ownedObjects := map [types.UID ]client.Object {}
70
+
71
+ listOps := & client.ListOptions {
72
+ Namespace : params .OtelCol .Namespace ,
73
+ LabelSelector : labels .SelectorFromSet (manifestutils .SelectorLabels (params .OtelCol .ObjectMeta , collector .ComponentOpenTelemetryCollector )),
74
+ }
75
+ hpaList := & autoscalingv2.HorizontalPodAutoscalerList {}
76
+ err := r .List (ctx , hpaList , listOps )
77
+ if err != nil {
78
+ return nil , fmt .Errorf ("error listing HorizontalPodAutoscalers: %w" , err )
79
+ }
80
+ for i := range hpaList .Items {
81
+ ownedObjects [hpaList .Items [i ].GetUID ()] = & hpaList .Items [i ]
82
+ }
83
+ if featuregate .PrometheusOperatorIsAvailable .IsEnabled () {
84
+ servicemonitorList := & monitoringv1.ServiceMonitorList {}
85
+ err = r .List (ctx , servicemonitorList , listOps )
86
+ if err != nil {
87
+ return nil , fmt .Errorf ("error listing ServiceMonitors: %w" , err )
88
+ }
89
+ for i := range servicemonitorList .Items {
90
+ ownedObjects [servicemonitorList .Items [i ].GetUID ()] = servicemonitorList .Items [i ]
91
+ }
92
+
93
+ podMonitorList := & monitoringv1.PodMonitorList {}
94
+ err = r .List (ctx , podMonitorList , listOps )
95
+ if err != nil {
96
+ return nil , fmt .Errorf ("error listing PodMonitors: %w" , err )
97
+ }
98
+ for i := range podMonitorList .Items {
99
+ ownedObjects [podMonitorList .Items [i ].GetUID ()] = podMonitorList .Items [i ]
100
+ }
101
+ }
102
+ ingressList := & networkingv1.IngressList {}
103
+ err = r .List (ctx , ingressList , listOps )
104
+ if err != nil {
105
+ return nil , fmt .Errorf ("error listing Ingresses: %w" , err )
106
+ }
107
+ for i := range ingressList .Items {
108
+ ownedObjects [ingressList .Items [i ].GetUID ()] = & ingressList .Items [i ]
109
+ }
110
+
111
+ if params .Config .OpenShiftRoutesAvailability () == openshift .RoutesAvailable {
112
+ routesList := & routev1.RouteList {}
113
+ err = r .List (ctx , routesList , listOps )
114
+ if err != nil {
115
+ return nil , fmt .Errorf ("error listing Routes: %w" , err )
116
+ }
117
+ for i := range routesList .Items {
118
+ ownedObjects [routesList .Items [i ].GetUID ()] = & routesList .Items [i ]
119
+ }
120
+ }
121
+ pdbList := & policyV1.PodDisruptionBudgetList {}
122
+ err = r .List (ctx , pdbList , listOps )
123
+ if err != nil {
124
+ return nil , fmt .Errorf ("error listing PodDisruptionBudgets: %w" , err )
125
+ }
126
+ for i := range pdbList .Items {
127
+ ownedObjects [pdbList .Items [i ].GetUID ()] = & pdbList .Items [i ]
128
+ }
129
+
130
+ return ownedObjects , nil
131
+ }
132
+
60
133
func (r * OpenTelemetryCollectorReconciler ) getParams (instance v1alpha1.OpenTelemetryCollector ) (manifests.Params , error ) {
61
134
otelCol , err := convert .V1Alpha1to2 (instance )
62
135
if err != nil {
@@ -84,7 +157,7 @@ func NewReconciler(p Params) *OpenTelemetryCollectorReconciler {
84
157
return r
85
158
}
86
159
87
- // +kubebuilder:rbac:groups="",resources=pods;configmaps;services;serviceaccounts,verbs=get;list;watch;create;update;patch;delete
160
+ // +kubebuilder:rbac:groups="",resources=pods;configmaps;services;serviceaccounts;persistentvolumeclaims;persistentvolumes ,verbs=get;list;watch;create;update;patch;delete
88
161
// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch
89
162
// +kubebuilder:rbac:groups=apps,resources=daemonsets;deployments;statefulsets,verbs=get;list;watch;create;update;patch;delete
90
163
// +kubebuilder:rbac:groups=autoscaling,resources=horizontalpodautoscalers,verbs=get;list;watch;create;update;patch;delete
@@ -134,9 +207,13 @@ func (r *OpenTelemetryCollectorReconciler) Reconcile(ctx context.Context, req ct
134
207
if buildErr != nil {
135
208
return ctrl.Result {}, buildErr
136
209
}
137
- // TODO: https://github.com/open-telemetry/opentelemetry-operator/issues/2620
138
- // TODO: Change &instance to use params.OtelCol
139
- err = reconcileDesiredObjects (ctx , r .Client , log , & instance , params .Scheme , desiredObjects ... )
210
+
211
+ ownedObjects , err := r .findOtelOwnedObjects (ctx , params )
212
+ if err != nil {
213
+ return ctrl.Result {}, err
214
+ }
215
+
216
+ err = reconcileDesiredObjects (ctx , r .Client , log , & instance , params .Scheme , desiredObjects , ownedObjects )
140
217
return collectorStatus .HandleReconcileStatus (ctx , log , params , instance , err )
141
218
}
142
219
@@ -150,6 +227,9 @@ func (r *OpenTelemetryCollectorReconciler) SetupWithManager(mgr ctrl.Manager) er
150
227
Owns (& appsv1.Deployment {}).
151
228
Owns (& appsv1.DaemonSet {}).
152
229
Owns (& appsv1.StatefulSet {}).
230
+ Owns (& corev1.PersistentVolume {}).
231
+ Owns (& corev1.PersistentVolumeClaim {}).
232
+ Owns (& networkingv1.Ingress {}).
153
233
Owns (& autoscalingv2.HorizontalPodAutoscaler {}).
154
234
Owns (& policyV1.PodDisruptionBudget {})
155
235
@@ -162,6 +242,9 @@ func (r *OpenTelemetryCollectorReconciler) SetupWithManager(mgr ctrl.Manager) er
162
242
builder .Owns (& monitoringv1.ServiceMonitor {})
163
243
builder .Owns (& monitoringv1.PodMonitor {})
164
244
}
245
+ if r .config .OpenShiftRoutesAvailability () == openshift .RoutesAvailable {
246
+ builder .Owns (& routev1.Route {})
247
+ }
165
248
166
249
return builder .Complete (r )
167
250
}
0 commit comments