From aa0bb9c8d555f4c01b5c746ca8694b49f21d032d Mon Sep 17 00:00:00 2001 From: Alden Hsu Date: Tue, 13 May 2025 18:25:16 +0000 Subject: [PATCH 1/3] Don't override a custom local config BindAddress with a default one from the cloud config --- config/reader.go | 7 +++++++ web/server/entrypoint.go | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/config/reader.go b/config/reader.go index bd5f0a560f8..118ab99eb0e 100644 --- a/config/reader.go +++ b/config/reader.go @@ -377,6 +377,13 @@ func fromReader( if conn != nil && cfgFromDisk.Cloud != nil { cfg, err := readFromCloud(ctx, cfgFromDisk, nil, true, true, logger, conn) + + // Special case: DefaultBindAddress is set from Cloud, but user has specified a non-default BindAddress in local config. + // Keep the BindAddress from local config, and use Cloud options for everything else. + if err == nil && cfg.Network.BindAddressDefaultSet && !cfgFromDisk.Network.BindAddressDefaultSet { + cfg.Network.BindAddress = cfgFromDisk.Network.BindAddress + cfg.Network.BindAddressDefaultSet = false + } return cfg, err } diff --git a/web/server/entrypoint.go b/web/server/entrypoint.go index f7761d50352..ba079190d83 100644 --- a/web/server/entrypoint.go +++ b/web/server/entrypoint.go @@ -351,6 +351,14 @@ func (s *robotServer) configWatcher(ctx context.Context, currCfg *config.Config, continue } + // Special case: the incoming config specifies the default BindAddress, but the current one in use is non-default. + // Don't override the non-default BindAddress with the default one. + // If this is the only difference, the next step, diff.NetworkEqual will be true. + if processedConfig.Network.BindAddressDefaultSet && !currCfg.Network.BindAddressDefaultSet { + processedConfig.Network.BindAddress = currCfg.Network.BindAddress + processedConfig.Network.BindAddressDefaultSet = false + } + // flag to restart web service if necessary diff, err := config.DiffConfigs(*currCfg, *processedConfig, s.args.RevealSensitiveConfigDiffs) if err != nil { From 380ebddcce8ac0392e752e9694182fff2c9ebe55 Mon Sep 17 00:00:00 2001 From: Alden Hsu Date: Wed, 14 May 2025 13:44:21 +0000 Subject: [PATCH 2/3] Add logging in scenarios when BindAddress is specified locally and it either does or doesn't get overridden with Cloud's --- config/reader.go | 18 +++++++++++++++--- web/server/entrypoint.go | 6 ++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/config/reader.go b/config/reader.go index 118ab99eb0e..831ea72b0d5 100644 --- a/config/reader.go +++ b/config/reader.go @@ -380,9 +380,21 @@ func fromReader( // Special case: DefaultBindAddress is set from Cloud, but user has specified a non-default BindAddress in local config. // Keep the BindAddress from local config, and use Cloud options for everything else. - if err == nil && cfg.Network.BindAddressDefaultSet && !cfgFromDisk.Network.BindAddressDefaultSet { - cfg.Network.BindAddress = cfgFromDisk.Network.BindAddress - cfg.Network.BindAddressDefaultSet = false + // Note: DefaultBindAddress "from Cloud" is actually set with a constant in rdk. + if err == nil && !cfgFromDisk.Network.BindAddressDefaultSet { + if cfg.Network.BindAddressDefaultSet { + logger.Infof("Using cloud config, but BindAddress is specified in local config (%v) "+ + "and not cloud config (default = %v). Using local's.", + cfgFromDisk.Network.BindAddress, + cfg.Network.BindAddress) + cfg.Network.BindAddress = cfgFromDisk.Network.BindAddress + cfg.Network.BindAddressDefaultSet = false + } else { + logger.Infof("Using cloud config, and BindAddress specified in both cloud config (%v) "+ + "and local config (%v). Using cloud's. Remove BindAddress from cloud config to use local's.", + cfg.Network.BindAddress, + cfgFromDisk.Network.BindAddress) + } } return cfg, err } diff --git a/web/server/entrypoint.go b/web/server/entrypoint.go index ba079190d83..dbd471b7970 100644 --- a/web/server/entrypoint.go +++ b/web/server/entrypoint.go @@ -377,6 +377,12 @@ func (s *robotServer) configWatcher(ctx context.Context, currCfg *config.Config, } } + if currCfg.Network.BindAddress != processedConfig.Network.BindAddress { + s.logger.Infof("Config watcher detected bind address change: updating %v -> %v", + currCfg.Network.BindAddress, + processedConfig.Network.BindAddress) + } + // Update logger registry if log patterns may have changed. // // This functionality is tested in `TestLogPropagation` in `local_robot_test.go`. From 0c8d3e42b50bb101c2932d1f9f9cf8f5e893fff1 Mon Sep 17 00:00:00 2001 From: Alden Hsu Date: Thu, 15 May 2025 20:44:01 +0000 Subject: [PATCH 3/3] Switch Infof to CInfof --- config/reader.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/reader.go b/config/reader.go index 831ea72b0d5..dbc486034f7 100644 --- a/config/reader.go +++ b/config/reader.go @@ -383,14 +383,14 @@ func fromReader( // Note: DefaultBindAddress "from Cloud" is actually set with a constant in rdk. if err == nil && !cfgFromDisk.Network.BindAddressDefaultSet { if cfg.Network.BindAddressDefaultSet { - logger.Infof("Using cloud config, but BindAddress is specified in local config (%v) "+ + logger.CInfof(ctx, "Using cloud config, but BindAddress is specified in local config (%v) "+ "and not cloud config (default = %v). Using local's.", cfgFromDisk.Network.BindAddress, cfg.Network.BindAddress) cfg.Network.BindAddress = cfgFromDisk.Network.BindAddress cfg.Network.BindAddressDefaultSet = false } else { - logger.Infof("Using cloud config, and BindAddress specified in both cloud config (%v) "+ + logger.CInfof(ctx, "Using cloud config, and BindAddress specified in both cloud config (%v) "+ "and local config (%v). Using cloud's. Remove BindAddress from cloud config to use local's.", cfg.Network.BindAddress, cfgFromDisk.Network.BindAddress)