Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix consul stanza parsing when multiple -config arguments are used #5818

Merged
merged 4 commits into from
Jun 12, 2019
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 2 additions & 8 deletions command/agent/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -1479,22 +1479,16 @@ func LoadConfig(path string) (*Config, error) {
return nil, err
}

defaults := ParseConfigDefault()

if fi.IsDir() {
config, err := LoadConfigDir(path)
if err != nil {
return nil, err
}
return defaults.Merge(config), nil
return LoadConfigDir(path)
}

cleaned := filepath.Clean(path)
config, err := ParseConfigFile(cleaned)
if err != nil {
return nil, fmt.Errorf("Error loading %s: %s", cleaned, err)
}
config = defaults.Merge(config)

config.Files = append(config.Files, cleaned)
return config, nil
}
Expand Down
9 changes: 0 additions & 9 deletions command/agent/config_parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,6 @@ import (
"github.com/hashicorp/nomad/nomad/structs/config"
)

// ParseConfigDefault returns the configuration base
func ParseConfigDefault() *Config {
return &Config{
Consul: config.DefaultConsulConfig(),
Autopilot: config.DefaultAutopilotConfig(),
Vault: config.DefaultVaultConfig(),
}
}

func ParseConfigFile(path string) (*Config, error) {
// slurp
var buf bytes.Buffer
Expand Down
82 changes: 72 additions & 10 deletions command/agent/config_parse_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -411,8 +411,16 @@ func TestConfig_Parse(t *testing.T) {
t.Fatalf("file: %s\n\n%s", tc.File, err)
}

// Merge defaults like LoadConfig does
actual = ParseConfigDefault().Merge(actual)
// ParseConfig used to re-merge defaults for these three objects,
// despite them already being merged in LoadConfig. The test structs
// expect these defaults to be set, but not the DefaultConfig
// defaults, which include additional settings
oldDefault := &Config{
Consul: config.DefaultConsulConfig(),
Vault: config.DefaultVaultConfig(),
Autopilot: config.DefaultAutopilotConfig(),
}
actual = oldDefault.Merge(actual)

//panic(fmt.Sprintf("first: %+v \n second: %+v", actual.TLSConfig, tc.Result.TLSConfig))
require.EqualValues(tc.Result, removeHelperAttributes(actual))
Expand Down Expand Up @@ -576,15 +584,70 @@ func TestConfig_ParseSample0(t *testing.T) {
require.EqualValues(t, sample0, c)
}

var sample1 = &Config{
Region: "global",
Datacenter: "dc1",
DataDir: "/opt/data/nomad/data",
LogLevel: "INFO",
BindAddr: "0.0.0.0",
AdvertiseAddrs: &AdvertiseAddrs{
HTTP: "host.example.com",
RPC: "host.example.com",
Serf: "host.example.com",
},
Client: &ClientConfig{ServerJoin: &ServerJoin{}},
Server: &ServerConfig{
Enabled: true,
BootstrapExpect: 3,
RetryJoin: []string{"10.0.0.101", "10.0.0.102", "10.0.0.103"},
EncryptKey: "sHck3WL6cxuhuY7Mso9BHA==",
ServerJoin: &ServerJoin{},
},
ACL: &ACLConfig{
Enabled: true,
},
Telemetry: &Telemetry{
PrometheusMetrics: true,
DisableHostname: true,
CollectionInterval: "60s",
collectionInterval: 60 * time.Second,
PublishAllocationMetrics: true,
PublishNodeMetrics: true,
},
LeaveOnInt: true,
LeaveOnTerm: true,
EnableSyslog: true,
SyslogFacility: "LOCAL0",
Consul: &config.ConsulConfig{
EnableSSL: helper.BoolToPtr(true),
Token: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
ServerAutoJoin: helper.BoolToPtr(false),
ClientAutoJoin: helper.BoolToPtr(false),
},
Vault: &config.VaultConfig{
Enabled: helper.BoolToPtr(true),
Role: "nomad-cluster",
Addr: "http://host.example.com:8200",
},
TLSConfig: &config.TLSConfig{
EnableHTTP: true,
EnableRPC: true,
VerifyServerHostname: true,
CAFile: "/opt/data/nomad/certs/nomad-ca.pem",
CertFile: "/opt/data/nomad/certs/server.pem",
KeyFile: "/opt/data/nomad/certs/server-key.pem",
},
Autopilot: &config.AutopilotConfig{
CleanupDeadServers: helper.BoolToPtr(true),
},
}

func TestConfig_ParseDir(t *testing.T) {
c, err := LoadConfig("./testdata/sample1")
require.NoError(t, err)

// Defaults
sample1 := ParseConfigDefault().Merge(sample0)

// Merge makes empty maps & slices rather than nil, so set those for the expected
// value
// LoadConfig Merges with defaults, which makes empty maps & slices rather than nil,
// so set those for the expected value
require.Nil(t, sample1.Client.Options)
sample1.Client.Options = map[string]string{}
require.Nil(t, sample1.Client.Meta)
Expand All @@ -593,9 +656,8 @@ func TestConfig_ParseDir(t *testing.T) {
sample1.Client.ChrootEnv = map[string]string{}
require.Nil(t, sample1.Server.StartJoin)
sample1.Server.StartJoin = []string{}

// This value added to the config file
sample1.Consul.EnableSSL = helper.BoolToPtr(true)
require.Nil(t, sample1.HTTPAPIResponseHeaders)
sample1.HTTPAPIResponseHeaders = map[string]string{}

// LoadDir listed the config files
require.Nil(t, sample1.Files)
Expand Down