X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/10d70a1c08984a699ac3f6b893fe6d2141c5ad9e..dbbb649c9b797da8f6805af3a7e74e57b075d294:/sdk/go/arvados/config.go diff --git a/sdk/go/arvados/config.go b/sdk/go/arvados/config.go index d7e92e6ed9..f63996437f 100644 --- a/sdk/go/arvados/config.go +++ b/sdk/go/arvados/config.go @@ -9,11 +9,18 @@ import ( "errors" "fmt" "net/url" + "os" "git.curoverse.com/arvados.git/sdk/go/config" ) -const DefaultConfigFile = "/etc/arvados/config.yml" +var DefaultConfigFile = func() string { + if path := os.Getenv("ARVADOS_CONFIG"); path != "" { + return path + } else { + return "/etc/arvados/config.yml" + } +}() type Config struct { Clusters map[string]Cluster @@ -62,29 +69,37 @@ type Cluster struct { API struct { AsyncPermissionsUpdateInterval Duration - DisabledAPIs []string + DisabledAPIs StringSet MaxIndexDatabaseRead int MaxItemsPerResponse int MaxRequestAmplification int MaxRequestSize int RailsSessionSecretToken string RequestTimeout Duration + SendTimeout Duration + WebsocketClientEventQueue int + WebsocketServerEventQueue int } AuditLogs struct { MaxAge Duration MaxDeleteBatch int - UnloggedAttributes []string + UnloggedAttributes StringSet } Collections struct { - BlobSigning bool - BlobSigningKey string - BlobSigningTTL Duration - CollectionVersioning bool - DefaultTrashLifetime Duration - DefaultReplication int - ManagedProperties map[string]interface{} + BlobSigning bool + BlobSigningKey string + BlobSigningTTL Duration + CollectionVersioning bool + DefaultTrashLifetime Duration + DefaultReplication int + ManagedProperties map[string]struct { + Value interface{} + Function string + Protected bool + } PreserveVersionIfIdle Duration TrashSweepInterval Duration + TrustAllContent bool } Git struct { Repositories string @@ -96,7 +111,7 @@ type Cluster struct { Mail struct { MailchimpAPIKey string MailchimpListID string - SendUserSetupNotificationEmail string + SendUserSetupNotificationEmail bool IssueReporterEmailFrom string IssueReporterEmailTo string SupportEmailAddress string @@ -113,16 +128,17 @@ type Cluster struct { Insecure bool } Users struct { + AnonymousUserToken string AdminNotifierEmailFrom string AutoAdminFirstUser bool AutoAdminUserWithEmail string AutoSetupNewUsers bool AutoSetupNewUsersWithRepository bool AutoSetupNewUsersWithVmUUID string - AutoSetupUsernameBlacklist []string + AutoSetupUsernameBlacklist StringSet EmailSubjectPrefix string - NewInactiveUserNotificationRecipients []string - NewUserNotificationRecipients []string + NewInactiveUserNotificationRecipients StringSet + NewUserNotificationRecipients StringSet NewUsersAreActive bool UserNotifierEmailFrom string UserProfileNotificationAddress string @@ -132,19 +148,20 @@ type Cluster struct { APIClientConnectTimeout Duration APIClientReceiveTimeout Duration APIResponseCompression bool - ApplicationMimetypesWithViewIcon map[string]struct{} + ApplicationMimetypesWithViewIcon StringSet ArvadosDocsite string ArvadosPublicDataDocURL string + DefaultOpenIdPrefix string EnableGettingStartedPopup bool EnablePublicProjectsPage bool FileViewersConfigURL string LogViewerMaxBytes ByteSize - MultiSiteSearch bool + MultiSiteSearch string + ProfilingEnabled bool Repositories bool RepositoryCache string RunningJobLogRecordsToFetch int SecretKeyBase string - SecretToken string ShowRecentCollectionsOnDashboard bool ShowUserAgreementInline bool ShowUserNotifications bool @@ -155,10 +172,14 @@ type Cluster struct { FormFieldTitle string FormFieldDescription string Required bool + Position int + Options map[string]struct{} } UserProfileFormMessage string VocabularyURL string } + + EnableBetaController14287 bool } type Services struct { @@ -235,14 +256,18 @@ type InstanceType struct { type ContainersConfig struct { CloudVMs CloudVMsConfig + CrunchRunCommand string + CrunchRunArgumentsList []string DefaultKeepCacheRAM ByteSize DispatchPrivateKey string LogReuseDecisions bool MaxComputeVMs int MaxDispatchAttempts int MaxRetryAttempts int + MinRetryPeriod Duration + ReserveExtraRAM ByteSize StaleLockTimeout Duration - SupportedDockerImageFormats []string + SupportedDockerImageFormats StringSet UsePreemptibleInstances bool JobsAPI struct { @@ -267,13 +292,16 @@ type ContainersConfig struct { LogUpdateSize ByteSize } SLURM struct { - Managed struct { + PrioritySpread int64 + SbatchArgumentsList []string + KeepServices map[string]Service + Managed struct { DNSServerConfDir string DNSServerConfTemplate string DNSServerReloadCommand string DNSServerUpdateCommand string ComputeNodeDomain string - ComputeNodeNameservers []string + ComputeNodeNameservers StringSet AssignNodeHostname string } } @@ -361,6 +389,40 @@ func (it *InstanceTypeMap) UnmarshalJSON(data []byte) error { return nil } +type StringSet map[string]struct{} + +// UnmarshalJSON handles old config files that provide an array of +// instance types instead of a hash. +func (ss *StringSet) UnmarshalJSON(data []byte) error { + if len(data) > 0 && data[0] == '[' { + var arr []string + err := json.Unmarshal(data, &arr) + if err != nil { + return err + } + if len(arr) == 0 { + *ss = nil + return nil + } + *ss = make(map[string]struct{}, len(arr)) + for _, t := range arr { + (*ss)[t] = struct{}{} + } + return nil + } + var hash map[string]struct{} + err := json.Unmarshal(data, &hash) + if err != nil { + return err + } + *ss = make(map[string]struct{}, len(hash)) + for t, _ := range hash { + (*ss)[t] = struct{}{} + } + + return nil +} + type ServiceName string const (