diff --git a/Documentation/cloud-config.md b/Documentation/cloud-config.md index 05b63ab..f6c211d 100644 --- a/Documentation/cloud-config.md +++ b/Documentation/cloud-config.md @@ -87,7 +87,7 @@ For example, the following cloud-config document... coreos: etcd: name: node001 - discovery-url: https://discovery.etcd.io/3445fa65423d8b04df07f59fb40218f8 + discovery: https://discovery.etcd.io/3445fa65423d8b04df07f59fb40218f8 bind-addr: $public_ipv4:4001 peer-bind-addr: $private_ipv4:7001 ``` @@ -97,7 +97,7 @@ coreos: ``` [Service] Environment="ETCD_NAME=node001"" -Environment="ETCD_DISCOVERY_URL=https://discovery.etcd.io/3445fa65423d8b04df07f59fb40218f8" +Environment="ETCD_DISCOVERY=https://discovery.etcd.io/3445fa65423d8b04df07f59fb40218f8" Environment="ETCD_BIND_ADDR=203.0.113.29:4001" Environment="ETCD_PEER_BIND_ADDR=192.0.2.13:7001" ``` @@ -136,7 +136,7 @@ echo 'Hello, world!' coreos: etcd: - discovery_url: https://discovery.etcd.io/827c73219eeb2fa5530027c37bf18877 + discovery: https://discovery.etcd.io/827c73219eeb2fa5530027c37bf18877 fleet: autostart: yes ssh_authorized_keys: diff --git a/initialize/config_test.go b/initialize/config_test.go index 4179c6f..28a21e3 100644 --- a/initialize/config_test.go +++ b/initialize/config_test.go @@ -35,7 +35,7 @@ func TestCloudConfig(t *testing.T) { contents := []byte(` coreos: etcd: - discovery_url: "https://discovery.etcd.io/827c73219eeb2fa5530027c37bf18877" + discovery: "https://discovery.etcd.io/827c73219eeb2fa5530027c37bf18877" fleet: autostart: Yes units: diff --git a/initialize/etcd.go b/initialize/etcd.go index 4e5e9dc..a872f56 100644 --- a/initialize/etcd.go +++ b/initialize/etcd.go @@ -12,16 +12,32 @@ import ( type EtcdEnvironment map[string]string +func (ec EtcdEnvironment) normalized() map[string]string { + out := make(map[string]string, len(ec)) + for key, val := range ec { + key = strings.ToUpper(key) + key = strings.Replace(key, "-", "_", -1) + out[key] = val + } + return out +} + func (ec EtcdEnvironment) String() (out string) { + norm := ec.normalized() + + if val, ok := norm["DISCOVERY_URL"]; ok { + delete(norm, "DISCOVERY_URL") + if _, ok := norm["DISCOVERY"]; !ok { + norm["DISCOVERY"] = val + } + } + public := os.Getenv("COREOS_PUBLIC_IPV4") private := os.Getenv("COREOS_PRIVATE_IPV4") out += "[Service]\n" - for key, val := range ec { - key = strings.ToUpper(key) - key = strings.Replace(key, "-", "_", -1) - + for key, val := range norm { if public != "" { val = strings.Replace(val, "$public_ipv4", public, -1) } diff --git a/initialize/etcd_test.go b/initialize/etcd_test.go index 8ee86fe..9d92ce2 100644 --- a/initialize/etcd_test.go +++ b/initialize/etcd_test.go @@ -10,13 +10,46 @@ import ( ) func TestEtcdEnvironment(t *testing.T) { + cfg := make(EtcdEnvironment, 0) + cfg["discovery"] = "http://disco.example.com/foobar" + cfg["peer-bind-addr"] = "127.0.0.1:7002" + + env := cfg.String() + expect := `[Service] +Environment="ETCD_DISCOVERY=http://disco.example.com/foobar" +Environment="ETCD_PEER_BIND_ADDR=127.0.0.1:7002" +` + + if env != expect { + t.Errorf("Generated environment:\n%s\nExpected environment:\n%s", env, expect) + } +} + +func TestEtcdEnvironmentDiscoveryURLTranslated(t *testing.T) { cfg := make(EtcdEnvironment, 0) cfg["discovery_url"] = "http://disco.example.com/foobar" cfg["peer-bind-addr"] = "127.0.0.1:7002" env := cfg.String() expect := `[Service] -Environment="ETCD_DISCOVERY_URL=http://disco.example.com/foobar" +Environment="ETCD_DISCOVERY=http://disco.example.com/foobar" +Environment="ETCD_PEER_BIND_ADDR=127.0.0.1:7002" +` + + if env != expect { + t.Errorf("Generated environment:\n%s\nExpected environment:\n%s", env, expect) + } +} + +func TestEtcdEnvironmentDiscoveryOverridesDiscoveryURL(t *testing.T) { + cfg := make(EtcdEnvironment, 0) + cfg["discovery_url"] = "ping" + cfg["discovery"] = "pong" + cfg["peer-bind-addr"] = "127.0.0.1:7002" + + env := cfg.String() + expect := `[Service] +Environment="ETCD_DISCOVERY=pong" Environment="ETCD_PEER_BIND_ADDR=127.0.0.1:7002" ` @@ -47,7 +80,7 @@ Environment="ETCD_PEER_BIND_ADDR=192.0.2.13:7001" func TestEtcdEnvironmentWrittenToDisk(t *testing.T) { ec := EtcdEnvironment{ "name": "node001", - "discovery_url": "http://disco.example.com/foobar", + "discovery": "http://disco.example.com/foobar", "peer-bind-addr": "127.0.0.1:7002", } dir, err := ioutil.TempDir(os.TempDir(), "coreos-cloudinit-") @@ -78,7 +111,7 @@ func TestEtcdEnvironmentWrittenToDisk(t *testing.T) { expect := `[Service] Environment="ETCD_NAME=node001" -Environment="ETCD_DISCOVERY_URL=http://disco.example.com/foobar" +Environment="ETCD_DISCOVERY=http://disco.example.com/foobar" Environment="ETCD_PEER_BIND_ADDR=127.0.0.1:7002" ` if string(contents) != expect {