mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 11:03:34 +00:00
70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package ucind
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/psviderski/uncloud/internal/cli/config"
|
|
)
|
|
|
|
type ConfigUpdater struct {
|
|
path string
|
|
}
|
|
|
|
func NewConfigUpdater(path string) *ConfigUpdater {
|
|
return &ConfigUpdater{path: path}
|
|
}
|
|
|
|
func (u *ConfigUpdater) AddCluster(c Cluster) error {
|
|
cfg, err := config.NewFromFile(u.path)
|
|
if err != nil {
|
|
return fmt.Errorf("read Uncloud config: %w", err)
|
|
}
|
|
|
|
if _, ok := cfg.Contexts[c.Name]; ok {
|
|
return fmt.Errorf("cluster context '%s' already exists", c.Name)
|
|
}
|
|
|
|
clusterCfg := &config.Context{
|
|
Name: c.Name,
|
|
Connections: make([]config.MachineConnection, len(c.Machines)),
|
|
}
|
|
for i, m := range c.Machines {
|
|
clusterCfg.Connections[i] = config.MachineConnection{
|
|
TCP: &m.APIAddress,
|
|
}
|
|
}
|
|
|
|
cfg.Contexts[c.Name] = clusterCfg
|
|
cfg.CurrentContext = c.Name
|
|
|
|
if err = cfg.Save(); err != nil {
|
|
return fmt.Errorf("save config: %w", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (u *ConfigUpdater) RemoveCluster(name string) error {
|
|
cfg, err := config.NewFromFile(u.path)
|
|
if err != nil {
|
|
return fmt.Errorf("read Uncloud config: %w", err)
|
|
}
|
|
|
|
if _, ok := cfg.Contexts[name]; !ok {
|
|
return nil
|
|
}
|
|
|
|
delete(cfg.Contexts, name)
|
|
|
|
if cfg.CurrentContext == name {
|
|
cfg.CurrentContext = ""
|
|
}
|
|
if _, ok := cfg.Contexts["default"]; ok {
|
|
cfg.CurrentContext = "default"
|
|
}
|
|
|
|
if err = cfg.Save(); err != nil {
|
|
return fmt.Errorf("save config: %w", err)
|
|
}
|
|
return nil
|
|
}
|