// getPeerURLsMapAndToken sets up an initial peer URLsMap and cluster token for bootstrap or discovery. func getPeerURLsMapAndToken(cfg *config, which string) (urlsmap types.URLsMap, token string, err error) { switch { case cfg.durl != "": urlsmap = types.URLsMap{} // If using discovery, generate a temporary cluster based on // self's advertised peer URLs urlsmap[cfg.name] = cfg.apurls token = cfg.durl case cfg.dnsCluster != "": var clusterStr string clusterStr, token, err = discovery.SRVGetCluster(cfg.name, cfg.dnsCluster, cfg.initialClusterToken, cfg.apurls) if err != nil { return nil, "", err } urlsmap, err = types.NewURLsMap(clusterStr) // only etcd member must belong to the discovered cluster. // proxy does not need to belong to the discovered cluster. if which == "etcd" { if _, ok := urlsmap[cfg.name]; !ok { return nil, "", fmt.Errorf("cannot find local etcd member %q in SRV records", cfg.name) } } default: // We're statically configured, and cluster has appropriately been set. urlsmap, err = types.NewURLsMap(cfg.initialCluster) token = cfg.initialClusterToken } return urlsmap, token, err }
// PeerURLsMapAndToken sets up an initial peer URLsMap and cluster token for bootstrap or discovery. func (cfg *Config) PeerURLsMapAndToken(which string) (urlsmap types.URLsMap, token string, err error) { switch { case cfg.Durl != "": urlsmap = types.URLsMap{} // If using discovery, generate a temporary cluster based on // self's advertised peer URLs urlsmap[cfg.Name] = cfg.APUrls token = cfg.Durl case cfg.DNSCluster != "": var clusterStr string clusterStr, token, err = discovery.SRVGetCluster(cfg.Name, cfg.DNSCluster, cfg.InitialClusterToken, cfg.APUrls) if err != nil { return nil, "", err } if strings.Contains(clusterStr, "https://") && cfg.PeerTLSInfo.CAFile == "" { cfg.PeerTLSInfo.ServerName = cfg.DNSCluster } urlsmap, err = types.NewURLsMap(clusterStr) // only etcd member must belong to the discovered cluster. // proxy does not need to belong to the discovered cluster. if which == "etcd" { if _, ok := urlsmap[cfg.Name]; !ok { return nil, "", fmt.Errorf("cannot find local etcd member %q in SRV records", cfg.Name) } } default: // We're statically configured, and cluster has appropriately been set. urlsmap, err = types.NewURLsMap(cfg.InitialCluster) token = cfg.InitialClusterToken } return urlsmap, token, err }
// setupCluster sets up an initial cluster definition for bootstrap or discovery. func setupCluster(cfg *config) (*etcdserver.Cluster, error) { var cls *etcdserver.Cluster var err error switch { case cfg.durl != "": // If using discovery, generate a temporary cluster based on // self's advertised peer URLs clusterStr := genClusterString(cfg.name, cfg.apurls) cls, err = etcdserver.NewClusterFromString(cfg.durl, clusterStr) case cfg.dnsCluster != "": clusterStr, clusterToken, err := discovery.SRVGetCluster(cfg.name, cfg.dnsCluster, cfg.initialClusterToken, cfg.apurls) if err != nil { return nil, err } cls, err = etcdserver.NewClusterFromString(clusterToken, clusterStr) default: // We're statically configured, and cluster has appropriately been set. cls, err = etcdserver.NewClusterFromString(cfg.initialClusterToken, cfg.initialCluster) } return cls, err }
// getPeerURLsMapAndToken sets up an initial peer URLsMap and cluster token for bootstrap or discovery. func getPeerURLsMapAndToken(cfg *config) (urlsmap types.URLsMap, token string, err error) { switch { case cfg.durl != "": urlsmap = types.URLsMap{} // If using discovery, generate a temporary cluster based on // self's advertised peer URLs urlsmap[cfg.name] = cfg.apurls token = cfg.durl case cfg.dnsCluster != "": var clusterStr string clusterStr, token, err = discovery.SRVGetCluster(cfg.name, cfg.dnsCluster, cfg.initialClusterToken, cfg.apurls) if err != nil { return nil, "", err } urlsmap, err = types.NewURLsMap(clusterStr) default: // We're statically configured, and cluster has appropriately been set. urlsmap, err = types.NewURLsMap(cfg.initialCluster) token = cfg.initialClusterToken } return urlsmap, token, err }