quarkusio/quarkus · error · IllegalArgumentException

'%s' env var can't simultaneously have a '%s' value & take i

Error message

'%s' env var can't simultaneously have a '%s' value & take is value from the '%s' field

What it means

KubernetesEnvBuildItem.create() validates that an env var cannot have both a literal value and take its value from a container field (e.g. metadata.name, spec.nodeName via fieldRef). The generated env entry supports either 'value' or 'valueFrom.fieldRef', not both, so when both value and field are non-null this IllegalArgumentException is thrown.

Source

Thrown at extensions/kubernetes/spi/src/main/java/io/quarkus/kubernetes/spi/KubernetesEnvBuildItem.java:94

    public static KubernetesEnvBuildItem createFromResourceKey(String varName, String key, String secret,
            String configmap, String target) {
        return create(varName, key, secret, configmap, null, target, null);
    }

    public static KubernetesEnvBuildItem create(String name, String value, String secret, String configmap, String field,
            String target, String prefix) throws IllegalArgumentException {
        final boolean secretPresent = secret != null;
        final boolean configmapPresent = configmap != null;
        final boolean valuePresent = value != null;
        final boolean fieldPresent = field != null;
        if (valuePresent) {
            if (secretPresent && configmapPresent) {
                throw new IllegalArgumentException(String.format(
                        "'%s' env var can't simultaneously take its value from '%s' configmap & '%s' secret",
                        name, configmap, secret));
            }
            if (fieldPresent) {
                throw new IllegalArgumentException(String.format(
                        "'%s' env var can't simultaneously have a '%s' value & take is value from the '%s' field",
                        name, value, field));
            }
        }
        if (secretPresent && configmapPresent) {
            log.warn(String.format("The '%s' name was used to try to import both from '%s' secret & '%s' configmap. " +
                    "Only values from '%s' secret will be imported.\nIf you want to import from both, use a " +
                    "different property name for either.",
                    name, secret,
                    configmap,
                    secret));
        }
        final EnvType type;
        if (secretPresent) {
            if (valuePresent) {
                type = EnvType.keyFromSecret;
            } else {
                name = secret;

View on GitHub (pinned to e1c734241f)

Solutions

  1. Remove the literal value and keep only the field reference, or vice versa
  2. If you need the pod field, set the env var entry with only field=... (no value)
  3. If you need a literal, drop the field parameter
  4. Validate your quarkus.kubernetes.env-vars entries to ensure each has exactly one of value or field

Example fix

// before
quarkus.kubernetes.env-vars.node.name=metadata.name,field=metadata.name
// after
quarkus.kubernetes.env-vars.node.name=field=metadata.name
Defensive patterns

Strategy: validation

Validate before calling

if (value != null && field != null) throw new IllegalStateException("Env var '" + name + "' cannot have both literal value and field reference");

Type guard

static boolean hasSingleValueSource(String value, String field) {
    return (value == null) != (field == null);
}

Try / catch

try { KubernetesEnvBuildItem.create(name, secret, configmap, value, field, explicit); } catch (IllegalArgumentException e) { /* choose value XOR field */ }

Prevention

When it happens

Trigger: Calling KubernetesEnvBuildItem.create(name, secret, configmap, value, field, ...) with both value and field non-null, e.g. a config that sets both a literal value and a field reference for the same env var.

Common situations: Copy-pasted env var config where a user adds field=metadata.name but forgets to remove the literal value; programmatic build item creation with leftover parameters; template-generated config with both keys populated.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/dddfd68e17f9dbb1. Report an issue: GitHub.