Cluster configuration » History » Version 31
Peter Amstutz, 07/22/2019 07:06 PM
1 | 1 | Tom Clegg | h1. Cluster configuration |
---|---|---|---|
2 | |||
3 | 18 | Tom Clegg | We are (2019) consolidating configuration from per-microservice yaml/json/ini files into a single cluster configuration document that is used by all components. |
4 | 1 | Tom Clegg | * Long term: system nodes automatically keep their configs synchronized (using something like consul). |
5 | * Short term: sysadmin uses tools like puppet and terraform to ensure /etc/arvados/config.yml is identical on all system nodes. |
||
6 | * Hosts without config files (e.g., hosts outside the cluster) can retrieve the config document from the API server. |
||
7 | |||
8 | h2. Discovery document |
||
9 | |||
10 | Previously, we copied selected config values from the API server config into the API discovery document so clients could see them. When clients can get the configuration document itself, this won't be needed. The discovery document should advertise APIs provided by the server, not cluster configuration. |
||
11 | |||
12 | 7 | Tom Clegg | h2. Secrets |
13 | |||
14 | Secrets like BlobSigningKey can be given literally in the config file (convenient for dev/test, consul-template, etc) or indirectly using a secret backend. Anticipated backends: |
||
15 | * <code class="yaml">BlobSigningKey: foobar</code> ⇒ the secret is literally <code>foobar</code> |
||
16 | * <code class="yaml">BlobSigningKey: "vault:foobar"</code> ⇒ the secret can be obtained from vault using the vault key "foobar" |
||
17 | * <code class="yaml">BlobSigningKey: "file:/foobar"</code> ⇒ the secret can be read from the local file @/foobar@ |
||
18 | * <code class="yaml">BlobSigningKey: "env:FOOBAR"</code> ⇒ the secret can be read from the environment variable @FOOBAR@ |
||
19 | |||
20 | 22 | Tom Clegg | h2. Instructions for ops |
21 | |||
22 | 24 | Tom Clegg | Tentative instructions for switching config file format/location: |
23 | # Upgrade Arvados to a version that supports loading all configs from the new cluster-wide config file (maybe 1.4). When services come back up, they will still use your old configuration files, but they will log some deprecation warnings. |
||
24 | 22 | Tom Clegg | # Migrate your configuration to the new config file, one component at a time. For each component: |
25 | ## Restart the component. |
||
26 | ## Inspect the deprecation warning that is logged at startup. It will tell you either "old config file is superfluous" or "new config file is incomplete". |
||
27 | ## If your old config file is superfluous, delete it. You're done. |
||
28 | 29 | Tom Clegg | ## Run "arvados-server config-diff". This suggests changes to your new config file which will make your old config file obsolete. (Alternatively, run "arvados-server config-dump". This outputs a new config file that would make your old config file obsolete. Saving this might be easier than applying a diff, but it will reorder keys and lose comments.) |
29 | 22 | Tom Clegg | ## Make the suggested changes. |
30 | 1 | Tom Clegg | ## Repeat until finished. |
31 | 22 | Tom Clegg | # Upgrade to a version that doesn't support old config files at all (maybe 1.5). |
32 | 24 | Tom Clegg | |
33 | 22 | Tom Clegg | |
34 | 19 | Tom Clegg | h2. Implementation |
35 | 1 | Tom Clegg | |
36 | 22 | Tom Clegg | Development strategy for facilitating the above ops instructions: |
37 | 1 | Tom Clegg | # Read the new config file into an internal struct, if the new config file exists. |
38 | # Copy old config file values into the new config struct. |
||
39 | 19 | Tom Clegg | # Use the new config struct internally (the old config is no longer referenced except in the load-and-copy-to-new-struct step). |
40 | 22 | Tom Clegg | # Add a mechanism for showing the effect of the old config file on the resulting config struct (see "--config-diff" above). |
41 | # At startup, if the old config has any effect (i.e., some parts haven't been migrated to the new config file by the operator), log a deprecation warning recommending "--config-diff" and RTFM. |
||
42 | 1 | Tom Clegg | # Wait one minor version release cycle. |
43 | 19 | Tom Clegg | # Error out if the new config file does not exist. |
44 | # Error out if the old config file exists (...and some parts of the old config are not redundant [optional?]). |
||
45 | 22 | Tom Clegg | |
46 | 27 | Tom Clegg | h2. Example/template config file |
47 | 1 | Tom Clegg | |
48 | 26 | Peter Amstutz | See also [[Config migration key mapping]] |
49 | |||
50 | 1 | Tom Clegg | (Format not yet frozen!) |
51 | |||
52 | 20 | Tom Clegg | Notes: |
53 | * Keys are CamelCase — except in special cases like PostgreSQL connection settings, which are passed through to another system without being interpreted by Arvados. |
||
54 | 30 | Tom Clegg | * Arrays and lists are not to be used unless order is truly significant. These cannot be expressed natively in consul, and tend to be troublesome anyway: "what changed?" is harder to answer usefully, significance of duplicate elements is unclear, etc. If a list is used, its key must end with the chars "List". This way the value can be stored as a list (in a JSON/YAML file on disk) or a JSON-encoded string (in a system like Consul), and generically encoded/decoded between the two. |
55 | 20 | Tom Clegg | |
56 | 1 | Tom Clegg | <pre><code class="yaml"> |
57 | Clusters: |
||
58 | 27 | Tom Clegg | xyzzy: # api-server/uuid_prefix, sso/uuid_prefix |
59 | SystemRootToken: # arvados-git-sync.rb/arvados_api_token, keepstore/SystemAuthTokenFile, c-d-s/AuthToken |
||
60 | ManagementToken: # {arvados-ws,keepstore,keepproxy,keep-balance}/ManagementToken (& others) |
||
61 | Services: |
||
62 | RailsAPI: |
||
63 | InternalURLs: |
||
64 | "http://zzzzz:8000/": {} # api-server/(protocol,host,port) |
||
65 | ExternalURL: “https://zzzzz.arvadosapi.com/" |
||
66 | Insecure: false |
||
67 | GitHTTP: |
||
68 | InternalURLs: |
||
69 | "http://git:9001/": {} |
||
70 | ExternalURL: "https://git.zzzzz.arvadosapi.com/" # api-server/git_repo_https_base |
||
71 | Keepstore: |
||
72 | InternalURLs: |
||
73 | "http://keep0:25107/": {Unlisted: true} |
||
74 | "http://keep1:25107/": {Debug: true} |
||
75 | Controller: |
||
76 | InternalURLs: |
||
77 | "http://zzzzz:9004/": {} # controller/NodeProfiles.$cluster.Controller.Listen |
||
78 | ExternalURL: "https://zzzzz.arvadosapi.com/" # composer/apiEndPoint, workbench2/API_HOST, workbench/arvados_{login,v1}_base, arvados-ws/Client, keepproxy/Client |
||
79 | Websocket: |
||
80 | InternalURLs: |
||
81 | "http://ws:9003/": {} # arvados-ws/Listen |
||
82 | ExternalURL: "https://ws.zzzzz.arvadosapi.com/" # api-server/websocket_address |
||
83 | Keepbalance: |
||
84 | InternalURLs: |
||
85 | "http://zzzzz:9005": {} # keepbalance/Listen |
||
86 | GitHTTP: |
||
87 | InternalURLs: |
||
88 | "http://zzzzz:9001": {} # arvados-git-httpd/Listen |
||
89 | ExternalURL: "https://git.zzzzz.arvadosapi.com/" # api-server/git_repo_https_base |
||
90 | GitSSH: |
||
91 | ExternalURL: "git@git.zzzzz.arvadosapi.com" # api-server/git_repo_ssh_base |
||
92 | DispatchCloud: |
||
93 | InternalURLs: |
||
94 | "http://zzzzz:9006": {} # a-d-c/NodeProfiles |
||
95 | SSO: |
||
96 | ExternalURL: "https://auth.zzzzz.arvadosapi.com/" # api-server/sso_provider_url |
||
97 | Keepproxy: |
||
98 | InternalURLs: |
||
99 | "http://keep:25107/": {} # keepproxy/Listen |
||
100 | ExternalURL: "https://keep.zzzzz.arvadosapi.com/" |
||
101 | WebDAV: |
||
102 | InternalURLs: |
||
103 | "http://keep:9002/": {} # keep-web/Listen |
||
104 | ExternalURL: "https://*.collections.zzzzz.arvadosapi.com/" # api-server/keep_web_service_url, workbench/keep_web_url |
||
105 | WebDAVDownload: |
||
106 | InternalURLs: |
||
107 | "http://keep:9002/": {} # keep-web/Listen |
||
108 | ExternalURL: "https://download.zzzzz.arvadosapi.com/" # keep-web/AttachmentOnlyHost, workbench/keep_web_download_url |
||
109 | Keepstore: |
||
110 | InternalURLs: |
||
111 | "https://keep0:25107/": {} # keepstore/Listen |
||
112 | "https://keep1:25107/": {} # keepstore/Listen |
||
113 | Composer: |
||
114 | ExternalURL: "http://composer.zzzzz.arvadosapi.com/" # workbench/composer_url |
||
115 | WebShell: |
||
116 | ExternalURL: "http://webshell.zzzzz.arvadosapi.com/" # workbench/shell_in_a_box_url |
||
117 | Workbench1: |
||
118 | InternalURLs: |
||
119 | "http://workbench:9000": {} # workbench/Nginx.server.listen |
||
120 | ExternalURL: "http://workbench.zzzzz.arvadosapi.com/" # workbench/Nginx.server.listen, api-server/workbench_address |
||
121 | Workbench2: |
||
122 | ExternalURL: "http://workbench2.zzzzz.arvadosapi.com/" # workbench/workbench2_url |
||
123 | 1 | Tom Clegg | PostgreSQL: |
124 | 27 | Tom Clegg | Connection: # arvados-ws/Postgres, controller/PostgreSQL.Connection |
125 | 1 | Tom Clegg | # All parameters here are passed to the PG client library in a connection string; |
126 | # see https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS |
||
127 | Host: localhost |
||
128 | Port: 5432 |
||
129 | User: arvados |
||
130 | Password: s3cr3t |
||
131 | DBName: arvados_production |
||
132 | client_encoding: utf8 |
||
133 | fallback_application_name: arvados |
||
134 | 27 | Tom Clegg | ConnectionPool: # arvados-ws/PostgresPool |
135 | TLS: |
||
136 | Certificate: # (literal, file, or acme dir) keepstore/TLSCertificateFile |
||
137 | Key: # (literal, file, or acme dir) keepstore/TLSKeyFile |
||
138 | Insecure: true # workbench/arvados_insecure_https, api-server/sso_insecure |
||
139 | Git: |
||
140 | GitoliteAdminRepo: # arvados-git-sync.rb/gitolite_url |
||
141 | GitoliteAdminPublicKey: # arvados-git-sync.rb/gitolite_arvados_git_user_key |
||
142 | GitoliteSyncWorkDir: # arvados-git-sync.rb/gitolite_tmp |
||
143 | GitCommand: # arv-git-httpd/GitCommand |
||
144 | GitoliteHome: # arv-git-httpd/GitoliteHome |
||
145 | Repositories: # api-server/git_repositories_dir (crunch1 only; just assume {GitoliteHome}/repositories?) |
||
146 | API: |
||
147 | DisabledAPIs: # api-server/disable_api_methods |
||
148 | 31 | Peter Amstutz | SendTimeout: # arvados-ws/PingTimeout |
149 | 27 | Tom Clegg | WebsocketClientEventQueue: # arvados-ws/ClientEventQueue |
150 | WebsocketServerEventQueue: # arvados-ws/ServerEventQueue |
||
151 | KeepServiceRequestTimeout: # keepproxy/Timeout |
||
152 | MaxMemoryBuffers: # keepstore/MaxBuffers |
||
153 | MaxConcurrentRequests: # keepstore/MaxRequests |
||
154 | MaxRequestSize: # api-server/max_request_size |
||
155 | MaxIndexDatabaseRead: # api-server/max_index_database_read |
||
156 | MaxItemsPerResponse: # api-server/max_items_per_response, keep-balance/CollectionBatchSize, keep-balance/CollectionBuffers |
||
157 | MaxRequestAmplification: # controller/RequestLimits.MultiClusterRequestConcurrency |
||
158 | AsyncPermissionsUpdateInterval: # api-server/async_permissions_update_interval |
||
159 | Users: |
||
160 | AutoSetupNewUsers: # api-server/auto_setup_new_users |
||
161 | AutoSetupNewUsersWithVmUUID: # api-server/auto_setup_new_users_with_vm_uuid |
||
162 | AutoSetupNewUsersWithRepository: # api-server/auto_setup_new_users_with_repository |
||
163 | AutoSetupUsernameBlacklist: # api-server/auto_setup_name_blacklist |
||
164 | NewUsersAreActive: # api-server/new_users_are_active |
||
165 | AutoAdminUserWithEmail: # api-server/auto_admin_user |
||
166 | AutoAdminFirstUser: # api-server/auto_admin_first_user |
||
167 | UserProfileNotificationAddress: # api-server/user_profile_notification_address |
||
168 | AdminNotifierEmailFrom: # api-server/admin_notifier_email_from |
||
169 | EmailSubjectPrefix: # api-server/email_subject_prefix |
||
170 | UserNotifierEmailFrom: # api-server/user_notifier_email_from |
||
171 | NewUserNotificationRecipients: # api-server/new_user_notification_recipients |
||
172 | NewInactiveUserNotificationRecipients: # api-server/new_inactive_user_notification_recipients |
||
173 | AnonymousUserToken: # workbench/anonymous_user_token, keep-web/AnonymousTokens |
||
174 | Login: |
||
175 | SiteTitle: # sso/site_title |
||
176 | DefaultLinkTitle: # sso/default_link_title |
||
177 | DefaultLinkURL: # sso/default_link_url |
||
178 | AllowAccountRegistration: # sso/allow_account_registration |
||
179 | RequireEmailConfirmation: # sso/require_email_confirmation |
||
180 | Google: |
||
181 | ClientID: # sso/google_oauth2_client_id |
||
182 | ClientSecret: # sso/google_oauth2_client_secret |
||
183 | LDAP: # sso/use_ldap |
||
184 | Title: # sso/use_ldap.title |
||
185 | Host: # sso/use_ldap.host |
||
186 | Port: # sso/use_ldap.port |
||
187 | Method: # sso/use_ldap.method |
||
188 | Base: # sso/use_ldap.base |
||
189 | Uid: # sso/use_ldap.uid |
||
190 | EmailDomain: # sso/use_ldap.email_domain |
||
191 | BindDN: # sso/use_ldap.BindDN |
||
192 | Password: # sso/user_ldap.password |
||
193 | SecretToken: # sso/secret_token |
||
194 | ProviderAppSecret: # api-server/sso_app_secret |
||
195 | ProviderAppID: # api-server/sso_app_id |
||
196 | 1 | Tom Clegg | AuditLogs: |
197 | 27 | Tom Clegg | Enable: |
198 | MaxAge: # api-server/max_audit_log_age |
||
199 | MaxDeleteBatch: # api-server/max_audit_log_delete_batch |
||
200 | UnloggedAttributes: # api-server/unlogged_attributes (applies to logs table) |
||
201 | SystemLogs: |
||
202 | LogLevel: # keepstore/Debug, keepproxy/Debug, arvados-ws/LogLevel |
||
203 | Format: # keepstore/LogFormat, arvados-ws/LogFormat |
||
204 | MaxRequestLogParamsSize: # api-server/max_request_log_params_size |
||
205 | Collections: |
||
206 | DefaultReplication: # api-server/default_collection_replication, keepproxy/DefaultReplicas |
||
207 | DefaultTrashLifetime: # api-server/default_trash_lifetime |
||
208 | CollectionVersioning: # api-server/collection_versioning |
||
209 | PreserveVersionIfIdle: # api-server/preserve_version_if_idle |
||
210 | TrustAllContent: # keep-web/TrustAllContent, workbench/trust_all_content |
||
211 | TrashSweepInterval: # api-server/trash_sweep_interval |
||
212 | BlobSigningKey: # api-server/blob_signing_key, keepstore/BlobSigningKeyFile |
||
213 | BlobSigningTTL: # api-server/blob_signature_ttl, keepstore/BlobSignatureTTL |
||
214 | BlobSigning: # keepstore/RequireSignatures, api-server/permit_create_collection_with_unsigned_manifest |
||
215 | BlobTrash: # keepstore/EnableDelete |
||
216 | BlobTrashLifetime: # keepstore/TrashLifetime |
||
217 | BlobTrashCheckInterval: # keepstore/TrashCheckInterval |
||
218 | BlobTrashConcurrency: # keepstore/TrashWorkers, keep-balance/-commit-trash |
||
219 | BlobDeleteConcurrency: # keepstore/EmptyTrashWorkers |
||
220 | BlobReplicateConcurrency: # keepstore/PullWorkers, keep-balance/-commit-pulls |
||
221 | KeepBalanceRunPeriod: 10m # keepbalance/RunPeriod |
||
222 | WebDAVCache: |
||
223 | TTL: # keep-web/Cache.TTL |
||
224 | UUIDTTL: # keep-web/Cache.UUIDTTL |
||
225 | MaxCollectionEntries: # keep-web/Cache.MaxCollectionEntries |
||
226 | MaxCollectionBytes: # keep-web/Cache.MaxCollectionBytes |
||
227 | MaxPermissionEntries: # keep-web/Cache.MaxPermissionEntries |
||
228 | MaxUUIDEntries: # keep-web/Cache.MaxUUIDEntries |
||
229 | Containers: # control how Arvados runs user containers |
||
230 | SupportedDockerImageFormats: # api-server/docker_image_formats |
||
231 | LogReuseDecisions: # api-server/log_reuse_decisions |
||
232 | DefaultKeepCacheRAM: # api-server/container_default_keep_cache_ram |
||
233 | MaxDispatchAttempts: # api-server/max_container_dispatch_attempts |
||
234 | MaxRetryAttempts: # api-server/container_count_max |
||
235 | PollInterval: 10s # c-d-s/PollPeriod, a-d-c/Dispatch/PollInterval |
||
236 | MinRetryPeriod: 30s # c-d-s/MinRetryPeriod (optional? in case ContainerDispatchPollInterval is too short) |
||
237 | CrunchRunCommand: "crunch-run" # c-d-s/CrunchRunCommand |
||
238 | 30 | Tom Clegg | CrunchRunArgumentsList: ["-cgroup-parent-subsystem=memory", "-foo=bar"] # c-d-s/CrunchRunCommand |
239 | 27 | Tom Clegg | ReserveExtraRAM: 256MiB # c-d-s/ReserveExtraRAM |
240 | UsePreemptibleInstances: # api-server/preemptible_instances |
||
241 | MaxComputeVMs: # api-server/max_compute_nodes |
||
242 | DispatchPrivateKey: # a-d-c/Dispatch/PrivateKey |
||
243 | StaleLockTimeout: # a-d-c/Dispatch/StaleLockTimeout |
||
244 | Logging: |
||
245 | LogBytesPerEvent: # api-server/crunch_log_bytes_per_event |
||
246 | LogSecondsBetweenEvents: # api-server/crunch_log_seconds_between_events |
||
247 | LogThrottlePeriod: # api-server/crunch_log_throttle_period |
||
248 | LogThrottleBytes: # api-server/crunch_log_throttle_bytes |
||
249 | LogThrottleLines: # api-server/crunch_log_throttle_lines |
||
250 | LimitLogBytesPerJob: # api-server/crunch_limit_log_bytes_per_job |
||
251 | LogPartialLineThrottlePeriod: # api-server/crunch_log_partial_line_throttle_period |
||
252 | LogUpdatePeriod: # api-server/crunch_log_update_period |
||
253 | LogUpdateSize: # api-server/crunch_log_update_size |
||
254 | MaxAge: # api-server/clean_container_log_rows_after, api-server/clean_job_log_rows_after |
||
255 | CloudVMs: |
||
256 | Enable: # arvados-dispatch-cloud is in use |
||
257 | BootProbeCommand: # a-d-c/CloudVMs/BootProbeCommand |
||
258 | ProbeInterval: # a-d-c/Dispatch/ProbeInterval |
||
259 | MaxProbesPerSecond: # a-d-c/Dispatch/MaxProbesPerSecond |
||
260 | TimeoutSignal: # a-d-c/Dispatch/TimeoutSignal |
||
261 | TimeoutTERM: # a-d-c/Dispatch/TimeoutTERM |
||
262 | MaxCloudOpsPerSecond: # a-d-c/CloudVMs/MaxCloudOpsPerSecond |
||
263 | SSHPort: # a-d-c/CloudVMs/SSHPort |
||
264 | SyncInterval: # a-d-c/CloudVMs/SyncInterval |
||
265 | TimeoutIdle: # a-d-c/CloudVMs/TimeoutIdle |
||
266 | TimeoutBooting: # a-d-c/CloudVMs/TimeoutBooting |
||
267 | TimeoutProbe: # a-d-c/CloudVMs/TimeoutProbe |
||
268 | TimeoutShutdown: # a-d-c/CloudVMs/TimeoutShutdown |
||
269 | ImageID: # a-d-c/CloudVMs/ImageID |
||
270 | Driver: Amazon # a-d-c/CloudVMs/Driver |
||
271 | DriverParameters: # a-d-c/CloudVMs/DriverParameters |
||
272 | Region: us-east-1 |
||
273 | APITimeout: 20s |
||
274 | AWSAccessKeyID: abcdef |
||
275 | AWSSecretAccessKey: abcdefghijklmnopqrstuvwxyz |
||
276 | ImageID: ami-0a01b48b88d14541e |
||
277 | SubnetID: subnet-24f5ae62 |
||
278 | SecurityGroups: sg-3ec53e2a |
||
279 | SLURM: |
||
280 | Enable: # crunch-dispatch-slurm is in use |
||
281 | PrioritySpread: 1000 # c-d-s/PrioritySpread |
||
282 | 30 | Tom Clegg | SbatchArguments: ["-partition=PartitionName"] # c-d-s/SbatchArguments |
283 | 1 | Tom Clegg | KeepServices: |
284 | 27 | Tom Clegg | 00000-bi6l4-000000000000000: |
285 | 28 | Tom Clegg | InternalURLs: |
286 | "http://127.0.0.1:25107": {} # c-d-s/KeepServiceURIs |
||
287 | 27 | Tom Clegg | Managed: |
288 | Enable: # arvados-node-manager is in use |
||
289 | DNSServerConfDir: # api-server/dns_server_conf_dir |
||
290 | DNSServerConfTemplate: # api-server/dns_server_conf_template |
||
291 | DNSServerReloadCommand: # api-server/dns_server_reload_command |
||
292 | DNSServerUpdateCommand: # api-server/dns_server_update_command |
||
293 | ComputeNodeDomain: # api-server/compute_node_domain |
||
294 | ComputeNodeNameservers: # api-server/compute_node_nameservers |
||
295 | AssignNodeHostname: # api-server/assign_node_hostname |
||
296 | JobsAPI: |
||
297 | Enable: # api-server/enable_legacy_jobs_api (crunch1) |
||
298 | CrunchJobWrapper: # api-server/crunch_job_wrapper (crunch1) |
||
299 | CrunchJobUser: # api-server/crunch_job_user (crunch1) |
||
300 | CrunchRefreshTrigger: # api-server/crunch_refresh_trigger (crunch1) |
||
301 | GitInternalDir: # api-server/git_internal_dir (crunch1) |
||
302 | ReuseJobIfOutputsDiffer: # api-server/reuse_job_if_outputs_differ |
||
303 | DefaultDockerImage: # api-server/default_docker_image_for_jobs |
||
304 | 1 | Tom Clegg | Volumes: # keepstore/Volumes, keep-balance/KeepServiceTypes |
305 | 27 | Tom Clegg | # TODO: some keepstores are closer to specific volumes |
306 | zzzzz-ivpuk-voihjznerfweefq: |
||
307 | AccessViaHosts: # replaces differing configs on keepstore hosts |
||
308 | 28 | Tom Clegg | "http://keep0:25107": {ReadOnly: true} |
309 | "http://keep1:25107": {} |
||
310 | "http://keep2:25107": {ReadOnly: true} |
||
311 | "http://keep3:25107": {ReadOnly: true} |
||
312 | 27 | Tom Clegg | StorageClasses: # keepstore/S3Volume.StorageClasses, keepstore/AzureBlobVolume.StorageClasses, keepstore/UnixVolume.StorageClasses |
313 | default: true |
||
314 | cold: true |
||
315 | Replication: 2 # keepstore/S3Volume.S3Replication, keepstore/AzureBlobVolume.AzureReplication, keepstore/UnixVolume.DirectoryReplication |
||
316 | ReadOnly: false # keepstore/S3Volume.ReadOnly, keepstore/AzureBlobVolume.ReadOnly, keepstore/UnixVolume.ReadOnly |
||
317 | Driver: S3 # keepstore/Volumes[].Type |
||
318 | DriverParameters: |
||
319 | AccessKey: # keepstore/S3Volume.AccessKey |
||
320 | SecretKey: # keepstore/S3Volume.SecretKey |
||
321 | Endpoint: # keepstore/S3Volume.Endpoint |
||
322 | Region: # keepstore/S3Volume.Region |
||
323 | Bucket: # keepstore/S3Volume.Bucket |
||
324 | LocationConstraint: # keepstore/S3Volume.LocationConstraint |
||
325 | IndexPageSize: # keepstore/S3Volume.IndexPageSize |
||
326 | 1 | Tom Clegg | S3Replication: |
327 | 27 | Tom Clegg | ConnectTimeout: # keepstore/S3Volume.ConnectTimeout |
328 | ReadTimeout: # keepstore/S3Volume.ReadTimeout |
||
329 | RaceWindow: # keepstore/S3Volume.RaceWindow |
||
330 | ReadOnly: # |
||
331 | UnsafeDelete: # keepstore/S3Volume.UnsafeDelete |
||
332 | zzzzz-ivpuk-adbtuyuiivjhbnmb: |
||
333 | AccessViaHosts: # replaces differing configs on keepstore hosts (TBD: do we need “readonly from these hosts”?) |
||
334 | 28 | Tom Clegg | "http://keep1:25107": {ReadOnly: false} |
335 | 27 | Tom Clegg | StorageClasses: # keepstore/S3Volume.StorageClasses, keepstore/AzureBlobVolume.StorageClasses, keepstore/UnixVolume.StorageClasses |
336 | default: true |
||
337 | cold: false |
||
338 | Replication: 2 # keepstore/S3Volume.S3Replication, keepstore/AzureBlobVolume.AzureReplication, keepstore/UnixVolume.DirectoryReplication |
||
339 | ReadOnly: false # keepstore/S3Volume.ReadOnly, keepstore/AzureBlobVolume.ReadOnly, keepstore/UnixVolume.ReadOnly |
||
340 | Driver: Azure # keepstore/Volumes[].Type |
||
341 | DriverParameters: |
||
342 | StorageAccountName: # keepstore/AzureBlobVolume.StorageAccountName |
||
343 | StorageAccountKey: # keepstore/AzureBlobVolume.StorageAccountKeyFile |
||
344 | StorageBaseURL: # keepstore/AzureBlobVolume.StorageBaseURL |
||
345 | ContainerName: # keepstore/AzureBlobVolume.ContainerName |
||
346 | RequestTimeout: # keepstore/AzureBlobVolume.RequestTimeout |
||
347 | zzzzz-ivpuk-2344guvaiubbae4wa: |
||
348 | Driver: Filesystem # keepstore/Volumes[].Type |
||
349 | DriverParameters: |
||
350 | Root: # keepstore/UnixVolume.Root |
||
351 | Serialize: # keepstore/UnixVolume.Serialize |
||
352 | BlockDeviceUUID: # (disable if this is non-empty and does not match the local filesystem device) |
||
353 | Mail: |
||
354 | MailchimpAPIKey: # api-server/mailchimp_api_key |
||
355 | MailchimpListID: # api-server/mailchimp_list_id |
||
356 | SendUserSetupNotificationEmail: # workbench/send_user_setup_notification_email |
||
357 | IssueReporterEmailFrom: # workbench/issue_reporter_email_from |
||
358 | IssueReporterEmailTo: # workbench/issue_reporter_email_to |
||
359 | 1 | Tom Clegg | SupportEmailAddress: # workbench/support_email_address |
360 | 27 | Tom Clegg | EmailFrom: # workbench/email_from |
361 | RemoteClusters: # api-server/remote_hosts |
||
362 | xyzzx: |
||
363 | Host: |
||
364 | Proxy: false |
||
365 | Scheme: https |
||
366 | Insecure: false |
||
367 | ActivateUsers: false |
||
368 | 28 | Tom Clegg | "*": # api-server/remote_hosts_via_dns |
369 | 27 | Tom Clegg | ActivateUsers: false |
370 | 1 | Tom Clegg | Workbench: |
371 | 27 | Tom Clegg | Theme: default # workbench/arvados_theme |
372 | ActivationContactLink: # workbench/activation_contact_link |
||
373 | ArvadosDocsite: # workbench/arvados_docsite |
||
374 | ArvadosPublicDataDocURL: # workbench/arvados_public_data_doc_url |
||
375 | ShowUserAgreementInline: # workbench/show_user_agreement_inline |
||
376 | SecretToken: # workbench/secret_token |
||
377 | SecretKeyBase: # workbench/secret_key_base |
||
378 | RepositoryCache: # workbench/repository_cache |
||
379 | UserProfileFormFields: # workbench/user_profile_form_fields |
||
380 | 28 | Tom Clegg | UserProfileFormMessage: # workbench/user_profile_form_message |
381 | 27 | Tom Clegg | ApplicationMimetypesWithViewIcon: # workbench/application_mimetypes_with_view_icon |
382 | LogViewerMaxBytes: # workbench/log_viewer_max_bytes |
||
383 | EnablePublicProjectsPage: # workbench/enable_public_projects_page |
||
384 | EnableGettingStartedPopup: # workbench/enable_getting_started_popup |
||
385 | ApiResponseCompression: # workbench/api_response_compression |
||
386 | APIClientConnectTimeout: # workbench/api_client_connect_timeout |
||
387 | APIClientReceiveTimeout: # workbench/api_client_receive_timeout |
||
388 | RunningJobLogRecordsToFetch: # workbench/running_job_log_records_to_fetch |
||
389 | ShowRecentCollectionsOnDashboard: # workbench/show_recent_collections_on_dashboard |
||
390 | ShowUserNotifications: # workbench/show_user_notifications |
||
391 | MultiSiteSearch: # workbench/multi_site_search |
||
392 | Repositories: # workbench/repositories |
||
393 | SiteName: # workbench/site_name |
||
394 | VocabularyURL: # workbench2/VOCABULARY_URL |
||
395 | FileViewersConfigURL: # workbench2/FILE_VIEWERS_CONFIG_URL |
||
396 | 1 | Tom Clegg | InstanceTypes: |
397 | 27 | Tom Clegg | x1l: |
398 | ProviderType: x1.large |
||
399 | VCPUs: 16 |
||
400 | RAM: 128GiB |
||
401 | Scratch: 128GB |
||
402 | IncludedScratch: 128GB |
||
403 | AddedScratch: 0 |
||
404 | Price: 1.23 |
||
405 | Preemptible: false |
||
406 | TODO: |
||
407 | 28 | Tom Clegg | KeepproxyDisableGet: # keepproxy/DisableGet (retire this feature / use Nginx instead / use a per-token permission instead) |
408 | KeepproxyDisablePut: # keepproxy/DisablePut (retire this feature / use Nginx instead / use a per-token permission instead) |
||
409 | 27 | Tom Clegg | RailsSessionSecretToken: # api-server/secret_token (should this be generated at runtime from superusertoken?) |
410 | InternalIPNetworks: # Nginx $external_client |
||
411 | 1 | Tom Clegg | </code></pre> |
412 | |||
413 | h2. Go Configuration Framework Options |
||
414 | |||
415 | Viper and go-config seem to be the leading go config framework contenders considering some of our long term goals (config synchronization); but viper seems to be the more widely adopted of the two. |
||
416 | |||
417 | *spf13/viper:* https://github.com/spf13/viper |
||
418 | |||
419 | *micro/go-config* https://github.com/micro/go-config - more useful - https://micro.mu/docs/go-config.html |
||
420 | |||
421 | 27 | Tom Clegg | Both solutions are very similar in terms of reported functionality. Both have watch support, and would allow for merging flags, environment variables, remote key stores (Consul), and our master YAML config. Viper also supports encrypted remote key/value access. |