func mustNewHTTPClient(t *testing.T, eps []string) client.HTTPClient { cc, err := client.NewHTTPClient(mustNewTransport(t), eps) if err != nil { t.Fatal(err) } return cc }
func mustNewMembersAPI(c *cli.Context) client.MembersAPI { eps, err := getEndpoints(c) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } tr, err := getTransport(c) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } hc, err := client.NewHTTPClient(tr, eps) if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } if !c.GlobalBool("no-sync") { ctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) err := hc.Sync(ctx) cancel() if err != nil { fmt.Fprintln(os.Stderr, err.Error()) os.Exit(1) } } if c.GlobalBool("debug") { fmt.Fprintf(os.Stderr, "Cluster-Endpoints: %s\n", strings.Join(hc.Endpoints(), ", ")) } return client.NewMembersAPI(hc) }
func getPeersFromDiscoveryURL(discoverURL string) ([]string, error) { if discoverURL == "" { return nil, nil } u, err := url.Parse(discoverURL) if err != nil { return nil, err } token := u.Path u.Path = "" c, err := client.NewHTTPClient(&http.Transport{}, []string{u.String()}) if err != nil { return nil, err } dc := client.NewDiscoveryKeysAPI(c) ctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) resp, err := dc.Get(ctx, token) cancel() if err != nil { return nil, err } peers := make([]string, 0) // append non-config keys to peers for _, n := range resp.Node.Nodes { if g := path.Base(n.Key); g == "_config" || g == "_state" { continue } peers = append(peers, n.Value) } return peers, nil }
func newDiscovery(durl, dproxyurl string, id types.ID) (*discovery, error) { u, err := url.Parse(durl) if err != nil { return nil, err } token := u.Path u.Path = "" pf, err := newProxyFunc(dproxyurl) if err != nil { return nil, err } c, err := client.NewHTTPClient(&http.Transport{Proxy: pf}, []string{u.String()}) if err != nil { return nil, err } dc := client.NewDiscoveryKeysAPI(c) return &discovery{ cluster: token, c: dc, id: id, url: u, clock: clockwork.NewRealClock(), }, nil }