talos-upgrade/pkg/upgrade/node.go
2023-10-20 17:28:58 -04:00

87 lines
1.7 KiB
Go

package upgrade
import (
"context"
"fmt"
"git.cycore.io/scm/talos-upgrade/pkg/node"
"git.cycore.io/scm/talos-upgrade/pkg/palette"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/pkg/errors"
)
type Node struct {
core *CoreState
node *node.Node
}
func (n *Node) Init() tea.Cmd {
return nil
}
func (n *Node) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return nil, nil
}
func (n *Node) View() string {
ver, err := n.node.Version()
if err != nil {
ver = "Unknown"
}
if ver == n.core.SelectedVersion {
return upgradeDone(ver)
}
return ver
}
func (c *CoreState) UpdateNodeList(ctx context.Context) error {
list, err := node.GetNodes(ctx, c.TalosClient)
if err != nil {
return err
}
c.Nodes = list
lowest, err := node.LowestVersion(c.Nodes)
if err != nil {
return errors.Wrap(err, "failed to determiner lowest installed Talos version")
}
c.LowestTalosVersion = lowest
highest, err := node.HighestVersion(c.Nodes)
if err != nil {
return errors.Wrap(err, "failed to determiner highest installed Talos version")
}
c.HighestTalosVersion = highest
return nil
}
func checkMark() string {
return lipgloss.NewStyle().SetString("✓").
Foreground(lipgloss.Color(palette.BrightGreen)).
PaddingRight(1).
String()
}
func upgradeDone(version string) string {
verString := lipgloss.NewStyle().
SetString(version).
Foreground(lipgloss.Color(palette.Green)).
PaddingRight(1).
String()
return fmt.Sprintf("%s %s", checkMark(), verString)
}
func upgradeActive() string {
return lipgloss.NewStyle().SetString("upgrading...").
Foreground(lipgloss.Color(palette.Yellow)).
PaddingRight(1).
String()
}