X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/90d84d8578b760b493ac76b22c42bc284868bc0c..1aa2903df6165ecc8164c40957f282d5f7174b21:/lib/config/deprecated.go diff --git a/lib/config/deprecated.go b/lib/config/deprecated.go index 0a030fb040..7b11e090ee 100644 --- a/lib/config/deprecated.go +++ b/lib/config/deprecated.go @@ -7,6 +7,7 @@ package config import ( "fmt" "io/ioutil" + "net/url" "os" "strings" @@ -474,3 +475,105 @@ func (ldr *Loader) loadOldGitHttpdConfig(cfg *arvados.Config) error { cfg.Clusters[cluster.ClusterID] = *cluster return nil } + +const defaultKeepBalanceConfigPath = "/etc/arvados/keep-balance/keep-balance.yml" + +type oldKeepBalanceConfig struct { + Client *arvados.Client + Listen *string + KeepServiceTypes *[]string + KeepServiceList *arvados.KeepServiceList + RunPeriod *arvados.Duration + CollectionBatchSize *int + CollectionBuffers *int + RequestTimeout *arvados.Duration + LostBlocksFile *string + ManagementToken *string +} + +func (ldr *Loader) loadOldKeepBalanceConfig(cfg *arvados.Config) error { + if ldr.KeepBalancePath == "" { + return nil + } + var oc oldKeepBalanceConfig + err := ldr.loadOldConfigHelper("keep-balance", ldr.KeepBalancePath, &oc) + if os.IsNotExist(err) && ldr.KeepBalancePath == defaultKeepBalanceConfigPath { + return nil + } else if err != nil { + return err + } + + cluster, err := cfg.GetCluster("") + if err != nil { + return err + } + + loadOldClientConfig(cluster, oc.Client) + + if oc.Listen != nil { + cluster.Services.Keepbalance.InternalURLs[arvados.URL{Host: *oc.Listen}] = arvados.ServiceInstance{} + } + if oc.ManagementToken != nil { + cluster.ManagementToken = *oc.ManagementToken + } + if oc.RunPeriod != nil { + cluster.Collections.BalancePeriod = *oc.RunPeriod + } + if oc.LostBlocksFile != nil { + cluster.Collections.BlobMissingReport = *oc.LostBlocksFile + } + if oc.CollectionBatchSize != nil { + cluster.Collections.BalanceCollectionBatch = *oc.CollectionBatchSize + } + if oc.CollectionBuffers != nil { + cluster.Collections.BalanceCollectionBuffers = *oc.CollectionBuffers + } + if oc.RequestTimeout != nil { + cluster.API.KeepServiceRequestTimeout = *oc.RequestTimeout + } + + msg := "The %s configuration option is no longer supported. Please remove it from your configuration file. See the keep-balance upgrade notes at https://doc.arvados.org/admin/upgrading.html for more details." + + // If the keep service type provided is "disk" silently ignore it, since + // this is what ends up being done anyway. + if oc.KeepServiceTypes != nil { + numTypes := len(*oc.KeepServiceTypes) + if numTypes != 0 && !(numTypes == 1 && (*oc.KeepServiceTypes)[0] == "disk") { + return fmt.Errorf(msg, "KeepServiceTypes") + } + } + + if oc.KeepServiceList != nil { + return fmt.Errorf(msg, "KeepServiceList") + } + + cfg.Clusters[cluster.ClusterID] = *cluster + return nil +} + +func (ldr *Loader) loadOldEnvironmentVariables(cfg *arvados.Config) error { + if os.Getenv("ARVADOS_API_TOKEN") == "" && os.Getenv("ARVADOS_API_HOST") == "" { + return nil + } + cluster, err := cfg.GetCluster("") + if err != nil { + return err + } + if tok := os.Getenv("ARVADOS_API_TOKEN"); tok != "" && cluster.SystemRootToken == "" { + ldr.Logger.Warn("SystemRootToken missing from cluster config, falling back to ARVADOS_API_TOKEN environment variable") + cluster.SystemRootToken = tok + } + if apihost := os.Getenv("ARVADOS_API_HOST"); apihost != "" && cluster.Services.Controller.ExternalURL.Host == "" { + ldr.Logger.Warn("Services.Controller.ExternalURL missing from cluster config, falling back to ARVADOS_API_HOST(_INSECURE) environment variables") + u, err := url.Parse("https://" + apihost) + if err != nil { + return fmt.Errorf("cannot parse ARVADOS_API_HOST: %s", err) + } + cluster.Services.Controller.ExternalURL = arvados.URL(*u) + if i := os.Getenv("ARVADOS_API_HOST_INSECURE"); i != "" && i != "0" { + cluster.TLS.Insecure = true + } + } + cfg.Clusters[cluster.ClusterID] = *cluster + return nil +}