【问题标题】:chef create file in user's home directory厨师在用户的主目录中创建文件
【发布时间】:2012-10-03 09:44:31
【问题描述】:

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

  file "somefile" do
     action :create_if_missing
  end

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

  1. 文件是相对于 / 解释的,因此使用 ~/ 最终会将文件放入 /~/
  2. 我正在通过 vagrant 启动这个厨师食谱,这些文件是由 root 创建的。因此,即使我可以让 ~/ 工作,它最终也会在 root 的家中。我不想硬编码以使用用户名 vagrant,因为它并不总是这样(我们也可以使用 Chef 客户端运行这些),并且 node[:user] 似乎是空的。

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

【问题讨论】:

    标签: chef-infra vagrant


    【解决方案1】:

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

    您可以为用户创建属性,例如: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
    

    【讨论】:

      【解决方案2】:

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

      if File.exists? "/vagrant"
        user = "vagrant"
      else
        user = "deployer"
      end
      
      file "/home/#{user}/foo" do
        ..
      end
      

      【讨论】:

      • 我同意这种做法,但我会使用你传入的节点属性。default[:chef_client][:username]
      • 由于它可能不是由 vagrant 运行的,我不想在文件中硬编码该名称。 default[:chef_client][:username] 是一个属性吗?或者有没有我可以用来获取用户的属性?
      • 看起来使用 ENV['PWD'] 会得到工作目录,即当前用户的主目录
      • 另外,SUDO_USER 有我正在寻找的用户名,所以我可以使用它来找到正确的主目录
      【解决方案3】:

      据我了解,厨师的概念 - 每个食谱都应该是独立的。这意味着您应该只能将一个配方(其中任何一个)添加到 run_list 中,并且它应该可以成功安装在一台空机器上。

      在我看来,您认为您的非 root 用户已经存在于机器上,这与我之前的陈述相矛盾。您的配方应该包含另一个配方,用于配置您的非 root 用户。如果您使用 data_bag 来存储用户(配方 'user::my_user' 应该配置您的用户),您的配方应该看起来像这样。

      include_recipe 'user::my_user'
      my_user = data_bag_item('user', 'my_user')
      
      file ::File.join( my_user['home'], 'somefile' ) do
        action :create_if_missing
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-17
        相关资源
        最近更新 更多