Skip to content

PodTemplateSpec Environment Variables Ignored #2605

@therealnb

Description

@therealnb

Type: Regression
Introduced: November 10, 2025

Description

Environment variables defined in spec.podTemplateSpec.spec.containers[0].env are not transferred to the runconfig.json file or the resulting pods.

Root Cause

File: cmd/thv-operator/controllers/mcpserver_runconfig.go:86

func (r *MCPServerReconciler) createRunConfigFromMCPServer(m *mcpv1alpha1.MCPServer) (*runner.RunConfig, error) {
    // ...
    envVars := convertEnvVarsFromMCPServer(m.Spec.Env)  // Only reads top-level Env!
    // PodTemplateSpec.spec.containers[0].env is never read
    // ...
}

The function only reads m.Spec.Env (top-level field) and completely ignores environment variables nested in spec.podTemplateSpec.

Steps to Reproduce

  1. Create an MCPServer with environment variables in podTemplateSpec:
apiVersion: toolhive.stacklok.dev/v1alpha1
kind: MCPServer
metadata:
  name: test-server
spec:
  image: my-image:latest
  podTemplateSpec:
    spec:
      containers:
        - name: mcp
          env:
            - name: MY_CUSTOM_VAR
              value: "test-value"
  1. Check the runconfig ConfigMap:
kubectl get configmap test-server-runconfig -o jsonpath='{.data.runconfig\.json}' | jq '.env_vars'
  1. Check the actual pod environment:
kubectl get pod test-server-0 -o jsonpath='{.spec.containers[0].env}' | jq

Expected Behavior

Environment variables from spec.podTemplateSpec.spec.containers[0].env should be:

  1. Included in the runconfig.json file
  2. Present in the deployed container

Actual Behavior

Environment variables from podTemplateSpec are silently ignored. Only spec.env (top-level) variables are transferred.

Impact

  • Breaks existing deployments: Configurations that worked before Nov 10, 2025 no longer work
  • Silent failure: No warning or error is generated; variables are simply missing
  • Workaround exists: Move env vars to top-level spec.env (but this breaks existing configurations)

Timeline

  • Before Nov 10, 2025: ✅ Working - Operator converted podTemplateSpec to CLI flags
  • After Nov 10, 2025: ❌ Broken - Operator only reads top-level fields for runconfig.json

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingkubernetesItems related to Kubernetesoperator

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions