Skip to content
This repository was archived by the owner on Jul 27, 2023. It is now read-only.

Commit 0cb51ac

Browse files
authored
Merge pull request #158 from DataDog/shang/multi-urls-fix
[proc] made endpoints and api keys match length instead of returning an error
2 parents ea3bd9e + 4101124 commit 0cb51ac

2 files changed

Lines changed: 30 additions & 4 deletions

File tree

config/config.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,15 @@ func NewAgentConfig(agentIni *File, agentYaml *YamlAgentConfig) (*AgentConfig, e
254254
cfg.StatsdPort = agentIni.GetIntDefault("Main", "dogstatsd_port", cfg.StatsdPort)
255255

256256
// All process-agent specific config lives under [process.config] section.
257+
// NOTE: we truncate either endpoints or APIEndpoints if the lengths don't match
257258
ns = "process.config"
258259
endpoints := agentIni.GetStrArrayDefault(ns, "endpoint", ",", []string{defaultEndpoint})
259-
if len(endpoints) != len(cfg.APIEndpoints) {
260-
return nil, fmt.Errorf("found %d api keys and %d endpoints", len(cfg.APIEndpoints), len(endpoints))
260+
if len(endpoints) < len(cfg.APIEndpoints) {
261+
log.Warnf("found %d api keys and %d endpoints", len(cfg.APIEndpoints), len(endpoints))
262+
cfg.APIEndpoints = cfg.APIEndpoints[:len(endpoints)]
263+
} else if len(endpoints) > len(cfg.APIEndpoints) {
264+
log.Warnf("found %d api keys and %d endpoints", len(cfg.APIEndpoints), len(endpoints))
265+
endpoints = endpoints[:len(cfg.APIEndpoints)]
261266
}
262267
for i, e := range endpoints {
263268
u, err := url.Parse(e)

config/config_test.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,24 +163,45 @@ func TestGetHostname(t *testing.T) {
163163
}
164164

165165
func TestDDAgentMultiAPIKeys(t *testing.T) {
166+
// if no endpoint is given but api_keys are there, match the first api_key
167+
// with the default endpoint
166168
assert := assert.New(t)
167169
ddAgentConf, _ := ini.Load([]byte("[Main]\n\napi_key=foo,bar "))
168170
configFile := &File{instance: ddAgentConf, Path: "whatever"}
169171
agentConfig, err := NewAgentConfig(configFile, nil)
170-
assert.Error(err)
172+
assert.NoError(err)
173+
assert.Equal(1, len(agentConfig.APIEndpoints))
174+
assert.Equal("foo", agentConfig.APIEndpoints[0].APIKey)
175+
assert.Equal("process.datadoghq.com", agentConfig.APIEndpoints[0].Endpoint.Hostname())
171176

172177
ddAgentConf, _ = ini.Load([]byte(strings.Join([]string{
173178
"[Main]",
174-
"api_key = foo,bar",
179+
"api_key=foo,bar",
175180
"[process.config]",
176181
"endpoint=https://process.datadoghq.com,https://process.datadoghq.eu",
177182
}, "\n")))
178183
configFile = &File{instance: ddAgentConf, Path: "whatever"}
179184
agentConfig, err = NewAgentConfig(configFile, nil)
185+
assert.NoError(err)
186+
assert.Equal(2, len(agentConfig.APIEndpoints))
180187
assert.Equal("foo", agentConfig.APIEndpoints[0].APIKey)
181188
assert.Equal("process.datadoghq.com", agentConfig.APIEndpoints[0].Endpoint.Hostname())
182189
assert.Equal("bar", agentConfig.APIEndpoints[1].APIKey)
183190
assert.Equal("process.datadoghq.eu", agentConfig.APIEndpoints[1].Endpoint.Hostname())
191+
192+
// if endpoint count is greater than api_key count, drop additional endpoints
193+
ddAgentConf, _ = ini.Load([]byte(strings.Join([]string{
194+
"[Main]",
195+
"api_key=foo",
196+
"[process.config]",
197+
"endpoint=https://process.datadoghq.com,https://process.datadoghq.eu",
198+
}, "\n")))
199+
configFile = &File{instance: ddAgentConf, Path: "whatever"}
200+
agentConfig, err = NewAgentConfig(configFile, nil)
201+
assert.NoError(err)
202+
assert.Equal(1, len(agentConfig.APIEndpoints))
203+
assert.Equal("foo", agentConfig.APIEndpoints[0].APIKey)
204+
assert.Equal("process.datadoghq.com", agentConfig.APIEndpoints[0].Endpoint.Hostname())
184205
}
185206

186207
func TestDefaultConfig(t *testing.T) {

0 commit comments

Comments
 (0)