Add client listening URLs flag to etcd migrate.

This commit is contained in:
Ben Hu 2020-10-13 03:01:33 +00:00
parent fd5d61060a
commit e8fcc44286
5 changed files with 33 additions and 16 deletions

View File

@ -61,16 +61,18 @@ func TestMigrate(t *testing.T) {
startVersion string
endVersion string
protocol string
clientListenUrls string
}{
// upgrades
{"v3-v3-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https"},
{"oldest-newest-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https"},
{"v3-v3-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https", ""},
{"oldest-newest-up", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https", ""},
{"v3-v3-up-with-additional-client-url", 1, "3.0.17/etcd3", "3.1.12/etcd3", "https", "http://127.0.0.1:2379,http://10.128.0.1:2379"},
// warning: v2->v3 ha upgrades not currently supported.
{"ha-v3-v3-up", 3, "3.0.17/etcd3", "3.1.12/etcd3", "https"},
{"ha-v3-v3-up", 3, "3.0.17/etcd3", "3.1.12/etcd3", "https", ""},
// downgrades
{"v3-v3-down", 1, "3.1.12/etcd3", "3.0.17/etcd3", "https"},
{"v3-v3-down", 1, "3.1.12/etcd3", "3.0.17/etcd3", "https", ""},
// warning: ha downgrades not yet supported.
}
@ -80,7 +82,7 @@ func TestMigrate(t *testing.T) {
start := MustParseEtcdVersionPair(m.startVersion)
end := MustParseEtcdVersionPair(m.endVersion)
testCfgs := clusterConfig(t, m.title, m.memberCount, m.protocol)
testCfgs := clusterConfig(t, m.title, m.memberCount, m.protocol, m.clientListenUrls)
servers := []*EtcdMigrateServer{}
for _, cfg := range testCfgs {
@ -217,7 +219,7 @@ func checkPermissions(t *testing.T, path string, expected os.FileMode) {
}
}
func clusterConfig(t *testing.T, name string, memberCount int, protocol string) []*EtcdMigrateCfg {
func clusterConfig(t *testing.T, name string, memberCount int, protocol string, clientListenUrls string) []*EtcdMigrateCfg {
peers := []string{}
for i := 0; i < memberCount; i++ {
memberName := fmt.Sprintf("%s-%d", name, i)
@ -243,6 +245,7 @@ func clusterConfig(t *testing.T, name string, memberCount int, protocol string)
port: uint64(2379 + i*10000),
peerListenUrls: peerURL,
peerAdvertiseUrls: peerURL,
clientListenUrls: clientListenUrls,
etcdDataPrefix: "/registry",
ttlKeysDirectory: "/registry/events",
supportedVersions: testSupportedVersions,

View File

@ -65,8 +65,8 @@ func runMigrate() {
}
migrate(
opts.name, opts.port, opts.peerListenUrls, opts.peerAdvertiseUrls, opts.binDir,
opts.dataDir, opts.etcdDataPrefix, opts.ttlKeysDirectory, opts.initialCluster,
opts.name, opts.port, opts.peerListenUrls, opts.peerAdvertiseUrls, opts.clientListenUrls,
opts.binDir, opts.dataDir, opts.etcdDataPrefix, opts.ttlKeysDirectory, opts.initialCluster,
target, opts.supportedVersions, opts.etcdServerArgs)
}
@ -84,7 +84,8 @@ func copyBinaries() {
}
// migrate opens or initializes the etcd data directory, configures the migrator, and starts the migration.
func migrate(name string, port uint64, peerListenUrls string, peerAdvertiseUrls string, binPath string, dataDirPath string, etcdDataPrefix string, ttlKeysDirectory string,
func migrate(name string, port uint64, peerListenUrls string, peerAdvertiseUrls string, clientListenUrls string,
binPath string, dataDirPath string, etcdDataPrefix string, ttlKeysDirectory string,
initialCluster string, target *EtcdVersionPair, bundledVersions SupportedVersions, etcdServerArgs string) {
dataDir, err := OpenOrCreateDataDirectory(dataDirPath)
@ -98,6 +99,7 @@ func migrate(name string, port uint64, peerListenUrls string, peerAdvertiseUrls
port: port,
peerListenUrls: peerListenUrls,
peerAdvertiseUrls: peerAdvertiseUrls,
clientListenUrls: clientListenUrls,
etcdDataPrefix: etcdDataPrefix,
ttlKeysDirectory: ttlKeysDirectory,
initialCluster: initialCluster,

View File

@ -39,6 +39,7 @@ func NewEtcdMigrateServer(cfg *EtcdMigrateCfg, client EtcdMigrateClient) *EtcdMi
}
// Start starts an etcd server as a separate process, waits until it has started, and returns a exec.Cmd.
// TODO: Add support for listening to client via TLS.
func (r *EtcdMigrateServer) Start(version *EtcdVersion) error {
etcdCmd := exec.Command(
fmt.Sprintf("%s/etcd-%s", r.cfg.binPath, version),
@ -46,7 +47,7 @@ func (r *EtcdMigrateServer) Start(version *EtcdVersion) error {
"--initial-cluster", r.cfg.initialCluster,
"--debug",
"--data-dir", r.cfg.dataDirectory,
"--listen-client-urls", fmt.Sprintf("http://127.0.0.1:%d", r.cfg.port),
"--listen-client-urls", r.cfg.clientListenUrls,
"--advertise-client-urls", fmt.Sprintf("http://127.0.0.1:%d", r.cfg.port),
"--listen-peer-urls", r.cfg.peerListenUrls,
"--initial-advertise-peer-urls", r.cfg.peerAdvertiseUrls,

View File

@ -33,6 +33,7 @@ type EtcdMigrateCfg struct {
port uint64
peerListenUrls string
peerAdvertiseUrls string
clientListenUrls string
etcdDataPrefix string
ttlKeysDirectory string
supportedVersions SupportedVersions

View File

@ -42,6 +42,8 @@ const (
peerListenUrlsFmt = "http://localhost:%d"
peerAdvertiseUrlsEnv = "INITIAL_ADVERTISE_PEER_URLS"
peerAdvertiseUrlsFmt = "http://localhost:%d"
clientListenURLsEnv = "LISTEN_CLIENT_URLS"
clientListenURLFmt = "http://127.0.0.1:%d"
targetVersionEnv = "TARGET_VERSION"
targetStorageEnv = "TARGET_STORAGE"
etcdDataPrefixEnv = "ETCD_DATA_PREFIX"
@ -66,6 +68,7 @@ type migrateOpts struct {
targetVersion string
targetStorage string
etcdServerArgs string
clientListenUrls string
}
func registerFlags(flags *flag.FlagSet, opt *migrateOpts) {
@ -81,6 +84,8 @@ func registerFlags(flags *flag.FlagSet, opt *migrateOpts) {
"etcd --listen-peer-urls flag. If unset, fallbacks to LISTEN_PEER_URLS env and if unset defaults to http://localhost:<peer-port>.")
flags.StringVar(&opts.peerAdvertiseUrls, "initial-advertise-peer-urls", "",
"etcd --initial-advertise-peer-urls flag. If unset fallbacks to INITIAL_ADVERTISE_PEER_URLS env and if unset defaults to http://localhost:<peer-port>.")
flags.StringVar(&opts.clientListenUrls, "listen-client-urls", "",
"etcd --listen-client-urls flag. If unset, fallbacks to LISTEN_CLIENT_URLS env, and if unset defaults to http://127.0.0.1:<port>.")
flags.StringVar(&opts.binDir, "bin-dir", "/usr/local/bin",
"directory of etcd and etcdctl binaries, must contain etcd-<version> and etcdctl-<version> for each version listed in <bundled-versions>.")
flags.StringVar(&opts.dataDir, "data-dir", "",
@ -119,7 +124,7 @@ func fallbackToEnvWithDefault(flag, env, def string) string {
if value, err := lookupEnv(env); err == nil {
return value
}
klog.Warningf("%s variable unset - defaulting to %s", env, def)
klog.Warningf("%s variable for %s flag unset - defaulting to %s", env, flag, def)
return def
}
@ -187,6 +192,11 @@ func (opts *migrateOpts) validateAndDefault() error {
opts.peerAdvertiseUrls = fallbackToEnvWithDefault("initial-advertise-peer-urls", peerAdvertiseUrlsEnv, def)
}
if opts.clientListenUrls == "" {
def := fmt.Sprintf(clientListenURLFmt, opts.port)
opts.clientListenUrls = fallbackToEnvWithDefault("listen-client-urls", clientListenURLsEnv, def)
}
if opts.targetVersion == "" {
if opts.targetVersion, err = fallbackToEnv("target-version", targetVersionEnv); err != nil {
return err