mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 19:13:34 +00:00
merge ucind cluster configuration to the user’s uncloud config
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user