{"record":{"id":"604e523fa95e6a7c","repo":"quarkusio/quarkus","slug":"s-env-var-can-t-simultaneously-take-its-value-f","errorCode":null,"errorMessage":"'%s' env var can't simultaneously take its value from '%s' configmap & '%s' secret","messagePattern":"'(.+?)' env var can't simultaneously take its value from '(.+?)' configmap & '(.+?)' secret","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/kubernetes/spi/src/main/java/io/quarkus/kubernetes/spi/KubernetesEnvBuildItem.java","lineNumber":89,"sourceCode":"    public static KubernetesEnvBuildItem createFromSecretKey(String varName, String key, String secret, String target,\n            String prefix) {\n        return create(varName, key, secret, null, null, target, prefix);\n    }\n\n    public static KubernetesEnvBuildItem createFromResourceKey(String varName, String key, String secret,\n            String configmap, String target) {\n        return create(varName, key, secret, configmap, null, target, null);\n    }\n\n    public static KubernetesEnvBuildItem create(String name, String value, String secret, String configmap, String field,\n            String target, String prefix) throws IllegalArgumentException {\n        final boolean secretPresent = secret != null;\n        final boolean configmapPresent = configmap != null;\n        final boolean valuePresent = value != null;\n        final boolean fieldPresent = field != null;\n        if (valuePresent) {\n            if (secretPresent && configmapPresent) {\n                throw new IllegalArgumentException(String.format(\n                        \"'%s' env var can't simultaneously take its value from '%s' configmap & '%s' secret\",\n                        name, configmap, secret));\n            }\n            if (fieldPresent) {\n                throw new IllegalArgumentException(String.format(\n                        \"'%s' env var can't simultaneously have a '%s' value & take is value from the '%s' field\",\n                        name, value, field));\n            }\n        }\n        if (secretPresent && configmapPresent) {\n            log.warn(String.format(\"The '%s' name was used to try to import both from '%s' secret & '%s' configmap. \" +\n                    \"Only values from '%s' secret will be imported.\\nIf you want to import from both, use a \" +\n                    \"different property name for either.\",\n                    name, secret,\n                    configmap,\n                    secret));\n        }\n        final EnvType type;","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/kubernetes/spi/src/main/java/io/quarkus/kubernetes/spi/KubernetesEnvBuildItem.java#L71-L107","documentation":"KubernetesEnvBuildItem.create() is the single factory validating env var sources for Kubernetes manifests. Quarkus forbids an env var whose value simultaneously comes from a configmap and a secret, since the generated env entry can have only one valueFrom source. When both configmap and secret are non-null (and a name is given), it throws this IllegalArgumentException.","triggerScenarios":"Calling KubernetesEnvBuildItem.create(name, secret, configmap, ...) with both secret and configmap non-null — e.g. via the old createFromConfigMap/createFromSecret shortcuts combined or deprecated factory paths passing both.","commonSituations":"application.properties style config migrating from quarkus.kubernetes.env-vars where users set both configmap and secret fields for the same var; programmatic build item creation passing both parameters; misread docs where configmap and secret fields look combinable.","solutions":["Provide only one source: either the configmap or the secret, not both","Split into two env entries or use secretRef/configMapKeyRef selection on a single source","If you need values from both, create two separate KubernetesEnvBuildItem entries with different names","Check application.properties: remove either the .configmap or .secret qualifier for that env var"],"exampleFix":"// before\nquarkus.kubernetes.env-vars.my.env=configmap:my-cm,secret:my-secret\n// after\nquarkus.kubernetes.env-vars.my.env=secret:my-secret","handlingStrategy":"validation","validationCode":"if (configMap != null && secret != null) throw new IllegalStateException(\"Env var '\" + name + \"' must use either configmap or secret, not both\");","typeGuard":"static boolean hasSingleSource(String configmap, String secret) {\n    return (configmap == null) != (secret == null);\n}","tryCatchPattern":"try { KubernetesEnvBuildItem.create(name, secret, configmap, value, field, explicit); } catch (IllegalArgumentException e) { /* fix config: single source only */ }","preventionTips":["Set only one of configmap/secret per env var in quarkus.kubernetes.env-vars","Review application.properties after migrations for leftover dual sources","Prefer valueFrom semantics documented in the Kubernetes config guide"],"tags":["kubernetes","env-var","config"],"backgroundTag":"env-var-source-conflict","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}