Files
tasks/common/config/config_template_embedded.yaml
Stephan BehnkeandGitHub 95fe9cae3d config: sqlite + cluster address env overrides for embedded template (#10229)
## What

Extend `common/config/config_template_embedded.yaml` with

(1) SQLite option
(2) option to override `rpcAddress` and/or `httpAddress`

## Why

https://github.com/temporalio/omes needs to be able to start a Temporal
server with sqlite and custom addresses.

See https://github.com/temporalio/omes/pull/348
2026-05-14 17:08:25 -07:00

395 lines
20 KiB
YAML

# enable-template
log:
stdout: true
level: {{ default "info" (env "LOG_LEVEL") }}
persistence:
numHistoryShards: {{ default "4" (env "NUM_HISTORY_SHARDS") }}
defaultStore: default
{{- $es := default "false" (env "ENABLE_ES") | lower -}}
{{- if eq $es "true" }}
visibilityStore: es-visibility
{{- else }}
visibilityStore: visibility
{{- end }}
datastores:
{{- $db := default "cassandra" (env "DB") | lower -}}
{{- if eq $db "cassandra" }}
default:
cassandra:
hosts: "{{ default "" (env "CASSANDRA_SEEDS") }}"
keyspace: "{{ default "temporal" (env "KEYSPACE") }}"
user: "{{ default "" (env "CASSANDRA_USER") }}"
password: "{{ default "" (env "CASSANDRA_PASSWORD") }}"
{{- if env "CASSANDRA_ALLOWED_AUTHENTICATORS" }}
allowedAuthenticators: {{ range split (env "CASSANDRA_ALLOWED_AUTHENTICATORS") "," }}
- {{trim .}}
{{- end }}
{{- end }}
port: {{ default "9042" (env "CASSANDRA_PORT") }}
maxConns: {{ default "20" (env "CASSANDRA_MAX_CONNS") }}
tls:
enabled: {{ default "false" (env "CASSANDRA_TLS_ENABLED") }}
caFile: {{ default "" (env "CASSANDRA_CA") }}
certFile: {{ default "" (env "CASSANDRA_CERT") }}
keyFile: {{ default "" (env "CASSANDRA_CERT_KEY") }}
caData: {{ default "" (env "CASSANDRA_CA_DATA") }}
certData: {{ default "" (env "CASSANDRA_CERT_DATA") }}
keyData: {{ default "" (env "CASSANDRA_CERT_KEY_DATA") }}
enableHostVerification: {{ default "false" (env "CASSANDRA_HOST_VERIFICATION") }}
serverName: {{ default "" (env "CASSANDRA_HOST_NAME") }}
{{- if env "CASSANDRA_ADDRESS_TRANSLATOR" }}
addressTranslator:
translator: {{ default "" (env "CASSANDRA_ADDRESS_TRANSLATOR") }}
{{- if env "CASSANDRA_ADDRESS_TRANSLATOR_OPTIONS" }}
options:
advertised-hostname: {{ default "" (env "CASSANDRA_ADDRESS_TRANSLATOR_OPTIONS") }}
{{- end }}
{{- end }}
{{- else if eq $db "mysql8" }}
default:
sql:
pluginName: "{{ $db }}"
databaseName: "{{ default "temporal" (env "DBNAME") }}"
connectAddr: "{{ default "" (env "MYSQL_SEEDS") }}:{{ default "3306" (env "DB_PORT") }}"
connectProtocol: "tcp"
user: "{{ default "" (env "MYSQL_USER") }}"
password: "{{ default "" (env "MYSQL_PWD") }}"
{{- if env "MYSQL_TX_ISOLATION_COMPAT" }}
connectAttributes:
tx_isolation: "'READ-COMMITTED'"
{{- end }}
maxConns: {{ default "20" (env "SQL_MAX_CONNS") }}
maxIdleConns: {{ default "20" (env "SQL_MAX_IDLE_CONNS") }}
maxConnLifetime: {{ default "1h" (env "SQL_MAX_CONN_TIME") }}
tls:
enabled: {{ default "false" (env "SQL_TLS_ENABLED") }}
caFile: {{ default "" (env "SQL_CA") }}
certFile: {{ default "" (env "SQL_CERT") }}
keyFile: {{ default "" (env "SQL_CERT_KEY") }}
enableHostVerification: {{ default "false" (env "SQL_HOST_VERIFICATION") }}
serverName: {{ default "" (env "SQL_HOST_NAME") }}
visibility:
sql:
{{ $visibility_seeds_default := default "" (env "MYSQL_SEEDS") }}
{{ $visibility_seeds := default $visibility_seeds_default (env "VISIBILITY_MYSQL_SEEDS") }}
{{ $visibility_port_default := default "3306" (env "DB_PORT") }}
{{ $visibility_port := default $visibility_port_default (env "VISIBILITY_DB_PORT") }}
{{ $visibility_user_default := default "" (env "MYSQL_USER") }}
{{ $visibility_user := default $visibility_user_default (env "VISIBILITY_MYSQL_USER") }}
{{ $visibility_pwd_default := default "" (env "MYSQL_PWD") }}
{{ $visibility_pwd := default $visibility_pwd_default (env "VISIBILITY_MYSQL_PWD") }}
pluginName: "{{ $db }}"
databaseName: "{{ default "temporal_visibility" (env "VISIBILITY_DBNAME") }}"
connectAddr: "{{ $visibility_seeds }}:{{ $visibility_port }}"
connectProtocol: "tcp"
user: "{{ $visibility_user }}"
password: "{{ $visibility_pwd }}"
{{- if env "MYSQL_TX_ISOLATION_COMPAT" }}
connectAttributes:
tx_isolation: "'READ-COMMITTED'"
{{- end }}
maxConns: {{ default "10" (env "SQL_VIS_MAX_CONNS") }}
maxIdleConns: {{ default "10" (env "SQL_VIS_MAX_IDLE_CONNS") }}
maxConnLifetime: {{ default "1h" (env "SQL_VIS_MAX_CONN_TIME") }}
tls:
enabled: {{ default "false" (env "SQL_TLS_ENABLED") }}
caFile: {{ default "" (env "SQL_CA") }}
certFile: {{ default "" (env "SQL_CERT") }}
keyFile: {{ default "" (env "SQL_CERT_KEY") }}
enableHostVerification: {{ default "false" (env "SQL_HOST_VERIFICATION") }}
serverName: {{ default "" (env "SQL_HOST_NAME") }}
{{- else if eq $db "postgres12" "postgres12_pgx" }}
default:
sql:
pluginName: "{{ $db }}"
databaseName: "{{ default "temporal" (env "DBNAME") }}"
connectAddr: "{{ default "" (env "POSTGRES_SEEDS") }}:{{ default "5432" (env "DB_PORT") }}"
connectProtocol: "tcp"
user: "{{ default "" (env "POSTGRES_USER") }}"
password: "{{ default "" (env "POSTGRES_PWD") }}"
maxConns: {{ default "20" (env "SQL_MAX_CONNS") }}
maxIdleConns: {{ default "20" (env "SQL_MAX_IDLE_CONNS") }}
maxConnLifetime: {{ default "1h" (env "SQL_MAX_CONN_TIME") }}
tls:
enabled: {{ default "false" (env "SQL_TLS_ENABLED") }}
caFile: {{ default "" (env "SQL_CA") }}
certFile: {{ default "" (env "SQL_CERT") }}
keyFile: {{ default "" (env "SQL_CERT_KEY") }}
enableHostVerification: {{ default "false" (env "SQL_HOST_VERIFICATION") }}
serverName: {{ default "" (env "SQL_HOST_NAME") }}
visibility:
sql:
{{ $visibility_seeds_default := default "" (env "POSTGRES_SEEDS") }}
{{ $visibility_seeds := default $visibility_seeds_default (env "VISIBILITY_POSTGRES_SEEDS") }}
{{ $visibility_port_default := default "5432" (env "DB_PORT") }}
{{ $visibility_port := default $visibility_port_default (env "VISIBILITY_DB_PORT") }}
{{ $visibility_user_default := default "" (env "POSTGRES_USER") }}
{{ $visibility_user := default $visibility_user_default (env "VISIBILITY_POSTGRES_USER") }}
{{ $visibility_pwd_default := default "" (env "POSTGRES_PWD") }}
{{ $visibility_pwd := default $visibility_pwd_default (env "VISIBILITY_POSTGRES_PWD") }}
pluginName: "{{ $db }}"
databaseName: "{{ default "temporal_visibility" (env "VISIBILITY_DBNAME") }}"
connectAddr: "{{ $visibility_seeds }}:{{ $visibility_port }}"
connectProtocol: "tcp"
user: "{{ $visibility_user }}"
password: "{{ $visibility_pwd }}"
maxConns: {{ default "10" (env "SQL_VIS_MAX_CONNS") }}
maxIdleConns: {{ default "10" (env "SQL_VIS_MAX_IDLE_CONNS") }}
maxConnLifetime: {{ default "1h" (env "SQL_VIS_MAX_CONN_TIME") }}
tls:
enabled: {{ default "false" (env "SQL_TLS_ENABLED") }}
caFile: {{ default "" (env "SQL_CA") }}
certFile: {{ default "" (env "SQL_CERT") }}
keyFile: {{ default "" (env "SQL_CERT_KEY") }}
enableHostVerification: {{ default "false" (env "SQL_HOST_VERIFICATION") }}
serverName: {{ default "" (env "SQL_HOST_NAME") }}
{{- else if eq $db "sqlite" }}
default:
sql:
pluginName: "{{ $db }}"
databaseName: "{{ default "temporal" (env "DBNAME") }}"
connectAddr: "localhost"
connectProtocol: "tcp"
connectAttributes:
mode: "{{ default "rwc" (env "SQLITE_MODE") }}"
cache: "{{ default "private" (env "SQLITE_CACHE") }}"
setup: "{{ default "true" (env "SQLITE_SETUP") }}"
journal_mode: "{{ default "wal" (env "SQLITE_JOURNAL_MODE") }}"
synchronous: "{{ default "2" (env "SQLITE_SYNCHRONOUS") }}"
busy_timeout: "{{ default "10000" (env "SQLITE_BUSY_TIMEOUT") }}"
maxConns: {{ default "1" (env "SQL_MAX_CONNS") }}
maxIdleConns: {{ default "1" (env "SQL_MAX_IDLE_CONNS") }}
visibility:
sql:
pluginName: "{{ $db }}"
databaseName: "{{ default "temporal_visibility" (env "VISIBILITY_DBNAME") }}"
connectAddr: "localhost"
connectProtocol: "tcp"
connectAttributes:
mode: "{{ default "rwc" (env "SQLITE_MODE") }}"
cache: "{{ default "private" (env "SQLITE_CACHE") }}"
setup: "{{ default "true" (env "SQLITE_SETUP") }}"
journal_mode: "{{ default "wal" (env "SQLITE_JOURNAL_MODE") }}"
synchronous: "{{ default "2" (env "SQLITE_SYNCHRONOUS") }}"
busy_timeout: "{{ default "10000" (env "SQLITE_BUSY_TIMEOUT") }}"
maxConns: {{ default "1" (env "SQL_VIS_MAX_CONNS") }}
maxIdleConns: {{ default "1" (env "SQL_VIS_MAX_IDLE_CONNS") }}
{{- end }}
{{- if eq $es "true" }}
es-visibility:
elasticsearch:
version: {{ default "" (env "ES_VERSION") }}
url:
scheme: {{ default "http" (env "ES_SCHEME") }}
host: "{{ default "" (env "ES_SEEDS") }}:{{ default "9200" (env "ES_PORT") }}"
username: "{{ default "" (env "ES_USER") }}"
password: "{{ default "" (env "ES_PWD") }}"
indices:
visibility: "{{ default "temporal_visibility_v1_dev" (env "ES_VIS_INDEX") }}"
{{- $es_sec_vis_index := default "" (env "ES_SEC_VIS_INDEX") -}}
{{- if ne $es_sec_vis_index "" }}
secondary_visibility: "{{ $es_sec_vis_index }}"
{{- end }}
{{- end }}
global:
membership:
maxJoinDuration: 30s
broadcastAddress: "{{ default "" (env "TEMPORAL_BROADCAST_ADDRESS") }}"
pprof:
port: {{ default "0" (env "PPROF_PORT") }}
tls:
refreshInterval: {{ default "0s" (env "TEMPORAL_TLS_REFRESH_INTERVAL") }}
expirationChecks:
warningWindow: {{ default "0s" (env "TEMPORAL_TLS_EXPIRATION_CHECKS_WARNING_WINDOW") }}
errorWindow: {{ default "0s" (env "TEMPORAL_TLS_EXPIRATION_CHECKS_ERROR_WINDOW") }}
checkInterval: {{ default "0s" (env "TEMPORAL_TLS_EXPIRATION_CHECKS_CHECK_INTERVAL") }}
internode:
# This server section configures the TLS certificate that internal temporal
# cluster nodes (history, matching, and internal-frontend) present to other
# clients within the Temporal Cluster.
server:
requireClientAuth: {{ default "false" (env "TEMPORAL_TLS_REQUIRE_CLIENT_AUTH") }}
certFile: {{ default "" (env "TEMPORAL_TLS_SERVER_CERT") }}
keyFile: {{ default "" (env "TEMPORAL_TLS_SERVER_KEY") }}
{{- if env "TEMPORAL_TLS_SERVER_CA_CERT" }}
clientCaFiles:
- {{ default "" (env "TEMPORAL_TLS_SERVER_CA_CERT") }}
{{- end }}
certData: {{ default "" (env "TEMPORAL_TLS_SERVER_CERT_DATA") }}
keyData: {{ default "" (env "TEMPORAL_TLS_SERVER_KEY_DATA") }}
{{- if env "TEMPORAL_TLS_SERVER_CA_CERT_DATA" }}
clientCaData:
- {{ default "" (env "TEMPORAL_TLS_SERVER_CA_CERT_DATA") }}
{{- end }}
# This client section is used to configure the TLS clients within
# the Temporal Cluster that connect to an Internode (history, matching, or
# internal-frontend)
client:
serverName: {{ default "" (env "TEMPORAL_TLS_INTERNODE_SERVER_NAME") }}
disableHostVerification: {{ default "false" (env "TEMPORAL_TLS_INTERNODE_DISABLE_HOST_VERIFICATION")}}
{{- if env "TEMPORAL_TLS_SERVER_CA_CERT" }}
rootCaFiles:
- {{ default "" (env "TEMPORAL_TLS_SERVER_CA_CERT") }}
{{- end }}
{{- if env "TEMPORAL_TLS_SERVER_CA_CERT_DATA" }}
rootCaData:
- {{ default "" (env "TEMPORAL_TLS_SERVER_CA_CERT_DATA") }}
{{- end }}
frontend:
# This server section configures the TLS certificate that the Frontend
# server presents to external clients.
server:
requireClientAuth: {{ default "false" (env "TEMPORAL_TLS_REQUIRE_CLIENT_AUTH") }}
certFile: {{ default "" (env "TEMPORAL_TLS_FRONTEND_CERT") }}
keyFile: {{ default "" (env "TEMPORAL_TLS_FRONTEND_KEY") }}
{{- if env "TEMPORAL_TLS_CLIENT1_CA_CERT" }}
clientCaFiles:
- {{ default "" (env "TEMPORAL_TLS_CLIENT1_CA_CERT") }}
- {{ default "" (env "TEMPORAL_TLS_CLIENT2_CA_CERT") }}
{{- end }}
certData: {{ default "" (env "TEMPORAL_TLS_FRONTEND_CERT_DATA") }}
keyData: {{ default "" (env "TEMPORAL_TLS_FRONTEND_KEY_DATA") }}
{{- if env "TEMPORAL_TLS_CLIENT1_CA_CERT_DATA" }}
clientCaData:
- {{ default "" (env "TEMPORAL_TLS_CLIENT1_CA_CERT_DATA") }}
- {{ default "" (env "TEMPORAL_TLS_CLIENT2_CA_CERT_DATA") }}
{{- end }}
# This client section is used to configure the TLS clients within
# the Temporal Cluster (specifically the Worker role) that connect to the Frontend service
client:
serverName: {{ default "" (env "TEMPORAL_TLS_FRONTEND_SERVER_NAME") }}
disableHostVerification: {{ default "false" (env "TEMPORAL_TLS_FRONTEND_DISABLE_HOST_VERIFICATION")}}
{{- if env "TEMPORAL_TLS_SERVER_CA_CERT" }}
rootCaFiles:
- {{ default "" (env "TEMPORAL_TLS_SERVER_CA_CERT") }}
{{- end }}
{{- if env "TEMPORAL_TLS_SERVER_CA_CERT_DATA" }}
rootCaData:
- {{ default "" (env "TEMPORAL_TLS_SERVER_CA_CERT_DATA") }}
{{- end }}
{{- if env "STATSD_ENDPOINT" }}
metrics:
statsd:
hostPort: {{ env "STATSD_ENDPOINT" }}
prefix: "temporal"
{{- else if env "PROMETHEUS_ENDPOINT" }}
metrics:
prometheus:
timerType: {{ default "histogram" (env "PROMETHEUS_TIMER_TYPE") }}
listenAddress: "{{ env "PROMETHEUS_ENDPOINT" }}"
{{- end }}
authorization:
jwtKeyProvider:
keySourceURIs:
{{- if env "TEMPORAL_JWT_KEY_SOURCE1" }}
- {{ default "" (env "TEMPORAL_JWT_KEY_SOURCE1") }}
{{- end }}
{{- if env "TEMPORAL_JWT_KEY_SOURCE2" }}
- {{ default "" (env "TEMPORAL_JWT_KEY_SOURCE2") }}
{{- end }}
refreshInterval: {{ default "1m" (env "TEMPORAL_JWT_KEY_REFRESH") }}
permissionsClaimName: {{ default "permissions" (env "TEMPORAL_JWT_PERMISSIONS_CLAIM") }}
permissionsRegex: {{ default "" (env "TEMPORAL_JWT_PERMISSIONS_REGEX") }}
authorizer: {{ default "" (env "TEMPORAL_AUTH_AUTHORIZER") }}
claimMapper: {{ default "" (env "TEMPORAL_AUTH_CLAIM_MAPPER") }}
{{- $temporalGrpcPort := default "7233" (env "FRONTEND_GRPC_PORT") }}
{{- $temporalHTTPPort := default "7243" (env "FRONTEND_HTTP_PORT") }}
{{- $temporalInternalHTTPPort := default "7246" (env "INTERNAL_FRONTEND_HTTP_PORT") }}
{{- $temporalClusterAddress := default (default "127.0.0.1" (env "BIND_ON_IP")) (env "TEMPORAL_BROADCAST_ADDRESS") }}
services:
frontend:
rpc:
grpcPort: {{ $temporalGrpcPort }}
membershipPort: {{ default "6933" (env "FRONTEND_MEMBERSHIP_PORT") }}
bindOnIP: "{{ default "127.0.0.1" (env "BIND_ON_IP") }}"
httpPort: {{ $temporalHTTPPort }}
{{- if env "USE_INTERNAL_FRONTEND" }}
internal-frontend:
rpc:
grpcPort: {{ default "7236" (env "INTERNAL_FRONTEND_GRPC_PORT") }}
membershipPort: {{ default "6936" (env "INTERNAL_FRONTEND_MEMBERSHIP_PORT") }}
bindOnIP: "{{ default "127.0.0.1" (env "BIND_ON_IP") }}"
httpPort: {{ $temporalInternalHTTPPort }}
{{- end }}
matching:
rpc:
grpcPort: {{ default "7235" (env "MATCHING_GRPC_PORT") }}
membershipPort: {{ default "6935" (env "MATCHING_MEMBERSHIP_PORT") }}
bindOnIP: "{{ default "127.0.0.1" (env "BIND_ON_IP") }}"
history:
rpc:
grpcPort: {{ default "7234" (env "HISTORY_GRPC_PORT") }}
membershipPort: {{ default "6934" (env "HISTORY_MEMBERSHIP_PORT") }}
bindOnIP: "{{ default "127.0.0.1" (env "BIND_ON_IP") }}"
worker:
rpc:
grpcPort: {{ default "7239" (env "WORKER_GRPC_PORT") }}
membershipPort: {{ default "6939" (env "WORKER_MEMBERSHIP_PORT") }}
bindOnIP: "{{ default "127.0.0.1" (env "BIND_ON_IP") }}"
clusterMetadata:
enableGlobalNamespace: false
failoverVersionIncrement: 10
masterClusterName: "active"
currentClusterName: "active"
clusterInformation:
active:
enabled: true
initialFailoverVersion: 1
rpcName: "frontend"
rpcAddress: {{ default (print $temporalClusterAddress ":" $temporalGrpcPort) (env "CLUSTER_RPC_ADDRESS") }}
httpAddress: {{ default (print $temporalClusterAddress ":" $temporalHTTPPort) (env "CLUSTER_HTTP_ADDRESS") }}
dcRedirectionPolicy:
policy: "noop"
archival:
history:
state: "enabled"
enableRead: true
provider:
filestore:
fileMode: "0666"
dirMode: "0766"
visibility:
state: "enabled"
enableRead: true
provider:
filestore:
fileMode: "0666"
dirMode: "0766"
namespaceDefaults:
archival:
history:
state: "disabled"
URI: "file:///tmp/temporal_archival/development"
visibility:
state: "disabled"
URI: "file:///tmp/temporal_vis_archival/development"
{{- if or (env "USE_INTERNAL_FRONTEND") (and (not (env "TEMPORAL_AUTH_AUTHORIZER")) (not (env "TEMPORAL_AUTH_CLAIM_MAPPER"))) }}
{{/* publicClient is not needed with internal frontend, or if not using authorizer + claim mapper */}}
{{- else }}
{{ $publicIp := default "127.0.0.1" (env "BIND_ON_IP") -}}
{{- $defaultPublicHostPost := (print $publicIp ":" $temporalGrpcPort) -}}
publicClient:
hostPort: "{{ default $defaultPublicHostPost (env "PUBLIC_FRONTEND_ADDRESS") }}"
{{- end }}
dynamicConfigClient:
filepath: "{{ default "/etc/temporal/config/dynamicconfig/docker.yaml" (env "DYNAMIC_CONFIG_FILE_PATH") }}"
pollInterval: "60s"