@@ -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.
@@ -108,6 +110,7 @@ func (c *Config) GetEnabledComponents() map[ComponentKind]map[string]interface{}
108
110
KindReceiver : {},
109
111
KindProcessor : {},
110
112
KindExporter : {},
113
+ KindExtension : {},
111
114
}
112
115
for _ , pipeline := range c .Service .Pipelines {
113
116
if pipeline == nil {
@@ -123,6 +126,9 @@ func (c *Config) GetEnabledComponents() map[ComponentKind]map[string]interface{}
123
126
toReturn [KindProcessor ][componentId ] = struct {}{}
124
127
}
125
128
}
129
+ for _ , componentId := range c .Service .Extensions {
130
+ toReturn [KindExtension ][componentId ] = struct {}{}
131
+ }
126
132
return toReturn
127
133
}
128
134
@@ -162,6 +168,8 @@ func (c *Config) getRbacRulesForComponentKinds(logger logr.Logger, componentKind
162
168
} else {
163
169
cfg = * c .Processors
164
170
}
171
+ case KindExtension :
172
+ continue
165
173
}
166
174
for componentName := range enabledComponents [componentKind ] {
167
175
// TODO: Clean up the naming here and make it simpler to use a retriever.
@@ -191,7 +199,9 @@ func (c *Config) getPortsForComponentKinds(logger logr.Logger, componentKinds ..
191
199
retriever = exporters .ParserFor
192
200
cfg = c .Exporters
193
201
case KindProcessor :
194
- break
202
+ continue
203
+ case KindExtension :
204
+ continue
195
205
}
196
206
for componentName := range enabledComponents [componentKind ] {
197
207
// TODO: Clean up the naming here and make it simpler to use a retriever.
@@ -227,6 +237,38 @@ func (c *Config) GetAllRbacRules(logger logr.Logger) ([]rbacv1.PolicyRule, error
227
237
return c .getRbacRulesForComponentKinds (logger , KindReceiver , KindExporter , KindProcessor )
228
238
}
229
239
240
+ // GetLivenessProbe gets the first enabled liveness probe. There should only ever be one extension enabled
241
+ // that provides the hinting for the liveness probe.
242
+ func (c * Config ) GetLivenessProbe (logger logr.Logger ) (* corev1.Probe , error ) {
243
+ enabledComponents := c .GetEnabledComponents ()
244
+ for componentName := range enabledComponents [KindExtension ] {
245
+ // TODO: Clean up the naming here and make it simpler to use a retriever.
246
+ parser := extensions .ParserFor (componentName )
247
+ if probe , err := parser .GetLivenessProbe (logger , c .Extensions .Object [componentName ]); err != nil {
248
+ return nil , err
249
+ } else if probe != nil {
250
+ return probe , nil
251
+ }
252
+ }
253
+ return nil , nil
254
+ }
255
+
256
+ // GetReadinessProbe gets the first enabled readiness probe. There should only ever be one extension enabled
257
+ // that provides the hinting for the readiness probe.
258
+ func (c * Config ) GetReadinessProbe (logger logr.Logger ) (* corev1.Probe , error ) {
259
+ enabledComponents := c .GetEnabledComponents ()
260
+ for componentName := range enabledComponents [KindExtension ] {
261
+ // TODO: Clean up the naming here and make it simpler to use a retriever.
262
+ parser := extensions .ParserFor (componentName )
263
+ if probe , err := parser .GetReadinessProbe (logger , c .Extensions .Object [componentName ]); err != nil {
264
+ return nil , err
265
+ } else if probe != nil {
266
+ return probe , nil
267
+ }
268
+ }
269
+ return nil , nil
270
+ }
271
+
230
272
// Yaml encodes the current object and returns it as a string.
231
273
func (c * Config ) Yaml () (string , error ) {
232
274
var buf bytes.Buffer
@@ -268,7 +310,7 @@ func (c *Config) nullObjects() []string {
268
310
}
269
311
270
312
type Service struct {
271
- Extensions * []string `json:"extensions,omitempty" yaml:"extensions,omitempty"`
313
+ Extensions []string `json:"extensions,omitempty" yaml:"extensions,omitempty"`
272
314
// +kubebuilder:pruning:PreserveUnknownFields
273
315
Telemetry * AnyConfig `json:"telemetry,omitempty" yaml:"telemetry,omitempty"`
274
316
// +kubebuilder:pruning:PreserveUnknownFields
0 commit comments