问题描述
我正在尝试读取配方中的环境变量。
# recipes/default.rb
begin
tenant_name = ENV['TENANT_NAME']
...
end
但是tenant_name始终为空。我还尝试设置默认属性,但仍然为空值。我知道json输入数据有-j选项,但是由于它在Chef服务器上保留数据,因此我们不想使用该选项(这会破坏其他CI / CD流)。
我该如何解决?为什么ENV变量为空?
在我运行Chef-client命令的主机上,有很多ENV变量,但是在配方中打印ENV.keys仅显示其中几个。厨师默认导入的ENV是否有允许清单/白名单?
解决方法
正如@DracoAter所建议的,问题实际上是如何运行命令。 由于Chef-client以root身份运行,chef-client命令看不到主机上非root用户设置的环境变量。
作为一种运行修复程序的命令,可以解决此问题,
sudo TENANT_NAME=tnt1 chef-client -o tenant_deploy ...