87 lines
1.7 KiB
Go
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()
|
|
}
|