2016-11-07 8 views
0

Chefノードがroot以外のユーザーとしてchef-clientを実行する必要がある新しい環境を立ち上げています。 (私はanother SO questionあたり正しいクライアントキーに/etc/chef/chef-userrwxと権限、およびclient.rbポイントを作成している。)以下は、私のテストのレシピです:シェフのcronレシピを非rootユーザーとして実行することができません

cron "clientrun2m" do 
    minute '*/2' 
    command "/bin/chef-client" 
    action :create 
    user "chef-user" 
end 

私はchef-userとして対象ノードにログインしていたとき、私はchef-client(sudoではなく)を実行してみてください(失敗した場合)。以下の情報を取得してください。エラーは、ユーザーのアクセス許可や秘密キーに関係なく、リソースが収束しているようです。 (私はuser "chef-user"行を差し引いてこの問題を解決していますが、別のノードで問題なくsudoしています)。このレシピが私の非rootユーザーにとってうまくいかない理由は何ですか?

Installing Cookbook Gems: 
Compiling Cookbooks... 
Converging 2 resources 
Recipe: cron-delvalidate2m::2min_cu 
    * cron[clientrun2m] action create[2016-11-07T11:53:22-05:00] INFO: Processing cron[clientrun2m] action create (cron-delvalidate2m::2min_cu line 7) 


    ================================================================================ 
    Error executing action `create` on resource 'cron[clientrun2m]' 
    ================================================================================ 

    Chef::Exceptions::Cron 
    ---------------------- 
    Error updating state of clientrun2m, exit: 1 

    Resource Declaration: 
    --------------------- 
    # In /home/chef-user/.chef/cache/cookbooks/cron-delvalidate2m/recipes/2min_cu.rb 

     7: cron "clientrun2m" do 
     8: minute '*/2' 
     9: command "/bin/chef-client" 
    10: action :create 
    11: user "chef-user" 
    12: end 
    13: 

    Compiled Resource: 
    ------------------ 
    # Declared in /home/chef-user/.chef/cache/cookbooks/cron-delvalidate2m/recipes/2min_cu.rb:7:in `from_file' 

    cron("clientrun2m") do 
     action [:create] 
     retries 0 
     retry_delay 2 
     default_guard_interpreter :default 
     minute "*/2" 
     hour "*" 
     day "*" 
     month "*" 
     weekday "*" 
     command "/bin/chef-client" 
     user "chef-user" 
     declared_type :cron 
     cookbook_name "cron-delvalidate2m" 
     recipe_name "2min_cu" 
    end 

    Platform: 
    --------- 
    x86_64-linux 

[2016-11-07T11:53:22-05:00] INFO: Running queued delayed notifications before re-raising exception 

Running handlers: 
[2016-11-07T11:53:22-05:00] ERROR: Running exception handlers 
Running handlers complete 
[2016-11-07T11:53:22-05:00] ERROR: Exception handlers complete 
Chef Client failed. 0 resources updated in 01 seconds 
[2016-11-07T11:53:22-05:00] INFO: Sending resource update report (run-id: 92566ddb-e078-44b2-b862-be34da4a18b4) 
[2016-11-07T11:53:22-05:00] INFO: Unable to access cache at /var/chef. Switching cache to /home/chef-user/.chef 
[2016-11-07T11:53:22-05:00] INFO: Unable to access cache at /var/chef. Switching cache to /home/chef-user/.chef 
[2016-11-07T11:53:22-05:00] FATAL: Stacktrace dumped to /home/chef-user/.chef/cache/chef-stacktrace.out 
[2016-11-07T11:53:22-05:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report 
[2016-11-07T11:53:22-05:00] ERROR: cron[clientrun2m] (cron-delvalidate2m::2min_cu line 7) had an error: Chef::Exceptions::Cron: Error updating state of clientrun2m, exit: 1 
[2016-11-07T11:53:22-05:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) 

上記の3番目から最後の行に記載されている引用したstacktrace.outファイル。

[[email protected] ~]$ cat /home/chef-user/.chef/cache/chef-stacktrace.out 
Generated at 2016-11-07 11:53:22 -0500 
Chef::Exceptions::Cron: cron[clientrun2m] (cron-delvalidate2m::2min_cu line 7) had an error: Chef::Exceptions::Cron: Error updating state of clientrun2m, exit: 1 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider/cron.rb:231:in `write_crontab' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider/cron.rb:157:in `block in action_create' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/mixin/why_run.rb:52:in `add_action' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider.rb:176:in `converge_by' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider/cron.rb:156:in `action_create' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider.rb:145:in `run_action' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource.rb:603:in `run_action' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:69:in `run_action' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:97:in `block (2 levels) in converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:97:in `each' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:97:in `block in converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/resource_list.rb:94:in `block in execute_each_resource' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/stepable_iterator.rb:114:in `call_iterator_block' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/stepable_iterator.rb:85:in `step' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/stepable_iterator.rb:103:in `iterate' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/stepable_iterator.rb:55:in `each_with_index' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/resource_list.rb:92:in `execute_each_resource' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:96:in `converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:669:in `block in converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:664:in `catch' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:664:in `converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:703:in `converge_and_save' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:283:in `run' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:302:in `block in fork_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:290:in `fork' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:290:in `fork_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:255:in `block in run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/local_mode.rb:44:in `with_server_connectivity' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:243:in `run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:464:in `sleep_then_run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:451:in `block in interval_run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:450:in `loop' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:450:in `interval_run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:434:in `run_application' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:60:in `run' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/bin/chef-client:26:in `<top (required)>' 
/bin/chef-client:54:in `load' 
/bin/chef-client:54:in `<main>' 

>>>> Caused by Chef::Exceptions::Cron: Error updating state of clientrun2m, exit: 1 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider/cron.rb:231:in `write_crontab' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider/cron.rb:157:in `block in action_create' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/mixin/why_run.rb:52:in `add_action' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider.rb:176:in `converge_by' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider/cron.rb:156:in `action_create' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/provider.rb:145:in `run_action' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource.rb:603:in `run_action' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:69:in `run_action' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:97:in `block (2 levels) in converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:97:in `each' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:97:in `block in converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/resource_list.rb:94:in `block in execute_each_resource' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/stepable_iterator.rb:114:in `call_iterator_block' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/stepable_iterator.rb:85:in `step' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/stepable_iterator.rb:103:in `iterate' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/stepable_iterator.rb:55:in `each_with_index' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/resource_collection/resource_list.rb:92:in `execute_each_resource' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/runner.rb:96:in `converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:669:in `block in converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:664:in `catch' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:664:in `converge' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:703:in `converge_and_save' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/client.rb:283:in `run' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:302:in `block in fork_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:290:in `fork' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:290:in `fork_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:255:in `block in run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/local_mode.rb:44:in `with_server_connectivity' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:243:in `run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:464:in `sleep_then_run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:451:in `block in interval_run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:450:in `loop' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:450:in `interval_run_chef_client' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application/client.rb:434:in `run_application' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/lib/chef/application.rb:60:in `run' 
/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.15.19/bin/chef-client:26:in `<top (required)>' 
/bin/chef-client:54:in `load' 
+0

から削除シェフ・クライアント

# Removes any crontab job of 'chef-client' before inserting the new 'chef-client' crontab job (for every 2 mins) execute "clientrun2m" do command "crontab -l | grep -v chef-client | crontab - && (crontab -l; echo \"*/2 * * * * /bin/chef-client\") | crontab -" action :run end # Delete the validation.pem for security reasons file "/etc/chef/validation.pem" do action :delete end 

のcrontabにシェフ・クライアントを追加し、スタックトレースは障害の根本原因を見つけるのに役立ちます。 crontabを置き換えるとき(または間違った場所でrootとして)書くときにバグのようですが、それを提供して再現する必要はありません。 – Tensibai

+0

関連するコードは[here](read_crontab)にする必要があります。 'crontab -l -u chef-user'コマンドを' chef-user'として試してみて、エラーが発生していないか確認してください。 – Tensibai

+0

@Tensibai、謝罪私が最初に出力を読み込んだとき、スタックトレースファイルを見逃してしまった。今すぐ添付。私があなたの 'crontab'を走らせるとき、私は「-uを使うのに特権がなければなりません」と、シェフのcronプロバイダー[1]:https:// githubと[1]のように見える。 com/chef/chef/issues/2491 – yamori

答えて

0

私はthis open issueを見つけました。シェフのcronプロバイダーは、root以外のユーザーが指定されている場合、ノードのcrontabコマンドと正しくインターフェースしません。修正はバックログにある可能性があります。

私自身の用途では、自分のノードをroot以外のユーザーで実行する必要があります。私は必要な機能を再現するためにカスタムレシピをハックすることができました。

Recipe1:ログ(2本のFATALレベルライン)で述べたようにcrontabの

# Removes any crontab job of 'chef-client' 
execute "clientrun2m" do 
    command "crontab -l | grep -v chef-client | crontab -" 
    action :run 
end 

# Delete the validation.pem for security reasons 
file "/etc/chef/validation.pem" do 
    action :delete 
end 
+0

この回答は回避策としては正しいですが、それを述べるためだけです:誰かが私たちのためにパッチを更新しない限り、これは修正される可能性は非常に高くありません。一般的には、ワークステーション管理のためのroot以外のユーザーとして実行するだけで_really_(多くのリソースを改善するように)サポートしています.cronはそのユースケースではあまり出てこません。残念ながら、難しかったシェフをルートにする代わりに、作業を進めることをお勧めします。 – coderanger

+0

@コーダンガー、ニックピッキングには申し訳ありませんが、わかりやすくするために: "...一般的に[シェフは]ワークステーション管理のための[root?]としての実行を本当にサポートしています..."それ以外の場合、2番目の文を明らかにすることができますか?ありがとう。 – yamori

+1

はい、私たちはシェフのメンテナーです。主な非ルートの使用例は、MacとWindowsのワークステーション管理のためのものであり、我々は物事がスムーズに行われることを保証するとともに、シェフでun-y-server-yをroot以外のユーザーとして実行することは、非常にニッチな領域に過ぎず、テストされておらず、開発に多大な時間を要しません。 – coderanger

関連する問題