@@ -31,6 +31,7 @@ import (
31
31
32
32
"github.com/open-telemetry/opentelemetry-operator/internal/components"
33
33
"github.com/open-telemetry/opentelemetry-operator/internal/components/exporters"
34
+ "github.com/open-telemetry/opentelemetry-operator/internal/components/extensions"
34
35
"github.com/open-telemetry/opentelemetry-operator/internal/components/processors"
35
36
"github.com/open-telemetry/opentelemetry-operator/internal/components/receivers"
36
37
)
@@ -41,10 +42,11 @@ const (
41
42
KindReceiver ComponentKind = iota
42
43
KindExporter
43
44
KindProcessor
45
+ KindExtension
44
46
)
45
47
46
48
func (c ComponentKind ) String () string {
47
- return [... ]string {"receiver" , "exporter" , "processor" }[c ]
49
+ return [... ]string {"receiver" , "exporter" , "processor" , "extension" }[c ]
48
50
}
49
51
50
52
// AnyConfig represent parts of the config.
@@ -114,6 +116,7 @@ func (c *Config) GetEnabledComponents() map[ComponentKind]map[string]interface{}
114
116
KindReceiver : {},
115
117
KindProcessor : {},
116
118
KindExporter : {},
119
+ KindExtension : {},
117
120
}
118
121
for _ , pipeline := range c .Service .Pipelines {
119
122
if pipeline == nil {
@@ -129,6 +132,9 @@ func (c *Config) GetEnabledComponents() map[ComponentKind]map[string]interface{}
129
132
toReturn [KindProcessor ][componentId ] = struct {}{}
130
133
}
131
134
}
135
+ for _ , componentId := range c .Service .Extensions {
136
+ toReturn [KindExtension ][componentId ] = struct {}{}
137
+ }
132
138
return toReturn
133
139
}
134
140
@@ -168,6 +174,8 @@ func (c *Config) getRbacRulesForComponentKinds(logger logr.Logger, componentKind
168
174
} else {
169
175
cfg = * c .Processors
170
176
}
177
+ case KindExtension :
178
+ continue
171
179
}
172
180
for componentName := range enabledComponents [componentKind ] {
173
181
// TODO: Clean up the naming here and make it simpler to use a retriever.
@@ -197,7 +205,9 @@ func (c *Config) getPortsForComponentKinds(logger logr.Logger, componentKinds ..
197
205
retriever = exporters .ParserFor
198
206
cfg = c .Exporters
199
207
case KindProcessor :
200
- break
208
+ continue
209
+ case KindExtension :
210
+ continue
201
211
}
202
212
for componentName := range enabledComponents [componentKind ] {
203
213
// TODO: Clean up the naming here and make it simpler to use a retriever.
@@ -233,6 +243,38 @@ func (c *Config) GetAllRbacRules(logger logr.Logger) ([]rbacv1.PolicyRule, error
233
243
return c .getRbacRulesForComponentKinds (logger , KindReceiver , KindExporter , KindProcessor )
234
244
}
235
245
246
+ // GetLivenessProbe gets the first enabled liveness probe. There should only ever be one extension enabled
247
+ // that provides the hinting for the liveness probe.
248
+ func (c * Config ) GetLivenessProbe (logger logr.Logger ) (* corev1.Probe , error ) {
249
+ enabledComponents := c .GetEnabledComponents ()
250
+ for componentName := range enabledComponents [KindExtension ] {
251
+ // TODO: Clean up the naming here and make it simpler to use a retriever.
252
+ parser := extensions .ParserFor (componentName )
253
+ if probe , err := parser .GetLivenessProbe (logger , c .Extensions .Object [componentName ]); err != nil {
254
+ return nil , err
255
+ } else if probe != nil {
256
+ return probe , nil
257
+ }
258
+ }
259
+ return nil , nil
260
+ }
261
+
262
+ // GetReadinessProbe gets the first enabled readiness probe. There should only ever be one extension enabled
263
+ // that provides the hinting for the readiness probe.
264
+ func (c * Config ) GetReadinessProbe (logger logr.Logger ) (* corev1.Probe , error ) {
265
+ enabledComponents := c .GetEnabledComponents ()
266
+ for componentName := range enabledComponents [KindExtension ] {
267
+ // TODO: Clean up the naming here and make it simpler to use a retriever.
268
+ parser := extensions .ParserFor (componentName )
269
+ if probe , err := parser .GetReadinessProbe (logger , c .Extensions .Object [componentName ]); err != nil {
270
+ return nil , err
271
+ } else if probe != nil {
272
+ return probe , nil
273
+ }
274
+ }
275
+ return nil , nil
276
+ }
277
+
236
278
// Yaml encodes the current object and returns it as a string.
237
279
func (c * Config ) Yaml () (string , error ) {
238
280
var buf bytes.Buffer
@@ -295,7 +337,7 @@ func (c *Config) nullObjects() []string {
295
337
}
296
338
297
339
type Service struct {
298
- Extensions * []string `json:"extensions,omitempty" yaml:"extensions,omitempty"`
340
+ Extensions []string `json:"extensions,omitempty" yaml:"extensions,omitempty"`
299
341
// +kubebuilder:pruning:PreserveUnknownFields
300
342
Telemetry * AnyConfig `json:"telemetry,omitempty" yaml:"telemetry,omitempty"`
301
343
// +kubebuilder:pruning:PreserveUnknownFields
0 commit comments