-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathconfig.yaml
More file actions
486 lines (469 loc) · 21.9 KB
/
Copy pathconfig.yaml
File metadata and controls
486 lines (469 loc) · 21.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "pgdog.fullname" . }}
data:
# This is pgdog.toml. You can configure anything here, incl. databases.
# Note: don't change the port value, since it's pulled from Values.
pgdog.toml: |
[general]
port = {{ include "pgdog.intval" .Values.port }}
workers = {{ include "pgdog.intval" (.Values.workers | default 2) }}
default_pool_size = {{ include "pgdog.intval" (.Values.defaultPoolSize | default 10) }}
log_format = {{ .Values.logFormat | default "text" | quote }}
log_level = {{ .Values.logLevel | default "info" | quote }}
{{- if hasKey .Values "minPoolSize" }}
min_pool_size = {{ include "pgdog.intval" .Values.minPoolSize }}
{{- end }}
pooler_mode = {{ .Values.poolerMode | default "transaction" | quote }}
{{- if .Values.healthcheckPort }}
healthcheck_port = {{ include "pgdog.intval" .Values.healthcheckPort }}
{{- end }}
healthcheck_interval = {{ include "pgdog.intval" (.Values.healthcheckInterval | default "30_000") }}
idle_healthcheck_interval = {{ include "pgdog.intval" (.Values.idleHealthcheckInterval | default "30_000") }}
idle_healthcheck_delay = {{ include "pgdog.intval" (.Values.idleHealthcheckDelay | default "5_000") }}
healthcheck_timeout = {{ include "pgdog.intval" (.Values.healthcheckTimeout | default "5_000") }}
{{- if hasKey .Values "banTimeout" }}
ban_timeout = {{ include "pgdog.intval" .Values.banTimeout }}
{{- end }}
{{- if hasKey .Values "banReplicaLag" }}
ban_replica_lag = {{ include "pgdog.intval" .Values.banReplicaLag }}
{{- end }}
{{- if hasKey .Values "banReplicaLagBytes" }}
ban_replica_lag_bytes = {{ include "pgdog.intval" .Values.banReplicaLagBytes }}
{{- end }}
rollback_timeout = {{ include "pgdog.intval" (.Values.rollbackTimeout | default "5_000") }}
load_balancing_strategy = {{ .Values.loadBalancingStrategy | default "round_robin" | quote }}
read_write_strategy = {{ .Values.readWriteStrategy | default "conservative" | quote }}
{{- if .Values.readWriteSplit }}
read_write_split = {{ .Values.readWriteSplit | quote }}
{{- end }}
{{- if .Values.tlsGenerateSelfSignedCert }}
tls_certificate = "/etc/pgdog-tls/tls.crt"
tls_private_key = "/etc/pgdog-tls/tls.key"
{{- else }}
{{- if .Values.tlsCertificate }}
tls_certificate = {{ .Values.tlsCertificate | quote }}
{{- end }}
{{- if .Values.tlsPrivateKey }}
tls_private_key = {{ .Values.tlsPrivateKey | quote }}
{{- end }}
{{- end }}
tls_client_required = {{ hasKey .Values "tlsClientRequired" | ternary .Values.tlsClientRequired "false" }}
tls_verify = {{ .Values.tlsVerify | default "prefer" | quote }}
{{- if and .Values.rdsCertificateBundle .Values.rdsCertificateBundle.enabled }}
tls_server_ca_certificate = "/etc/pgdog-rds-ca/rds-ca-bundle.pem"
{{- else if .Values.tlsServerCaCertificate }}
tls_server_ca_certificate = {{ .Values.tlsServerCaCertificate | quote }}
{{- end}}
shutdown_timeout = {{ include "pgdog.intval" (.Values.shutdownTimeout | default "60_000") }}
{{- if .Values.shutdownTerminationTimeout }}
shutdown_termination_timeout = {{ include "pgdog.intval" .Values.shutdownTerminationTimeout }}
{{- end }}
prepared_statements = {{ .Values.preparedStatements | default "extended" | quote }}
{{- with .Values.queryParser }}
query_parser = {{ . | quote }}
{{- else }}
{{- with .Values.queryParserEnabled }}
query_parser_enabled = {{ . }}
{{- end }}
{{- end }}
{{- if .Values.queryParserEngine }}
query_parser_engine = {{ .Values.queryParserEngine | quote }}
{{- end }}
{{- if .Values.logMinDurationParse }}
log_min_duration_parse = {{ include "pgdog.intval" .Values.logMinDurationParse }}
{{- end }}
{{- if .Values.logQuerySampleLength }}
log_query_sample_length = {{ include "pgdog.intval" .Values.logQuerySampleLength }}
{{- end }}
{{- if .Values.regexParserLimit }}
regex_parser_limit = {{ include "pgdog.intval" .Values.regexParserLimit }}
{{- end }}
{{- if .Values.preparedStatementsLimit }}
prepared_statements_limit = {{ include "pgdog.intval" .Values.preparedStatementsLimit }}
{{- end}}
{{- if .Values.queryCacheLimit }}
query_cache_limit = {{ include "pgdog.intval" .Values.queryCacheLimit }}
{{- end }}
passthrough_auth = {{ .Values.passthroughAuth | default "disabled" | quote }}
connect_timeout = {{ include "pgdog.intval" (.Values.connectTimeout | default "5_000") }}
connect_attempts = {{ include "pgdog.intval" (.Values.connectAttempts | default 1) }}
connect_attempt_delay = {{ include "pgdog.intval" (.Values.connectAttemptDelay | default 0) }}
{{- if .Values.queryTimeout }}
query_timeout = {{ include "pgdog.intval" .Values.queryTimeout }}
{{- end }}
{{- if .Values.clientIdleInTransactionTimeout }}
client_idle_in_transaction_timeout = {{ include "pgdog.intval" .Values.clientIdleInTransactionTimeout }}
{{- end }}
checkout_timeout = {{ include "pgdog.intval" (.Values.checkoutTimeout | default "5_000") }}
dry_run = {{ hasKey .Values "dryRun" | ternary .Values.dryRun "false" }}
{{- if hasKey .Values "twoPhaseCommit" }}
two_phase_commit = {{ .Values.twoPhaseCommit }}
{{- end }}
{{- if hasKey .Values "twoPhaseCommitAuto" }}
two_phase_commit_auto = {{ .Values.twoPhaseCommitAuto }}
{{- end }}
{{- if .Values.twoPhaseCommitWalDir }}
two_phase_commit_wal_dir = {{ .Values.twoPhaseCommitWalDir | quote }}
{{- end }}
{{- if .Values.twoPhaseCommitWalSegmentSize }}
two_phase_commit_wal_segment_size = {{ include "pgdog.intval" .Values.twoPhaseCommitWalSegmentSize }}
{{- end }}
{{- if .Values.twoPhaseCommitWalFsyncInterval }}
two_phase_commit_wal_fsync_interval = {{ include "pgdog.intval" .Values.twoPhaseCommitWalFsyncInterval }}
{{- end }}
{{- if .Values.twoPhaseCommitWalCheckpointInterval }}
two_phase_commit_wal_checkpoint_interval = {{ include "pgdog.intval" .Values.twoPhaseCommitWalCheckpointInterval }}
{{- end }}
{{- if .Values.systemCatalogs }}
system_catalogs = {{ .Values.systemCatalogs | quote }}
{{- end }}
{{- if hasKey .Values "omnishardedSticky" }}
omnisharded_sticky = {{ .Values.omnishardedSticky }}
{{- end }}
{{- if .Values.reshardingCopyFormat }}
resharding_copy_format = {{ .Values.reshardingCopyFormat | quote }}
{{- end }}
{{- if .Values.reshardingParallelCopies }}
resharding_parallel_copies = {{ include "pgdog.intval" .Values.reshardingParallelCopies }}
{{- end }}
{{- if .Values.reshardingCopyRetryMaxAttempts }}
resharding_copy_retry_max_attempts = {{ include "pgdog.intval" .Values.reshardingCopyRetryMaxAttempts }}
{{- end }}
{{- if .Values.reshardingCopyRetryMinDelay }}
resharding_copy_retry_min_delay = {{ include "pgdog.intval" .Values.reshardingCopyRetryMinDelay }}
{{- end }}
{{- if hasKey .Values "reloadSchemaOnDdl" }}
reload_schema_on_ddl = {{ .Values.reloadSchemaOnDdl }}
{{- end }}
{{- if .Values.loadSchema }}
load_schema = {{ .Values.loadSchema | quote }}
{{- end }}
{{- if .Values.idleTimeout }}
idle_timeout = {{ include "pgdog.intval" .Values.idleTimeout }}
{{- end }}
{{- if .Values.clientIdleTimeout }}
client_idle_timeout = {{ include "pgdog.intval" .Values.clientIdleTimeout }}
{{- end }}
{{- if .Values.clientLoginTimeout }}
client_login_timeout = {{ include "pgdog.intval" .Values.clientLoginTimeout }}
{{- end }}
mirror_queue = {{ include "pgdog.intval" (.Values.mirrorQueue | default 128) }}
mirror_exposure = {{ .Values.mirrorExposure | default "1.0" }}
auth_type = {{ .Values.authType | default "scram" | quote }}
cross_shard_disabled = {{ hasKey .Values "crossShardDisabled" | ternary .Values.crossShardDisabled "false" }}
{{- if .Values.dnsTtl }}
dns_ttl = {{ include "pgdog.intval" .Values.dnsTtl }}
{{- end }}
{{- if .Values.pubSubChannelSize }}
pub_sub_channel_size = {{ include "pgdog.intval" .Values.pubSubChannelSize }}
{{- end }}
openmetrics_port = {{ include "pgdog.intval" (.Values.openMetricsPort | default 9090) }}
openmetrics_namespace = {{ .Values.openMetricsNamespace | default "pgdog_" | quote }}
server_lifetime = {{ include "pgdog.intval" (.Values.serverLifetime | default 86400000) }}
log_connections = {{ hasKey .Values "logConnections" | ternary .Values.logConnections "true" }}
log_disconnections = {{ hasKey .Values "logDisconnections" | ternary .Values.logDisconnections "true" }}
{{- if .Values.logDedupThreshold }}
log_dedup_threshold = {{ include "pgdog.intval" .Values.logDedupThreshold }}
{{- end }}
{{- if .Values.logDedupWindow }}
log_dedup_window = {{ include "pgdog.intval" .Values.logDedupWindow }}
{{- end }}
{{- if .Values.statsPeriod }}
stats_period = {{ include "pgdog.intval" .Values.statsPeriod }}
{{- end }}
{{- if .Values.connectionRecovery }}
connection_recovery = {{ .Values.connectionRecovery | quote }}
{{- end }}
{{- if .Values.clientConnectionRecovery }}
client_connection_recovery = {{ .Values.clientConnectionRecovery | quote }}
{{- end }}
expanded_explain = {{ hasKey .Values "expandedExplain" | ternary .Values.expandedExplain "false" }}
{{- if hasKey .Values "lsnCheckDelay" }}
lsn_check_delay = {{ include "pgdog.intval" .Values.lsnCheckDelay }}
{{- end }}
{{- if hasKey .Values "lsnCheckInterval" }}
lsn_check_interval = {{ include "pgdog.intval" .Values.lsnCheckInterval }}
{{- end }}
{{- if hasKey .Values "lsnCheckTimeout" }}
lsn_check_timeout = {{ include "pgdog.intval" .Values.lsnCheckTimeout }}
{{- end }}
{{- if .Values.rewriteShardKeyUpdates }}
rewrite_shard_key_updates = {{ .Values.rewriteShardKeyUpdates | quote }}
{{- end }}
{{- if hasKey .Values "uniqueIdMin" }}
unique_id_min = {{ include "pgdog.intval" .Values.uniqueIdMin }}
{{- end }}
{{- if .Values.uniqueIdFunction }}
unique_id_function = {{ .Values.uniqueIdFunction | quote }}
{{- end }}
{{- if hasKey .Values "cutoverTrafficStopThreshold" }}
cutover_traffic_stop_threshold = {{ include "pgdog.intval" .Values.cutoverTrafficStopThreshold }}
{{- end }}
{{- if hasKey .Values "cutoverReplicationLagThreshold" }}
cutover_replication_lag_threshold = {{ include "pgdog.intval" .Values.cutoverReplicationLagThreshold }}
{{- end }}
{{- if hasKey .Values "cutoverLastTransactionDelay" }}
cutover_last_transaction_delay = {{ include "pgdog.intval" .Values.cutoverLastTransactionDelay }}
{{- end }}
{{- if hasKey .Values "cutoverTimeout" }}
cutover_timeout = {{ include "pgdog.intval" .Values.cutoverTimeout }}
{{- end }}
{{- if .Values.cutoverTimeoutAction }}
cutover_timeout_action = {{ .Values.cutoverTimeoutAction | quote }}
{{- end }}
{{- if hasKey .Values "cutoverSaveConfig" }}
cutover_save_config = {{ .Values.cutoverSaveConfig }}
{{- end }}
{{- range .Values.databases }}
[[databases]]
name = {{ .name | quote }}
host = {{ .host | quote }}
port = {{ include "pgdog.intval" (.port | default 5432) }}
shard = {{ include "pgdog.intval" (.shard | default 0) }}
{{- if .databaseName }}
database_name = {{ .databaseName | quote }}
{{- end }}
{{- if .user }}
user = {{ .user | quote }}
{{- end }}
{{- if .password }}
password = {{ .password | quote }}
{{- end }}
{{- if .poolSize }}
pool_size = {{ include "pgdog.intval" .poolSize }}
{{- end }}
{{- if .minPoolSize }}
min_pool_size = {{ include "pgdog.intval" .minPoolSize }}
{{- end }}
{{- if .poolerMode }}
pooler_mode = {{ .poolerMode | quote }}
{{- end }}
{{- if .statementTimeout }}
statement_timeout = {{ include "pgdog.intval" .statementTimeout }}
{{- end }}
{{- if .idleTimeout }}
idle_timeout = {{ include "pgdog.intval" .idleTimeout }}
{{- end }}
{{- if .readOnly }}
read_only = {{ .readOnly }}
{{- end }}
{{- if .role }}
role = {{ .role | quote }}
{{- end }}
{{- if .serverLifetime }}
server_lifetime = {{ include "pgdog.intval" .serverLifetime }}
{{- end }}
{{- if .reshardingOnly }}
resharding_only = {{ .reshardingOnly }}
{{- end }}
{{- if .lbWeight }}
lb_weight = {{ include "pgdog.intval" .lbWeight }}
{{- end }}
{{- end }}
{{- range .Values.mirrors }}
[[mirroring]]
source_db = {{ .sourceDb | quote }}
destination_db = {{ .destinationDb | quote }}
{{- if or .queueLength .queueDepth }}
queue_length = {{ include "pgdog.intval" (.queueLength | default .queueDepth) }}
{{- end}}
{{- if .exposure }}
exposure = {{ .exposure }}
{{- end }}
{{- if .level }}
level = {{ .level | quote }}
{{- end }}
{{- end }}
{{- range .Values.shardedSchemas }}
[[sharded_schemas]]
database = {{ .database | quote }}
{{- if .name }}
name = {{ .name | quote }}
{{- end }}
shard = {{ include "pgdog.intval" .shard }}
{{- end }}
{{- range .Values.shardedTables }}
[[sharded_tables]]
database = {{ .database | quote }}
{{- if .name }}
name = {{ .name | quote }}
{{- end }}
column = {{ .column | quote }}
data_type = {{ .dataType | quote }}
{{- end }}
{{- range .Values.shardedMappings }}
[[sharded_mappings]]
database = {{ .database | quote }}
column = {{ .column | quote }}
kind = {{ .kind | quote }}
shard = {{ include "pgdog.intval" .shard }}
{{- if .values }}
values = {{ .values| toToml }}
{{- end }}
{{- if .start }}
start = {{ include "pgdog.intval" .start }}
{{- end }}
{{- if .end }}
end = {{ include "pgdog.intval" .end }}
{{- end}}
{{- end }}
{{- range .Values.omnishardedTables }}
[[omnisharded_tables]]
database = {{ .database | quote }}
{{- if .sticky }}
sticky = {{ .sticky }}
{{- end }}
tables = {{ .tables | toToml }}
{{- end }}
{{- range .Values.plugins }}
[[plugins]]
name = {{ .name | quote }}
{{- if .config }}
config = "/etc/pgdog/{{ .name }}.toml"
{{- end }}
{{- end }}
{{- if or (hasKey .Values "tcpKeepalive") (hasKey .Values "tcpTime") (hasKey .Values "tcpInterval") (hasKey .Values "tcpRetries") (hasKey .Values "tcpUserTimeout") (hasKey .Values "tcpCongestionControl") }}
[tcp]
{{- if hasKey .Values "tcpKeepalive" }}
keepalive = {{ .Values.tcpKeepalive }}
{{- end }}
{{- if hasKey .Values "tcpTime" }}
time = {{ include "pgdog.intval" .Values.tcpTime }}
{{- end }}
{{- if hasKey .Values "tcpInterval" }}
interval = {{ include "pgdog.intval" .Values.tcpInterval }}
{{- end }}
{{- if hasKey .Values "tcpRetries" }}
retries = {{ include "pgdog.intval" .Values.tcpRetries }}
{{- end }}
{{- if hasKey .Values "tcpUserTimeout" }}
user_timeout = {{ include "pgdog.intval" .Values.tcpUserTimeout }}
{{- end }}
{{- if hasKey .Values "tcpCongestionControl" }}
congestion_control = {{ .Values.tcpCongestionControl | quote }}
{{- end }}
{{- end }}
{{- if or (hasKey .Values "memoryNetBuffer") (hasKey .Values "memoryMessageBuffer") (hasKey .Values "memoryStackSize") }}
[memory]
{{- if hasKey .Values "memoryNetBuffer" }}
net_buffer = {{ .Values.memoryNetBuffer | int }}
{{- end }}
{{- if hasKey .Values "memoryMessageBuffer" }}
message_buffer = {{ .Values.memoryMessageBuffer | int }}
{{- end }}
{{- if hasKey .Values "memoryStackSize" }}
stack_size = {{ .Values.memoryStackSize | int }}
{{- end }}
{{- end }}
{{- if .Values.adminPassword }}
[admin]
password = {{ .Values.adminPassword | quote }}
{{- end }}
{{- if and .Values.gateway.enabled .Values.gateway.connectFromPgdog }}
[gateway]
address = "{{ include "pgdog.fullname" . }}-gateway.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.gateway.port | default 8443 }}"
{{- end }}
{{- if .Values.qos }}
[qos]
enabled = {{ hasKey .Values.qos "enabled" | ternary .Values.qos.enabled "false" }}
max_entries = {{ include "pgdog.intval" (.Values.qos.maxEntries | default "10_000") }}
{{- end }}
{{- with .Values.queryStats }}
{{- if .enabled }}
[query_stats]
enabled = {{ .enabled }}
{{- if .maxEntries }}
max_entries = {{ include "pgdog.intval" .maxEntries }}
{{- end }}
{{- if .queryPlanThreshold }}
query_plan_threshold = {{ include "pgdog.intval" .queryPlanThreshold }}
{{- end }}
{{- if .queryPlansCache }}
query_plans_cache = {{ include "pgdog.intval" .queryPlansCache }}
{{- end }}
{{- if .queryPlanMaxAge }}
query_plan_max_age = {{ include "pgdog.intval" .queryPlanMaxAge }}
{{- end }}
{{- if .maxErrors }}
max_errors = {{ include "pgdog.intval" .maxErrors }}
{{- end }}
{{- if .maxErrorAge }}
max_error_age = {{ include "pgdog.intval" .maxErrorAge }}
{{- end }}
{{- if .idleInTransactionThreshold }}
idle_in_transaction_threshold = {{ include "pgdog.intval" .idleInTransactionThreshold }}
{{- end }}
{{- end }}
{{- end }}
{{- with .Values.control }}
{{- if .enabled }}
[control]
{{- if .endpoint }}
endpoint = {{ .endpoint | quote }}
{{- end }}
{{- if .token }}
token = {{ .token | quote }}
{{- end }}
{{- if .metricsInterval }}
metrics_interval = {{ include "pgdog.intval" .metricsInterval }}
{{- end }}
{{- if .statsInterval }}
stats_interval = {{ include "pgdog.intval" .statsInterval }}
{{- end }}
{{- if .activeQueriesInterval }}
active_queries_interval = {{ include "pgdog.intval" .activeQueriesInterval }}
{{- end }}
{{- if .errorsInterval }}
errors_interval = {{ include "pgdog.intval" .errorsInterval }}
{{- end }}
{{- if .requestTimeout }}
request_timeout = {{ include "pgdog.intval" .requestTimeout }}
{{- end }}
{{- if .queryTimingsChunkSize }}
query_timings_chunk_size = {{ include "pgdog.intval" .queryTimingsChunkSize }}
{{- end }}
{{- if .queryTimingsNewQueryQueueSize }}
query_timings_new_query_queue_size = {{ include "pgdog.intval" .queryTimingsNewQueryQueueSize }}
{{- end }}
{{- end }}
{{- end }}
{{- if .Values.rewrite }}
[rewrite]
enabled = {{ hasKey .Values.rewrite "enabled" | ternary .Values.rewrite.enabled "false" }}
shard_key = {{ .Values.rewrite.shardKey | default "error" | quote }}
split_inserts = {{ .Values.rewrite.splitInserts | default "error" | quote }}
primary_key = {{ .Values.rewrite.primaryKey | default "ignore" | quote }}
{{- end }}
{{- if .Values.multiTenant }}
[multi_tenant]
column = {{ .Values.multiTenant.column | quote }}
{{- end }}
{{- if .Values.otel }}
[otel]
{{- if .Values.otel.endpoint }}
endpoint = {{ .Values.otel.endpoint | quote }}
{{- end }}
{{- if .Values.otel.namespace }}
namespace = {{ .Values.otel.namespace | quote }}
{{- end }}
{{- if .Values.otel.datadogApiKey }}
datadog_api_key = {{ .Values.otel.datadogApiKey | quote }}
{{- end }}
{{- if .Values.otel.pushInterval }}
push_interval = {{ include "pgdog.intval" .Values.otel.pushInterval }}
{{- end }}
{{- if .Values.otel.headers }}
[otel.headers]
{{- range $k, $v := .Values.otel.headers }}
{{ $k }} = {{ $v | quote }}
{{- end }}
{{- end }}
{{- end }}
{{- range .Values.plugins }}
{{- if .config }}
{{ .name }}.toml: |
{{ .config | indent 8 }}
{{- end }}
{{- end }}