API struct {
AsyncPermissionsUpdateInterval Duration
- DisabledAPIs map[string]struct{}
+ DisabledAPIs StringSet
MaxIndexDatabaseRead int
MaxItemsPerResponse int
MaxRequestAmplification int
AuditLogs struct {
MaxAge Duration
MaxDeleteBatch int
- UnloggedAttributes map[string]struct{}
+ UnloggedAttributes StringSet
}
Collections struct {
BlobSigning bool
AutoSetupNewUsers bool
AutoSetupNewUsersWithRepository bool
AutoSetupNewUsersWithVmUUID string
- AutoSetupUsernameBlacklist map[string]struct{}
+ AutoSetupUsernameBlacklist StringSet
EmailSubjectPrefix string
- NewInactiveUserNotificationRecipients map[string]struct{}
- NewUserNotificationRecipients map[string]struct{}
+ NewInactiveUserNotificationRecipients StringSet
+ NewUserNotificationRecipients StringSet
NewUsersAreActive bool
UserNotifierEmailFrom string
UserProfileNotificationAddress string
APIClientConnectTimeout Duration
APIClientReceiveTimeout Duration
APIResponseCompression bool
- ApplicationMimetypesWithViewIcon map[string]struct{}
+ ApplicationMimetypesWithViewIcon StringSet
ArvadosDocsite string
ArvadosPublicDataDocURL string
DefaultOpenIdPrefix string
MinRetryPeriod Duration
ReserveExtraRAM ByteSize
StaleLockTimeout Duration
- SupportedDockerImageFormats map[string]struct{}
+ SupportedDockerImageFormats StringSet
UsePreemptibleInstances bool
JobsAPI struct {
DNSServerReloadCommand string
DNSServerUpdateCommand string
ComputeNodeDomain string
- ComputeNodeNameservers map[string]struct{}
+ 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 (
type ConfigSuite struct{}
func (s *ConfigSuite) TestInstanceTypesAsArray(c *check.C) {
+ var cluster Cluster
+ yaml.Unmarshal([]byte(`
+API:
+ DisabledAPIs: [jobs.list]`), &cluster)
+ c.Check(len(cluster.API.DisabledAPIs), check.Equals, 1)
+ _, ok := cluster.API.DisabledAPIs["jobs.list"]
+ c.Check(ok, check.Equals, true)
+}
+
+func (s *ConfigSuite) TestStringSetAsArray(c *check.C) {
var cluster Cluster
yaml.Unmarshal([]byte("InstanceTypes:\n- Name: foo\n"), &cluster)
c.Check(len(cluster.InstanceTypes), check.Equals, 1)