14715: Adds keepproxy to cluster config loading
[arvados.git] / sdk / go / arvados / config.go
index c8206c7da437c48ff963d563e976cc77cdb4ac3b..bc434a20304bbbd129ed64d76307469c46a43fbc 100644 (file)
@@ -69,18 +69,22 @@ 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
+               KeepServiceRequestTimeout      Duration
        }
        AuditLogs struct {
                MaxAge             Duration
                MaxDeleteBatch     int
-               UnloggedAttributes []string
+               UnloggedAttributes StringSet
        }
        Collections struct {
                BlobSigning          bool
@@ -132,10 +136,10 @@ 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
@@ -145,7 +149,7 @@ type Cluster struct {
                APIClientConnectTimeout          Duration
                APIClientReceiveTimeout          Duration
                APIResponseCompression           bool
-               ApplicationMimetypesWithViewIcon map[string]struct{}
+               ApplicationMimetypesWithViewIcon StringSet
                ArvadosDocsite                   string
                ArvadosPublicDataDocURL          string
                DefaultOpenIdPrefix              string
@@ -253,14 +257,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 {
@@ -285,13 +293,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
                }
        }
@@ -379,6 +390,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 (