mirror of https://github.com/status-im/consul.git
fix: NET-1521 show latest config in /v1/agent/self (#18681)
* fix: NET-1521 show latest config in /v1/agent/self
This commit is contained in:
parent
2e7d951086
commit
56d6e54ac7
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:bug
|
||||||
|
api: Fix `/v1/agent/self` not returning latest configuration
|
||||||
|
```
|
1
Makefile
1
Makefile
|
@ -432,6 +432,7 @@ deep-copy: codegen-tools ## Deep copy
|
||||||
@$(SHELL) $(CURDIR)/agent/structs/deep-copy.sh
|
@$(SHELL) $(CURDIR)/agent/structs/deep-copy.sh
|
||||||
@$(SHELL) $(CURDIR)/agent/proxycfg/deep-copy.sh
|
@$(SHELL) $(CURDIR)/agent/proxycfg/deep-copy.sh
|
||||||
@$(SHELL) $(CURDIR)/agent/consul/state/deep-copy.sh
|
@$(SHELL) $(CURDIR)/agent/consul/state/deep-copy.sh
|
||||||
|
@$(SHELL) $(CURDIR)/agent/config/deep-copy.sh
|
||||||
|
|
||||||
print-% : ; @echo $($*) ## utility to echo a makefile variable (i.e. 'make print-GOPATH')
|
print-% : ; @echo $($*) ## utility to echo a makefile variable (i.e. 'make print-GOPATH')
|
||||||
|
|
||||||
|
|
|
@ -4354,6 +4354,9 @@ func (a *Agent) reloadConfigInternal(newCfg *config.RuntimeConfig) error {
|
||||||
a.enableDebug.Store(newCfg.EnableDebug)
|
a.enableDebug.Store(newCfg.EnableDebug)
|
||||||
a.config.EnableDebug = newCfg.EnableDebug
|
a.config.EnableDebug = newCfg.EnableDebug
|
||||||
|
|
||||||
|
// update Agent config with new config
|
||||||
|
a.config = newCfg.DeepCopy()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8199,3 +8199,59 @@ func TestAgent_Services_ExposeConfig(t *testing.T) {
|
||||||
}
|
}
|
||||||
require.Equal(t, srv1.Proxy.ToAPI(), actual.Proxy)
|
require.Equal(t, srv1.Proxy.ToAPI(), actual.Proxy)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAgent_Self_Reload(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("too slow for testing.Short")
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
// create new test agent
|
||||||
|
a := NewTestAgent(t, `
|
||||||
|
log_level = "info"
|
||||||
|
raft_snapshot_threshold = 100
|
||||||
|
`)
|
||||||
|
defer a.Shutdown()
|
||||||
|
|
||||||
|
testrpc.WaitForTestAgent(t, a.RPC, "dc1")
|
||||||
|
req, _ := http.NewRequest("GET", "/v1/agent/self", nil)
|
||||||
|
resp := httptest.NewRecorder()
|
||||||
|
a.srv.h.ServeHTTP(resp, req)
|
||||||
|
|
||||||
|
dec := json.NewDecoder(resp.Body)
|
||||||
|
val := &Self{}
|
||||||
|
require.NoError(t, dec.Decode(val))
|
||||||
|
|
||||||
|
require.Equal(t, "info", val.DebugConfig["Logging"].(map[string]interface{})["LogLevel"])
|
||||||
|
require.Equal(t, float64(100), val.DebugConfig["RaftSnapshotThreshold"].(float64))
|
||||||
|
|
||||||
|
// reload with new config
|
||||||
|
shim := &delegateConfigReloadShim{delegate: a.delegate}
|
||||||
|
a.delegate = shim
|
||||||
|
newCfg := TestConfig(testutil.Logger(t), config.FileSource{
|
||||||
|
Name: "Reload",
|
||||||
|
Format: "hcl",
|
||||||
|
Data: `
|
||||||
|
data_dir = "` + a.Config.DataDir + `"
|
||||||
|
log_level = "debug"
|
||||||
|
raft_snapshot_threshold = 200
|
||||||
|
`,
|
||||||
|
})
|
||||||
|
if err := a.reloadConfigInternal(newCfg); err != nil {
|
||||||
|
t.Fatalf("got error %v want nil", err)
|
||||||
|
}
|
||||||
|
require.Equal(t, 200, shim.newCfg.RaftSnapshotThreshold)
|
||||||
|
|
||||||
|
// validate new config is reflected in API response
|
||||||
|
req, _ = http.NewRequest("GET", "/v1/agent/self", nil)
|
||||||
|
resp = httptest.NewRecorder()
|
||||||
|
a.srv.h.ServeHTTP(resp, req)
|
||||||
|
|
||||||
|
dec = json.NewDecoder(resp.Body)
|
||||||
|
val = &Self{}
|
||||||
|
require.NoError(t, dec.Decode(val))
|
||||||
|
require.Equal(t, "debug", val.DebugConfig["Logging"].(map[string]interface{})["LogLevel"])
|
||||||
|
require.Equal(t, float64(200), val.DebugConfig["RaftSnapshotThreshold"].(float64))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,13 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) HashiCorp, Inc.
|
||||||
|
# SPDX-License-Identifier: BUSL-1.1
|
||||||
|
|
||||||
|
readonly PACKAGE_DIR="$(dirname "${BASH_SOURCE[0]}")"
|
||||||
|
cd $PACKAGE_DIR
|
||||||
|
|
||||||
|
# Uses: https://github.com/globusdigital/deep-copy
|
||||||
|
deep-copy \
|
||||||
|
-pointer-receiver \
|
||||||
|
-o ./config.deepcopy.go \
|
||||||
|
-type RuntimeConfig \
|
||||||
|
./
|
Loading…
Reference in New Issue