Skip to main content

Spec reference

Every field except spec.template is an optional default that a referencing engine inherits when it does not set the matching field itself. Resolution is always the engine value first, then the class value, then the operator default. The engine owns the value when it sets it. The class supplies it otherwise. The operator default sits beneath both.
FieldRequiredDefaultDescription
spec.templateYesPodTemplateSpec merged under each engine’s spec.template (engine wins). See Firebolt Operator-owned fields and FireboltEngineClass design.
spec.uiSidecarNofalseDefault UI sidecar toggle. When it resolves to true, the Firebolt Operator injects a built-in, operator-owned nginx container named engine-web (serving the Engine Web UI, listening on port 9100) into each engine pod. The engine-web container name is reserved, so a user-supplied container or init container with that name is rejected. The engine spec.uiSidecar wins when set.
spec.storageNo{} (emptyDir)Default per-pod data volume. An engine that names any backend (persistentVolumeClaim, emptyDir, or hostPath) on its own spec.storage owns it. Otherwise the class backend applies. Backend selection is whole-struct, so the three backends stay mutually exclusive. See the FireboltEngine CRD reference.
spec.customEngineConfigNoFree-form config.yaml fragment deep-merged beneath each engine’s spec.customEngineConfig. The merge order is the operator base, then the class, then the engine, so an engine key wins over the same key on the class. The Firebolt Operator strips its owned paths (schema_version, instance.*, engine.id, engine.nodes, and engine.termination_grace_period) from the class layer too, so the class cannot override identity, routing, or topology.
spec.rolloutNogracefulDefault rollout strategy, graceful or recreate. The engine spec.rollout wins when set.
spec.drainCheckEnabledNotrueDefault drain-check toggle. The engine spec.drainCheckEnabled wins when set.
spec.drainCheckIntervalNoDefault drain-poll interval. The engine spec.drainCheckInterval wins when set.
spec.autoStopNoDefault auto-stop policy. This is whole-struct. An engine that sets spec.autoStop owns the entire policy with no field-merge, and the class policy applies only when the engine omits it. See the FireboltEngine CRD reference.
A class-level change to spec.uiSidecar, spec.storage, or spec.customEngineConfig reshapes the rendered engine pod, so it rolls a new blue-green generation on every bound engine. Changes to spec.rollout, spec.drainCheckEnabled, spec.drainCheckInterval, and spec.autoStop are read live and do not by themselves trigger a rollout.

Firebolt Operator-owned fields on class templates

The validating webhook rejects user input on paths the Firebolt Operator owns end-to-end. Everything else under spec.template is allowed. The same allowlist applies to FireboltEngine.spec.template.

Pod template metadata

PathUser-allowedNotes
spec.template.metadata.labelsYesKeys under firebolt.io/ are rejected. Engine labels win on conflict.
spec.template.metadata.annotationsYesKeys under firebolt.io/ are rejected. Engine annotations win on conflict.
spec.template.metadata.{name,namespace,ownerReferences,...}NoAssigned by the StatefulSet controller.

Pod-level fields under spec.template.spec

PathUser-allowedNotes
serviceAccountNameYesEngine spec.template.spec.serviceAccountName wins.
nodeSelectorYesMap-merge; engine keys win.
tolerationsYesClass + engine, concatenated.
affinityYesEngine wins if non-nil; no field-merge.
topologySpreadConstraintsYesClass + engine, concatenated.
priorityClassName, runtimeClassName, schedulerNameYesEngine wins when set.
dnsPolicy, dnsConfigYesEngine wins when set.
preemptionPolicyYesEngine wins when set.
readinessGates, resourceClaims, hostAliasesYesClass + engine, concatenated.
os, overheadYesEngine wins when set.
imagePullSecretsYesClass + engine, concatenated.
volumesYesOperator volumes first; class and engine volumes appended (collisions with operator names dropped).
securityContextYesEngine wins if non-nil; operator fsGroup defaults always stamped.
initContainers[*]YesClass + engine, concatenated. Init container named engine is rejected.
containers[name=="engine"]LimitedSee engine container table below.
containers[name!="engine"]YesSidecars: user-owned, except the reserved engine-web name (the operator’s UI sidecar), which is rejected.
terminationGracePeriodSecondsNoHardcoded to 60s (same on engine template).
subdomain, hostnameNoHeadless-DNS contract.
restartPolicy, activeDeadlineSecondsNoStatefulSet semantics.
hostNetwork, hostPID, hostIPC, shareProcessNamespace, hostUsersNoIsolation contract.

Engine container (containers[name=="engine"])

FieldUser-allowedNotes
image, imagePullPolicyYesEngine container image wins when set on the engine.
resourcesYesEngine wins wholesale if it sets requests/limits/claims; else class. Bounds checked on the merged value.
envYesOperator-injected vars first; class then engine appended (reserved keys rejected).
envFromYesClass + engine, concatenated.
volumeMountsYesOperator mounts first; class then engine (collisions dropped).
securityContextYesEngine wins if non-nil.
lifecycleYesEngine wins if non-nil.
workingDirYesEngine wins when set.
terminationMessagePath, terminationMessagePolicyYesEngine wins when set.
volumeDevicesYesClass + engine, concatenated.
resizePolicyYesClass + engine, concatenated.
name, command, args, portsNoHardcoded by the Firebolt Operator.
readinessProbe, livenessProbe, startupProbeNo/health/ready contract.
restartPolicyNoDropped by the kubelet on non-init containers.
stdin, stdinOnce, ttyNoNon-interactive workload.
A second container named engine is rejected (duplicate of the operator-rendered container).

Status properties

FieldDescription
status.observedGenerationmetadata.generation last reconciled.
status.boundEnginesCount of FireboltEngine resources in this namespace referencing the class. The deletion gate uses a live list, not this cache.
status.conditions[type=Ready]True when spec.template has no operator-owned fields. False/Reason=OperatorOwnedFieldSet is defense-in-depth for classes admitted under an older operator.
Short name: firengc.