Merge branch '17995-filter-by-comparing-attrs'
[arvados.git] / sdk / go / arvadosclient / arvadosclient.go
index d90c618f7a1effa8c3da8031cb98909a1b37df3f..8f902d3a09574d2f52ef388978c51f391b4b9d58 100644 (file)
@@ -146,7 +146,7 @@ func MakeTLSConfig(insecure bool) *tls.Config {
                        data, err := ioutil.ReadFile(file)
                        if err != nil {
                                if !os.IsNotExist(err) {
-                                       log.Printf("error reading %q: %s", file, err)
+                                       log.Printf("proceeding without loading cert file %q: %s", file, err)
                                }
                                continue
                        }
@@ -206,6 +206,9 @@ func (c *ArvadosClient) CallRaw(method string, resourceType string, uuid string,
        if scheme == "" {
                scheme = "https"
        }
+       if c.ApiServer == "" {
+               return nil, fmt.Errorf("Arvados client is not configured (target API host is not set). Maybe env var ARVADOS_API_HOST should be set first?")
+       }
        u := url.URL{
                Scheme: scheme,
                Host:   c.ApiServer}
@@ -423,6 +426,24 @@ func (c *ArvadosClient) Discovery(parameter string) (value interface{}, err erro
        return value, ErrInvalidArgument
 }
 
+// ClusterConfig returns the value of the given key in the current cluster's
+// exported config. If key is an empty string, it'll return the entire config.
+func (c *ArvadosClient) ClusterConfig(key string) (config interface{}, err error) {
+       var clusterConfig interface{}
+       err = c.Call("GET", "config", "", "", nil, &clusterConfig)
+       if err != nil {
+               return nil, err
+       }
+       if key == "" {
+               return clusterConfig, nil
+       }
+       configData, ok := clusterConfig.(map[string]interface{})[key]
+       if !ok {
+               return nil, ErrInvalidArgument
+       }
+       return configData, nil
+}
+
 func (c *ArvadosClient) httpClient() *http.Client {
        if c.Client != nil {
                return c.Client