Добавление файла sudoers в chef завершается неудачно при проверке
Цель
Я пытаюсь добавить / отредактировать файл 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. Я пробую сначала на локальной машине используя
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
Судо сломан! В режиме восстановления и корневой консоли я проверил, и это выглядит так же, как когда я вставляю его вручную (что работает нормально)?!
1 ответ
Благодаря помощи Tensibai здесь в комментариях и подсказке lineendings
Я мог бы наконец решить эту проблему.
На самом деле проблема заключалась в том, что, как отмечалось в этом древнем выпуске,
Я создал кулинарные книги, рецепты и шаблоны на сервере Ubuntu 16.04, но все редактирую в репозитории в https://brackets.io/ для Windows.
Этот созданный шаблон (и другие) файлы имеют CRLF
вместо LF
lineendings, потому что, похоже, Brackets автоматически использует линейные окончания ОС, в которой он работает. Это конечно сделало /etc/sudoers.d/allowUpgrade
файл тормоза sudoers
потому что это должно заканчиваться новой строкой.
После некоторых исследований я обнаружил, что это старая известная проблема, которая может быть решена с помощью плагина Newline.
После установки этого плагина действительно я мог видеть, что файл CRLF
lineendings.
Я переключил это на LF
благодаря плагину, нажав на CRLF
, Теперь моя кулинарная книга работает, как и ожидалось, и я могу запустить
sudo upgrade
без пароля запрашивается пароль - значит, он работает.