apache/druid · error · IllegalArgumentException
Task [%s] requested pod template [%s] via context key, but n
Error message
Task [%s] requested pod template [%s] via context key, but no such template is configured.
What it means
Thrown by DynamicConfigPodTemplateSelector.getPodTemplateForTask when a task sets the pod-template context key (DruidK8sConstants.TASK_CONTEXT_POD_TEMPLATE_SELECTION_KEY) to a template name that is not registered in the selector's podTemplates map, and task-side pod template selection is enabled via effectiveConfig.isAllowTaskPodTemplateSelection(). Druid rejects the task launch rather than silently falling back to the base template.
Source
Thrown at extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/taskadapter/DynamicConfigPodTemplateSelector.java:133
throw new IAE(e, "Failed to load pod template file for [%s] at [%s]", property, podTemplateFile);
}
}
@SuppressWarnings("ResultOfMethodCallIgnored")
private void validateTemplateSupplier(Supplier<PodTemplate> templateSupplier) throws IAE
{
templateSupplier.get();
}
@Override
public Optional<PodTemplateWithName> getPodTemplateForTask(Task task)
{
String requested = task.getContextValue(DruidK8sConstants.TASK_CONTEXT_POD_TEMPLATE_SELECTION_KEY);
if (requested != null && effectiveConfig.isAllowTaskPodTemplateSelection()) {
Supplier<PodTemplate> supplier = podTemplates.get(requested);
if (supplier == null) {
throw new IAE(
"Task [%s] requested pod template [%s] via context key, but no such template is configured.",
task.getId(), requested
);
}
log.debug("Pod template [%s] selected for task [%s] via context override.", requested, task.getId());
return Optional.of(new PodTemplateWithName(requested, supplier.get()));
} else if (requested != null) {
log.warn(
"Task [%s] set context key [%s] but pod template override is disabled; ignoring.",
task.getId(),
DruidK8sConstants.TASK_CONTEXT_POD_TEMPLATE_SELECTION_KEY
);
}
return Optional.of(effectiveConfig.getPodTemplateSelectStrategy().getPodTemplateForTask(task, podTemplates));
}
@OverrideView on GitHub (pinned to 9b90983fd2)
Solutions
- Define the missing template on the Overlord: druid.indexer.runner.k8s.podTemplate.<requested-name>=/path/to/template.yaml
- Correct the context value in the task/ingestion spec to match a configured template name exactly
- Verify template names are deployed to all Overlords the task may be routed to
- If context-driven selection is undesired, disable druid.indexer.runner.k8s.allowTaskPodTemplateSelection
Example fix
// before (task context)
"context": { "k8sPodTemplateSelection": "batchHeavy" } // template not configured
// after (Overlord config)
druid.indexer.runner.k8s.podTemplate.batchHeavy=/etc/druid/k8s/batch-heavy.yaml
# task context stays as-is, template now exists Defensive patterns
Strategy: validation
Validate before calling
// Before submitting a task with a pod template context override
String requested = task.getContextValue("k8sPodTemplateSelection");
if (requested != null) {
String prop = "druid.indexer.runner.k8s.podTemplate." + requested;
if (overlordProps.getProperty(prop) == null) {
throw new IllegalArgumentException(
"Pod template '" + requested + "' not configured on Overlord (missing " + prop + ")");
}
} Try / catch
try {
PodTemplate t = selector.getPodTemplateForTask(task, effectiveConfig);
} catch (IllegalArgumentException e) {
if (e.getMessage().contains("no such template is configured")) {
// log and fall back to default selection instead of failing the task
return defaultPodTemplate;
}
throw e;
} Prevention
- Keep a registry of allowed template names shared between spec authors and Overlord config
- When renaming/removing templates, grep ingestion specs for the old context values
- Only enable allowTaskPodTemplateSelection after all referenced templates are deployed to every Overlord
When it happens
Trigger: A task's context contains e.g. {"k8sPodTemplateSelection": "myTemplate"} (context key value) while no druid.indexer.runner.k8s.podTemplate.myTemplate property is configured on the Overlord, and druid.indexer.runner.k8s.allowTaskPodTemplateSelection=true.
Common situations: Ingestion specs copied from examples referencing template names defined in another cluster; template renamed/removed on the Overlord while old task specs still reference it; allowTaskPodTemplateSelection enabled but the operator forgot to define every template tasks reference; typo in the context value.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Pod template task adapter requires a base pod template to be
- Pod template file not specified for [%s]
- Invalid pod adapter [%s], only pod adapter [%s] can be speci
- Pod adapter [%s] requires the local Overlord pod namespace f
- K8s pod for the task[%s] appeared and disappeared. It can ha
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/4943446354b6f63f.
Report an issue: GitHub.