Problem:
I want to inject a service environment variable into my app spec from a Github secret, _instead_ of using an encrypted environment variable stored in the app spec itself.
Proposal:
Add a "vars" section to the app spec for defining input variables, similar to terraform's input variables. Input variables could be passed as command line parameters to the doctl CLI using the
--var my-variable=some-value
option. Define values in the app spec using a
${{var.my-variable}}
placeholder, which will be replaced when the app spec is read.
I suggest the double curly bracket enclosure to indicate yaml substitutions, as opposed to the single curly bracket enclosure used for build/deploy-time bindable variables. Also, adding the
var.
prefix inside the enclosure leaves room for other sources of substitution in the future.
Example:
vars:
- key: my-variable
type: string
default: some-default-value
services:
- name: foo
envs:
- key: MY_RUNTIME_VAR
scope: RUN_TIME
value: ${{var.my-variable}}
Deploy the spec:
doctl app create --spec app.yaml --var my-variable=some-value
Alternative:
Currently I'm using
sed
to do a string replacement in the app spec yaml file just before upserting the app using
doctl
.