mirror of https://github.com/status-im/consul.git
Fix defaults for autopilot config update
Previously, for a POST request to the /v1/operator/autopilot/configuration endpoint, any fields not included in the payload were set to a zero-initialized value rather than the documented default value. Now, if an optional field is not included in the payload, it will be set to its documented default value: - CleanupDeadServers: true - LastContactThreshold: "200ms" - MaxTrailingLogs: 250 - MinQuorum: 0 - ServerStabilizationTime: "10s" - RedundancyZoneTag: "" - DisableUpgradeMigration: false - UpgradeVersionTag: ""
This commit is contained in:
parent
1822b80ef3
commit
14059c2653
|
@ -217,7 +217,7 @@ func (s *HTTPHandlers) OperatorAutopilotConfiguration(resp http.ResponseWriter,
|
|||
s.parseDC(req, &args.Datacenter)
|
||||
s.parseToken(req, &args.Token)
|
||||
|
||||
var conf api.AutopilotConfiguration
|
||||
conf := api.NewAutopilotConfiguration()
|
||||
if err := decodeBody(req.Body, &conf); err != nil {
|
||||
return nil, BadRequestError{Reason: fmt.Sprintf("Error parsing autopilot config: %v", err)}
|
||||
}
|
||||
|
|
|
@ -435,7 +435,21 @@ func TestOperator_AutopilotSetConfiguration(t *testing.T) {
|
|||
a := NewTestAgent(t, "")
|
||||
defer a.Shutdown()
|
||||
|
||||
// Provide a non-default value only for CleanupDeadServers.
|
||||
// Expect all other fields to be updated with default values
|
||||
// (except CreateIndex and ModifyIndex).
|
||||
body := bytes.NewBuffer([]byte(`{"CleanupDeadServers": false}`))
|
||||
expected := structs.AutopilotConfig{
|
||||
CleanupDeadServers: false, // only non-default value
|
||||
LastContactThreshold: 200 * time.Millisecond,
|
||||
MaxTrailingLogs: 250,
|
||||
MinQuorum: 0,
|
||||
ServerStabilizationTime: 10 * time.Second,
|
||||
RedundancyZoneTag: "",
|
||||
DisableUpgradeMigration: false,
|
||||
UpgradeVersionTag: "",
|
||||
}
|
||||
|
||||
req, _ := http.NewRequest("PUT", "/v1/operator/autopilot/configuration", body)
|
||||
resp := httptest.NewRecorder()
|
||||
if _, err := a.srv.OperatorAutopilotConfiguration(resp, req); err != nil {
|
||||
|
@ -453,9 +467,11 @@ func TestOperator_AutopilotSetConfiguration(t *testing.T) {
|
|||
if err := a.RPC("Operator.AutopilotGetConfiguration", &args, &reply); err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
if reply.CleanupDeadServers {
|
||||
t.Fatalf("bad: %#v", reply)
|
||||
}
|
||||
|
||||
// For equality comparison check, ignore CreateIndex and ModifyIndex
|
||||
expected.CreateIndex = reply.CreateIndex
|
||||
expected.ModifyIndex = reply.ModifyIndex
|
||||
require.Equal(t, expected, reply)
|
||||
}
|
||||
|
||||
func TestOperator_AutopilotCASConfiguration(t *testing.T) {
|
||||
|
|
|
@ -58,6 +58,23 @@ type AutopilotConfiguration struct {
|
|||
ModifyIndex uint64
|
||||
}
|
||||
|
||||
// Defines default values for the AutopilotConfiguration type, consistent with
|
||||
// https://www.consul.io/api-docs/operator/autopilot#parameters-1
|
||||
func NewAutopilotConfiguration() AutopilotConfiguration {
|
||||
cfg := AutopilotConfiguration{
|
||||
CleanupDeadServers: true,
|
||||
LastContactThreshold: NewReadableDuration(200 * time.Millisecond),
|
||||
MaxTrailingLogs: 250,
|
||||
MinQuorum: 0,
|
||||
ServerStabilizationTime: NewReadableDuration(10 * time.Second),
|
||||
RedundancyZoneTag: "",
|
||||
DisableUpgradeMigration: false,
|
||||
UpgradeVersionTag: "",
|
||||
}
|
||||
|
||||
return cfg
|
||||
}
|
||||
|
||||
// ServerHealth is the health (from the leader's point of view) of a server.
|
||||
type ServerHealth struct {
|
||||
// ID is the raft ID of the server.
|
||||
|
|
Loading…
Reference in New Issue