chef在用户的主目录中创建文件

Jef*_*rey 10 chef-infra vagrant

我正在使用chef来创建文件资源

  file "somefile" do
     action :create_if_missing
  end
Run Code Online (Sandbox Code Playgroud)

我想把它放在用户的主目录中.我有两个问题:

  1. 该文件是相对于/进行解释的,所以使用〜/最终将文件放在/〜/中
  2. 我正在通过流浪汉推出这个厨师食谱,这些文件是由root创建的.因此,即使我能够工作,它也会在root的家中结束.我不想硬编码使用用户名vagrant,因为它并不总是这样(我们也可以与Chef客户端一起运行),并且node[:user]看起来是空的.

有没有办法在非root用户(在本例中为vagrant)主目录中创建文件?

kop*_*zko 19

线程很旧,但我刚才遇到了这个问题.

您可以为用户创建属性,例如: default['mycookbook']['user']

然后在你的食谱中:

user = node['mycookbook']['user'] # user set in cookbook attrubute
# user = node['current_user'] # user running chef cookbook (on provisioned host)

home = node['etc']['passwd'][user]['dir'] # Chef DSL
# home = Dir.home(user) # It's Ruby

file "#{home}/somefile" do
  action :create_if_missing
end
Run Code Online (Sandbox Code Playgroud)


axs*_*uul 2

这是因为厨师食谱是由root用户运行的。这个解决方法怎么样

if File.exists? "/vagrant"
  user = "vagrant"
else
  user = "deployer"
end

file "/home/#{user}/foo" do
  ..
end
Run Code Online (Sandbox Code Playgroud)

  • 看起来使用 ENV['PWD'] 会给我工作目录,这是当前用户的主目录 (2认同)
  • 另外,SUDO_USER 具有我正在寻找的用户名,因此我可以使用它来查找正确的主目录 (2认同)