X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c347c99a6ffe9d72f6decf29d2553bc6caf126c2..7407f41105f8000bb3908d41a31daaf3a30d9440:/sdk/go/arvados/config.go diff --git a/sdk/go/arvados/config.go b/sdk/go/arvados/config.go index ca39d6b265..a54712f330 100644 --- a/sdk/go/arvados/config.go +++ b/sdk/go/arvados/config.go @@ -23,7 +23,8 @@ var DefaultConfigFile = func() string { }() type Config struct { - Clusters map[string]Cluster + Clusters map[string]Cluster + AutoReloadConfig bool } // GetConfig returns the current system config, loading it from @@ -66,6 +67,7 @@ type WebDAVCacheConfig struct { MaxPermissionEntries int MaxUUIDEntries int } + type Cluster struct { ClusterID string `json:"-"` ManagementToken string @@ -115,14 +117,16 @@ type Cluster struct { Function string Protected bool } - PreserveVersionIfIdle Duration - TrashSweepInterval Duration - TrustAllContent bool + PreserveVersionIfIdle Duration + TrashSweepInterval Duration + TrustAllContent bool + ForwardSlashNameSubstitution string BlobMissingReport string BalancePeriod Duration BalanceCollectionBatch int BalanceCollectionBuffers int + BalanceTimeout Duration WebDAVCache WebDAVCacheConfig } @@ -132,13 +136,48 @@ type Cluster struct { Repositories string } Login struct { - GoogleClientID string - GoogleClientSecret string - GoogleAlternateEmailAddresses bool - ProviderAppID string - ProviderAppSecret string - LoginCluster string - RemoteTokenRefresh Duration + LDAP struct { + Enable bool + URL URL + StartTLS bool + InsecureTLS bool + StripDomain string + AppendDomain string + SearchAttribute string + SearchBindUser string + SearchBindPassword string + SearchBase string + SearchFilters string + EmailAttribute string + UsernameAttribute string + } + Google struct { + Enable bool + ClientID string + ClientSecret string + AlternateEmailAddresses bool + } + OpenIDConnect struct { + Enable bool + Issuer string + ClientID string + ClientSecret string + EmailClaim string + EmailVerifiedClaim string + UsernameClaim string + } + PAM struct { + Enable bool + Service string + DefaultEmailDomain string + } + SSO struct { + Enable bool + ProviderAppID string + ProviderAppSecret string + } + LoginCluster string + RemoteTokenRefresh Duration } Mail struct { MailchimpAPIKey string @@ -213,6 +252,8 @@ type Cluster struct { VocabularyURL string WelcomePageHTML string InactivePageHTML string + SSHHelpPageHTML string + SSHHelpHostSuffix string } ForceLegacyAPI14 bool @@ -228,12 +269,14 @@ type Volume struct { } type S3VolumeDriverParameters struct { + IAMRole string AccessKey string SecretKey string Endpoint string Region string Bucket string LocationConstraint bool + V2Signature bool IndexPageSize int ConnectTimeout Duration ReadTimeout Duration @@ -295,6 +338,10 @@ func (su *URL) UnmarshalText(text []byte) error { u, err := url.Parse(string(text)) if err == nil { *su = URL(*u) + if su.Path == "" && su.Host != "" { + // http://example really means http://example/ + su.Path = "/" + } } return err } @@ -361,7 +408,7 @@ type ContainersConfig struct { Logging struct { MaxAge Duration LogBytesPerEvent int - LogSecondsBetweenEvents int + LogSecondsBetweenEvents Duration LogThrottlePeriod Duration LogThrottleBytes int LogThrottleLines int @@ -418,6 +465,24 @@ var errDuplicateInstanceTypeName = errors.New("duplicate instance type name") // UnmarshalJSON handles old config files that provide an array of // instance types instead of a hash. func (it *InstanceTypeMap) UnmarshalJSON(data []byte) error { + fixup := func(t InstanceType) (InstanceType, error) { + if t.ProviderType == "" { + t.ProviderType = t.Name + } + if t.Scratch == 0 { + t.Scratch = t.IncludedScratch + t.AddedScratch + } else if t.AddedScratch == 0 { + t.AddedScratch = t.Scratch - t.IncludedScratch + } else if t.IncludedScratch == 0 { + t.IncludedScratch = t.Scratch - t.AddedScratch + } + + if t.Scratch != (t.IncludedScratch + t.AddedScratch) { + return t, fmt.Errorf("InstanceType %q: Scratch != (IncludedScratch + AddedScratch)", t.Name) + } + return t, nil + } + if len(data) > 0 && data[0] == '[' { var arr []InstanceType err := json.Unmarshal(data, &arr) @@ -433,19 +498,9 @@ func (it *InstanceTypeMap) UnmarshalJSON(data []byte) error { if _, ok := (*it)[t.Name]; ok { return errDuplicateInstanceTypeName } - if t.ProviderType == "" { - t.ProviderType = t.Name - } - if t.Scratch == 0 { - t.Scratch = t.IncludedScratch + t.AddedScratch - } else if t.AddedScratch == 0 { - t.AddedScratch = t.Scratch - t.IncludedScratch - } else if t.IncludedScratch == 0 { - t.IncludedScratch = t.Scratch - t.AddedScratch - } - - if t.Scratch != (t.IncludedScratch + t.AddedScratch) { - return fmt.Errorf("%v: Scratch != (IncludedScratch + AddedScratch)", t.Name) + t, err := fixup(t) + if err != nil { + return err } (*it)[t.Name] = t } @@ -461,8 +516,9 @@ func (it *InstanceTypeMap) UnmarshalJSON(data []byte) error { *it = InstanceTypeMap(hash) for name, t := range *it { t.Name = name - if t.ProviderType == "" { - t.ProviderType = name + t, err := fixup(t) + if err != nil { + return err } (*it)[name] = t }