2016-11-07 4 views
0

Я встаю в новую среду, где узлам Chef придется запускать chef-client как пользователь без полномочий root. (Я создал chef-user с rwx привилегии /etc/chef/, и client.rb указывает на правильный ключ клиента на another SO question.) Ниже мой тест рецепт:Невозможно запустить рецепт Chef 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'd в то время как на другом узле без проблем.) Любые идеи, почему этот рецепт не работает для моего пользователя без полномочий 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) 

И приведенный файл 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

Как указано в журнале (две ФАТАЛЬНЫХ линий уровня), stacktrace будет полезна, чтобы помочь найти основную причину сбоя. Похоже на ошибку при замене crontab (или написание не в том месте, при условии root), но помогите нам помочь вам, предоставив его и не перепрограммировать. – Tensibai

+0

Релевантный код должен быть [здесь] (read_crontab) Попробуйте команды 'crontab -l -u chef-user' как' chef-user' и посмотрите, не сработала ли ошибка. – Tensibai

+0

@ Tensibai, извинения Я пропустил этот файл stacktrace, когда я впервые прочитал вывод. Теперь прилагается. Когда я запускаю ваш 'crontab', я получаю« должен быть привилегирован для использования -u », похоже, что это [непонятная проблема или точка раздора] [1] с поставщиком cron шеф-повара [1]: https: // github. com/chef/chef/issues/2491 – yamori

ответ

0

Я нашел this open issue. Поставщик Chef's cron не корректно взаимодействует с командой crontab узла, когда указан пользователь, не являющийся пользователем root. Исправление может быть в отставании.

Для моих собственных целей мне нужно, чтобы мои узлы запускались с пользователями без полномочий root. Я смог взломать некоторые пользовательские рецепты, чтобы повторить те функции, которые мне нужны.

Recipe1: Добавить шеф-клиент кронтаб

# 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 

Удалить шеф-клиент из кронтаба

# 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_ поддерживаем (как и вкладываем много ресурсов в улучшение), работая как пользователи без полномочий root для управления рабочей станцией, а cron просто не приносит большого успеха в этом случае использования. Извините за трудность, я бы порекомендовал разработку, если вместо этого вы можете переключиться на запуск Chef как root. – coderanger

+0

@coderanger, извините за nitpicking, но для ясности: «... вообще [Chef?] Только реально поддерживает работу как [root?] Для управления рабочей станцией ...»? В противном случае вы могли бы уточнить свое 2-е предложение, возможно, конкретное для cron? Благодарю. – yamori

+1

Да, мы == Помощники шеф-повара. Основной вариант использования без использования root - для управления рабочими станциями Mac и Windows, и для этого мы обе гарантируем, что все будет работать гладко и у вас будет достаточно пользователей, чтобы рассказать нам, когда ситуация сломается. Выполнение unix-y server-y в Chef в качестве пользователя, не являющегося пользователем root, - это очень узкая область, и поэтому он не так хорошо протестирован и не получает много времени для разработчиков. – coderanger

Смежные вопросы