Цель
Я пытаюсь добавить/отредактировать файл sudoers в Chef.
После долгих поисков (и сломанных sudoers) я нашел этот вопрос и ответ казались именно тем, что мне нужно.
Моя поваренная книга
Итак, в моем шеф-поваре я добавил следующую visudo
поваренную книгу:
Рецепт: ~/chef-repo/cookbook/visudo/recipes/allowUpgrade.rb
template '/etc/sudoers.d/allowUpgrade' do
cookbook 'visudo'
source 'allowUpgrade.erb'
owner'root'
group 'root'
mode '0440'
verify "visudo -c -f %{path}"
end
Мой шаблон: ~/chef-repo/cookbooks/visudo/templates/allowUpgrade.erb
username ALL=(ALL) NOPASSWD: /usr/local/bin/upgrade
Шаблон и проверка работает вручную
Когда я помещаю эту строку/файл туда вручную, используя
sudo nano /etc/sudoers.d/allowUpgrade
(я знаю, что не следует), а затем проверьте это, используя
visudo -c -f /etc/sudoers.d/allowUpgrade
я получил
/etc/sudoers.d/allowUpgrade: parsed OK
и это работает, значит, я могу бежать
sudo upgrade
без запроса пароля sudo.
Ошибка проверки при запуске Chef
Однако он не работает с использованием Chef. Сначала я пробую это на локальной машине, используя
sudo chef-client -z --runlist 'recipe[visudo::allowUpgrade]'
Но я получаю эту ошибку
Error executing action `create` on resource 'template[/etc/sudoers.d/allowUpgrade]'
Chef::Exceptions::ValidationFailed
Почему не удается выполнить проверку в шеф-поваре? Что я делаю не так?
Здесь полное сообщение об ошибке
Recipe: visudo::allowUpgrade
* template[/etc/sudoers.d/allowUpgrade] action create[2017-12-07T08:24:50+01:00] INFO: Processing template[/etc/sudoers.d/allowUpgrade] action create (visudo:: allowUpgrade line 7)
================================================================================
Error executing action `create` on resource 'template[/etc/sudoers.d/allowUpgrade]'
================================================================================
Chef::Exceptions::ValidationFailed
----------------------------------
Proposed content for /etc/sudoers.d/allowUpgrade failed verification #<Chef::Resource::File::Verification:0x0000000004070c48>
Resource Declaration:
---------------------
# In /home/username/chef-repo/.chef/local-mode-cache/cache/cookbooks/visudo/recipes/allowUpgrade.rb
7: template '/etc/sudoers.d/allowUpgrade' do
8: owner'root'
9: group 'root'
10: mode '0440'
11: source 'allowUpgrade.erb'
12: verify 'visudo -c -f %{path}'
13: end
Compiled Resource:
------------------
# Declared in /home/username/chef-repo/.chef/local-mode-cache/cache/cookbooks/visudo/recipes/allowUpgrade.rb:7:in `from_file'
template("/etc/sudoers.d/allowUpgrade") do
action [:create]
default_guard_interpreter :default
source "allowUpgrade.erb"
declared_type :template
cookbook_name "visudo"
recipe_name "allowUpgrade"
owner "root"
group "root"
mode "0440"
verifications [#<Chef::Resource::File::Verification:0x0000000004070c48 @command_opts={},
@command="visudo -c -f %{path}", @block=nil, @parent_resource=<template[/etc/sudoers.d/allowUpgrade]
@name: "/etc/sudoers.d/allowUpgrade" @before: nil @params: {}
@provider: nil @allowed_actions: [:nothing, :create, :delete, :touch, :create_if_missing]
@action: [:create] @updated: false @updated_by_last_action: false
@source_line: "/home/username/chef-repo/.chef/local-mode-cache/cache/cookbooks/visudo/recipes/allowUpgrade.rb:7:in `from_file'"
@guard_interpreter: nil @default_guard_interpreter: :default
@elapsed_time: 0 @source: "allowUpgrade.erb" @cookbook: nil
@local: false @variables: {} @inline_helper_blocks: {}
@inline_helper_modules: [] @helper_modules: [] @declared_type: :template
@cookbook_name: "visudo" @recipe_name: "allowUpgrade" @owner: "root" @group: "root" @mode: "0440"
@verifications: [...] @path: "/etc/sudoers.d/allowUpgrade">>]
path "/etc/sudoers.d/allowUpgrade"
end
Обновление:
Когда я оставляю проверку и просто делаю
template '/etc/sudoers.d/allowUpgrade' do
cookbook 'visudo'
source 'allowUpgrade.erb'
owner 'root'
group 'root'
mode '0440'
verify { 1 == 1 }
end
Судо сломан! В режиме рекавери и рут консоли проверял и выглядит точно так же как и когда вставляю вручную (что работает нормально)?!
sudo
поваренная книга с провайдером для обработки того, что работает нормально - person Tensibai   schedule 07.12.2017NOPASSWD:
и командой всегда есть пробел, я подумал, что это обязательно. И это не объясняет, почему это работает, если я делаю это вручную. - person derHugo   schedule 07.12.2017chef generate cookbook/recipe/template
на рабочей станции шеф-повара на сервере Ubuntu 16.04.2. Я пытаюсь запустить его локально на этой же машине. Я редактирую свои поваренные книги в Brackets в Windows... но я не думаю, что это должно быть проблемой, не так ли? Есть ли способ узнать, какие строки имеют файл? - person derHugo   schedule 07.12.2017