Switch State Diagram

View as Markdown

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

High-Level Overview

The main flow shows the primary states and transitions:

1@startuml
2skinparam state {
3 BackgroundColor White
4}
5
6state "Created" as Created
7state "Initializing\n(WaitForOsMachineInterface)" as Initializing
8state "Configuring\n(RotateOsPassword)" as Configuring
9state "Validating" as Validating
10state "BomValidating" as BomValidating
11state "Ready" as Ready
12state "ReProvisioning\n(Start → WaitFirmware)" as ReProvisioning
13state "Error" as Error
14state "Deleting" as Deleting
15
16[*] --> Created : Switch created
17
18Created --> Initializing : controller processes switch
19Initializing --> Configuring : all NVOS interfaces associated
20Initializing --> Error : no NVOS MACs or MAC conflict
21Configuring --> Validating : rotate password done
22Validating --> BomValidating : validation complete
23BomValidating --> Ready : BOM validation complete
24
25Ready --> Deleting : marked for deletion
26Ready --> ReProvisioning : reprovision requested
27
28ReProvisioning --> Ready : firmware upgrade Completed
29ReProvisioning --> Error : firmware upgrade Failed
30
31Error --> Deleting : marked for deletion or wait for manual intervention
32
33Deleting --> [*] : final delete
34@enduml

States

StateDescription
CreatedSwitch record exists in NICo; 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.