Skip to main content
Enterprise

Status & Conditions

The operator maintains a detailed status on each NetBoxEnterprise resource. Use this to monitor cluster health, troubleshoot issues, and integrate with monitoring systems.

Viewing Status

# Summary view
kubectl -n netbox get netboxenterprises -o wide

# Detailed status
kubectl -n netbox describe netboxenterprise netbox

# JSON output for scripting
kubectl -n netbox get netboxenterprise netbox -o jsonpath='{.status}'

Top-Level Status Fields

FieldTypeDescription
readyboolOverall cluster readiness - true only when all components are ready
messagestringHuman-readable summary of the current state
versionstringOperator version managing this cluster
observedGenerationint64The spec generation last processed by the operator
convergedGenerationint64Highest spec generation that has reached all-components-ready. When it equals metadata.generation, the current config rollout has converged and the progress sentinel reports Ready.
lastReconcileTimestringTimestamp of the last successful reconciliation (RFC 3339)
migrationHashstringSHA-256 of migration-relevant inputs (image tag, wheelhouse, and similar). Detects when a migration must re-run.
migrationPhase1HashstringSHA-256 of Phase 1 migration inputs
secretChecksumstringAggregate hash of external secret resourceVersion values. Drives the debounced restart logic.
secretChecksumObservedAtstringRFC 3339 timestamp recording when secretChecksum was last observed

Example:

status:
ready: true
message: "All components ready"
version: "2.2.0"
observedGeneration: 3
convergedGeneration: 3
lastReconcileTime: "2026-06-08T10:30:00Z"

Conditions

Standard Kubernetes conditions on the NetBoxEnterprise resource:

ConditionStatusReasonDescription
ReadyTrueAllComponentsReadyAll components are healthy and serving traffic
ReadyFalseReconcilingA reconcile is in progress; readiness not yet confirmed
ReadyFalseComponentsNotReadyOne or more components still initializing
ReadyFalseReconcileFailedReconciliation encountered an error
ProgressingTrueApplyingResourcesOperator is actively applying resources
ProgressingTrueWaitingForComponentsResources applied, waiting for pods to become ready
ProgressingFalseReconcileCompleteReconciliation finished successfully
DegradedTrueReconcileErrorReconciliation failed - check operator logs
RoutingHealthTrueGatewayActiveNorth/south traffic is served by the Gateway API
RoutingHealthUnknownGatewayProgrammingThe Gateway was created; waiting for its controller to report Programmed=True (not yet serving)
RoutingHealthFalseGatewayNotProgrammedThe Gateway controller reports Programmed=False; its listeners are not up
RoutingHealthTrueIngressActiveNorth/south traffic is served by operator-emitted Ingress
RoutingHealthTrueIngressFallbackspec.gateway is enabled but the Gateway API is unavailable (CRDs absent or RBAC missing); serving via Ingress
RoutingHealthFalseRoutingModeMismatchThe resolved routing path is disabled (e.g. mode: gateway with spec.gateway.enabled: false); nothing is emitted
PluginsReadyTruePluginsImportableAll enabled plugins import successfully
PluginsReadyFalsePluginUnimportableAn enabled plugin failed to import; the message names it
PluginsReadyFalseSettingsLoadFailedNetBox settings failed to load before any single plugin could be blamed (an enabled plugin broke settings import, or an invalid Python config override)
LeaderElectedTrueLeaderElectionAcquiredThe operator pod named in message holds the leader lease. Present only on HA (multi-replica) operator deployments; only the leader writes status.
HANotEnabledTrueHANotEnabledAdvisory: the cluster has 3 or more nodes but operator high availability is not enabled. Present only in that state. Run netbox-enterprise enable-ha to complete the setup.
HAWithoutExternalDataTrueHAWithoutExternalDataAdvisory: operator HA is enabled but the data tier is not fully externalized. The message lists which of external PostgreSQL, Redis, or object storage must be externalized for the cluster to survive node loss.

Each condition includes:

FieldTypeDescription
typestringCondition type
statusstringTrue, False, or Unknown
reasonstringMachine-readable reason code
messagestringHuman-readable detail
lastTransitionTimestringWhen the condition last changed
observedGenerationint64Spec generation when set

Inspecting Conditions

# Get conditions as a table
kubectl -n netbox get netboxenterprise netbox -o jsonpath='{range .status.conditions[*]}{.type}{"\t"}{.status}{"\t"}{.reason}{"\t"}{.message}{"\n"}{end}'

Component Status

Each component reports its own health under status.components:

ComponentKeyDescription
NetBox appcomponents.netboxWeb application deployment
NetBox workercomponents.workerBackground task worker
PostgreSQLcomponents.postgresqlDatabase (internal or external)
Rediscomponents.redisCache/queue
Diodecomponents.diodeData ingestion pipeline (if enabled)
Copilotcomponents.copilotCopilot backend (present when Copilot is enabled)

Each component has:

FieldTypeDescription
readyboolWhether the component is ready
messagestringHuman-readable status (e.g., "2/2 replicas ready")
conditions[]ConditionComponent-specific conditions

Component conditions carry their own reason codes:

ReasonCondition / StatusDescription
ComponentReadyReady / TrueThe component is healthy and serving
ProgressingProgressing / TrueThe component is starting or rolling out
NotReadyReady / FalseThe component is not yet ready
UnknownReady / FalseComponent health could not be determined (for example, PostgreSQL or Redis status was unavailable)

A component that fails also sets Degraded / True with a component-specific reason and the failure detail in message.

Inspecting Component Health

# All component statuses (components is an object keyed by component name)
kubectl -n netbox get netboxenterprise netbox \
-o jsonpath='{.status.components}' | jq
# Specific component
kubectl -n netbox get netboxenterprise netbox \
-o jsonpath='{.status.components.postgresql}'

License Information

License details are surfaced in status.license:

FieldTypeDescription
tierenumCommunity, Starter, Professional, Premium
editionenumCommunity, Enterprise
licenseIdstringUnique license identifier
licenseTypestringLicense type (dev, trial, prod, paid)
customerNamestringCustomer name
customerEmailstringCustomer email
channelNamestringChannel (stable, beta, dev)
isAssuranceEntitledboolWhether NetBox Assurance features are available
isCopilotEntitledboolWhether Private Copilot is entitled by the license (defaults false)
platformOrgIdstringPlatform organization ID from the license
entitlementsmapRaw entitlements map keyed by entitlement name. Each entry has a title (string) and a value (any JSON type). Used for additional checks.
expiresAtstringExpiration date (ISO 8601)
kubectl -n netbox get netboxenterprise netbox -o jsonpath='{.status.license}'

Generation Tracking

The operator tracks observedGeneration to detect configuration drift:

  • metadata.generation: Incremented by Kubernetes when spec changes
  • status.observedGeneration: Set by the operator after processing a generation

If observedGeneration < metadata.generation, the operator has not yet processed the latest spec change.

# Check for pending changes
kubectl -n netbox get netboxenterprise netbox \
-o jsonpath='gen={.metadata.generation} observed={.status.observedGeneration}'

Reconciliation Events

The operator publishes Kubernetes events for each reconciliation:

# All operator events
kubectl -n netbox get events --field-selector source=nbe-operator

# Watch events in real time
kubectl -n netbox get events -w --field-selector source=nbe-operator

Event types include:

  • Normal: Resource applied successfully, reconciliation complete
  • Warning: Readiness check failed, reconciliation error

See Also

Related Topics