Skip to content

Commit 951c803

Browse files
authored
Version gate the CONFIG_PATH==STATE_PATH change to 8.13 and later (#8869) (#8873)
We ran into issues with Fleet server no longer enroling with the changes from #8856 This proposes to version gate the functionality to Elastic agent versions that actually support advanced configuration. (cherry picked from commit 70d91eb)
1 parent 715c479 commit 951c803

File tree

4 files changed

+121
-5
lines changed

4 files changed

+121
-5
lines changed

pkg/controller/agent/pod.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,10 @@ func buildPodTemplate(params Params, fleetCerts *certificates.CertificatesSecret
148148
if builder, err = amendBuilderForFleetMode(params, fleetCerts, fleetToken, builder, configHash); err != nil {
149149
return corev1.PodTemplateSpec{}, err
150150
}
151-
// Point agent to static config file mounted from a secret to /etc/agent/elastic-agent.yml
152-
builder = builder.WithArgs("-e", "-c", path.Join(ConfigMountPath, ConfigFileName))
151+
if params.AgentVersion.GTE(agentv1alpha1.FleetAdvancedConfigMinVersion) {
152+
// Point agent to static config file mounted from a secret to /etc/agent/elastic-agent.yml for versions that support advanced configuration to be used in addition to the config coming from Fleet.
153+
builder = builder.WithArgs("-e", "-c", path.Join(ConfigMountPath, ConfigFileName))
154+
}
153155
} else if spec.StandaloneModeEnabled() {
154156
// cleanup secret used in Fleet mode
155157
if err := cleanupEnvVarsSecret(params); err != nil {
@@ -197,6 +199,15 @@ func buildPodTemplate(params Params, fleetCerts *certificates.CertificatesSecret
197199
return builder.PodTemplate, nil
198200
}
199201

202+
func fleetConfigPath(v version.Version) string {
203+
if v.LT(agentv1alpha1.FleetAdvancedConfigMinVersion) {
204+
// default to the in-container config directory for older versions of Elastic Agent
205+
// that still try to rewrite the config file in Fleet mode during enrollment.
206+
return "/usr/share/elastic-agent"
207+
}
208+
return DataMountPath
209+
}
210+
200211
func amendBuilderForFleetMode(params Params, fleetCerts *certificates.CertificatesSecret, fleetToken EnrollmentAPIKey, builder *defaults.PodTemplateBuilder, configHash hash.Hash) (*defaults.PodTemplateBuilder, error) {
201212
esAssociation, err := getRelatedEsAssoc(params)
202213
if err != nil {
@@ -238,7 +249,7 @@ func amendBuilderForFleetMode(params Params, fleetCerts *certificates.Certificat
238249
WithResources(defaultFleetResources).
239250
WithEnv(
240251
corev1.EnvVar{Name: "STATE_PATH", Value: DataMountPath},
241-
corev1.EnvVar{Name: "CONFIG_PATH", Value: DataMountPath},
252+
corev1.EnvVar{Name: "CONFIG_PATH", Value: fleetConfigPath(params.AgentVersion)},
242253
)
243254

244255
return builder, nil

pkg/controller/agent/pod_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func Test_amendBuilderForFleetMode(t *testing.T) {
8787
},
8888
{
8989
Name: "CONFIG_PATH",
90-
Value: "/usr/share/elastic-agent/state",
90+
Value: "/usr/share/elastic-agent",
9191
},
9292
}
9393

test/e2e/agent/config.go

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,40 @@ const (
4545
name: system-1
4646
- package:
4747
name: kubernetes
48-
name: kubernetes-1`
48+
name: kubernetes-1
49+
inputs:
50+
- type: kubelet-kubernetes/metrics
51+
enabled: false
52+
- type: kube-state-metrics-kubernetes/metrics
53+
enabled: false
54+
- type: kube-apiserver-kubernetes/metrics
55+
enabled: false
56+
- type: kube-proxy-kubernetes/metrics
57+
enabled: false
58+
- type: kube-scheduler-kubernetes/metrics
59+
enabled: false
60+
- type: kube-controller-manager-kubernetes/metrics
61+
enabled: false
62+
- type: events-kubernetes/metrics
63+
enabled: false
64+
- type: container-logs-filestream
65+
enabled: true
66+
streams:
67+
- data_stream:
68+
dataset: kubernetes.container_logs
69+
enabled: true
70+
vars:
71+
- name: paths
72+
value:
73+
- /var/log/containers/*${kubernetes.container.id}.log
74+
- name: symlinks
75+
value: true
76+
- name: containerParserStream
77+
value: all
78+
- name: containerParserFormat
79+
value: auto
80+
- type: audit-logs-filestream
81+
enabled: false`
4982

5083
E2EAgentSystemIntegrationConfig = `id: 2d70a6f0-33a5-11eb-bb2f-418d0388a8cf
5184
revision: 2
@@ -396,4 +429,35 @@ inputs:
396429
securityContext:
397430
runAsUser: 0
398431
`
432+
E2EAgentFleetModeHostPathPodTemplate = `spec:
433+
hostNetwork: true
434+
dnsPolicy: ClusterFirstWithHostNet
435+
automountServiceAccountToken: true
436+
securityContext:
437+
runAsUser: 0
438+
containers:
439+
- name: agent
440+
volumeMounts:
441+
- mountPath: /var/lib/docker/containers
442+
name: varlibdockercontainers
443+
- mountPath: /var/log/containers
444+
name: varlogcontainers
445+
- mountPath: /var/log/pods
446+
name: varlogpods
447+
volumes:
448+
- name: varlibdockercontainers
449+
hostPath:
450+
path: /var/lib/docker/containers
451+
- name: varlogcontainers
452+
hostPath:
453+
path: /var/log/containers
454+
- name: varlogpods
455+
hostPath:
456+
path: /var/log/pods`
457+
458+
E2EAgentFleetModeAdvancedConfig = `fleet:
459+
enabled: true
460+
providers.kubernetes:
461+
add_resource_metadata:
462+
deployment: true`
399463
)

test/e2e/agent/config_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
corev1 "k8s.io/api/core/v1"
1616
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1717

18+
agentv1alpha1 "github.com/elastic/cloud-on-k8s/v3/pkg/apis/agent/v1alpha1"
1819
v1 "github.com/elastic/cloud-on-k8s/v3/pkg/apis/common/v1"
1920
"github.com/elastic/cloud-on-k8s/v3/pkg/controller/common/version"
2021
"github.com/elastic/cloud-on-k8s/v3/test/e2e/test"
@@ -196,6 +197,46 @@ func TestFleetMode(t *testing.T) {
196197
})
197198
}
198199

200+
func TestFleetModeAdvancedConfig(t *testing.T) {
201+
if version.MustParse(test.Ctx().ElasticStackVersion).LT(agentv1alpha1.FleetAdvancedConfigMinVersion) {
202+
t.Skipf("Skipping test %s because Fleet advanced config is not supported for stack version %s", t.Name(), test.Ctx().ElasticStackVersion)
203+
}
204+
205+
name := "fleet-adv-cfg"
206+
esBuilder := elasticsearch.NewBuilder(name).
207+
WithESMasterDataNodes(3, elasticsearch.DefaultResources)
208+
209+
kbBuilder := kibana.NewBuilder(name).
210+
WithElasticsearchRef(esBuilder.Ref()).
211+
WithNodeCount(1)
212+
213+
fleetServerBuilder := agent.NewBuilder(name+"-fs").
214+
WithRoles(agent.AgentFleetModeRoleName).
215+
WithOpenShiftRoles(test.UseSCCRole).
216+
WithDeployment().
217+
WithFleetMode().
218+
WithFleetServer().
219+
WithElasticsearchRefs(agent.ToOutput(esBuilder.Ref(), "default")).
220+
WithKibanaRef(kbBuilder.Ref()).
221+
// Check that we have Kubernetes deployment metadata in any log index (this can only be done on the Fleet server builder which has an ES output):
222+
WithESValidation(agent.HasEvent("/logs-*/_search?q=_exists_:kubernetes.deployment.name"), "default")
223+
224+
agentBuilder := agent.NewBuilder(name + "-ea").
225+
WithRoles(agent.AgentFleetModeRoleName).
226+
WithOpenShiftRoles(test.UseSCCRole).
227+
WithFleetMode().
228+
WithKibanaRef(kbBuilder.Ref()).
229+
WithFleetServerRef(fleetServerBuilder.Ref())
230+
231+
kbBuilder = kbBuilder.WithConfig(fleetConfigForKibana(t, fleetServerBuilder.Agent.Spec.Version, esBuilder.Ref(), fleetServerBuilder.Ref(), true))
232+
233+
fleetServerBuilder = agent.ApplyYamls(t, fleetServerBuilder, "", E2EAgentFleetModePodTemplate)
234+
agentBuilder = agent.ApplyYamls(t, agentBuilder, E2EAgentFleetModeAdvancedConfig, E2EAgentFleetModeHostPathPodTemplate)
235+
236+
test.Sequence(nil, test.EmptySteps, esBuilder, kbBuilder, fleetServerBuilder, agentBuilder).RunSequential(t)
237+
238+
}
239+
199240
func fleetConfigForKibana(t *testing.T, agentVersion string, esRef v1.ObjectSelector, fsRef v1.ObjectSelector, tlsEnabled bool) map[string]interface{} {
200241
t.Helper()
201242
kibanaConfig := map[string]interface{}{}

0 commit comments

Comments
 (0)