Secret Injection with Templates
Some applications require configuration files to run. For example, a database might require a configuration that looks like this:
bind: 127.0.0.1
port: 6379
logfile: log.txt
access:
user: admin
password: uRJ5WhRmSZF4dgkk82Kp
This file contains several secrets that need to be in a particular format. We can create a generic template and use doppler secrets substitute
to inject our values.
bind: {{.HOST}}
port: {{.PORT}}
logfile: {{.LOGFILE}}
access:
user: {{.ACCESS_USER}}
password: {{.ACCESS_PASSWORD}}
Now, we can run doppler secrets substitute
with our template:
$ doppler secrets substitute
bind: 127.0.0.1
port: 6379
logfile: log.txt
access:
user: admin
password: uRJ5WhRmSZF4dgkk82Kp
The Doppler CLI uses Go's text/template package to perform the substitution. This engine provides some powerful features, including comments and optional blocks:
{{/* Comments won't be shown in the output. */}}
bind: {{.HOST}}
port: {{.PORT}}
{{/* The `logfile` field will only be shown if the LOGFILE secret is defined */}}
{{with .LOGFILE}}
logfile: {{.}}
{{end}}
access:
user: {{.ACCESS_USER}}
password: {{.ACCESS_PASSWORD}}
You can find more documentation for this syntax in the text/template's actions section.
In addition to the standard actions, two additional Doppler-defined functions are available to you:
tojson
, which serializes the secret string value as JSON. This is particularly useful for turning multiline strings into single-line quoted strings.fromjson
, which parses the secret string as JSON.
$ doppler secrets
βββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β NAME β VALUE β
βββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ACCESS β {"user": "admin", "password": "uRJ5WhRmSZF4dgkk82Kp"} β
β PRIVATE_KEY β -----BEGIN RSA PRIVATE KEY----- β
β β MIIJJwIBAAKCAgEAww6PISGwwCRj125/5CNQ5kntc/NdjA7EKmNPY1wol/8ZSgrl β
β β H2Egpj7GghDCsJfoJ7gQu3OtYQJ2j1/txGP44tzZh/lraMQblFqc9r9N8xXU3Y6z β
β β ... β
β β -----END RSA PRIVATE KEY----- β
β β β
βββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
$ cat example.txt
private_key: {{tojson .PRIVATE_KEY}}
{{with fromjson .ACCESS}}
access:
user: {{.user}}
password: {{.password}}
{{end}}
$ doppler secrets substitute example.txt
private_key: "-----BEGIN RSA PRIVATE KEY-----\r\nMIIJJwIBAAKCAgEAww6PISGwwCRj125/5CNQ5knt..."
access:
user: admin
password: uRJ5WhRmSZF4dgkk82Kp
You can save the result to a file with doppler secrets substitute example.txt --output
or use the output of the command directly.
For example, you could inject secrets into Kubernetes YAML and pass it directly to kubectl
:
kubectl apply -f <(doppler secrets substitute example.yaml)
Updated over 3 years ago