2012-10-12 18 views
10

でファイルを作成します。私は浮浪者を通じて、このシェフのレシピを起動することだし、これらのファイルがされている〜/ /に〜/ シェフは、私は、ファイルリソース</p> <pre><code>file "somefile" do action :create_if_missing end </code></pre> <p>を作成するためにシェフを使用していると私は、ユーザーのホームディレクトリにこれを入れたいユーザーのホームディレクトリ

  • をファイルを置く終わる使用して、ファイルは/に相対して解釈される

    1. :私は2つの問題が生じていますルートによって作成されます。たとえ私が〜/働くことができたとしても、それは根の家で終わるでしょう。私はユーザー名の放棄を使用するのは難しいとは思っていません。なぜなら、常にそうであるとは限らないからです(私たちはシェフのクライアントでもこれらを実行するかもしれません)。node[:user]は空であるようです。

    ルート以外のユーザー(この場合は迷惑メール)のホームディレクトリにファイルを作成する方法はありますか?

  • 答えて

    2

    これは、シェフレシピがrootユーザーによって実行されているためです。この回避策についてどうすればいいですか?

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

    私はこのアプローチに同意するが、私は、ノードがデフォルトに渡す属性を使用します。[:chef_clientを] [:username] – nictrix

    +1

    迷惑メールでは実行できないので、その名前をファイルにハードコードしたくありません。デフォルト[:chef_client] [:username]は属性ですか?または、ユーザーを取得するために使用できる属性はありますか? –

    +2

    ENV ['PWD']を使用しているようですが、現在のユーザのホームディレクトリである作業ディレクトリを取得します –

    0

    私が理解しているように、各レシピは自己完結型でなければなりません。つまり、1つのレシピ(いずれか1つ)をrun_listに追加することができ、空のマシンにうまくインストールする必要があります。

    あなたのケースでは、あなたの非rootユーザーがマシンに既に存在していると仮定します。これは前のステートメントと矛盾しています。レシピには、ルート以外のユーザーを構成する別のレシピが含まれている必要があります。ユーザ(およびレシピ 'user :: my_user'がユーザを設定する必要がある)を格納するためにdata_bagを使用する場合、レシピはそのように見えるはずです。

    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 
    
    18

    スレッドは古いですが、私はこの問題に直面しました。

    あなたは、例えば、ユーザの属性を作成することができます。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 
    
    関連する問題

     関連する問題