2016-11-07 1 views
0

Chef 노드가 루트가 아닌 사용자로 chef-client을 실행해야하는 새로운 환경이 생깁니다. (나는 /etc/chef/chef-userrwx와 권한을 만든 및 another SO question 당 올바른 클라이언트 키에 client.rb 점.) 아래는 내 테스트 조리법입니다 :루트가 아닌 사용자로 Chef cron 제조법을 실행할 수 없습니다.

내가 chef-user로 대상 노드에 로그인하고
cron "clientrun2m" do 
    minute '*/2' 
    command "/bin/chef-client" 
    action :create 
    user "chef-user" 
end 

, I 시도 (실패한) chef-client (sudo가 아닌)을 실행하고 다음 정보를 얻으십시오. 오류가 사용자 권한이나 개인 키와 관련이없는 리소스 수렴과 같은 것으로 보입니다. (나는이 요리 책을 실행하고, user "chef-user" 라인을 빼고 다른 노드에서는 문제없이 sudo 할 것입니다.)이 비법이 루트가 아닌 사용자를 위해 작동하지 않는 이유는 무엇입니까?

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) 

위의 세 번째 줄부터 마지막 ​​줄까지 언급 한 인용 된 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

에서의 crontab에

# 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 

제거 요리사 클라이언트를 요리사 클라이언트를 추가, stacktrace는 실패의 근본 원인을 찾는 데 도움이 될 것입니다. crontab을 대체 할 때 (또는 루트라고 가정 한 잘못된 위치에서 글쓰기) 버그를 보일 수도 있지만, 코드를 제공하고 재현 할 필요가 없도록 도와줍니다. – Tensibai

+0

관련 코드는 [here] (read_crontab)이어야합니다.'crontab -l -u chef-user' 명령을'chef-user'로 시도해보고 오류가 있는지 확인하십시오. – Tensibai

+0

@Tensibai, 사과 처음 출력을 읽을 때 stacktrace 파일을 놓쳤습니다. 이제 첨부되었습니다. "crontab"을 실행하면 "-u"를 사용하는 데 특권이 있어야합니다. 이는 Chef의 cron 공급자 [1] : https : // github와 [1]의 [뛰어난 문제 또는 논점]처럼 보입니다. com/chef/chef/issues/2491 – yamori

답변

0

나는 this open issue을 찾았습니다. 루트 사용자가 아닌 사용자가 지정되면 Chef의 cron 공급자가 노드의 crontab 명령과 올바르게 상호 작용하지 않습니다. 수정 사항은 백 로그에있을 수 있습니다.

내 용도로는 루트가 아닌 사용자가 내 노드를 실행해야합니다. 필자는 필자가 필요로했던 기능을 복제하기 위해 사용자 지정 레시피를 해킹 할 수있었습니다.

Recipe1 :은 crontab 로그 (두 FATAL 레벨 라인)에 명시된 바와 같이

# 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

이 답변은 해결 방법으로 올바른 내용이지만 진술 만하기 위해 : 누군가가 우리를 위해 패치를 업데이트하지 않는 한 수정 될 가능성이 매우 높습니다. 일반적으로 우리는 워크 스테이션 관리를위한 루트가 아닌 사용자로 실행하는 것만으로 _really_ 많은 자원을 개선하는 것처럼 _ 지원합니다. cron은 그 유스 케이스에서 많이 나오지 않습니다. 어려움을 겪어서 미안하네요. 대신 루트로 셰프를 운영하는 것으로 전환 할 수 있다면 해결하는 것이 좋습니다. – coderanger

+0

@coderanger, nitpicking 미안하지만, 명확하게하기 위해 : "... 일반적으로 [주방장은] [워크 스테이션 관리를 위해 [root?]로 실행하는 것을 정말로 지원합니다 ..."? 그렇지 않으면 두 번째 문장을 명확히 할 수 있습니까? 아마도 cron에만 해당할까요? 감사. – yamori

+1

예, 우리는 주방장 관리자입니다. 기본이 아닌 루트 사용 사례는 Mac 및 Windows 워크 스테이션 관리를위한 것이므로 우리는 일이 원활하게 이루어 지도록 보장하고 일이 깨어 졌을 때 알려줄 수있는 사용자를 충분히 확보해야합니다. 셰프에서 root가 아닌 사용자로서 unix-y server-y 작업을 수행하는 것은 매우 틈새 영역이므로 많은 테스트를 거치지 않고 많은 개발 시간을 얻지 못합니다. – coderanger

관련 문제