我正在编写一个脚本,该脚本基于配置文件执行多个头盔安装命令。
在此配置文件中,用户需要能够指定其他参数,例如--set userPw="password"
。
其中一些参数需要从某个地方检索变量。
在powershell中,我可以将其存储在一个变量中,并在helm install --set参数中使用此变量,如下所示:
$mySecret = az keyvault secret show --name MYSECRET--vault-name MYVAULT| ConvertFrom-Json).value
helm install mydeployment repo/mychart -n my-namespace --set azureSecret=$mySecret
但是我不能动态地执行此操作... 课程的不同部署需要不同的变量。 我要使用配置文件而不是变量,因为我不希望用户编辑运行这些命令的脚本。
像这样可以进行头盔安装吗?:
helm install mydeployment repo/mychart -n my-namespace --set azureSecret=(az keyvault secret show --name MYSECRET--vault-name MYVAULT| ConvertFrom-Json).value)
在这种情况下,用户可以将这样的命令放入配置文件中。 我的语法可能已关闭,我尝试了一些变体,但似乎不起作用。
我们的团队仅使用此脚本轻松部署某些内容,因此安全性不是问题。
根据以下情况,我认为这是不允许的: https://github.com/helm/helm/issues/5145
只想确定一下。
答案 0 :(得分:1)
Helm实际上不能直接启动子命令。 Helm还禁用可以查询Shell环境的Sprig函数。模板的唯一输入是从图表的values.yaml
文件以及-f
和--set
选项构建的values对象。
在类似Unix的环境中,您可以在$(az keyvault ...)
命令中使用helm install
命令替换语法。 (我知道有两种方法可以在Windows上运行GNU Bash shell,其中一种可能有效。)您显示的命令涉及的内容足以编写一个简短的脚本来运行它会很有用,如果您有一个脚本,您的两行Powershell脚本也可以正常工作。
在连续集成环境中,另一种可行的方法是写出YAML值文件,然后通过helm install -f
选项传递该文件。所有有效的JSON都应为有效的YAML,因此您可以设置Jemkins管道 eg 来计算一些值,创建Groovy映射对象,将其作为JSON转储到文件中,然后将其用作输入值文件。
答案 1 :(得分:0)
这可以使用简单的bash命令(例如EX)来实现。您想从机器位置的abc.txt文件中获取密码值,您可以像这样简单地进行操作
掌舵安装。 --name abc --set userPw = userPw,[^"]*' /opt/abc.txt
在``内部使用bash命令进行grep / sed来从某个文件中获取值或使用命令来获取值。