Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Switch State Diagram

This document describes the Finite State Machine (FSM) for Switches in Carbide: lifecycle from creation through configuration, validation, ready, optional reprovisioning, and deletion.

High-Level Overview

The main flow shows the primary states and transitions:

States

StateDescription
CreatedSwitch record exists in Carbide; awaiting first controller tick.
InitializingController waits for expected switch NVOS MAC associations. Sub-state: WaitForOsMachineInterface.
ConfiguringSwitch is being configured (rotate OS password). Sub-state: RotateOsPassword.
ValidatingSwitch is being validated. Sub-state: ValidationComplete.
BomValidatingBOM (Bill of Materials) validation. Sub-state: BomValidationComplete.
ReadySwitch is ready for use. From here it can be deleted, or reprovisioning can be requested.
ReProvisioningReprovisioning (e.g. firmware update) in progress. Sub-states: Start, WaitFirmwareUpdateCompletion. Completion is driven by firmware_upgrade_status (Completed → Ready, Failed → Error).
ErrorSwitch is in error (e.g. firmware upgrade failed or NVOS MAC conflict). Can transition to Deleting if marked for deletion; otherwise waits for manual intervention or ReProvisioning to take machine out of Error
DeletingSwitch is being removed; ends in final delete (terminal).

Transitions (by trigger)

FromToTrigger / Condition
(create)CreatedSwitch created
CreatedInitializing (WaitForOsMachineInterface)Controller processes switch
Initializing (WaitForOsMachineInterface)Configuring (RotateOsPassword)All NVOS interfaces associated for expected switch
Initializing (WaitForOsMachineInterface)ErrorExpected switch has empty nvos_mac_addresses or MAC owned by another switch
Configuring (RotateOsPassword)Validating (ValidationComplete)OS password rotated
Validating (ValidationComplete)BomValidating (BomValidationComplete)Validation complete
BomValidating (BomValidationComplete)ReadyBOM validation complete
ReadyDeletingdeleted set (marked for deletion)
ReadyReProvisioning (Start)switch_reprovisioning_requested is set
ReProvisioning (Start)ReProvisioning (WaitFirmwareUpdateCompletion)Reprovision triggered
ReProvisioning (WaitFirmwareUpdateCompletion)Readyfirmware_upgrade_status == Completed
ReProvisioning (WaitFirmwareUpdateCompletion)Errorfirmware_upgrade_status == Failed { cause }
ErrorDeletingdeleted set (marked for deletion)
Deleting(end)Final delete committed

Implementation

  • State type: SwitchControllerState in crates/api-model/src/switch/mod.rs.
  • Handlers: crates/api/src/state_controller/switch/ — one module per top-level state (created, initializing, configuring, validating, bom_validating, ready, reprovisioning, error_state, deleting).
  • Orchestration: SwitchStateHandler in handler.rs delegates to the handler for the current controller_state.