如何将变量从不同的 dotenv 环境文件(如 envsubst)渲染到目标文件中

How to render variables into a target file from differnet dotenv environment files like envsubst

我的所有环境变量都在 .env 文件中。 当我打开 shell-terminal 时,它们会自动加载。

我通常使用 envsubst 将 shell 环境变量渲染到我的目标文件中。类似于下面的示例。

我搜索的是一个解决方案,我可以将 dotenv 文件和我的 template 文件传递​​给输出渲染结果的脚本。

像这样:

aScript --input .env.production --template template-file.yml --output result.yml

我希望能够将不同的环境变量解析到我的 yaml 中。输出应通过“Sealed secrets”进行密封,并最终保存在相关的 kustomize 文件夹中

envsub.sh .env.staging templates/secrets/backend-secrets.yml | kubeseal -o yaml > kustomize/overlays/staging

希望你明白了。


例子

.env.production-文件:

FOO=栏 密码=abc

template-file.yml

的内容
stringData:
  foo: $FOO
  password: $PASSWORD

然后运行这个:

envsubst < template-file.yml > file-with-vars.yml

结果是:

stringData:
  foo: bar
  password: abc

到目前为止我的方法不起作用,因为 Dotenv 还支持 不同的环境,例如 .env.env.production.env.staging asf..

怎么样:

#!/bin/sh

# envsub - subsitute environment variables

env=
template=

sh -c "
. \"$env\"

cat <<EOF
$(cat "$template")
EOF"

用法:

./envsub .env.production template-file.yaml > result.yaml
  • 带有不带引号的分隔符 (EOF) 的 here-doc 扩展变量,同时保留引号、反斜杠和其他 shell 序列。
  • sh -ceval一样使用,扩展命令替换,然后运行通过here-doc.
  • 输出
  • 请注意,如果有人可以修改 yaml 文件,这种额外的间接级别会产生代码注入的可能性。

例如,添加这个:

EOF
echo malicous commands

但它确实得到了你想要的结果。