"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
}
}
+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
API struct {
AsyncPermissionsUpdateInterval Duration
- DisabledAPIs []string
+ DisabledAPIs StringSet
MaxIndexDatabaseRead int
MaxItemsPerResponse int
+ MaxConcurrentRequests int
+ MaxKeepBlobBuffers 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
- DefaultReplication int
- BlobSigningTTL Duration
- DefaultTrashLifetime Duration
- TrashSweepInterval Duration
- CollectionVersioning bool
+ 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
MailchimpListID string
- SendUserSetupNotificationEmail string
+ SendUserSetupNotificationEmail bool
IssueReporterEmailFrom string
IssueReporterEmailTo string
SupportEmailAddress string
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
}
+ Volumes map[string]Volume
+ Workbench struct {
+ ActivationContactLink string
+ APIClientConnectTimeout Duration
+ APIClientReceiveTimeout Duration
+ APIResponseCompression bool
+ ApplicationMimetypesWithViewIcon StringSet
+ ArvadosDocsite string
+ ArvadosPublicDataDocURL string
+ DefaultOpenIdPrefix string
+ EnableGettingStartedPopup bool
+ EnablePublicProjectsPage bool
+ FileViewersConfigURL string
+ LogViewerMaxBytes ByteSize
+ MultiSiteSearch string
+ ProfilingEnabled bool
+ Repositories bool
+ RepositoryCache string
+ RunningJobLogRecordsToFetch int
+ SecretKeyBase string
+ ShowRecentCollectionsOnDashboard bool
+ ShowUserAgreementInline bool
+ ShowUserNotifications bool
+ SiteName string
+ Theme string
+ UserProfileFormFields map[string]struct {
+ Type string
+ FormFieldTitle string
+ FormFieldDescription string
+ Required bool
+ Position int
+ Options map[string]struct{}
+ }
+ UserProfileFormMessage string
+ VocabularyURL string
+ }
+
+ 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 {
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
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
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
}
}
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 (