X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f0e6212bbe6e34f6ac4e928a236e77cca852895d..af3bfbb6126ebce381c52ced87fc8af372d84118:/sdk/go/arvados/config.go diff --git a/sdk/go/arvados/config.go b/sdk/go/arvados/config.go index d7bae38080..b0c7069cd9 100644 --- a/sdk/go/arvados/config.go +++ b/sdk/go/arvados/config.go @@ -1,22 +1,27 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: Apache-2.0 + package arvados import ( "fmt" "os" - "strings" "git.curoverse.com/arvados.git/sdk/go/config" ) +const DefaultConfigFile = "/etc/arvados/config.yml" + type Config struct { Clusters map[string]Cluster } // GetConfig returns the current system config, loading it from -// /etc if needed. -func GetConfig() (*Config, error) { +// configFile if needed. +func GetConfig(configFile string) (*Config, error) { var cfg Config - err := config.LoadFile(&cfg, "/etc/arvados/config.yml") + err := config.LoadFile(&cfg, configFile) return &cfg, err } @@ -47,10 +52,21 @@ type Cluster struct { ClusterID string `json:"-"` ManagementToken string SystemNodes map[string]SystemNode + InstanceTypes []InstanceType +} + +type InstanceType struct { + Name string + ProviderType string + VCPUs int + RAM int64 + Scratch int64 + Price float64 + Preemptable bool } -// GetThisSystemNodeConfig returns a SystemNode for the node we're -// running on right now. +// GetThisSystemNode returns a SystemNode for the node we're running +// on right now. func (cc *Cluster) GetThisSystemNode() (*SystemNode, error) { hostname, err := os.Hostname() if err != nil { @@ -59,18 +75,12 @@ func (cc *Cluster) GetThisSystemNode() (*SystemNode, error) { return cc.GetSystemNode(hostname) } -// GetSystemNodeConfig returns a NodeConfig for the given node. An -// error is returned if the appropriate configuration can't be -// determined (e.g., this does not appear to be a system node). +// 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). func (cc *Cluster) GetSystemNode(node string) (*SystemNode, error) { - // Generally node is "a.b.ca", use the first of {"a.b.ca", - // "a.b", "a"} that has an entry in SystemNodes. - labels := strings.Split(node, ".") - for j := len(labels); j > 0; j-- { - hostpart := strings.Join(labels[:j], ".") - if cfg, ok := cc.SystemNodes[hostpart]; ok { - return &cfg, nil - } + if cfg, ok := cc.SystemNodes[node]; ok { + return &cfg, nil } // If node is not listed, but "*" gives a default system node // config, use the default config. @@ -81,14 +91,30 @@ func (cc *Cluster) GetSystemNode(node string) (*SystemNode, error) { } type SystemNode struct { - Health Health - Keepstore Keepstore + Health SystemServiceInstance `json:"arvados-health"` + Keepproxy SystemServiceInstance `json:"keepproxy"` + Keepstore SystemServiceInstance `json:"keepstore"` + Keepweb SystemServiceInstance `json:"keep-web"` + Nodemanager SystemServiceInstance `json:"arvados-node-manager"` + RailsAPI SystemServiceInstance `json:"arvados-api-server"` + Websocket SystemServiceInstance `json:"arvados-ws"` + Workbench SystemServiceInstance `json:"arvados-workbench"` } -type Health struct { - Listen string +// ServicePorts returns the configured listening address (or "" if +// disabled) for each service on the node. +func (sn *SystemNode) ServicePorts() map[string]string { + return map[string]string{ + "arvados-api-server": sn.RailsAPI.Listen, + "arvados-node-manager": sn.Nodemanager.Listen, + "arvados-workbench": sn.Workbench.Listen, + "arvados-ws": sn.Websocket.Listen, + "keep-web": sn.Keepweb.Listen, + "keepproxy": sn.Keepproxy.Listen, + "keepstore": sn.Keepstore.Listen, + } } -type Keepstore struct { +type SystemServiceInstance struct { Listen string }