fix(etcd): fixup the name and data dir guessing

- Only generate the name from a hostname if the data dir is not
  specified and the name is not specified

- Only guess the data dir from Name if the data dir wasn't already
  specified
This commit is contained in:
Brandon Philips 2013-11-27 12:17:20 -08:00
parent c93f086032
commit 04711ecde5
2 changed files with 35 additions and 15 deletions

30
etcd.go
View File

@ -52,24 +52,18 @@ func main() {
profile(config.CPUProfileFile)
}
// Load info object.
info, err := config.Info()
if err != nil {
log.Fatal("info:", err)
}
if info.Name == "" {
host, err := os.Hostname()
if err != nil || host == "" {
log.Fatal("Node name required and hostname not set. e.g. '-name=name'")
}
log.Warnf("Using hostname %s as the node name. You must ensure this name is unique among etcd nodes.", host)
info.Name = host
// Only guess the machine name if there is no data dir specified
// because the info file will should have our name
if config.Name == "" && config.DataDir == "" {
config.NameFromHostname()
}
if config.DataDir == "" && config.Name != "" {
config.DataDirFromName()
}
// Setup a default directory based on the node name
if config.DataDir == "" {
config.DataDir = info.Name + ".etcd"
log.Warnf("Using the directory %s as the etcd configuration directory because a directory was not specified. ", config.DataDir)
log.Fatal("The data dir was not set and could not be guessed from machine name")
}
// Create data directory if it doesn't already exist.
@ -77,6 +71,12 @@ func main() {
log.Fatalf("Unable to create path: %s", err)
}
// Load info object.
info, err := config.Info()
if err != nil {
log.Fatal("info:", err)
}
// Retrieve TLS configuration.
tlsConfig, err := info.EtcdTLS.Config()
if err != nil {

View File

@ -13,6 +13,7 @@ import (
"strconv"
"strings"
"github.com/coreos/etcd/log"
"github.com/BurntSushi/toml"
)
@ -300,6 +301,25 @@ func (c *Config) LoadPeersFile() error {
return nil
}
// DataDirFromName sets the data dir from a machine name and issue a warning
// that etcd is guessing.
func (c *Config) DataDirFromName() {
c.DataDir = c.Name + ".etcd"
log.Warnf("Using the directory %s as the etcd curation directory because a directory was not specified. ", c.DataDir)
return
}
// NameFromHostname sets the machine name from the hostname. This is to help
// people get started without thinking up a name.
func (c *Config) NameFromHostname() {
host, err := os.Hostname()
if err != nil && host == "" {
log.Fatal("Node name required and hostname not set. e.g. '-name=name'")
}
c.Name = host
}
// Reset removes all server configuration files.
func (c *Config) Reset() error {
if err := os.RemoveAll(filepath.Join(c.DataDir, "info")); err != nil {