func (c *Client) Use(k *config.Konfig) error { c.init() if err := k.Valid(); err != nil { return err } return c.commit(makeUseFunc(k)) }
func migrateKonfigBolt(cache *config.Cache) error { var used usedKonfig var oldKonfig config.Konfig var konfigs = make(config.Konfigs) if err := cache.GetValue("konfig", &oldKonfig); isFatal(err) { return err } if err := cache.GetValue("konfigs", &konfigs); isFatal(err) { return err } if err := cache.GetValue("konfigs.used", &used); isFatal(err) { return err } // If old konfig exists, try to migrate it over to konfigs. if oldKonfig.Valid() == nil { id := oldKonfig.ID() if _, ok := konfigs[id]; !ok { if oldKonfig.Endpoints == nil { oldKonfig.Endpoints = &config.Endpoints{} } if u, err := url.Parse(oldKonfig.KontrolURL); err == nil && oldKonfig.KontrolURL != "" { u.Path = "" oldKonfig.Endpoints.Koding = config.NewEndpointURL(u) } if oldKonfig.TunnelURL != "" { oldKonfig.Endpoints.Tunnel = config.NewEndpoint(oldKonfig.TunnelURL) } // Best-effort attemp to ensure /etc/kite/kite.key is stored // in ~/.config/koding/konfig.bolt, so it is possible to // use kd / konfig with koding deployments that sign with // different kontrol keys, e.g. production <-> sandbox or // production <-> self-hosted opensource version. _ = migrateKiteKey(&oldKonfig) konfigs[id] = &oldKonfig _ = cache.SetValue("konfigs", konfigs) } } // If no konfig is in use (e.g. we just migrated one), // try to set to the default one. if used.ID == "" && len(konfigs) == 1 { for id, konfig := range konfigs { if konfig.Valid() == nil { _ = cache.SetValue("konfigs.used", &usedKonfig{ID: id}) } break } } return nil }