func makeUseFunc(konfig *config.Konfig) func(cache *config.Cache) error { return func(cache *config.Cache) error { konfigs := make(config.Konfigs) if err := cache.GetValue("konfigs", &konfigs); isFatal(err) { return err } id := konfig.ID() konfigs[id] = konfig return nonil( cache.SetValue("konfigs", konfigs), cache.SetValue("konfigs.used", &usedKonfig{ID: id}), ) } }
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 }