厨师客户未获得ENV变量值

问题描述

我正在尝试读取配方中的环境变量。

# 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 ...