【问题标题】:chef-client not getting ENV variable valuechef-client 没有得到 ENV 变量值
【发布时间】:2020-10-15 04:49:38
【问题描述】:

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

# recipes/default.rb

begin
  tenant_name = ENV['TENANT_NAME']
  ...
end

但tenant_name 始终为空。我也尝试设置默认属性,但仍然是空值。我知道 json 输入数据有 -j 选项,但由于它将数据保存在 Chef 服务器上,我们不想使用该选项(这会破坏其他 CI/CD 流程)。

我该如何解决这个问题?为什么 ENV 变量为空?

在我运行 chef-client 命令的主机上有很多 ENV 变量,但在配方中打印 ENV.keys 只显示其中的几个。 Chef 是否有默认导入的 ENV 的许可名单/白名单?

【问题讨论】:

  • Chef 以 root 用户身份运行。确保为 Chef 运行的用户分配 env 变量。
  • 感谢@DracoAter 的提示。我可以通过将 env 变量添加到 chef-client 命令来解决这个问题。

标签: chef-infra chef-client


【解决方案1】:

正如@DracoAter 所建议的,问题实际上在于命令的运行方式。 由于 chef-client 以 root 身份运行,因此主机上非 root 用户设置的环境变量对 chef-client 命令不可见。

作为一个修复运行命令,这种方式可以解决问题,

sudo TENANT_NAME=tnt1 chef-client -o tenant_deploy ...

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 2016-11-07
    • 2016-03-19
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2015-05-14
    • 1970-01-01
    相关资源
    最近更新 更多