From 3640019379cea91cbd11109e4f9c9b3699129a19 Mon Sep 17 00:00:00 2001 From: James Rasell Date: Mon, 29 Jan 2024 08:48:54 +0100 Subject: [PATCH] config: support passing multiple server RPC addrs for registration (#14) --- internal/config/config.go | 10 +++++----- internal/config/flag.go | 13 +++++++++++++ main.go | 9 ++------- 3 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 internal/config/flag.go diff --git a/internal/config/config.go b/internal/config/config.go index 2e8894b..6184bca 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -27,9 +27,9 @@ type Config struct { // generating the simulated client name and ID. NodeNamePrefix string `hcl:"node_name_prefix,optional"` - // ServerAddr is the RPC address of a Nomad server which will be used to - // set up the clients initial registration contact. - ServerAddr string `hcl:"server_addr,optional"` + // ServerAddr is a slice of server RPC addresses which will be used for the + // clients initial registration. + ServerAddr arrayFlagVar `hcl:"server_addr,optional"` // NodeNum is the number of Nomad clients/nodes that will be started within // this single nodesim process. Some basic testing indicates you will need @@ -66,7 +66,7 @@ func Default() *Config { return &Config{ WorkDir: fmt.Sprintf("nomad-nodesim-%d", os.Getpid()), NodeNamePrefix: fmt.Sprintf("node-%s", uuid.Short()), - ServerAddr: "127.0.0.1:4647", + ServerAddr: []string{"127.0.0.1:4647"}, NodeNum: 1, Log: &Log{ Level: "debug", @@ -96,7 +96,7 @@ func (c *Config) Merge(z *Config) *Config { if z.NodeNamePrefix != "" { result.NodeNamePrefix = z.NodeNamePrefix } - if z.ServerAddr != "" { + if len(z.ServerAddr) > 0 { result.ServerAddr = z.ServerAddr } if z.NodeNum > 0 { diff --git a/internal/config/flag.go b/internal/config/flag.go new file mode 100644 index 0000000..19c5aa5 --- /dev/null +++ b/internal/config/flag.go @@ -0,0 +1,13 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package config + +type arrayFlagVar []string + +func (i *arrayFlagVar) String() string { return "" } + +func (i *arrayFlagVar) Set(value string) error { + *i = append(*i, value) + return nil +} diff --git a/main.go b/main.go index befb725..17ddbad 100644 --- a/main.go +++ b/main.go @@ -41,7 +41,7 @@ func main() { } flag.StringVar(&flagConfig.WorkDir, "work-dir", "", "working directory") - flag.StringVar(&flagConfig.ServerAddr, "server-addr", "", "address of server's rpc port") + flag.Var(&flagConfig.ServerAddr, "server-addr", "address of server's rpc port; can be specified multiple times") flag.StringVar(&flagConfig.NodeNamePrefix, "node-name-prefix", "", "nodes will be named [prefix]-[i]") flag.IntVar(&flagConfig.NodeNum, "node-num", 0, "number of client nodes") @@ -184,12 +184,7 @@ func startClient(logger hclog.Logger, buildInfo *internalSimnode.BuildInfo, cfg clientCfg.MaxKillTimeout = time.Minute - //FIXME inject servers? - if cfg.ServerAddr != "" { - clientCfg.Servers = []string{cfg.ServerAddr} - } else { - clientCfg.Servers = []string{} - } + clientCfg.Servers = cfg.ServerAddr tlsConfig := tlsConfigFromEnv() tlsEnabled := true