如何将变量从不同的 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 -c
像eval
一样使用,扩展命令替换,然后运行通过here-doc. 输出
- 请注意,如果有人可以修改 yaml 文件,这种额外的间接级别会产生代码注入的可能性。
例如,添加这个:
EOF
echo malicous commands
但它确实得到了你想要的结果。
我的所有环境变量都在 .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 -c
像eval
一样使用,扩展命令替换,然后运行通过here-doc. 输出
- 请注意,如果有人可以修改 yaml 文件,这种额外的间接级别会产生代码注入的可能性。
例如,添加这个:
EOF
echo malicous commands
但它确实得到了你想要的结果。