X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/05077735f59ec3027c365aeeb270ddc78727ce14..0ce66018616c5177bc9268280119d6f08f339d4d:/lib/config/deprecated.go diff --git a/lib/config/deprecated.go b/lib/config/deprecated.go index f1714fa0b9..efc9f0837e 100644 --- a/lib/config/deprecated.go +++ b/lib/config/deprecated.go @@ -5,13 +5,14 @@ package config import ( + "encoding/json" "fmt" "io/ioutil" "net/url" "os" "strings" - "git.curoverse.com/arvados.git/sdk/go/arvados" + "git.arvados.org/arvados.git/sdk/go/arvados" "github.com/ghodss/yaml" ) @@ -23,6 +24,13 @@ type deprRequestLimits struct { type deprCluster struct { RequestLimits deprRequestLimits NodeProfiles map[string]nodeProfile + Login struct { + GoogleClientID *string + GoogleClientSecret *string + GoogleAlternateEmailAddresses *bool + ProviderAppID *string + ProviderAppSecret *string + } } type deprecatedConfig struct { @@ -36,7 +44,6 @@ type nodeProfile struct { Keepproxy systemServiceInstance `json:"keepproxy"` Keepstore systemServiceInstance `json:"keepstore"` Keepweb systemServiceInstance `json:"keep-web"` - Nodemanager systemServiceInstance `json:"arvados-node-manager"` DispatchCloud systemServiceInstance `json:"arvados-dispatch-cloud"` RailsAPI systemServiceInstance `json:"arvados-api-server"` Websocket systemServiceInstance `json:"arvados-ws"` @@ -80,11 +87,71 @@ func (ldr *Loader) applyDeprecatedConfig(cfg *arvados.Config) error { if dst, n := &cluster.API.MaxRequestAmplification, dcluster.RequestLimits.MultiClusterRequestConcurrency; n != nil && *n != *dst { *dst = *n } + + // Google* moved to Google.* + if dst, n := &cluster.Login.Google.ClientID, dcluster.Login.GoogleClientID; n != nil && *n != *dst { + *dst = *n + if *n != "" { + // In old config, non-empty ClientID meant enable + cluster.Login.Google.Enable = true + } + } + if dst, n := &cluster.Login.Google.ClientSecret, dcluster.Login.GoogleClientSecret; n != nil && *n != *dst { + *dst = *n + } + if dst, n := &cluster.Login.Google.AlternateEmailAddresses, dcluster.Login.GoogleAlternateEmailAddresses; n != nil && *n != *dst { + *dst = *n + } + cfg.Clusters[id] = cluster } return nil } +func (ldr *Loader) applyDeprecatedVolumeDriverParameters(cfg *arvados.Config) error { + for clusterID, cluster := range cfg.Clusters { + for volID, vol := range cluster.Volumes { + if vol.Driver == "S3" { + var params struct { + AccessKey string `json:",omitempty"` + SecretKey string `json:",omitempty"` + AccessKeyID string + SecretAccessKey string + } + err := json.Unmarshal(vol.DriverParameters, ¶ms) + if err != nil { + return fmt.Errorf("error loading %s.Volumes.%s.DriverParameters: %w", clusterID, volID, err) + } + if params.AccessKey != "" || params.SecretKey != "" { + if params.AccessKeyID != "" || params.SecretAccessKey != "" { + return fmt.Errorf("cannot use old keys (AccessKey/SecretKey) and new keys (AccessKeyID/SecretAccessKey) at the same time in %s.Volumes.%s.DriverParameters -- you must remove the old config keys", clusterID, volID) + continue + } + var allparams map[string]interface{} + err = json.Unmarshal(vol.DriverParameters, &allparams) + if err != nil { + return fmt.Errorf("error loading %s.Volumes.%s.DriverParameters: %w", clusterID, volID, err) + } + for k := range allparams { + if lk := strings.ToLower(k); lk == "accesskey" || lk == "secretkey" { + delete(allparams, k) + } + } + ldr.Logger.Warnf("using your old config keys %s.Volumes.%s.DriverParameters.AccessKey/SecretKey -- but you should rename them to AccessKeyID/SecretAccessKey", clusterID, volID) + allparams["AccessKeyID"] = params.AccessKey + allparams["SecretAccessKey"] = params.SecretKey + vol.DriverParameters, err = json.Marshal(allparams) + if err != nil { + return err + } + cluster.Volumes[volID] = vol + } + } + } + } + return nil +} + func applyDeprecatedNodeProfile(hostname string, ssi systemServiceInstance, svc *arvados.Service) { scheme := "https" if !ssi.TLS { @@ -100,7 +167,7 @@ func applyDeprecatedNodeProfile(hostname string, ssi systemServiceInstance, svc if strings.HasPrefix(host, ":") { host = hostname + host } - svc.InternalURLs[arvados.URL{Scheme: scheme, Host: host}] = arvados.ServiceInstance{} + svc.InternalURLs[arvados.URL{Scheme: scheme, Host: host, Path: "/"}] = arvados.ServiceInstance{} } func (ldr *Loader) loadOldConfigHelper(component, path string, target interface{}) error { @@ -153,6 +220,7 @@ func loadOldClientConfig(cluster *arvados.Cluster, client *arvados.Client) { } if client.APIHost != "" { cluster.Services.Controller.ExternalURL.Host = client.APIHost + cluster.Services.Controller.ExternalURL.Path = "/" } if client.Scheme != "" { cluster.Services.Controller.ExternalURL.Scheme = client.Scheme @@ -268,7 +336,7 @@ func (ldr *Loader) loadOldWebsocketConfig(cfg *arvados.Config) error { cluster.PostgreSQL.ConnectionPool = *oc.PostgresPool } if oc.Listen != nil { - cluster.Services.Websocket.InternalURLs[arvados.URL{Host: *oc.Listen}] = arvados.ServiceInstance{} + cluster.Services.Websocket.InternalURLs[arvados.URL{Host: *oc.Listen, Path: "/"}] = arvados.ServiceInstance{} } if oc.LogLevel != nil { cluster.SystemLogs.LogLevel = *oc.LogLevel @@ -327,7 +395,7 @@ func (ldr *Loader) loadOldKeepproxyConfig(cfg *arvados.Config) error { loadOldClientConfig(cluster, oc.Client) if oc.Listen != nil { - cluster.Services.Keepproxy.InternalURLs[arvados.URL{Host: *oc.Listen}] = arvados.ServiceInstance{} + cluster.Services.Keepproxy.InternalURLs[arvados.URL{Host: *oc.Listen, Path: "/"}] = arvados.ServiceInstance{} } if oc.DefaultReplicas != nil { cluster.Collections.DefaultReplication = *oc.DefaultReplicas @@ -413,11 +481,11 @@ func (ldr *Loader) loadOldKeepWebConfig(cfg *arvados.Config) error { loadOldClientConfig(cluster, oc.Client) if oc.Listen != nil { - cluster.Services.WebDAV.InternalURLs[arvados.URL{Host: *oc.Listen}] = arvados.ServiceInstance{} - cluster.Services.WebDAVDownload.InternalURLs[arvados.URL{Host: *oc.Listen}] = arvados.ServiceInstance{} + cluster.Services.WebDAV.InternalURLs[arvados.URL{Host: *oc.Listen, Path: "/"}] = arvados.ServiceInstance{} + cluster.Services.WebDAVDownload.InternalURLs[arvados.URL{Host: *oc.Listen, Path: "/"}] = arvados.ServiceInstance{} } if oc.AttachmentOnlyHost != nil { - cluster.Services.WebDAVDownload.ExternalURL = arvados.URL{Host: *oc.AttachmentOnlyHost} + cluster.Services.WebDAVDownload.ExternalURL = arvados.URL{Host: *oc.AttachmentOnlyHost, Path: "/"} } if oc.ManagementToken != nil { cluster.ManagementToken = *oc.ManagementToken @@ -460,11 +528,11 @@ const defaultGitHttpdConfigPath = "/etc/arvados/git-httpd/git-httpd.yml" type oldGitHttpdConfig struct { Client *arvados.Client - Listen string - GitCommand string - GitoliteHome string - RepoRoot string - ManagementToken string + Listen *string + GitCommand *string + GitoliteHome *string + RepoRoot *string + ManagementToken *string } func (ldr *Loader) loadOldGitHttpdConfig(cfg *arvados.Config) error { @@ -486,12 +554,21 @@ func (ldr *Loader) loadOldGitHttpdConfig(cfg *arvados.Config) error { loadOldClientConfig(cluster, oc.Client) - cluster.Services.GitHTTP.InternalURLs[arvados.URL{Host: oc.Listen}] = arvados.ServiceInstance{} - cluster.TLS.Insecure = oc.Client.Insecure - cluster.ManagementToken = oc.ManagementToken - cluster.Git.GitCommand = oc.GitCommand - cluster.Git.GitoliteHome = oc.GitoliteHome - cluster.Git.Repositories = oc.RepoRoot + if oc.Listen != nil { + cluster.Services.GitHTTP.InternalURLs[arvados.URL{Host: *oc.Listen}] = arvados.ServiceInstance{} + } + if oc.ManagementToken != nil { + cluster.ManagementToken = *oc.ManagementToken + } + if oc.GitCommand != nil { + cluster.Git.GitCommand = *oc.GitCommand + } + if oc.GitoliteHome != nil { + cluster.Git.GitoliteHome = *oc.GitoliteHome + } + if oc.RepoRoot != nil { + cluster.Git.Repositories = *oc.RepoRoot + } cfg.Clusters[cluster.ClusterID] = *cluster return nil