X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0d50e82dd2255104e60c0882045b54774e1be380..ef5ce10fcd3d3930bd3bbac310c5f39838c8325f:/sdk/go/arvados/client.go diff --git a/sdk/go/arvados/client.go b/sdk/go/arvados/client.go index cca9f9bf1b..cbc2ca72f0 100644 --- a/sdk/go/arvados/client.go +++ b/sdk/go/arvados/client.go @@ -69,6 +69,21 @@ var InsecureHTTPClient = &http.Client{ var DefaultSecureClient = &http.Client{ Timeout: 5 * time.Minute} +// NewClientFromConfig creates a new Client that uses the endpoints in +// the given cluster. +// +// AuthToken is left empty for the caller to populate. +func NewClientFromConfig(cluster *Cluster) (*Client, error) { + ctrlURL := cluster.Services.Controller.ExternalURL + if ctrlURL.Host == "" { + return nil, fmt.Errorf("no host in config Services.Controller.ExternalURL: %v", ctrlURL) + } + return &Client{ + APIHost: ctrlURL.Host, + Insecure: cluster.TLS.Insecure, + }, nil +} + // NewClientFromEnv creates a new Client that uses the default HTTP // client with the API endpoint and credentials given by the // ARVADOS_API_* environment variables. @@ -210,14 +225,19 @@ func (c *Client) RequestAndDecode(dst interface{}, method, path string, body io. if err != nil { return err } - if (method == "GET" || body != nil) && urlValues != nil { - // FIXME: what if params don't fit in URL + if urlValues == nil { + // Nothing to send + } else if method == "GET" || method == "HEAD" || body != nil { + // Must send params in query part of URL (FIXME: what + // if resulting URL is too long?) u, err := url.Parse(urlString) if err != nil { return err } u.RawQuery = urlValues.Encode() urlString = u.String() + } else { + body = strings.NewReader(urlValues.Encode()) } req, err := http.NewRequest(method, urlString, body) if err != nil {