13647: Merge branch 'master' into 13647-keepstore-config
[arvados.git] / lib / config / generated_config.go
index ba576ee5b9b9cc819a666ba10ef82f935b445aa0..ecc2e8ea010630e857766a2e785281a03b8a8a09 100644 (file)
@@ -25,6 +25,17 @@ Clusters:
     ManagementToken: ""
 
     Services:
+
+      # In each of the service sections below, the keys under
+      # InternalURLs are the endpoints where the service should be
+      # listening, and reachable from other hosts in the cluster.
+      SAMPLE:
+        InternalURLs:
+          "http://example.host:12345": {}
+          SAMPLE:
+            Rendezvous: ""
+        ExternalURL: "-"
+
       RailsAPI:
         InternalURLs: {}
         ExternalURL: "-"
@@ -54,10 +65,57 @@ Clusters:
         ExternalURL: ""
       WebDAV:
         InternalURLs: {}
+        # Base URL for Workbench inline preview.  If blank, use
+        # WebDAVDownload instead, and disable inline preview.
+        # If both are empty, downloading collections from workbench
+        # will be impossible.
+        #
+        # It is important to properly configure the download service
+        # to migitate cross-site-scripting (XSS) attacks.  A HTML page
+        # can be stored in collection.  If an attacker causes a victim
+        # to visit that page through Workbench, it will be rendered by
+        # the browser.  If all collections are served at the same
+        # domain, the browser will consider collections as coming from
+        # the same origin and having access to the same browsing data,
+        # enabling malicious Javascript on that page to access Arvados
+        # on behalf of the victim.
+        #
+        # This is mitigating by having separate domains for each
+        # collection, or limiting preview to circumstances where the
+        # collection is not accessed with the user's regular
+        # full-access token.
+        #
+        # Serve preview links using uuid or pdh in subdomain
+        # (requires wildcard DNS and TLS certificate)
+        #   https://*.collections.uuid_prefix.arvadosapi.com
+        #
+        # Serve preview links using uuid or pdh in main domain
+        # (requires wildcard DNS and TLS certificate)
+        #   https://*--collections.uuid_prefix.arvadosapi.com
+        #
+        # Serve preview links by setting uuid or pdh in the path.
+        # This configuration only allows previews of public data or
+        # collection-sharing links, because these use the anonymous
+        # user token or the token is already embedded in the URL.
+        # Other data must be handled as downloads via WebDAVDownload:
+        #   https://collections.uuid_prefix.arvadosapi.com
+        #
         ExternalURL: ""
+
       WebDAVDownload:
         InternalURLs: {}
+        # Base URL for download links. If blank, serve links to WebDAV
+        # with disposition=attachment query param.  Unlike preview links,
+        # browsers do not render attachments, so there is no risk of XSS.
+        #
+        # If WebDAVDownload is blank, and WebDAV uses a
+        # single-origin form, then Workbench will show an error page
+        #
+        # Serve download links by setting uuid or pdh in the path:
+        #   https://download.uuid_prefix.arvadosapi.com
+        #
         ExternalURL: ""
+
       Keepstore:
         InternalURLs: {}
         ExternalURL: "-"
@@ -99,6 +157,7 @@ Clusters:
         user: ""
         password: ""
         dbname: ""
+        SAMPLE: ""
     API:
       # Maximum size (in bytes) allowed for a single API request.  This
       # limit is published in the discovery document for use by clients.
@@ -124,10 +183,19 @@ Clusters:
       # parameter higher than this value, this value is used instead.
       MaxItemsPerResponse: 1000
 
+      # Maximum number of concurrent requests to accept in a single
+      # service process, or 0 for no limit. Currently supported only
+      # by keepstore.
+      MaxConcurrentRequests: 0
+
+      # Maximum number of 64MiB memory buffers per keepstore server
+      # process, or 0 for no limit.
+      MaxKeepBlockBuffers: 128
+
       # API methods to disable. Disabled methods are not listed in the
       # discovery document, and respond 404 to all requests.
-      # Example: ["jobs.create", "pipeline_instances.create"]
-      DisabledAPIs: []
+      # Example: {"jobs.create":{}, "pipeline_instances.create": {}}
+      DisabledAPIs: {}
 
       # Interval (seconds) between asynchronous permission view updates. Any
       # permission-updating API called with the 'async' parameter schedules a an
@@ -146,20 +214,38 @@ Clusters:
       # Maximum wall clock time to spend handling an incoming request.
       RequestTimeout: 5m
 
+      # Websocket will send a periodic empty event after 'SendTimeout'
+      # if there is no other activity to maintain the connection /
+      # detect dropped connections.
+      SendTimeout: 60s
+
+      WebsocketClientEventQueue: 64
+      WebsocketServerEventQueue: 4
+
+      # Timeout on requests to internal Keep services.
+      KeepServiceRequestTimeout: 15s
+
     Users:
       # Config parameters to automatically setup new users.  If enabled,
       # this users will be able to self-activate.  Enable this if you want
       # to run an open instance where anyone can create an account and use
       # the system without requiring manual approval.
       #
-      # The params auto_setup_new_users_with_* are meaningful only when auto_setup_new_users is turned on.
-      # auto_setup_name_blacklist is a list of usernames to be blacklisted for auto setup.
+      # The params AutoSetupNewUsersWith* are meaningful only when AutoSetupNewUsers is turned on.
+      # AutoSetupUsernameBlacklist is a list of usernames to be blacklisted for auto setup.
       AutoSetupNewUsers: false
       AutoSetupNewUsersWithVmUUID: ""
       AutoSetupNewUsersWithRepository: false
-      AutoSetupUsernameBlacklist: [arvados, git, gitolite, gitolite-admin, root, syslog]
-
-      # When new_users_are_active is set to true, new users will be active
+      AutoSetupUsernameBlacklist:
+        arvados: {}
+        git: {}
+        gitolite: {}
+        gitolite-admin: {}
+        root: {}
+        syslog: {}
+        SAMPLE: {}
+
+      # When NewUsersAreActive is set to true, new users will be active
       # immediately.  This skips the "self-activate" step which enforces
       # user agreements.  Should only be enabled for development.
       NewUsersAreActive: false
@@ -171,7 +257,7 @@ Clusters:
       # should be an address associated with a Google account.
       AutoAdminUserWithEmail: ""
 
-      # If auto_admin_first_user is set to true, the first user to log in when no
+      # If AutoAdminFirstUser is set to true, the first user to log in when no
       # other admin users exist will automatically become an admin user.
       AutoAdminFirstUser: false
 
@@ -181,10 +267,10 @@ Clusters:
       AdminNotifierEmailFrom: arvados@example.com
       EmailSubjectPrefix: "[ARVADOS] "
       UserNotifierEmailFrom: arvados@example.com
-      NewUserNotificationRecipients: []
-      NewInactiveUserNotificationRecipients: []
+      NewUserNotificationRecipients: {}
+      NewInactiveUserNotificationRecipients: {}
 
-      # Set anonymous_user_token to enable anonymous user access. You can get
+      # Set AnonymousUserToken to enable anonymous user access. You can get
       # the token by running "bundle exec ./script/get_anonymous_user_token.rb"
       # in the directory where your API server is running.
       AnonymousUserToken: ""
@@ -200,7 +286,7 @@ Clusters:
 
       # Maximum number of log rows to delete in a single SQL transaction.
       #
-      # If max_audit_log_delete_batch is 0, log entries will never be
+      # If MaxDeleteBatch is 0, log entries will never be
       # deleted by Arvados. Cleanup can be done by an external process
       # without affecting any Arvados system processes, as long as very
       # recent (<5 minutes old) logs are not deleted.
@@ -209,13 +295,13 @@ Clusters:
       MaxDeleteBatch: 0
 
       # Attributes to suppress in events and audit logs.  Notably,
-      # specifying ["manifest_text"] here typically makes the database
+      # specifying {"manifest_text": {}} here typically makes the database
       # smaller and faster.
       #
       # Warning: Using any non-empty value here can have undesirable side
       # effects for any client or component that relies on event logs.
       # Use at your own risk.
-      UnloggedAttributes: []
+      UnloggedAttributes: {}
 
     SystemLogs:
 
@@ -244,17 +330,46 @@ Clusters:
       # one another!
       BlobSigning: true
 
-      # blob_signing_key is a string of alphanumeric characters used to
+      # BlobSigningKey is a string of alphanumeric characters used to
       # generate permission signatures for Keep locators. It must be
-      # identical to the permission key given to Keep. IMPORTANT: This is
-      # a site secret. It should be at least 50 characters.
+      # identical to the permission key given to Keep. IMPORTANT: This
+      # is a site secret. It should be at least 50 characters.
       #
-      # Modifying blob_signing_key will invalidate all existing
+      # Modifying BlobSigningKey will invalidate all existing
       # signatures, which can cause programs to fail (e.g., arv-put,
-      # arv-get, and Crunch jobs).  To avoid errors, rotate keys only when
-      # no such processes are running.
+      # arv-get, and Crunch jobs).  To avoid errors, rotate keys only
+      # when no such processes are running.
       BlobSigningKey: ""
 
+      # Enable garbage collection of unreferenced blobs in Keep.
+      BlobTrash: true
+
+      # Time to leave unreferenced blobs in "trashed" state before
+      # deleting them, or 0 to skip the "trashed" state entirely and
+      # delete unreferenced blobs.
+      #
+      # If you use any Amazon S3 buckets as storage volumes, this
+      # must be at least 24h to avoid occasional data loss.
+      BlobTrashLifetime: 336h
+
+      # How often to check for (and delete) trashed blocks whose
+      # BlobTrashLifetime has expired.
+      BlobTrashCheckInterval: 24h
+
+      # Maximum number of concurrent "trash blob" and "delete trashed
+      # blob" operations conducted by a single keepstore process. Each
+      # of these can be set to 0 to disable the respective operation.
+      #
+      # If BlobTrashLifetime is zero, "trash" and "delete trash"
+      # happen at once, so only the lower of these two values is used.
+      BlobTrashConcurrency: 4
+      BlobDeleteConcurrency: 4
+
+      # Maximum number of concurrent "create additional replica of
+      # existing blob" operations conducted by a single keepstore
+      # process.
+      BlobReplicateConcurrency: 4
+
       # Default replication level for collections. This is used when a
       # collection's replication_desired attribute is nil.
       DefaultReplication: 2
@@ -271,14 +386,14 @@ Clusters:
       # keepstore servers.  Otherwise, reading data blocks and saving
       # collections will fail with HTTP 403 permission errors.
       #
-      # Modifying blob_signature_ttl invalidates existing signatures; see
-      # blob_signing_key note above.
+      # Modifying BlobSigningTTL invalidates existing signatures; see
+      # BlobSigningKey note above.
       #
       # The default is 2 weeks.
       BlobSigningTTL: 336h
 
       # Default lifetime for ephemeral collections: 2 weeks. This must not
-      # be less than blob_signature_ttl.
+      # be less than BlobSigningTTL.
       DefaultTrashLifetime: 336h
 
       # Interval (seconds) between trash sweeps. During a trash sweep,
@@ -288,7 +403,7 @@ Clusters:
 
       # If true, enable collection versioning.
       # When a collection's preserve_version field is true or the current version
-      # is older than the amount of seconds defined on preserve_version_if_idle,
+      # is older than the amount of seconds defined on PreserveVersionIfIdle,
       # a snapshot of the collection's previous state is created and linked to
       # the current collection.
       CollectionVersioning: false
@@ -312,13 +427,63 @@ Clusters:
       ManagedProperties:
         SAMPLE: {Function: original_owner, Protected: true}
 
+      # In "trust all content" mode, Workbench will redirect download
+      # requests to WebDAV preview link, even in the cases when
+      # WebDAV would have to expose XSS vulnerabilities in order to
+      # handle the redirect (see discussion on Services.WebDAV).
+      #
+      # This setting has no effect in the recommended configuration,
+      # where the WebDAV is configured to have a separate domain for
+      # every collection; in this case XSS protection is provided by
+      # browsers' same-origin policy.
+      #
+      # The default setting (false) is appropriate for a multi-user site.
+      TrustAllContent: false
+
+      # Cache parameters for WebDAV content serving:
+      # * TTL: Maximum time to cache manifests and permission checks.
+      # * UUIDTTL: Maximum time to cache collection state.
+      # * MaxBlockEntries: Maximum number of block cache entries.
+      # * MaxCollectionEntries: Maximum number of collection cache entries.
+      # * MaxCollectionBytes: Approximate memory limit for collection cache.
+      # * MaxPermissionEntries: Maximum number of permission cache entries.
+      # * MaxUUIDEntries: Maximum number of UUID cache entries.
+      WebDAVCache:
+        TTL: 300s
+        UUIDTTL: 5s
+        MaxBlockEntries:      4
+        MaxCollectionEntries: 1000
+        MaxCollectionBytes:   100000000
+        MaxPermissionEntries: 1000
+        MaxUUIDEntries:       1000
+
     Login:
-      # These settings are provided by your OAuth2 provider (e.g.,
-      # sso-provider).
+      # These settings are provided by your OAuth2 provider (eg
+      # Google) used to perform upstream authentication.
       ProviderAppSecret: ""
       ProviderAppID: ""
 
+      # The cluster ID to delegate the user database.  When set,
+      # logins on this cluster will be redirected to the login cluster
+      # (login cluster must appear in RemoteHosts with Proxy: true)
+      LoginCluster: ""
+
+      # How long a cached token belonging to a remote cluster will
+      # remain valid before it needs to be revalidated.
+      RemoteTokenRefresh: 5m
+
     Git:
+      # Path to git or gitolite-shell executable. Each authenticated
+      # request will execute this program with the single argument "http-backend"
+      GitCommand: /usr/bin/git
+
+      # Path to Gitolite's home directory. If a non-empty path is given,
+      # the CGI environment will be set up to support the use of
+      # gitolite-shell as a GitCommand: for example, if GitoliteHome is
+      # "/gh", then the CGI environment will have GITOLITE_HTTP_HOME=/gh,
+      # PATH=$PATH:/gh/bin, and GL_BYPASS_ACCESS_CHECKS=1.
+      GitoliteHome: ""
+
       # Git repositories must be readable by api server, or you won't be
       # able to submit crunch jobs. To pass the test suites, put a clone
       # of the arvados tree in {git_repositories_dir}/arvados.git or
@@ -337,10 +502,12 @@ Clusters:
       # to skip the compatibility check (and display a warning message to
       # that effect).
       #
-      # Example for sites running docker < 1.10: ["v1"]
-      # Example for sites running docker >= 1.10: ["v2"]
-      # Example for disabling check: []
-      SupportedDockerImageFormats: ["v2"]
+      # Example for sites running docker < 1.10: {"v1": {}}
+      # Example for sites running docker >= 1.10: {"v2": {}}
+      # Example for disabling check: {}
+      SupportedDockerImageFormats:
+        "v2": {}
+        SAMPLE: {}
 
       # Include details about job reuse decisions in the server log. This
       # causes additional database queries to run, so it should not be
@@ -384,6 +551,20 @@ Clusters:
       # stale locks from a previous dispatch process.
       StaleLockTimeout: 1m
 
+      # The crunch-run command to manage the container on a node
+      CrunchRunCommand: "crunch-run"
+
+      # Extra arguments to add to crunch-run invocation
+      # Example: ["--cgroup-parent-subsystem=memory"]
+      CrunchRunArgumentsList: []
+
+      # Extra RAM to reserve on the node, in addition to
+      # the amount specified in the container's RuntimeConstraints
+      ReserveExtraRAM: 256MiB
+
+      # Minimum time between two attempts to run the same container
+      MinRetryPeriod: 0s
+
       Logging:
         # When you run the db:delete_old_container_logs task, it will find
         # containers that have been finished for at least this many seconds,
@@ -427,6 +608,10 @@ Clusters:
         LogUpdateSize: 32MiB
 
       SLURM:
+        PrioritySpread: 0
+        SbatchArgumentsList: []
+        SbatchEnvironmentVariables:
+          SAMPLE: ""
         Managed:
           # Path to dns server configuration directory
           # (e.g. /etc/unbound.d/conf.d). If false, do not write any config
@@ -450,7 +635,8 @@ Clusters:
 
           ComputeNodeDomain: ""
           ComputeNodeNameservers:
-            - 192.168.1.1
+            "192.168.1.1": {}
+            SAMPLE: {}
 
           # Hostname to assign to a compute node when it sends a "ping" and the
           # hostname in its Node record is nil.
@@ -469,7 +655,11 @@ Clusters:
           AssignNodeHostname: "compute%<slot_number>d"
 
       JobsAPI:
-        # Enable the legacy Jobs API.  This value must be a string.
+        # Enable the legacy 'jobs' API (crunch v1).  This value must be a string.
+        #
+        # Note: this only enables read-only access, creating new
+        # legacy jobs and pipelines is not supported.
+        #
         # 'auto' -- (default) enable the Jobs API only if it has been used before
         #         (i.e., there are job records in the database)
         # 'true' -- enable the Jobs API despite lack of existing records.
@@ -482,30 +672,6 @@ Clusters:
         # {git_repositories_dir}/arvados/.git
         GitInternalDir: /var/lib/arvados/internal.git
 
-        # Docker image to be used when none found in runtime_constraints of a job
-        DefaultDockerImage: ""
-
-        # none or slurm_immediate
-        CrunchJobWrapper: none
-
-        # username, or false = do not set uid when running jobs.
-        CrunchJobUser: crunch
-
-        # The web service must be able to create/write this file, and
-        # crunch-job must be able to stat() it.
-        CrunchRefreshTrigger: /tmp/crunch_refresh_trigger
-
-        # Control job reuse behavior when two completed jobs match the
-        # search criteria and have different outputs.
-        #
-        # If true, in case of a conflict, reuse the earliest job (this is
-        # similar to container reuse behavior).
-        #
-        # If false, in case of a conflict, do not reuse any completed job,
-        # but do reuse an already-running job if available (this is the
-        # original job reuse behavior, and is still the default).
-        ReuseJobIfOutputsDiffer: false
-
       CloudVMs:
         # Enable the cloud scheduler (experimental).
         Enable: false
@@ -592,7 +758,7 @@ Clusters:
 
           # (ec2) Instance configuration.
           SecurityGroupIDs:
-            - ""
+            "SAMPLE": {}
           SubnetID: ""
           Region: ""
           EBSVolumeType: gp2
@@ -629,14 +795,60 @@ Clusters:
         Price: 0.1
         Preemptible: false
 
+    Volumes:
+      SAMPLE:
+        AccessViaHosts:
+          SAMPLE:
+            ReadOnly: false
+        ReadOnly: false
+        Replication: 1
+        StorageClasses:
+          default: true
+          SAMPLE: true
+        Driver: s3
+        DriverParameters:
+
+          # for s3 driver
+          AccessKey: aaaaa
+          SecretKey: aaaaa
+          Endpoint: ""
+          Region: us-east-1a
+          Bucket: aaaaa
+          LocationConstraint: false
+          IndexPageSize: 1000
+          ConnectTimeout: 1m
+          ReadTimeout: 10m
+          RaceWindow: 24h
+          UnsafeDelete: false
+
+          # for azure driver
+          StorageAccountName: aaaaa
+          StorageAccountKey: aaaaa
+          StorageBaseURL: core.windows.net
+          ContainerName: aaaaa
+          RequestTimeout: 30s
+          ListBlobsRetryDelay: 10s
+          ListBlobsMaxAttempts: 10
+          MaxGetBytes: 0
+          WriteRaceInterval: 15s
+          WriteRacePollTime: 1s
+
+          # for local directory driver
+          Root: /var/lib/arvados/keep-data
+          Serialize: false
+
     Mail:
       MailchimpAPIKey: ""
       MailchimpListID: ""
       SendUserSetupNotificationEmail: true
-      IssueReporterEmailFrom: ""
-      IssueReporterEmailTo: ""
-      SupportEmailAddress: ""
-      EmailFrom: ""
+
+      # Bug/issue report notification to and from addresses
+      IssueReporterEmailFrom: "arvados@example.com"
+      IssueReporterEmailTo: "arvados@example.com"
+      SupportEmailAddress: "arvados@example.com"
+
+      # Generic issue email from
+      EmailFrom: "arvados@example.com"
     RemoteClusters:
       "*":
         Host: ""
@@ -671,25 +883,56 @@ Clusters:
       ArvadosPublicDataDocURL: https://playground.arvados.org/projects/public
       ShowUserAgreementInline: false
       SecretKeyBase: ""
+
+      # Scratch directory used by the remote repository browsing
+      # feature. If it doesn't exist, it (and any missing parents) will be
+      # created using mkdir_p.
       RepositoryCache: /var/www/arvados-workbench/current/tmp/git
+
+      # Below is a sample setting of user_profile_form_fields config parameter.
+      # This configuration parameter should be set to either false (to disable) or
+      # to a map as shown below.
+      # Configure the map of input fields to be displayed in the profile page
+      # using the attribute "key" for each of the input fields.
+      # This sample shows configuration with one required and one optional form fields.
+      # For each of these input fields:
+      #   You can specify "Type" as "text" or "select".
+      #   List the "Options" to be displayed for each of the "select" menu.
+      #   Set "Required" as "true" for any of these fields to make them required.
+      # If any of the required fields are missing in the user's profile, the user will be
+      # redirected to the profile page before they can access any Workbench features.
       UserProfileFormFields:
         SAMPLE:
-          exampleTextValue:  # key that will be set in properties
-            Type: text  #
-            FormFieldTitle: ""
-            FormFieldDescription: ""
-            Required: true
-            Position: 1
-          exampleOptionsValue:
-            Type: select
-            FormFieldTitle: ""
-            FormFieldDescription: ""
-            Required: true
-            Position: 1
-            Options:
-              red: {}
-              blue: {}
-              yellow: {}
+          Type: select
+          FormFieldTitle: Best color
+          FormFieldDescription: your favorite color
+          Required: false
+          Position: 1
+          Options:
+            red: {}
+            blue: {}
+            green: {}
+            SAMPLE: {}
+
+        # exampleTextValue:  # key that will be set in properties
+        #   Type: text  #
+        #   FormFieldTitle: ""
+        #   FormFieldDescription: ""
+        #   Required: true
+        #   Position: 1
+        # exampleOptionsValue:
+        #   Type: select
+        #   FormFieldTitle: ""
+        #   FormFieldDescription: ""
+        #   Required: true
+        #   Position: 1
+        #   Options:
+        #     red: {}
+        #     blue: {}
+        #     yellow: {}
+
+      # Use "UserProfileFormMessage to configure the message you want
+      # to display on the profile page.
       UserProfileFormMessage: 'Welcome to Arvados. All <span style="color:red">required fields</span> must be completed before you can proceed.'
 
       # Mimetypes of applications for which the view icon
@@ -712,19 +955,51 @@ Clusters:
         vnd.realvnc.bed: {}
         xml: {}
         xsl: {}
+        SAMPLE: {}
+
+      # The maximum number of bytes to load in the log viewer
       LogViewerMaxBytes: 1M
+
+      # When anonymous_user_token is configured, show public projects page
       EnablePublicProjectsPage: true
+
+      # By default, disable the "Getting Started" popup which is specific to Arvados playground
       EnableGettingStartedPopup: false
+
+      # Ask Arvados API server to compress its response payloads.
       APIResponseCompression: true
+
+      # Timeouts for API requests.
       APIClientConnectTimeout: 2m
       APIClientReceiveTimeout: 5m
+
+      # Maximum number of historic log records of a running job to fetch
+      # and display in the Log tab, while subscribing to web sockets.
       RunningJobLogRecordsToFetch: 2000
+
+      # In systems with many shared projects, loading of dashboard and topnav
+      # cab be slow due to collections indexing; use the following parameters
+      # to suppress these properties
       ShowRecentCollectionsOnDashboard: true
       ShowUserNotifications: true
+
+      # Enable/disable "multi-site search" in top nav ("true"/"false"), or
+      # a link to the multi-site search page on a "home" Workbench site.
+      #
+      # Example:
+      #   https://workbench.qr1hi.arvadosapi.com/collections/multisite
       MultiSiteSearch: ""
+
+      # Should workbench allow management of local git repositories? Set to false if
+      # the jobs api is disabled and there are no local git repositories.
       Repositories: true
+
       SiteName: Arvados Workbench
-      TrustAllContent: false
+      ProfilingEnabled: false
+
+      # This is related to obsolete Google OpenID 1.0 login
+      # but some workbench stuff still expects it to be set.
+      DefaultOpenIdPrefix: "https://www.google.com/accounts/o8/id"
 
       # Workbench2 configs
       VocabularyURL: ""