X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/444dfb847a5d6eda3a84ef5f4e508703d0634a91..bda9093be4d24d45a6fff29148fbb5438e283897:/lib/config/load.go diff --git a/lib/config/load.go b/lib/config/load.go index 248960beb9..a7419331f0 100644 --- a/lib/config/load.go +++ b/lib/config/load.go @@ -295,8 +295,10 @@ func (ldr *Loader) Load() (*arvados.Config, error) { ldr.checkToken(fmt.Sprintf("Clusters.%s.SystemRootToken", id), cc.SystemRootToken), ldr.checkToken(fmt.Sprintf("Clusters.%s.Collections.BlobSigningKey", id), cc.Collections.BlobSigningKey), checkKeyConflict(fmt.Sprintf("Clusters.%s.PostgreSQL.Connection", id), cc.PostgreSQL.Connection), + ldr.checkEnum("Containers.LocalKeepLogsToContainerLog", cc.Containers.LocalKeepLogsToContainerLog, "none", "all", "errors"), ldr.checkEmptyKeepstores(cc), ldr.checkUnlistedKeepstores(cc), + ldr.checkLocalKeepstoreVolumes(cc), ldr.checkStorageClasses(cc), // TODO: check non-empty Rendezvous on // services other than Keepstore @@ -338,6 +340,15 @@ func (ldr *Loader) checkToken(label, token string) error { return nil } +func (ldr *Loader) checkEnum(label, value string, accepted ...string) error { + for _, s := range accepted { + if s == value { + return nil + } + } + return fmt.Errorf("%s: unacceptable value %q: must be one of %q", label, value, accepted) +} + func (ldr *Loader) setImplicitStorageClasses(cfg *arvados.Config) error { cluster: for id, cc := range cfg.Clusters { @@ -361,6 +372,18 @@ cluster: return nil } +func (ldr *Loader) checkLocalKeepstoreVolumes(cc arvados.Cluster) error { + if cc.Containers.LocalKeepBlobBuffersPerVCPU < 1 { + return nil + } + for _, vol := range cc.Volumes { + if len(vol.AccessViaHosts) == 0 { + return nil + } + } + return fmt.Errorf("LocalKeepBlobBuffersPerVCPU is %d, but no volumes would be accessible from a worker instance", cc.Containers.LocalKeepBlobBuffersPerVCPU) +} + func (ldr *Loader) checkStorageClasses(cc arvados.Cluster) error { classOnVolume := map[string]bool{} for volid, vol := range cc.Volumes {