mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-08-10 13:20:33 +02:00
cmd/cli: do API reloading if exlcude list changed
This commit is contained in:
+10
-6
@@ -301,7 +301,7 @@ func run(appCallback *AppCallback, stopCh chan struct{}) {
|
|||||||
}
|
}
|
||||||
if cdUID != "" {
|
if cdUID != "" {
|
||||||
validateCdUpstreamProtocol()
|
validateCdUpstreamProtocol()
|
||||||
if err := processCDFlags(&cfg); err != nil {
|
if rc, err := processCDFlags(&cfg); err != nil {
|
||||||
if isMobile() {
|
if isMobile() {
|
||||||
appCallback.Exit(err.Error())
|
appCallback.Exit(err.Error())
|
||||||
return
|
return
|
||||||
@@ -315,6 +315,10 @@ func run(appCallback *AppCallback, stopCh chan struct{}) {
|
|||||||
}
|
}
|
||||||
notifyExitToLogServer()
|
notifyExitToLogServer()
|
||||||
cdLogger.Fatal().Err(err).Msg("failed to fetch resolver config")
|
cdLogger.Fatal().Err(err).Msg("failed to fetch resolver config")
|
||||||
|
} else {
|
||||||
|
p.mu.Lock()
|
||||||
|
p.rc = rc
|
||||||
|
p.mu.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -604,7 +608,7 @@ func deactivationPinNotSet() bool {
|
|||||||
return cdDeactivationPin.Load() == defaultDeactivationPin
|
return cdDeactivationPin.Load() == defaultDeactivationPin
|
||||||
}
|
}
|
||||||
|
|
||||||
func processCDFlags(cfg *ctrld.Config) error {
|
func processCDFlags(cfg *ctrld.Config) (*controld.ResolverConfig, error) {
|
||||||
logger := mainLog.Load().With().Str("mode", "cd").Logger()
|
logger := mainLog.Load().With().Str("mode", "cd").Logger()
|
||||||
logger.Info().Msgf("fetching Controld D configuration from API: %s", cdUID)
|
logger.Info().Msgf("fetching Controld D configuration from API: %s", cdUID)
|
||||||
bo := backoff.NewBackoff("processCDFlags", logf, 30*time.Second)
|
bo := backoff.NewBackoff("processCDFlags", logf, 30*time.Second)
|
||||||
@@ -622,10 +626,10 @@ func processCDFlags(cfg *ctrld.Config) error {
|
|||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if isMobile() {
|
if isMobile() {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
logger.Warn().Err(err).Msg("could not fetch resolver config")
|
logger.Warn().Err(err).Msg("could not fetch resolver config")
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if resolverConfig.DeactivationPin != nil {
|
if resolverConfig.DeactivationPin != nil {
|
||||||
@@ -641,7 +645,7 @@ func processCDFlags(cfg *ctrld.Config) error {
|
|||||||
logger.Info().Msg("using defined custom config of Control-D resolver")
|
logger.Info().Msg("using defined custom config of Control-D resolver")
|
||||||
if err := validateCdRemoteConfig(resolverConfig, cfg); err == nil {
|
if err := validateCdRemoteConfig(resolverConfig, cfg); err == nil {
|
||||||
setListenerDefaultValue(cfg)
|
setListenerDefaultValue(cfg)
|
||||||
return nil
|
return resolverConfig, nil
|
||||||
}
|
}
|
||||||
mainLog.Load().Err(err).Msg("disregarding invalid custom config")
|
mainLog.Load().Err(err).Msg("disregarding invalid custom config")
|
||||||
}
|
}
|
||||||
@@ -688,7 +692,7 @@ func processCDFlags(cfg *ctrld.Config) error {
|
|||||||
// Set default value.
|
// Set default value.
|
||||||
setListenerDefaultValue(cfg)
|
setListenerDefaultValue(cfg)
|
||||||
|
|
||||||
return nil
|
return resolverConfig, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// setListenerDefaultValue sets the default value for cfg.Listener if none existed.
|
// setListenerDefaultValue sets the default value for cfg.Listener if none existed.
|
||||||
|
|||||||
+27
-3
@@ -84,6 +84,7 @@ type prog struct {
|
|||||||
dnsWg sync.WaitGroup
|
dnsWg sync.WaitGroup
|
||||||
dnsWatcherClosedOnce sync.Once
|
dnsWatcherClosedOnce sync.Once
|
||||||
dnsWatcherStopCh chan struct{}
|
dnsWatcherStopCh chan struct{}
|
||||||
|
rc *controld.ResolverConfig
|
||||||
|
|
||||||
cfg *ctrld.Config
|
cfg *ctrld.Config
|
||||||
localUpstreams []string
|
localUpstreams []string
|
||||||
@@ -165,11 +166,13 @@ func (p *prog) runWait() {
|
|||||||
|
|
||||||
if newCfg == nil {
|
if newCfg == nil {
|
||||||
newCfg = &ctrld.Config{}
|
newCfg = &ctrld.Config{}
|
||||||
|
confFile := v.ConfigFileUsed()
|
||||||
v := viper.NewWithOptions(viper.KeyDelimiter("::"))
|
v := viper.NewWithOptions(viper.KeyDelimiter("::"))
|
||||||
ctrld.InitConfig(v, "ctrld")
|
ctrld.InitConfig(v, "ctrld")
|
||||||
if configPath != "" {
|
if configPath != "" {
|
||||||
v.SetConfigFile(configPath)
|
confFile = configPath
|
||||||
}
|
}
|
||||||
|
v.SetConfigFile(confFile)
|
||||||
if err := v.ReadInConfig(); err != nil {
|
if err := v.ReadInConfig(); err != nil {
|
||||||
logger.Err(err).Msg("could not read new config")
|
logger.Err(err).Msg("could not read new config")
|
||||||
waitOldRunDone()
|
waitOldRunDone()
|
||||||
@@ -181,10 +184,14 @@ func (p *prog) runWait() {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if cdUID != "" {
|
if cdUID != "" {
|
||||||
if err := processCDFlags(newCfg); err != nil {
|
if rc, err := processCDFlags(newCfg); err != nil {
|
||||||
logger.Err(err).Msg("could not fetch ControlD config")
|
logger.Err(err).Msg("could not fetch ControlD config")
|
||||||
waitOldRunDone()
|
waitOldRunDone()
|
||||||
continue
|
continue
|
||||||
|
} else {
|
||||||
|
p.mu.Lock()
|
||||||
|
p.rc = rc
|
||||||
|
p.mu.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -291,7 +298,24 @@ func (p *prog) apiConfigReload() {
|
|||||||
cdDeactivationPin.Store(defaultDeactivationPin)
|
cdDeactivationPin.Store(defaultDeactivationPin)
|
||||||
}
|
}
|
||||||
|
|
||||||
if resolverConfig.Ctrld.CustomConfig == "" {
|
p.mu.Lock()
|
||||||
|
rc := p.rc
|
||||||
|
p.rc = resolverConfig
|
||||||
|
p.mu.Unlock()
|
||||||
|
noCustomConfig := resolverConfig.Ctrld.CustomConfig == ""
|
||||||
|
noExcludeListChanged := true
|
||||||
|
if rc != nil {
|
||||||
|
slices.Sort(rc.Exclude)
|
||||||
|
slices.Sort(resolverConfig.Exclude)
|
||||||
|
noExcludeListChanged = slices.Equal(rc.Exclude, resolverConfig.Exclude)
|
||||||
|
}
|
||||||
|
if noCustomConfig && noExcludeListChanged {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if noCustomConfig && !noExcludeListChanged {
|
||||||
|
logger.Debug().Msg("exclude list changes detected, reloading...")
|
||||||
|
p.apiReloadCh <- nil
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user