mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 19:13:34 +00:00
69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package ucind
|
|
|
|
import (
|
|
"fmt"
|
|
"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.Clusters[c.Name]; ok {
|
|
return fmt.Errorf("cluster '%s' already exists", c.Name)
|
|
}
|
|
|
|
clusterCfg := &config.Cluster{
|
|
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.Clusters[c.Name] = clusterCfg
|
|
cfg.CurrentCluster = 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.Clusters[name]; !ok {
|
|
return nil
|
|
}
|
|
|
|
delete(cfg.Clusters, name)
|
|
|
|
if cfg.CurrentCluster == name {
|
|
cfg.CurrentCluster = ""
|
|
}
|
|
if _, ok := cfg.Clusters["default"]; ok {
|
|
cfg.CurrentCluster = "default"
|
|
}
|
|
|
|
if err = cfg.Save(); err != nil {
|
|
return fmt.Errorf("save config: %w", err)
|
|
}
|
|
return nil
|
|
}
|