# bootc status - Process Flowchart ## Overview This document provides a visual representation of the `bootc status` process flow, showing the decision points, operations, and data structures involved in displaying system status information. ## Main Process Flow ``` ┌─────────────────────────────────────────────────────────────────┐ │ bootc status │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Validate Format Version │ │ │ │ • Check format version (0, 1 supported) │ │ • Error if unsupported version │ │ • Default to version 1 │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Check OSTree Boot Status │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ ostree_booted()? │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────────────────────────┐ │ │ │ No │ │ Yes │ │ │ │ │ │ │ │ │ │ ┌─────────────┐│ │ ┌─────────────────────────────────┐│ │ │ │ │ Return ││ │ │ Get System Status ││ │ │ │ │ Default ││ │ │ ││ │ │ │ │ Empty ││ │ │ • Get storage interface ││ │ │ │ │ Status ││ │ │ • Get OSTree repository ││ │ │ │ └─────────────┘│ │ │ • Get booted deployment ││ │ │ │ │ │ │ • Call get_status() ││ │ │ │ ┌─────────────┐│ │ └─────────────────────────────────┘│ │ │ │ │ Skip to ││ │ │ │ │ │ │ Output ││ │ │ │ │ │ └─────────────┘│ │ │ │ │ └─────────────────┘ └─────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Filter to Booted Deployment │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ --booted specified? │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────────────────────────┐ │ │ │ Yes │ │ No │ │ │ │ │ │ │ │ │ │ ┌─────────────┐│ │ ┌─────────────────────────────────┐│ │ │ │ │ Filter to ││ │ │ Keep All Deployments ││ │ │ │ │ Booted ││ │ │ ││ │ │ │ │ Slot Only ││ │ │ • Include all deployment info ││ │ │ │ │ ││ │ │ • Show staged, booted, rollback││ │ │ │ └─────────────┘│ │ │ ││ │ │ └─────────────────┘ └─────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Determine Output Format │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ Format specified? │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────────────────────────┐ │ │ │ Yes │ │ No │ │ │ │ │ │ │ │ │ │ ┌─────────────┐│ │ ┌─────────────────────────────────┐│ │ │ │ │ Use ││ │ │ Auto-detect Format ││ │ │ │ │ Specified ││ │ │ ││ │ │ │ │ Format ││ │ │ • Check --json flag ││ │ │ │ │ • JSON ││ │ │ • Check if terminal ││ │ │ │ │ • YAML ││ │ │ • Default to YAML ││ │ │ │ │ • Human ││ │ │ ││ │ │ │ └─────────────┘│ │ └─────────────────────────────────┘│ │ │ └─────────────────┘ └─────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Output in Requested Format │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ Format Type? │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ JSON │ │ YAML │ │ Human Readable│ │ │ │ │ │ │ │ │ │ │ │ ┌─────────────┐│ │ ┌─────────────┐│ │ ┌─────────────┐│ │ │ │ │ Serialize ││ │ │ Serialize ││ │ │ Format for ││ │ │ │ │ to JSON ││ │ │ to YAML ││ │ │ human ││ │ │ │ │ • Canonical ││ │ │ • Standard ││ │ │ reading ││ │ │ │ │ format ││ │ │ format ││ │ │ • Include ││ │ │ │ │ • Machine ││ │ │ • Machine ││ │ │ verbose ││ │ │ │ │ readable ││ │ │ readable ││ │ │ info if ││ │ │ │ └─────────────┘│ │ └─────────────┘│ │ │ requested ││ │ │ └─────────────────┘ └─────────────────┘ │ └─────────────┘│ │ │ └─────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Success │ │ │ │ • Status information displayed successfully │ │ • Format appropriate for use case │ │ • All deployment information included │ └─────────────────────────────────────────────────────────────────┘ ``` ## Core Status Gathering Flow ``` ┌─────────────────────────────────────────────────────────────────┐ │ Core Status Gathering │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Get Stateroot Name │ │ │ │ • Extract stateroot from booted deployment │ │ • Use for filtering related deployments │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Partition Deployments │ │ │ │ • Get all deployments from sysroot │ │ • Separate related deployments from others │ │ • Filter by stateroot name │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Find Staged Deployment │ │ │ │ • Search for deployment marked as staged │ │ • Remove from related deployments list │ │ • Store for later processing │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Filter Booted Deployment │ │ │ │ • Remove booted deployment from related list │ │ • Keep for separate processing │ │ • Ensure no duplicates │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Get Rollback Deployment │ │ │ │ • Pop first deployment from related list │ │ • This becomes rollback deployment │ │ • Remaining deployments become "other" │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Determine Rollback Status │ │ │ │ • Compare rollback and booted deployment indices │ │ • Set rollback_queued flag │ │ • Determine boot order state │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Create Boot Entries │ │ │ │ • Process staged deployment │ │ • Process booted deployment │ │ • Process rollback deployment │ │ • Process other deployments │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Extract Image Information │ │ │ │ • Parse OCI image configuration │ │ • Extract image metadata │ │ • Create ImageStatus structures │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Create Host Specification │ │ │ │ • Determine image reference │ │ • Set boot order │ │ • Create HostSpec structure │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Determine Host Type │ │ │ │ • Check if booted deployment has image │ │ • Set HostType::BootcHost if container-based │ │ • Set to None if not container-based │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Create Host Status │ │ │ │ • Combine all deployment information │ │ • Set rollback_queued flag │ │ • Set host type │ │ • Create HostStatus structure │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Success │ │ │ │ • Complete status information gathered │ │ • All deployments processed │ │ • Image information extracted │ │ • Ready for output formatting │ └─────────────────────────────────────────────────────────────────┘ ``` ## Boot Entry Creation Flow ``` ┌─────────────────────────────────────────────────────────────────┐ │ Boot Entry Creation │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Extract Deployment Info │ │ │ │ • Get deployment checksum │ │ • Get deployment osname │ │ • Create DeploymentInfo structure │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Check for Image Reference │ │ │ │ • Parse deployment origin │ │ • Look for refspec in origin │ │ • Parse OSTree image reference │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Query Image Commit │ │ │ │ • Query OSTree repository for image commit │ │ • Get cached update information │ │ • Extract image configuration │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Create Image Status │ │ │ │ • Parse OCI image configuration │ │ • Extract labels and metadata │ │ • Create ImageStatus structure │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Create Boot Entry │ │ │ │ • Combine deployment info and image status │ │ • Create BootEntry structure │ │ • Return complete boot entry │ └─────────────────────────────────────────────────────────────────┘ ``` ## Image Status Creation Flow ``` ┌─────────────────────────────────────────────────────────────────┐ │ Image Status Creation │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Extract Image Labels │ │ │ │ • Get labels from image configuration │ │ • Look for version information │ │ • Look for timestamp information │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Parse Timestamp │ │ │ │ • Look for ANNOTATION_CREATED label │ │ • Parse RFC3339 timestamp │ │ • Convert to UTC timezone │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Extract Architecture │ │ │ │ • Get architecture from image configuration │ │ • Default to "unknown" if not found │ │ • Convert to string │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Create Image Status │ │ │ │ • Combine image reference and metadata │ │ • Set version, timestamp, digest, architecture │ │ • Create ImageStatus structure │ └─────────────────────────────────────────────────────────────────┘ ``` ## Format Selection Flow ``` ┌─────────────────────────────────────────────────────────────────┐ │ Format Selection │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Check Format Option │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ --format specified? │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────────────────────────┐ │ │ │ Yes │ │ No │ │ │ │ │ │ │ │ │ │ ┌─────────────┐│ │ ┌─────────────────────────────────┐│ │ │ │ │ Use ││ │ │ Check Legacy Options ││ │ │ │ │ Specified ││ │ │ ││ │ │ │ │ Format ││ │ │ • Check --json flag ││ │ │ │ │ • JSON ││ │ │ • Check if terminal ││ │ │ │ │ • YAML ││ │ │ • Default to YAML ││ │ │ │ │ • Human ││ │ │ ││ │ │ │ └─────────────┘│ │ └─────────────────────────────────┘│ │ │ └─────────────────┘ └─────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Check Legacy Options │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ --json specified? │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────────────────────────┐ │ │ │ Yes │ │ No │ │ │ │ │ │ │ │ │ │ ┌─────────────┐│ │ ┌─────────────────────────────────┐│ │ │ │ │ Use JSON ││ │ │ Check Terminal ││ │ │ │ │ Format ││ │ │ ││ │ │ │ └─────────────┘│ │ │ • Check if stdout is terminal ││ │ │ │ │ │ │ • Use Human Readable if yes ││ │ │ │ │ │ │ • Use YAML if no ││ │ │ │ │ │ │ ││ │ │ │ │ │ └─────────────────────────────────┘│ │ │ └─────────────────┘ └─────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Check Terminal Status │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ stdout.is_terminal()? │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────────────────────────┐ │ │ │ Yes │ │ No │ │ │ │ │ │ │ │ │ │ ┌─────────────┐│ │ ┌─────────────────────────────────┐│ │ │ │ │ Use Human ││ │ │ Use YAML Format ││ │ │ │ │ Readable ││ │ │ ││ │ │ │ │ Format ││ │ │ • Machine readable ││ │ │ │ │ ││ │ │ • Programmatic parsing ││ │ │ │ │ • Interactive││ │ │ • Standard format ││ │ │ │ │ use ││ │ │ ││ │ │ │ │ • Human ││ │ │ ││ │ │ │ │ friendly ││ │ │ ││ │ │ │ └─────────────┘│ │ └─────────────────────────────────┘│ │ │ └─────────────────┘ └─────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ## Error Handling Flow ``` ┌─────────────────────────────────────────────────────────────────┐ │ Error Detection │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Error Classification │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ Format │ │ System │ │ Deployment │ │ │ │ Errors │ │ Errors │ │ Errors │ │ │ │ │ │ │ │ │ │ │ │ • Unsupported │ │ • Not OSTree │ │ • No deployments│ │ │ │ format │ │ booted │ │ found │ │ │ │ version │ │ • Storage │ │ • Invalid │ │ │ │ • Invalid │ │ access │ │ deployment │ │ │ │ format │ │ failed │ │ structure │ │ │ │ • JSON/YAML │ │ • OSTree │ │ • Image │ │ │ │ parsing │ │ repository │ │ parsing │ │ │ │ failed │ │ error │ │ failed │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Error Response │ │ │ │ • Display error message │ │ • Provide context information │ │ • Suggest remediation steps │ │ • Return appropriate exit code │ │ • Clean up any partial state │ └─────────────────────────────────────────────────────────────────┘ ``` This flowchart provides a comprehensive visual representation of the bootc status process, showing all decision points, operations, and data structures involved in displaying system status information.