Skip to content

Commit ce93eff

Browse files
committed
Move Otel runtime determination to component modifier
1 parent 2463b1c commit ce93eff

File tree

6 files changed

+31
-17
lines changed

6 files changed

+31
-17
lines changed

internal/pkg/agent/application/coordinator/coordinator.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1808,7 +1808,6 @@ func (c *Coordinator) updateManagersWithConfig(model *component.Model) {
18081808
func (c *Coordinator) splitModelBetweenManagers(model *component.Model) (runtimeModel *component.Model, otelModel *component.Model) {
18091809
var otelComponents, runtimeComponents []component.Component
18101810
for _, comp := range model.Components {
1811-
c.maybeOverrideRuntimeForComponent(&comp)
18121811
switch comp.RuntimeManager {
18131812
case component.OtelRuntimeManager:
18141813
otelComponents = append(otelComponents, comp)
@@ -1840,7 +1839,7 @@ func (c *Coordinator) splitModelBetweenManagers(model *component.Model) (runtime
18401839
// Normally, we use the runtime set in the component itself via the configuration, but
18411840
// we may also fall back to the process runtime if the otel runtime is unsupported for
18421841
// some reason. One example is the output using unsupported config options.
1843-
func (c *Coordinator) maybeOverrideRuntimeForComponent(comp *component.Component) {
1842+
func maybeOverrideRuntimeForComponent(logger *logger.Logger, comp *component.Component) {
18441843
if comp.RuntimeManager == component.ProcessRuntimeManager {
18451844
// do nothing, the process runtime can handle any component
18461845
return
@@ -1849,7 +1848,7 @@ func (c *Coordinator) maybeOverrideRuntimeForComponent(comp *component.Component
18491848
// check if the component is actually supported
18501849
err := translate.VerifyComponentIsOtelSupported(comp)
18511850
if err != nil {
1852-
c.logger.Warnf("otel runtime is not supported for component %s, switching to process runtime, reason: %v", comp.ID, err)
1851+
logger.Warnf("otel runtime is not supported for component %s, switching to process runtime, reason: %v", comp.ID, err)
18531852
comp.RuntimeManager = component.ProcessRuntimeManager
18541853
}
18551854
}
@@ -1939,8 +1938,15 @@ func (c *Coordinator) generateComponentModel() (err error) {
19391938
existingCompState[comp.Component.ID] = comp.State.Pid
19401939
}
19411940

1941+
otelRuntimeModifier := func(comps []component.Component, cfg map[string]interface{}) ([]component.Component, error) {
1942+
for i := range comps {
1943+
maybeOverrideRuntimeForComponent(c.logger, &comps[i])
1944+
}
1945+
return comps, nil
1946+
}
19421947
comps, err := c.specs.ToComponents(
19431948
cfg,
1949+
append(c.modifiers, otelRuntimeModifier),
19441950
configInjector,
19451951
c.state.LogLevel,
19461952
c.agentInfo,
@@ -1953,13 +1959,6 @@ func (c *Coordinator) generateComponentModel() (err error) {
19531959
// Filter any disallowed inputs/outputs from the components
19541960
comps = c.filterByCapabilities(comps)
19551961

1956-
for _, modifier := range c.modifiers {
1957-
comps, err = modifier(comps, cfg)
1958-
if err != nil {
1959-
return fmt.Errorf("failed to modify components: %w", err)
1960-
}
1961-
}
1962-
19631962
// If we made it this far, update our internal derived values and
19641963
// return with no error
19651964
c.derivedConfig = cfg

internal/pkg/agent/application/endpoint_component_modifier_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"github.com/elastic/elastic-agent-client/v7/pkg/client"
2121
"github.com/elastic/elastic-agent-client/v7/pkg/proto"
2222
"github.com/elastic/elastic-agent-libs/testing/certutil"
23-
"github.com/elastic/elastic-agent/internal/pkg/agent/application/coordinator"
2423
"github.com/elastic/elastic-agent/internal/pkg/testutils/fipsutils"
2524
"github.com/elastic/elastic-agent/pkg/core/logger/loggertest"
2625

@@ -44,7 +43,7 @@ func TestEndpointComponentModifier(t *testing.T) {
4443

4544
tests := map[string][]struct {
4645
name string
47-
compModifier coordinator.ComponentsModifier
46+
compModifier component.ComponentsModifier
4847
comps []component.Component
4948
cfg map[string]interface{}
5049
wantComps []component.Component

internal/pkg/agent/install/componentvalidation/validation.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func GetComponentsFromPolicy(ctx context.Context, l *logger.Logger, cfgPath stri
101101
}
102102

103103
// Compute the components from the computed configuration.
104-
comps, err := specs.ToComponents(m, monitorFn, lvl, agentInfo, map[string]uint64{})
104+
comps, err := specs.ToComponents(m, nil, monitorFn, lvl, agentInfo, map[string]uint64{})
105105
if err != nil {
106106
return nil, fmt.Errorf("failed to render components: %w", err)
107107
}

internal/pkg/agent/install/uninstall.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ func serviceComponentsFromConfig(specs component.RuntimeSpecs, cfg *config.Confi
422422
if err != nil {
423423
return nil, aerrors.New("failed to create a map from config", err)
424424
}
425-
allComps, err := specs.ToComponents(mm, nil, logp.InfoLevel, nil, map[string]uint64{})
425+
allComps, err := specs.ToComponents(mm, nil, nil, logp.InfoLevel, nil, map[string]uint64{})
426426
if err != nil {
427427
return nil, fmt.Errorf("failed to render components: %w", err)
428428
}

pkg/component/component.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ type Model struct {
343343
// the current runtime specification.
344344
func (r *RuntimeSpecs) ToComponents(
345345
policy map[string]interface{},
346+
modifiers []ComponentsModifier,
346347
monitoringInjector GenerateMonitoringCfgFn,
347348
ll logp.Level,
348349
headers HeadersProvider,
@@ -353,6 +354,14 @@ func (r *RuntimeSpecs) ToComponents(
353354
return nil, err
354355
}
355356

357+
// Do this here so the monitoring injector has a more accurate view of what components are running
358+
for _, modifier := range modifiers {
359+
components, err = modifier(components, policy)
360+
if err != nil {
361+
return nil, err
362+
}
363+
}
364+
356365
if monitoringInjector != nil {
357366
monitoringCfg, err := monitoringInjector(policy, components, currentServiceCompInts)
358367
if err != nil {
@@ -366,6 +375,13 @@ func (r *RuntimeSpecs) ToComponents(
366375
return nil, fmt.Errorf("failed to generate monitoring components: %w", err)
367376
}
368377

378+
for _, modifier := range modifiers {
379+
monitoringComps, err = modifier(monitoringComps, policy)
380+
if err != nil {
381+
return nil, err
382+
}
383+
}
384+
369385
components = append(components, monitoringComps...)
370386
}
371387
}

pkg/component/component_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2503,7 +2503,7 @@ func TestToComponents(t *testing.T) {
25032503
runtime, err := LoadRuntimeSpecs(filepath.Join("..", "..", "specs"), scenario.Platform, SkipBinaryCheck())
25042504
require.NoError(t, err)
25052505

2506-
result, err := runtime.ToComponents(scenario.Policy, nil, scenario.LogLevel, scenario.headers, map[string]uint64{})
2506+
result, err := runtime.ToComponents(scenario.Policy, nil, nil, scenario.LogLevel, scenario.headers, map[string]uint64{})
25072507
if scenario.Err != "" {
25082508
assert.Equal(t, scenario.Err, err.Error())
25092509
} else {
@@ -2979,7 +2979,7 @@ func TestFlattenedDataStream(t *testing.T) {
29792979
t.Fatalf("cannot load runtime specs: %s", err)
29802980
}
29812981

2982-
result, err := runtime.ToComponents(policy, nil, logp.DebugLevel, nil, map[string]uint64{})
2982+
result, err := runtime.ToComponents(policy, nil, nil, logp.DebugLevel, nil, map[string]uint64{})
29832983
if err != nil {
29842984
t.Fatalf("cannot convert policy to component: %s", err)
29852985
}
@@ -3080,7 +3080,7 @@ func TestFlattenedDataStreamIsolatedUnits(t *testing.T) {
30803080
t.Fatalf("cannot load runtime specs: %s", err)
30813081
}
30823082

3083-
result, err := runtime.ToComponents(policy, nil, logp.DebugLevel, nil, map[string]uint64{})
3083+
result, err := runtime.ToComponents(policy, nil, nil, logp.DebugLevel, nil, map[string]uint64{})
30843084
if err != nil {
30853085
t.Fatalf("cannot convert policy to component: %s", err)
30863086
}

0 commit comments

Comments
 (0)