X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/fe06b864a537f5b6440a50bf85af9bc93d7aae80..90d84d8578b760b493ac76b22c42bc284868bc0c:/sdk/go/arvados/config.go diff --git a/sdk/go/arvados/config.go b/sdk/go/arvados/config.go index 9c667610bc..a058f6181b 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 @@ -50,6 +57,15 @@ func (sc *Config) GetCluster(clusterID string) (*Cluster, error) { } } +type WebDAVCacheConfig struct { + TTL Duration + UUIDTTL Duration + MaxBlockEntries int + MaxCollectionEntries int + MaxCollectionBytes int64 + MaxPermissionEntries int + MaxUUIDEntries int +} type Cluster struct { ClusterID string `json:"-"` ManagementToken string @@ -62,37 +78,59 @@ type Cluster struct { API struct { AsyncPermissionsUpdateInterval Duration - DisabledAPIs []string + DisabledAPIs StringSet MaxIndexDatabaseRead int MaxItemsPerResponse int + MaxConcurrentRequests int + MaxKeepBlockBuffers int MaxRequestAmplification int MaxRequestSize int RailsSessionSecretToken string RequestTimeout Duration + SendTimeout Duration + WebsocketClientEventQueue int + WebsocketServerEventQueue int + KeepServiceRequestTimeout Duration } 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 + BlobTrash bool + BlobTrashLifetime Duration + BlobTrashCheckInterval Duration + BlobTrashConcurrency int + BlobDeleteConcurrency int + BlobReplicateConcurrency int + CollectionVersioning bool + DefaultTrashLifetime Duration + DefaultReplication int + ManagedProperties map[string]struct { + Value interface{} + Function string + Protected bool + } PreserveVersionIfIdle Duration TrashSweepInterval Duration TrustAllContent bool + + WebDAVCache WebDAVCacheConfig } Git struct { + GitCommand string + GitoliteHome string Repositories string } Login struct { - ProviderAppSecret string - ProviderAppID string + ProviderAppSecret string + ProviderAppID string + LoginCluster string + RemoteTokenRefresh Duration } Mail struct { MailchimpAPIKey string @@ -121,20 +159,21 @@ type Cluster struct { 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 } + Volumes map[string]Volume Workbench struct { ActivationContactLink string APIClientConnectTimeout Duration APIClientReceiveTimeout Duration APIResponseCompression bool - ApplicationMimetypesWithViewIcon map[string]struct{} + ApplicationMimetypesWithViewIcon StringSet ArvadosDocsite string ArvadosPublicDataDocURL string DefaultOpenIdPrefix string @@ -168,6 +207,48 @@ type Cluster struct { EnableBetaController14287 bool } +type Volume struct { + AccessViaHosts map[URL]VolumeAccess + ReadOnly bool + Replication int + StorageClasses map[string]bool + Driver string + DriverParameters json.RawMessage +} + +type S3VolumeDriverParameters struct { + AccessKey string + SecretKey string + Endpoint string + Region string + Bucket string + LocationConstraint bool + IndexPageSize int + ConnectTimeout Duration + ReadTimeout Duration + RaceWindow Duration + UnsafeDelete bool +} + +type AzureVolumeDriverParameters struct { + StorageAccountName string + StorageAccountKey string + StorageBaseURL string + ContainerName string + RequestTimeout Duration + ListBlobsRetryDelay Duration + ListBlobsMaxAttempts int +} + +type DirectoryVolumeDriverParameters struct { + Root string + Serialize bool +} + +type VolumeAccess struct { + ReadOnly bool +} + type Services struct { Composer Service Controller Service @@ -211,7 +292,16 @@ func (su URL) MarshalText() ([]byte, error) { return []byte(fmt.Sprintf("%s", (*url.URL)(&su).String())), nil } -type ServiceInstance struct{} +func (su URL) String() string { + return (*url.URL)(&su).String() +} + +type ServiceInstance struct { + // Rendezvous is normally empty; when changing the URL of a + // Keepstore service, Rendezvous can be set to the old URL to + // preserve rendezvous ordering. + Rendezvous string `json:",omitempty"` +} type PostgreSQL struct { Connection PostgreSQLConnection @@ -242,24 +332,23 @@ 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 { - Enable string - GitInternalDir string - DefaultDockerImage string - CrunchJobWrapper string - CrunchJobUser string - CrunchRefreshTrigger string - ReuseJobIfOutputsDiffer bool + Enable string + GitInternalDir string } Logging struct { MaxAge Duration @@ -274,13 +363,16 @@ type ContainersConfig struct { LogUpdateSize ByteSize } SLURM struct { - Managed struct { + PrioritySpread int64 + SbatchArgumentsList []string + SbatchEnvironmentVariables map[string]string + Managed struct { DNSServerConfDir string DNSServerConfTemplate string DNSServerReloadCommand string DNSServerUpdateCommand string ComputeNodeDomain string - ComputeNodeNameservers []string + ComputeNodeNameservers StringSet AssignNodeHostname string } } @@ -368,6 +460,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 (