17170: Return more helpful error if APIHost is not set.
authorTom Clegg <tom@curii.com>
Wed, 27 Jan 2021 06:55:32 +0000 (01:55 -0500)
committerTom Clegg <tom@curii.com>
Wed, 27 Jan 2021 06:55:32 +0000 (01:55 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

sdk/go/arvados/client.go

index 52c75d5113c2a9399267e90fb8c18c8a5aeeaad7..ea3cb6899e7bd5ac9f92cc0d3127e6aa3a485f13 100644 (file)
@@ -9,6 +9,7 @@ import (
        "context"
        "crypto/tls"
        "encoding/json"
+       "errors"
        "fmt"
        "io"
        "io/ioutil"
@@ -67,6 +68,10 @@ type Client struct {
        dd *DiscoveryDocument
 
        defaultRequestID string
+
+       // APIHost and AuthToken were loaded from ARVADOS_* env vars
+       // (used to customize "no host/token" error messages)
+       loadedFromEnv bool
 }
 
 // InsecureHTTPClient is the default http.Client used by a Client with
@@ -123,6 +128,7 @@ func NewClientFromEnv() *Client {
                Insecure:        insecure,
                KeepServiceURIs: svcs,
                Timeout:         5 * time.Minute,
+               loadedFromEnv:   true,
        }
 }
 
@@ -312,6 +318,13 @@ func (c *Client) RequestAndDecodeContext(ctx context.Context, dst interface{}, m
                // Ensure body is closed even if we error out early
                defer body.Close()
        }
+       if c.APIHost == "" {
+               if c.loadedFromEnv {
+                       return errors.New("ARVADOS_API_HOST and/or ARVADOS_API_TOKEN environment variables are not set")
+               } else {
+                       return errors.New("arvados.Client cannot perform request: APIHost is not set")
+               }
+       }
        urlString := c.apiURL(path)
        urlValues, err := anythingToValues(params)
        if err != nil {