Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
252050b
fix(controller): keep user env vars over controller defaults
mesutoezdil Jul 25, 2026
4ce6e5e
Merge remote-tracking branch 'origin/main' into fix/agent-env-precedence
mesutoezdil Jul 25, 2026
1d9c9df
Merge branch 'main' into fix/agent-env-precedence
EItanya Jul 27, 2026
7cca82d
Merge branch 'main' into fix/agent-env-precedence
mesutoezdil Jul 27, 2026
b7ef940
chore: merge main into fix/agent-env-precedence
mesutoezdil Jul 27, 2026
342cd43
chore: merge main into fix/agent-env-precedence
mesutoezdil Jul 27, 2026
9bc630e
Merge branch 'main' into fix/agent-env-precedence
mesutoezdil Jul 28, 2026
c5ccbeb
Merge branch 'main' into fix/agent-env-precedence
mesutoezdil Jul 28, 2026
ea04e53
Merge branch 'main' into fix/agent-env-precedence
mesutoezdil Jul 28, 2026
162def0
Merge branch 'main' into fix/agent-env-precedence
mesutoezdil Jul 28, 2026
18e24cf
Merge branch 'main' into fix/agent-env-precedence
mesutoezdil Jul 29, 2026
2520a41
Merge branch 'main' into fix/agent-env-precedence
mesutoezdil Jul 29, 2026
688d93f
Merge branch 'main' into fix/agent-env-precedence
mesutoezdil Jul 29, 2026
668667b
chore: merge main into fix/agent-env-precedence
mesutoezdil Jul 30, 2026
5107f3b
chore: merge main into fix/agent-env-precedence
mesutoezdil Jul 31, 2026
139bbbf
chore: merge main into fix/agent-env-precedence
mesutoezdil Jul 31, 2026
7fa056e
Merge remote-tracking branch 'origin/main' into fix/agent-env-precedence
mesutoezdil Aug 4, 2026
f19893e
Merge remote-tracking branch 'origin/main' into fix/agent-env-precedence
mesutoezdil Aug 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ func (a *adkApiTranslator) BuildManifest(
if podRuntime.skillsInitConfigMap != nil {
outputs.Manifest = append(outputs.Manifest, podRuntime.skillsInitConfigMap)
// Folded into the same rollout-trigger hash as the rest of the pod
// config the PodSpec only names the ConfigMap, so Kubernetes
// config, since the PodSpec only names the ConfigMap, so Kubernetes
// wouldn't otherwise restart the pod when its rendered config changes.
skillsInitCfg = []byte(podRuntime.skillsInitConfigMap.Data[skillsinit.ConfigMapKey])
}
Expand Down Expand Up @@ -342,8 +342,7 @@ func buildPodRuntime(
})
}

envVars := append([]corev1.EnvVar{}, manifestCtx.deployment.Env...)
envVars = append(envVars, sharedEnv...)
envVars := mergeEnv(manifestCtx.deployment.Env, sharedEnv)

return &podRuntimeInputs{
initContainers: initContainers,
Expand All @@ -356,6 +355,23 @@ func buildPodRuntime(
}, nil
}

// mergeEnv appends shared entries whose name is not already set in userEnv,
// so a user-supplied env var always wins over a controller-injected one with
// the same name instead of being silently overwritten by append order.
func mergeEnv(userEnv, sharedEnv []corev1.EnvVar) []corev1.EnvVar {
set := make(map[string]bool, len(userEnv))
for _, e := range userEnv {
set[e.Name] = true
}
merged := append([]corev1.EnvVar{}, userEnv...)
for _, e := range sharedEnv {
if !set[e.Name] {
merged = append(merged, e)
}
}
return merged
}

func needsSRTSettings(agent v1alpha2.AgentObject, sandboxCfg *v1alpha2.SandboxConfig) bool {
spec := agent.GetAgentSpec()
if spec.Type == v1alpha2.AgentType_BYO {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,33 @@ import (
"testing"

"github.com/kagent-dev/kagent/go/api/v1alpha2"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func TestMergeEnv_UserValueWins(t *testing.T) {
userEnv := []corev1.EnvVar{{Name: "OTEL_SERVICE_NAME", Value: "my-agent"}}
sharedEnv := []corev1.EnvVar{
{Name: "OTEL_SERVICE_NAME", Value: "controller-default"},
{Name: "KAGENT_NAME", Value: "agent-1"},
}

got := mergeEnv(userEnv, sharedEnv)

want := map[string]string{
"OTEL_SERVICE_NAME": "my-agent",
"KAGENT_NAME": "agent-1",
}
if len(got) != len(want) {
t.Fatalf("mergeEnv() = %v, want %d entries", got, len(want))
}
for _, e := range got {
if e.Value != want[e.Name] {
t.Errorf("mergeEnv() entry %s = %q, want %q", e.Name, e.Value, want[e.Name])
}
}
}

func TestBuildSRTSettingsJSON_DefaultDenyConfig(t *testing.T) {
got, err := buildSRTSettingsJSON(nil)
if err != nil {
Expand Down
Loading