【问题标题】:Reading user-specific environment variables in Chef在 Chef 中读取用户特定的环境变量
【发布时间】:2013-09-27 11:55:55
【问题描述】:

我是 Chef 和 Ruby 的新手,我试图了解如何从特定 Linux/Windows 用户读取环境变量并使用它来放置文件。

我想做的是为客户端和数据库安装更新我们的 Oracle tnsnames.ora 文件。

这些文件可能位于 Windows 中的 C:\oracleC:\Program Files\oracle 或 Linux 中的 /u01/app/oracle/product/11.2/network/admin/u01/app/oracle/producdt/10.2/network/admin 之类的目录中。

如果不将环境变量读入配方并使用它,我不能 100% 确定我会知道确切的位置。

我正在阅读有关 #{ENV['HOME']} 的信息,但我不太清楚这是否是我想要使用的语法类型。

【问题讨论】:

  • 使用ENV['HOME'],而不是#{ENV['HOME']}。第二个仅适用于将其嵌入字符串中。您的代码必须以该用户身份运行才能读取其环境变量。
  • 感谢您的反馈。当我在思考这个问题时,我在思考recipes/default.rbtemplate 代码块。 template "#{ENV['ORACLE_HOME']}/network/admin/tnsnames.ora" do source "tnsnames.ora.erb" owner "oracle" group "dba" mode "0644" end 虽然这看起来不太对...

标签: ruby environment-variables chef-infra chef-recipe knife


【解决方案1】:

Ruby has a native method for doing this。我怀疑

template "#{Dir.home("oracle")}/network/admin/tnsnames.ora" do
    source "tnsnames.ora.erb"
    [...]
end

会做你想要的。当然,这只有在操作系统之间除了主目录的位置之外没有区别的情况下才有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2022-07-29
    相关资源
    最近更新 更多