13497: Rename SystemNodes to NodeProfiles in config.
authorTom Clegg <tclegg@veritasgenetics.com>
Fri, 15 Jun 2018 19:26:24 +0000 (15:26 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Fri, 15 Jun 2018 19:26:24 +0000 (15:26 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

lib/controller/cmd.go
lib/controller/handler.go
lib/controller/handler_test.go
lib/service/cmd.go
sdk/go/arvados/config.go
sdk/go/health/aggregator.go
sdk/go/health/aggregator_test.go
sdk/python/tests/run_test_server.py
services/health/main.go

index 02fb3afbae59b95e81ce2725898b8781f4d76040..94eb2580bd759c9c781dc2346353440124207899 100644 (file)
@@ -12,6 +12,6 @@ import (
 
 var Command cmd.Handler = service.Command(arvados.ServiceNameController, newHandler)
 
-func newHandler(cluster *arvados.Cluster, node *arvados.SystemNode) service.Handler {
-       return &Handler{Cluster: cluster, Node: node}
+func newHandler(cluster *arvados.Cluster, np *arvados.NodeProfile) service.Handler {
+       return &Handler{Cluster: cluster, NodeProfile: np}
 }
index 643a932a5cd9e216608b9574432367a820b03080..59c2f2a61d9d534f19cfb45ee2a34a38a4381808 100644 (file)
@@ -20,8 +20,8 @@ import (
 )
 
 type Handler struct {
-       Cluster *arvados.Cluster
-       Node    *arvados.SystemNode
+       Cluster     *arvados.Cluster
+       NodeProfile *arvados.NodeProfile
 
        setupOnce    sync.Once
        handlerStack http.Handler
@@ -63,7 +63,7 @@ var dropHeaders = map[string]bool{
 }
 
 func (h *Handler) proxyRailsAPI(w http.ResponseWriter, reqIn *http.Request) {
-       urlOut, err := findRailsAPI(h.Cluster, h.Node)
+       urlOut, err := findRailsAPI(h.Cluster, h.NodeProfile)
        if err != nil {
                httpserver.Error(w, err.Error(), http.StatusInternalServerError)
                return
@@ -123,8 +123,8 @@ func (h *Handler) proxyRailsAPI(w http.ResponseWriter, reqIn *http.Request) {
 
 // For now, findRailsAPI always uses the rails API running on this
 // node.
-func findRailsAPI(cluster *arvados.Cluster, node *arvados.SystemNode) (*url.URL, error) {
-       hostport := node.RailsAPI.Listen
+func findRailsAPI(cluster *arvados.Cluster, np *arvados.NodeProfile) (*url.URL, error) {
+       hostport := np.RailsAPI.Listen
        if len(hostport) > 1 && hostport[0] == ':' && strings.TrimRight(hostport[1:], "0123456789") == "" {
                // ":12345" => connect to indicated port on localhost
                hostport = "localhost" + hostport
@@ -134,7 +134,7 @@ func findRailsAPI(cluster *arvados.Cluster, node *arvados.SystemNode) (*url.URL,
                return nil, err
        }
        proto := "http"
-       if node.RailsAPI.TLS {
+       if np.RailsAPI.TLS {
                proto = "https"
        }
        return url.Parse(proto + "://" + hostport)
index 70a337a6c448a5941e1fb356a396c0146cc59370..981ad7ab91919c65327e972e6004b0eb15594352 100644 (file)
@@ -35,14 +35,14 @@ type HandlerSuite struct {
 func (s *HandlerSuite) SetUpTest(c *check.C) {
        s.cluster = &arvados.Cluster{
                ClusterID: "zzzzz",
-               SystemNodes: map[string]arvados.SystemNode{
+               NodeProfiles: map[string]arvados.NodeProfile{
                        "*": {
                                Controller: arvados.SystemServiceInstance{Listen: ":"},
                                RailsAPI:   arvados.SystemServiceInstance{Listen: os.Getenv("ARVADOS_TEST_API_HOST"), TLS: true},
                        },
                },
        }
-       node := s.cluster.SystemNodes["*"]
+       node := s.cluster.NodeProfiles["*"]
        s.handler = newHandler(s.cluster, &node)
 }
 
index a144c01a6f01e35ab3b82b38ae6bfd032d11fb1d..4584939f7660b3519895fd5a3a2bc3f640cb9746 100644 (file)
@@ -10,6 +10,7 @@ import (
        "fmt"
        "io"
        "net/http"
+       "os"
 
        "git.curoverse.com/arvados.git/lib/cmd"
        "git.curoverse.com/arvados.git/sdk/go/arvados"
@@ -23,7 +24,7 @@ type Handler interface {
        CheckHealth() error
 }
 
-type NewHandlerFunc func(*arvados.Cluster, *arvados.SystemNode) Handler
+type NewHandlerFunc func(*arvados.Cluster, *arvados.NodeProfile) Handler
 
 type command struct {
        newHandler NewHandlerFunc
@@ -59,7 +60,7 @@ func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
        flags := flag.NewFlagSet("", flag.ContinueOnError)
        flags.SetOutput(stderr)
        configFile := flags.String("config", arvados.DefaultConfigFile, "Site configuration `file`")
-       hostName := flags.String("host", "", "Host profile `name` to use in SystemNodes config (if blank, use hostname reported by OS)")
+       nodeProfile := flags.String("node-profile", "", "`Name` of NodeProfiles config entry to use (if blank, use $ARVADOS_NODE_PROFILE or hostname reported by OS)")
        err = flags.Parse(args)
        if err == flag.ErrHelp {
                err = nil
@@ -75,16 +76,20 @@ func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
        if err != nil {
                return 1
        }
-       node, err := cluster.GetSystemNode(*hostName)
+       profileName := *nodeProfile
+       if profileName == "" {
+               profileName = os.Getenv("ARVADOS_NODE_PROFILE")
+       }
+       profile, err := cluster.GetNodeProfile(profileName)
        if err != nil {
                return 1
        }
-       listen := node.ServicePorts()[c.svcName]
+       listen := profile.ServicePorts()[c.svcName]
        if listen == "" {
                err = fmt.Errorf("configuration does not enable the %s service on this host", c.svcName)
                return 1
        }
-       handler := c.newHandler(cluster, node)
+       handler := c.newHandler(cluster, profile)
        if err = handler.CheckHealth(); err != nil {
                return 1
        }
index a74c6d8d635596bff576cda9d4ab85d3c7db65bf..8856c929564cf3efb902e19ce48fe7f808c6862e 100644 (file)
@@ -51,7 +51,7 @@ func (sc *Config) GetCluster(clusterID string) (*Cluster, error) {
 type Cluster struct {
        ClusterID          string `json:"-"`
        ManagementToken    string
-       SystemNodes        map[string]SystemNode
+       NodeProfiles       map[string]NodeProfile
        InstanceTypes      []InstanceType
        HTTPRequestTimeout Duration
 }
@@ -65,17 +65,11 @@ type InstanceType struct {
        Price        float64
 }
 
-// GetThisSystemNode returns a SystemNode for the node we're running
-// on right now.
-func (cc *Cluster) GetThisSystemNode() (*SystemNode, error) {
-       return cc.GetSystemNode("")
-}
-
-// GetSystemNode returns a SystemNode for the given hostname. An error
-// is returned if the appropriate configuration can't be determined
-// (e.g., this does not appear to be a system node). If node is empty,
-// use the OS-reported hostname.
-func (cc *Cluster) GetSystemNode(node string) (*SystemNode, error) {
+// GetNodeProfile returns a NodeProfile for the given hostname. An
+// error is returned if the appropriate configuration can't be
+// determined (e.g., this does not appear to be a system node). If
+// node is empty, use the OS-reported hostname.
+func (cc *Cluster) GetNodeProfile(node string) (*NodeProfile, error) {
        if node == "" {
                hostname, err := os.Hostname()
                if err != nil {
@@ -83,18 +77,18 @@ func (cc *Cluster) GetSystemNode(node string) (*SystemNode, error) {
                }
                node = hostname
        }
-       if cfg, ok := cc.SystemNodes[node]; ok {
+       if cfg, ok := cc.NodeProfiles[node]; ok {
                return &cfg, nil
        }
        // If node is not listed, but "*" gives a default system node
        // config, use the default config.
-       if cfg, ok := cc.SystemNodes["*"]; ok {
+       if cfg, ok := cc.NodeProfiles["*"]; ok {
                return &cfg, nil
        }
        return nil, fmt.Errorf("config does not provision host %q as a system node", node)
 }
 
-type SystemNode struct {
+type NodeProfile struct {
        Controller  SystemServiceInstance `json:"arvados-controller"`
        Health      SystemServiceInstance `json:"arvados-health"`
        Keepproxy   SystemServiceInstance `json:"keepproxy"`
@@ -121,16 +115,16 @@ const (
 
 // ServicePorts returns the configured listening address (or "" if
 // disabled) for each service on the node.
-func (sn *SystemNode) ServicePorts() map[ServiceName]string {
+func (np *NodeProfile) ServicePorts() map[ServiceName]string {
        return map[ServiceName]string{
-               ServiceNameRailsAPI:    sn.RailsAPI.Listen,
-               ServiceNameController:  sn.Controller.Listen,
-               ServiceNameNodemanager: sn.Nodemanager.Listen,
-               ServiceNameWorkbench:   sn.Workbench.Listen,
-               ServiceNameWebsocket:   sn.Websocket.Listen,
-               ServiceNameKeepweb:     sn.Keepweb.Listen,
-               ServiceNameKeepproxy:   sn.Keepproxy.Listen,
-               ServiceNameKeepstore:   sn.Keepstore.Listen,
+               ServiceNameRailsAPI:    np.RailsAPI.Listen,
+               ServiceNameController:  np.Controller.Listen,
+               ServiceNameNodemanager: np.Nodemanager.Listen,
+               ServiceNameWorkbench:   np.Workbench.Listen,
+               ServiceNameWebsocket:   np.Websocket.Listen,
+               ServiceNameKeepweb:     np.Keepweb.Listen,
+               ServiceNameKeepproxy:   np.Keepproxy.Listen,
+               ServiceNameKeepstore:   np.Keepstore.Listen,
        }
 }
 
index 3f3a918004e58255ca06a99b142d825fb5f75354..a6cb8798aa328a468c1db98c3c3e5bf38773f15c 100644 (file)
@@ -113,8 +113,8 @@ func (agg *Aggregator) ClusterHealth(cluster *arvados.Cluster) ClusterHealthResp
 
        mtx := sync.Mutex{}
        wg := sync.WaitGroup{}
-       for node, nodeConfig := range cluster.SystemNodes {
-               for svc, addr := range nodeConfig.ServicePorts() {
+       for profileName, profile := range cluster.NodeProfiles {
+               for svc, addr := range profile.ServicePorts() {
                        // Ensure svc is listed in resp.Services.
                        mtx.Lock()
                        if _, ok := resp.Services[svc]; !ok {
@@ -128,10 +128,10 @@ func (agg *Aggregator) ClusterHealth(cluster *arvados.Cluster) ClusterHealthResp
                        }
 
                        wg.Add(1)
-                       go func(node string, svc arvados.ServiceName, addr string) {
+                       go func(profileName string, svc arvados.ServiceName, addr string) {
                                defer wg.Done()
                                var result CheckResult
-                               url, err := agg.pingURL(node, addr)
+                               url, err := agg.pingURL(profileName, addr)
                                if err != nil {
                                        result = CheckResult{
                                                Health: "ERROR",
@@ -152,7 +152,7 @@ func (agg *Aggregator) ClusterHealth(cluster *arvados.Cluster) ClusterHealthResp
                                } else {
                                        resp.Health = "ERROR"
                                }
-                       }(node, svc, addr)
+                       }(profileName, svc, addr)
                }
        }
        wg.Wait()
index 4c652254b6aa6aef647b046753d116005cbf5eda..a96ed136cbd1539d986a1332a4914c61af335d6a 100644 (file)
@@ -34,7 +34,7 @@ func (s *AggregatorSuite) SetUpTest(c *check.C) {
                Clusters: map[string]arvados.Cluster{
                        "zzzzz": {
                                ManagementToken: arvadostest.ManagementToken,
-                               SystemNodes:     map[string]arvados.SystemNode{},
+                               NodeProfiles:    map[string]arvados.NodeProfile{},
                        },
                },
        }}
@@ -86,7 +86,7 @@ func (*unhealthyHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request)
 func (s *AggregatorSuite) TestUnhealthy(c *check.C) {
        srv, listen := s.stubServer(&unhealthyHandler{})
        defer srv.Close()
-       s.handler.Config.Clusters["zzzzz"].SystemNodes["localhost"] = arvados.SystemNode{
+       s.handler.Config.Clusters["zzzzz"].NodeProfiles["localhost"] = arvados.NodeProfile{
                Keepstore: arvados.SystemServiceInstance{Listen: listen},
        }
        s.handler.ServeHTTP(s.resp, s.req)
@@ -106,7 +106,7 @@ func (*healthyHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
 func (s *AggregatorSuite) TestHealthy(c *check.C) {
        srv, listen := s.stubServer(&healthyHandler{})
        defer srv.Close()
-       s.handler.Config.Clusters["zzzzz"].SystemNodes["localhost"] = arvados.SystemNode{
+       s.handler.Config.Clusters["zzzzz"].NodeProfiles["localhost"] = arvados.NodeProfile{
                Controller:  arvados.SystemServiceInstance{Listen: listen},
                Keepproxy:   arvados.SystemServiceInstance{Listen: listen},
                Keepstore:   arvados.SystemServiceInstance{Listen: listen},
@@ -130,7 +130,7 @@ func (s *AggregatorSuite) TestHealthyAndUnhealthy(c *check.C) {
        defer srvH.Close()
        srvU, listenU := s.stubServer(&unhealthyHandler{})
        defer srvU.Close()
-       s.handler.Config.Clusters["zzzzz"].SystemNodes["localhost"] = arvados.SystemNode{
+       s.handler.Config.Clusters["zzzzz"].NodeProfiles["localhost"] = arvados.NodeProfile{
                Controller:  arvados.SystemServiceInstance{Listen: listenH},
                Keepproxy:   arvados.SystemServiceInstance{Listen: listenH},
                Keepstore:   arvados.SystemServiceInstance{Listen: listenH},
@@ -140,7 +140,7 @@ func (s *AggregatorSuite) TestHealthyAndUnhealthy(c *check.C) {
                Websocket:   arvados.SystemServiceInstance{Listen: listenH},
                Workbench:   arvados.SystemServiceInstance{Listen: listenH},
        }
-       s.handler.Config.Clusters["zzzzz"].SystemNodes["127.0.0.1"] = arvados.SystemNode{
+       s.handler.Config.Clusters["zzzzz"].NodeProfiles["127.0.0.1"] = arvados.NodeProfile{
                Keepstore: arvados.SystemServiceInstance{Listen: listenU},
        }
        s.handler.ServeHTTP(s.resp, s.req)
@@ -194,7 +194,7 @@ func (s *AggregatorSuite) TestPingTimeout(c *check.C) {
        s.handler.timeout = arvados.Duration(100 * time.Millisecond)
        srv, listen := s.stubServer(&slowHandler{})
        defer srv.Close()
-       s.handler.Config.Clusters["zzzzz"].SystemNodes["localhost"] = arvados.SystemNode{
+       s.handler.Config.Clusters["zzzzz"].NodeProfiles["localhost"] = arvados.NodeProfile{
                Keepstore: arvados.SystemServiceInstance{Listen: listen},
        }
        s.handler.ServeHTTP(s.resp, s.req)
index dc4d721f1f2aab7740d17e3ad33f97afcf8e8e46..f7ca6daf6f65c190ccd22a1a04ad3cb1996f3e75 100644 (file)
@@ -408,7 +408,7 @@ def run_controller():
         f.write("""
 Clusters:
   zzzzz:
-    SystemNodes:
+    NodeProfiles:
       "*":
         "arvados-controller":
           Listen: ":{}"
index 376d4830b153b85cd82df1220902059b1aa2e4ac..1d2ec47a6af41d39907d62105fcb898e462ff82a 100644 (file)
@@ -41,7 +41,7 @@ func main() {
        if err != nil {
                log.Fatal(err)
        }
-       nodeCfg, err := clusterCfg.GetThisSystemNode()
+       nodeCfg, err := clusterCfg.GetNodeProfile("")
        if err != nil {
                log.Fatal(err)
        }