Skip to content

Commit 42a689e

Browse files
authored
Revert "Support configuring java runtime from configmap or secret (env.valueFrom)" (#3510)
* Revert "Support configuring java runtime from configmap or secret (env.valueF…" This reverts commit 2b36f0d. * chlog (#3511)
1 parent bc34078 commit 42a689e

File tree

12 files changed

+62
-78
lines changed

12 files changed

+62
-78
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
2+
change_type: bug_fix
3+
4+
# The name of the component, or a single word describing the area of concern, (e.g. collector, target allocator, auto-instrumentation, opamp, github action)
5+
component: auto-instrumentation
6+
7+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
8+
note: Reverts PR 3379 which inadvertently broke users setting JAVA_TOOL_OPTIONS
9+
10+
# One or more tracking issues related to the change
11+
issues: [3463]
12+
13+
# (Optional) One or more lines of additional information to render under the primary note.
14+
# These lines will be padded with 2 spaces and then inserted directly into the document.
15+
# Use pipe (|) for multiline entries.
16+
subtext: |
17+
Reverts a previous PR which was causing JAVA_TOOL_OPTIONS to not be overriden when
18+
set by users. This was resulting in application crashloopbackoffs for users relying
19+
on java autoinstrumentation.

config/manager/kustomization.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
resources:
22
- manager.yaml
3+

pkg/instrumentation/javaagent.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,23 @@ import (
2424

2525
const (
2626
envJavaToolsOptions = "JAVA_TOOL_OPTIONS"
27-
javaAgent = "-javaagent:/otel-auto-instrumentation-java/javaagent.jar"
27+
javaAgent = " -javaagent:/otel-auto-instrumentation-java/javaagent.jar"
2828
javaInitContainerName = initContainerName + "-java"
2929
javaVolumeName = volumeName + "-java"
3030
javaInstrMountPath = "/otel-auto-instrumentation-java"
3131
)
3232

33-
func injectJavaagent(javaSpec v1alpha1.Java, pod corev1.Pod, index int) corev1.Pod {
33+
func injectJavaagent(javaSpec v1alpha1.Java, pod corev1.Pod, index int) (corev1.Pod, error) {
3434
volume := instrVolume(javaSpec.VolumeClaimTemplate, javaVolumeName, javaSpec.VolumeSizeLimit)
35+
3536
// caller checks if there is at least one container.
3637
container := &pod.Spec.Containers[index]
3738

39+
err := validateContainerEnv(container.Env, envJavaToolsOptions)
40+
if err != nil {
41+
return pod, err
42+
}
43+
3844
// inject Java instrumentation spec env vars.
3945
for _, env := range javaSpec.Env {
4046
idx := getIndexOfEnv(container.Env, env.Name)
@@ -49,14 +55,14 @@ func injectJavaagent(javaSpec v1alpha1.Java, pod corev1.Pod, index int) corev1.P
4955
}
5056

5157
idx := getIndexOfEnv(container.Env, envJavaToolsOptions)
52-
if idx != -1 {
53-
// https://kubernetes.io/docs/tasks/inject-data-application/define-interdependent-environment-variables/
54-
javaJVMArgument = fmt.Sprintf("$(%s) %s", envJavaToolsOptions, javaJVMArgument)
58+
if idx == -1 {
59+
container.Env = append(container.Env, corev1.EnvVar{
60+
Name: envJavaToolsOptions,
61+
Value: javaJVMArgument,
62+
})
63+
} else {
64+
container.Env[idx].Value = container.Env[idx].Value + javaJVMArgument
5565
}
56-
container.Env = append(container.Env, corev1.EnvVar{
57-
Name: envJavaToolsOptions,
58-
Value: javaJVMArgument,
59-
})
6066

6167
container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{
6268
Name: volume.Name,
@@ -91,5 +97,5 @@ func injectJavaagent(javaSpec v1alpha1.Java, pod corev1.Pod, index int) corev1.P
9197
}
9298

9399
}
94-
return pod
100+
return pod, err
95101
}

pkg/instrumentation/javaagent_test.go

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package instrumentation
1616

1717
import (
18+
"fmt"
1819
"testing"
1920

2021
"github.com/stretchr/testify/assert"
@@ -29,6 +30,7 @@ func TestInjectJavaagent(t *testing.T) {
2930
v1alpha1.Java
3031
pod corev1.Pod
3132
expected corev1.Pod
33+
err error
3234
}{
3335
{
3436
name: "JAVA_TOOL_OPTIONS not defined",
@@ -81,6 +83,7 @@ func TestInjectJavaagent(t *testing.T) {
8183
},
8284
},
8385
},
86+
err: nil,
8487
},
8588
{
8689
name: "add extensions to JAVA_TOOL_OPTIONS",
@@ -154,6 +157,7 @@ func TestInjectJavaagent(t *testing.T) {
154157
},
155158
},
156159
},
160+
err: nil,
157161
},
158162
{
159163
name: "JAVA_TOOL_OPTIONS defined",
@@ -207,21 +211,18 @@ func TestInjectJavaagent(t *testing.T) {
207211
Env: []corev1.EnvVar{
208212
{
209213
Name: "JAVA_TOOL_OPTIONS",
210-
Value: "-Dbaz=bar",
211-
},
212-
{
213-
Name: "JAVA_TOOL_OPTIONS",
214-
Value: "$(JAVA_TOOL_OPTIONS) " + javaAgent,
214+
Value: "-Dbaz=bar" + javaAgent,
215215
},
216216
},
217217
},
218218
},
219219
},
220220
},
221+
err: nil,
221222
},
222223
{
223224
name: "JAVA_TOOL_OPTIONS defined as ValueFrom",
224-
Java: v1alpha1.Java{Image: "foo/bar:1", Resources: testResourceRequirements},
225+
Java: v1alpha1.Java{Image: "foo/bar:1"},
225226
pod: corev1.Pod{
226227
Spec: corev1.PodSpec{
227228
Containers: []corev1.Container{
@@ -238,57 +239,27 @@ func TestInjectJavaagent(t *testing.T) {
238239
},
239240
expected: corev1.Pod{
240241
Spec: corev1.PodSpec{
241-
Volumes: []corev1.Volume{
242-
{
243-
Name: "opentelemetry-auto-instrumentation-java",
244-
VolumeSource: corev1.VolumeSource{
245-
EmptyDir: &corev1.EmptyDirVolumeSource{
246-
SizeLimit: &defaultVolumeLimitSize,
247-
},
248-
},
249-
},
250-
},
251-
InitContainers: []corev1.Container{
252-
{
253-
Name: "opentelemetry-auto-instrumentation-java",
254-
Image: "foo/bar:1",
255-
Command: []string{"cp", "/javaagent.jar", "/otel-auto-instrumentation-java/javaagent.jar"},
256-
VolumeMounts: []corev1.VolumeMount{{
257-
Name: "opentelemetry-auto-instrumentation-java",
258-
MountPath: "/otel-auto-instrumentation-java",
259-
}},
260-
Resources: testResourceRequirements,
261-
},
262-
},
263242
Containers: []corev1.Container{
264243
{
265-
VolumeMounts: []corev1.VolumeMount{
266-
{
267-
Name: "opentelemetry-auto-instrumentation-java",
268-
MountPath: "/otel-auto-instrumentation-java",
269-
},
270-
},
271244
Env: []corev1.EnvVar{
272245
{
273246
Name: "JAVA_TOOL_OPTIONS",
274247
ValueFrom: &corev1.EnvVarSource{},
275248
},
276-
{
277-
Name: "JAVA_TOOL_OPTIONS",
278-
Value: "$(JAVA_TOOL_OPTIONS) " + javaAgent,
279-
},
280249
},
281250
},
282251
},
283252
},
284253
},
254+
err: fmt.Errorf("the container defines env var value via ValueFrom, envVar: %s", envJavaToolsOptions),
285255
},
286256
}
287257

288258
for _, test := range tests {
289259
t.Run(test.name, func(t *testing.T) {
290-
pod := injectJavaagent(test.Java, test.pod, 0)
260+
pod, err := injectJavaagent(test.Java, test.pod, 0)
291261
assert.Equal(t, test.expected, pod)
262+
assert.Equal(t, test.err, err)
292263
})
293264
}
294265
}

pkg/instrumentation/sdk.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ func (i *sdkInjector) inject(ctx context.Context, insts languageInstrumentations
5959
}
6060
if insts.Java.Instrumentation != nil {
6161
otelinst := *insts.Java.Instrumentation
62+
var err error
6263
i.logger.V(1).Info("injecting Java instrumentation into pod", "otelinst-namespace", otelinst.Namespace, "otelinst-name", otelinst.Name)
6364

6465
if len(insts.Java.Containers) == 0 {
@@ -67,10 +68,14 @@ func (i *sdkInjector) inject(ctx context.Context, insts languageInstrumentations
6768

6869
for _, container := range insts.Java.Containers {
6970
index := getContainerIndex(container, pod)
70-
pod = injectJavaagent(otelinst.Spec.Java, pod, index)
71-
pod = i.injectCommonEnvVar(otelinst, pod, index)
72-
pod = i.injectCommonSDKConfig(ctx, otelinst, ns, pod, index, index)
73-
pod = i.setInitContainerSecurityContext(pod, pod.Spec.Containers[index].SecurityContext, javaInitContainerName)
71+
pod, err = injectJavaagent(otelinst.Spec.Java, pod, index)
72+
if err != nil {
73+
i.logger.Info("Skipping javaagent injection", "reason", err.Error(), "container", pod.Spec.Containers[index].Name)
74+
} else {
75+
pod = i.injectCommonEnvVar(otelinst, pod, index)
76+
pod = i.injectCommonSDKConfig(ctx, otelinst, ns, pod, index, index)
77+
pod = i.setInitContainerSecurityContext(pod, pod.Spec.Containers[index].SecurityContext, javaInitContainerName)
78+
}
7479
}
7580
}
7681
if insts.NodeJS.Instrumentation != nil {

tests/e2e-instrumentation/instrumentation-java-multicontainer/01-assert.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ spec:
2525
- name: SPLUNK_PROFILER_ENABLED
2626
value: "false"
2727
- name: JAVA_TOOL_OPTIONS
28-
value: '-javaagent:/otel-auto-instrumentation-java/javaagent.jar'
28+
value: ' -javaagent:/otel-auto-instrumentation-java/javaagent.jar'
2929
- name: OTEL_TRACES_EXPORTER
3030
value: otlp
3131
- name: OTEL_EXPORTER_OTLP_ENDPOINT
@@ -75,7 +75,7 @@ spec:
7575
- name: SPLUNK_PROFILER_ENABLED
7676
value: "false"
7777
- name: JAVA_TOOL_OPTIONS
78-
value: '-javaagent:/otel-auto-instrumentation-java/javaagent.jar'
78+
value: ' -javaagent:/otel-auto-instrumentation-java/javaagent.jar'
7979
- name: OTEL_TRACES_EXPORTER
8080
value: otlp
8181
- name: OTEL_EXPORTER_OTLP_ENDPOINT

tests/e2e-instrumentation/instrumentation-java-multicontainer/02-assert.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ spec:
3636
- name: SPLUNK_PROFILER_ENABLED
3737
value: "false"
3838
- name: JAVA_TOOL_OPTIONS
39-
value: '-javaagent:/otel-auto-instrumentation-java/javaagent.jar'
39+
value: ' -javaagent:/otel-auto-instrumentation-java/javaagent.jar'
4040
- name: OTEL_TRACES_EXPORTER
4141
value: otlp
4242
- name: OTEL_EXPORTER_OTLP_ENDPOINT

tests/e2e-instrumentation/instrumentation-java-other-ns/03-assert.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ spec:
2424
- name: SPLUNK_PROFILER_ENABLED
2525
value: "false"
2626
- name: JAVA_TOOL_OPTIONS
27-
value: '-javaagent:/otel-auto-instrumentation-java/javaagent.jar'
27+
value: ' -javaagent:/otel-auto-instrumentation-java/javaagent.jar'
2828
- name: OTEL_TRACES_EXPORTER
2929
value: otlp
3030
- name: OTEL_EXPORTER_OTLP_ENDPOINT

tests/e2e-instrumentation/instrumentation-java-tls/01-assert.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ spec:
1717
fieldRef:
1818
fieldPath: status.podIP
1919
- name: JAVA_TOOL_OPTIONS
20-
value: '-javaagent:/otel-auto-instrumentation-java/javaagent.jar'
20+
value: ' -javaagent:/otel-auto-instrumentation-java/javaagent.jar'
2121
- name: OTEL_SERVICE_NAME
2222
value: my-java
2323
- name: OTEL_EXPORTER_OTLP_ENDPOINT

tests/e2e-instrumentation/instrumentation-java/01-assert.yaml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,14 @@ spec:
1717
valueFrom:
1818
fieldRef:
1919
fieldPath: status.podIP
20-
- name: JAVA_TOOL_OPTIONS
21-
valueFrom:
22-
configMapKeyRef:
23-
name: config-java
24-
key: system-properties
2520
- name: OTEL_JAVAAGENT_DEBUG
2621
value: "true"
2722
- name: OTEL_INSTRUMENTATION_JDBC_ENABLED
2823
value: "false"
2924
- name: SPLUNK_PROFILER_ENABLED
3025
value: "false"
3126
- name: JAVA_TOOL_OPTIONS
32-
value: '$(JAVA_TOOL_OPTIONS) -javaagent:/otel-auto-instrumentation-java/javaagent.jar'
27+
value: ' -javaagent:/otel-auto-instrumentation-java/javaagent.jar'
3328
- name: OTEL_TRACES_EXPORTER
3429
value: otlp
3530
- name: OTEL_EXPORTER_OTLP_ENDPOINT

tests/e2e-instrumentation/instrumentation-java/01-install-app.yaml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
apiVersion: v1
2-
kind: ConfigMap
3-
metadata:
4-
name: config-java
5-
data:
6-
system-properties: "-Xmx256m -Xms64m"
7-
---
81
apiVersion: apps/v1
92
kind: Deployment
103
metadata:
@@ -29,12 +22,6 @@ spec:
2922
containers:
3023
- name: myapp
3124
image: ghcr.io/open-telemetry/opentelemetry-operator/e2e-test-app-java:main
32-
env:
33-
- name: JAVA_TOOL_OPTIONS
34-
valueFrom:
35-
configMapKeyRef:
36-
name: config-java
37-
key: system-properties
3825
securityContext:
3926
allowPrivilegeEscalation: false
4027
capabilities:

tests/e2e-multi-instrumentation/instrumentation-multi-multicontainer/01-assert.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ spec:
8989
- name: OTEL_SERVICE_NAME
9090
value: javaapp
9191
- name: JAVA_TOOL_OPTIONS
92-
value: '-javaagent:/otel-auto-instrumentation-java/javaagent.jar'
92+
value: ' -javaagent:/otel-auto-instrumentation-java/javaagent.jar'
9393
- name: OTEL_TRACES_SAMPLER
9494
value: parentbased_traceidratio
9595
- name: OTEL_TRACES_SAMPLER_ARG

0 commit comments

Comments
 (0)