Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -273,8 +273,20 @@ jobs:
ANNOUNCEMENT_BODY: "${{ fromJson(steps.host.outputs.manifest).announcement_github_body }}"
RELEASE_COMMIT: "${{ github.sha }}"
run: |
# Write and read notes from a file to avoid quoting breaking things
echo "$ANNOUNCEMENT_BODY" > $RUNNER_TEMP/notes.txt
# Generate GitHub's auto release notes (What's Changed, New Contributors)
gh api repos/${{ github.repository }}/releases/generate-notes \
-f tag_name="${{ needs.plan.outputs.tag }}" \
-f target_commitish="$RELEASE_COMMIT" \
--jq '.body' > $RUNNER_TEMP/auto_notes.txt

# Combine: auto-generated notes first, then cargo-dist announcement
{
cat $RUNNER_TEMP/auto_notes.txt
echo ""
echo "---"
echo ""
echo "$ANNOUNCEMENT_BODY"
} > $RUNNER_TEMP/notes.txt

gh release create "${{ needs.plan.outputs.tag }}" --target "$RELEASE_COMMIT" $PRERELEASE_FLAG --title "$ANNOUNCEMENT_TITLE" --notes-file "$RUNNER_TEMP/notes.txt" artifacts/*

Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
test-clusters/output/*
!test-clusters/output/.gitkeep

# Generated Talos machine configs (contain secrets)
controlplane.yaml
worker.yaml
talosconfig

# Generated by Cargo
# will have compiled files and executables
debug
Expand Down
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ members = ["crates/*"]
resolver = "2"

[workspace.package]
version = "0.1.2"
version = "0.1.3"
edition = "2024"
authors = ["Ken Udovic"]
license = "MIT"
Expand Down
22 changes: 19 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ Use **talos-pilot** for "why won't my node join the cluster?"
| **Multi-Service Logs** | Stern-style interleaved logs from multiple services |
| **Processes View** | htop-like process list with tree view, CPU/MEM sorting |
| **Network Stats** | Interface traffic, connections, KubeSpan peers, packet capture |
| **Storage/Disks** | Disk list with size, transport, serial, system disk indicators |
| **etcd Status** | Quorum health, member list, alarms, leader tracking |
| **Workload Health** | K8s deployments, statefulsets, pod issues by namespace |
| **Lifecycle View** | Version status, config drift detection, cluster alerts |
Expand Down Expand Up @@ -122,6 +123,22 @@ talos-pilot --tail 1000
talos-pilot --debug --log-file ~/talos-pilot.log
```

### Bootstrap Wizard (Insecure Mode)

For bootstrapping new clusters on bare metal or VMs in maintenance mode, talos-pilot provides an interactive wizard:

```bash
# Connect to a node in maintenance mode
talos-pilot --insecure --endpoint <node-ip>
```

The wizard guides you through:
1. **Generate Config** - Creates talosconfig, controlplane.yaml, and worker.yaml
2. **Apply Config** - Applies configuration to the node, triggering installation
3. **Bootstrap** - Initializes etcd and starts the Kubernetes cluster

Once complete, you can manage the cluster using standard talos-pilot commands.

### Keyboard Navigation

| Key | Action |
Expand All @@ -141,8 +158,8 @@ talos-pilot --debug --log-file ~/talos-pilot.log

| Key | View | Description |
|-----|------|-------------|
| `c` | Cluster | Node overview |
| `s` | Services | Service list for selected node |
| `c` | Security | PKI and encryption audit |
| `s` | Storage | Disk list with system disk indicators |
| `l` | Logs | Single service logs |
| `L` | Multi-Logs | Interleaved multi-service logs |
| `p` | Processes | Process tree view |
Expand All @@ -151,7 +168,6 @@ talos-pilot --debug --log-file ~/talos-pilot.log
| `w` | Workloads | K8s deployment health |
| `y` | Lifecycle | Version status, alerts |
| `d` | Diagnostics | System health checks |
| `S` | Security | PKI and encryption audit |
| `o` | Operations | Single node operations |
| `O` | Rolling | Multi-node rolling operations |

Expand Down
22 changes: 22 additions & 0 deletions crates/talos-pilot-tui/src/action.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ pub enum Action {
ShowLifecycle,
/// Show workload health view
ShowWorkloads,
/// Show storage/disks view for a node: (hostname, address)
ShowStorage(String, String),
/// Show node operations overlay: (hostname, address, is_controlplane)
ShowNodeOperations(String, String, bool),
/// Show rolling operations overlay with node list: Vec<(hostname, address, is_controlplane)>
Expand All @@ -57,4 +59,24 @@ pub enum Action {
// Effects
StartFadeIn,
StartFadeOut,

// Insecure mode actions (legacy)
/// Generate Talos config: (cluster_name, k8s_endpoint, output_dir)
InsecureGenConfig(String, String, String),
/// Apply config to node: (config_path)
InsecureApplyConfig(String),

// Wizard actions
/// Generate config in wizard
WizardGenConfig,
/// Apply config in wizard
WizardApplyConfig,
/// Bootstrap cluster in wizard
WizardBootstrap,
/// Retry after error in wizard
WizardRetry,
/// Wizard complete - transition to secure mode (context_name)
WizardComplete(Option<String>),
/// Tick for wizard polling
WizardTick,
}
Loading