16306: Merge branch 'master'
[arvados.git] / lib / controller / railsproxy / railsproxy.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 // Package railsproxy implements Arvados APIs by proxying to the
6 // RailsAPI server on the local machine.
7 package railsproxy
8
9 import (
10         "fmt"
11         "net/url"
12         "strings"
13
14         "git.arvados.org/arvados.git/lib/controller/rpc"
15         "git.arvados.org/arvados.git/sdk/go/arvados"
16 )
17
18 // FindRailsAPI always uses the rails API running on this node, for now.
19 func FindRailsAPI(cluster *arvados.Cluster) (*url.URL, bool, error) {
20         var best *url.URL
21         for target := range cluster.Services.RailsAPI.InternalURLs {
22                 target := url.URL(target)
23                 best = &target
24                 if strings.HasPrefix(target.Host, "localhost:") || strings.HasPrefix(target.Host, "127.0.0.1:") || strings.HasPrefix(target.Host, "[::1]:") {
25                         break
26                 }
27         }
28         if best == nil {
29                 return nil, false, fmt.Errorf("Services.RailsAPI.InternalURLs is empty")
30         }
31         return best, cluster.TLS.Insecure, nil
32 }
33
34 func NewConn(cluster *arvados.Cluster) *rpc.Conn {
35         url, insecure, err := FindRailsAPI(cluster)
36         if err != nil {
37                 panic(err)
38         }
39         return rpc.NewConn(cluster.ClusterID, url, insecure, rpc.PassthroughTokenProvider)
40 }