Skip to main content

Spec reference

FieldRequiredDefaultDescription
spec.instanceRefYes-Name of the FireboltInstance in the same namespace.
spec.engineClassRefNo-Name of a FireboltEngineClass in this engine’s namespace. The class supplies defaults this engine inherits when it leaves the matching field unset: spec.template (merged under this engine’s template, engine wins), spec.uiSidecar, spec.storage, spec.customEngineConfig, spec.rollout, spec.drainCheckEnabled, spec.drainCheckInterval, and spec.autoStop. Engine image comes from the class template. There is no per-engine image field on this CR.
spec.replicasYes-Number of engine nodes. 0 stops the engine; the CR is preserved.
spec.templateNo-PodTemplateSpec for per-engine overrides. Engine container: spec.template.spec.containers[name=="engine"]. See Firebolt Operator-owned fields and Pod template merge.
spec.uiSidecarNofalseWhen 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. Inherited from the class when unset. Changes force a new generation.
spec.rolloutNogracefulgraceful waits for drain. recreate deletes immediately. Inherited from the class when unset.
spec.drainCheckEnabledNotruefalse skips the Firebolt Operator drain check (engine shutdown_wait_unfinished still runs on SIGTERM). Inherited from the class when unset.
spec.drainCheckIntervalNo5sPoll interval for old-pod drain status. Inherited from the class when unset.
spec.storageNoemptyDirPer-pod data volume (distinct from customEngineConfig.storage). One of persistentVolumeClaim, emptyDir, or hostPath. Unset defaults to emptyDir. Inherited from the class when this engine names no backend. Changes force a new generation.
spec.customEngineConfigNo-Deep-merged into engine config.yaml beneath the class config (engine keys win). Required for start, from this field or the class. Operator-owned paths are stripped. Changes force a new generation.
spec.autoStopNodisabledWhen enabled, auto-stop owns spec.replicas. Inherited whole-struct from the class when unset.
spec.metadataEndpointOverrideNo-Override instance-derived metadata endpoint.

Firebolt Operator-owned fields on engine templates

The validating webhook rejects user input on paths the Firebolt Operator owns on spec.template (and the same rules apply to FireboltEngineClass.spec.template when referenced). Rejected on the pod template:
  • StatefulSet-bound fields: terminationGracePeriodSeconds, subdomain, hostname, restartPolicy, activeDeadlineSeconds.
  • Footgun fields: hostNetwork, hostPID, hostIPC, shareProcessNamespace, hostUsers.
  • Pod-template metadata except labels and annotations.
  • Labels or annotations under the firebolt.io/ prefix.
Rejected on containers[name=="engine"]:
  • name, command, args, ports, probes, reserved FIREBOLT_* env keys.
  • restartPolicy, stdin, stdinOnce, tty.
Allowed on the engine container (engine template wins over class): image, imagePullPolicy, resources, env, envFrom, volumeMounts, securityContext, lifecycle, workingDir, terminationMessagePath, terminationMessagePolicy, volumeDevices, resizePolicy. Sidecar containers (any name other than engine) and additional initContainers pass through verbatim. See FireboltEngineClass CRD reference for the full class-side allowlist.

Engine phases

PhaseMeaning
stableTerminal. All resources match spec, replicas > 0, engine is serving traffic.
creatingNew generation being created. Waiting for pods to be ready.
switchingTraffic being switched to the new generation.
drainingWaiting for old generation pods to finish serving queries.
cleaningDeleting old generation resources.
stoppedTerminal. spec.replicas == 0. CR and active-generation resources preserved.

Conditions

ConditionMeaning
InstanceReady=TrueReferenced FireboltInstance is ready and providing metadata.
InstanceReady=FalseInstance is missing, not ready, or lacks metadata endpoint / instance ID.
Ready=True, Reason=EngineReadyEngine is serving traffic with all replicas ready.
Ready=False, Reason=InitializingFirst reconcile of a freshly created CR. Transient.
Ready=False, Reason=RollingBlue-green transition in progress.
Ready=False, Reason=PodsNotReadyPhase is stable but some pods are not yet ready.
Ready=False, Reason=Stoppedspec.replicas == 0. Intentionally parked.
Ready=False, Reason=InstanceNotReadyReferenced FireboltInstance is not ready.
Ready=False, Reason=DrainCheckFailingDrain probe cannot reach or parse metrics on a draining pod.
Ready=False, Reason=ExternalFinalizerEngine deleting; non-operator finalizers remain on owned children.

Status properties

FieldDescription
status.phaseEngine lifecycle phase. See Engine phases.
status.currentGenerationActive blue-green generation index.
status.drainingGenerationGeneration being drained, if any.
status.conditionsInstanceReady, Ready. See Conditions.
Short name: fireng.