我有一个带有 helm 升级命令的 helm 部署模板,默认情况下使用
<environment>-values.yaml
作为值文件。我们有用于 dev、prod 或 int 等常规环境的文件,但有时我们必须配置一些自定义环境,我们不想设置任何值文件,而是使用默认值 values.yaml
。
有什么方法可以检查yaml中文件是否存在?如果
<environment>-values.yaml
存在,则应在 helm 升级中使用它,但如果不存在,则应使用 values.yaml
。
现在,当 env 值文件不存在时,我们会得到
no such file or directory
。
我想你唯一合理的方法是用一个脚本包装 helm 来检查文件是否存在
您可以编写一个 shell 脚本包装器来包含该选项(仅当该选项存在时)。 (这种方法特别受到 BashFAQ/050 的启发,但
${variable+value}
语法是 POSIX shell 语法的一部分,因此不是 bash 特定的。)
#!/bin/sh
# Do environment-specific values exist?
env_values="$ENVIRONMENT-values.yaml"
if [ -f "$env_values" ]; then
have_env_values=true
fi
# Launch Helm, passing `-f` if the file exists, and passing any
# additional arguments to this script on to Helm.
helm ${have_env_values+-f "$env_values"} "$@"
ENVIRONMENT=production ./run-helm template .
另请记住,始终使用图表的
values.yaml
,但 helm -f
文件中的设置会覆盖它。因此,对于这种情况,如果每个环境值文件不存在,那么不传递 -f
选项就足够了。