diff --git a/agent/config/builder.go b/agent/config/builder.go index 9ca6092ab4..2eff8fbd84 100644 --- a/agent/config/builder.go +++ b/agent/config/builder.go @@ -92,8 +92,7 @@ func Load(opts BuilderOpts, extraHead Source, overrides ...Source) (*RuntimeConf // since not all pre-conditions have to be satisfied when performing // syntactical tests. type Builder struct { - // devMode stores the value of the -dev flag, and enables development mode. - devMode *bool + opts BuilderOpts // Head, Sources, and Tail are used to manage the order of the // config sources, as described in the comments above. @@ -105,15 +104,6 @@ type Builder struct { // parsing the configuration. Warnings []string - // hostname is a shim for testing, allowing tests to specify a replacement - // for os.Hostname. - hostname func() (string, error) - - // getPrivateIPv4 and getPublicIPv6 are shims for testing, allowing tests to - // specify a replacement for ipaddr.GetPrivateIPv4 and ipaddr.GetPublicIPv6. - getPrivateIPv4 func() ([]*net.IPAddr, error) - getPublicIPv6 func() ([]*net.IPAddr, error) - // err contains the first error that occurred during // building the runtime configuration. err error @@ -135,8 +125,8 @@ func NewBuilder(opts BuilderOpts) (*Builder, error) { } b := &Builder{ - devMode: opts.DevMode, - Head: []Source{DefaultSource(), DefaultEnterpriseSource()}, + opts: opts, + Head: []Source{DefaultSource(), DefaultEnterpriseSource()}, } if b.boolVal(opts.DevMode) { @@ -467,14 +457,14 @@ func (b *Builder) Build() (rt RuntimeConfig, err error) { switch { case ipaddr.IsAnyV4(advertiseAddr): addrtyp = "private IPv4" - detect = b.getPrivateIPv4 + detect = b.opts.getPrivateIPv4 if detect == nil { detect = ipaddr.GetPrivateIPv4 } case ipaddr.IsAnyV6(advertiseAddr): addrtyp = "public IPv6" - detect = b.getPublicIPv6 + detect = b.opts.getPublicIPv6 if detect == nil { detect = ipaddr.GetPublicIPv6 } @@ -994,7 +984,7 @@ func (b *Builder) Build() (rt RuntimeConfig, err error) { DataDir: dataDir, Datacenter: datacenter, DefaultQueryTime: b.durationVal("default_query_time", c.DefaultQueryTime), - DevMode: b.boolVal(b.devMode), + DevMode: b.boolVal(b.opts.DevMode), DisableAnonymousSignature: b.boolVal(c.DisableAnonymousSignature), DisableCoordinates: b.boolVal(c.DisableCoordinates), DisableHostNodeID: b.boolVal(c.DisableHostNodeID), @@ -1900,7 +1890,7 @@ func (b *Builder) tlsCipherSuites(name string, v *string) []uint16 { func (b *Builder) nodeName(v *string) string { nodeName := b.stringVal(v) if nodeName == "" { - fn := b.hostname + fn := b.opts.hostname if fn == nil { fn = os.Hostname } diff --git a/agent/config/builder_test.go b/agent/config/builder_test.go index 9be12a4d34..430a959e8c 100644 --- a/agent/config/builder_test.go +++ b/agent/config/builder_test.go @@ -172,13 +172,13 @@ func TestBuilder_BuildAndValidate_NodeName(t *testing.T) { } func patchBuilderShims(b *Builder) { - b.hostname = func() (string, error) { + b.opts.hostname = func() (string, error) { return "thehostname", nil } - b.getPrivateIPv4 = func() ([]*net.IPAddr, error) { + b.opts.getPrivateIPv4 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("10.0.0.1")}, nil } - b.getPublicIPv6 = func() ([]*net.IPAddr, error) { + b.opts.getPublicIPv6 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("dead:beef::1")}, nil } } diff --git a/agent/config/flags.go b/agent/config/flags.go index 77dc2abb38..155e243345 100644 --- a/agent/config/flags.go +++ b/agent/config/flags.go @@ -3,6 +3,7 @@ package config import ( "flag" "fmt" + "net" "time" ) @@ -26,6 +27,15 @@ type BuilderOpts struct { // HCL contains an arbitrary config in hcl format. HCL []string + + // hostname is a shim for testing, allowing tests to specify a replacement + // for os.Hostname. + hostname func() (string, error) + + // getPrivateIPv4 and getPublicIPv6 are shims for testing, allowing tests to + // specify a replacement for ipaddr.GetPrivateIPv4 and ipaddr.GetPublicIPv6. + getPrivateIPv4 func() ([]*net.IPAddr, error) + getPublicIPv6 func() ([]*net.IPAddr, error) } // AddFlags adds the command line flags for the agent. diff --git a/agent/config/runtime_test.go b/agent/config/runtime_test.go index 092e75b6a3..12307d6416 100644 --- a/agent/config/runtime_test.go +++ b/agent/config/runtime_test.go @@ -4886,13 +4886,13 @@ func testConfig(t *testing.T, tests []configTest, dataDir string) { patchBuilderShims(b) if tt.hostname != nil { - b.hostname = tt.hostname + b.opts.hostname = tt.hostname } if tt.privatev4 != nil { - b.getPrivateIPv4 = tt.privatev4 + b.opts.getPrivateIPv4 = tt.privatev4 } if tt.publicv6 != nil { - b.getPublicIPv6 = tt.publicv6 + b.opts.getPublicIPv6 = tt.publicv6 } // read the source fragements @@ -4937,9 +4937,7 @@ func testConfig(t *testing.T, tests []configTest, dataDir string) { if err != nil { t.Fatal(err) } - x.hostname = b.hostname - x.getPrivateIPv4 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("10.0.0.1")}, nil } - x.getPublicIPv6 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("dead:beef::1")}, nil } + patchBuilderShims(x) expected, err := x.Build() if err != nil { t.Fatalf("build default failed: %s", err)