Я пытаюсь предоставить новый сервер, используя chef-client. Этот процесс поражает NameError, вызванный неинициализированной константой "MysqlCookbook: Helpers".
Это результат, который я получаю:
0.0.0.0 Compiling Cookbooks...
0.0.0.0
0.0.0.0 ================================================================================
0.0.0.0 Recipe Compile Error in /var/chef/cache/cookbooks/mysql/libraries/provider_mysql_client.rb
0.0.0.0 ================================================================================
0.0.0.0
0.0.0.0 NameError
0.0.0.0 ---------
0.0.0.0 uninitialized constant MysqlCookbook::Helpers
0.0.0.0
0.0.0.0 Cookbook Trace:
0.0.0.0 ---------------
0.0.0.0 /var/chef/cache/cookbooks/mysql/libraries/provider_mysql_client.rb:7:in '<class:MysqlClient>'
0.0.0.0 /var/chef/cache/cookbooks/mysql/libraries/provider_mysql_client.rb:6:in '<class:Provider>'
0.0.0.0 /var/chef/cache/cookbooks/mysql/libraries/provider_mysql_client.rb:5:in '<class:Chef>'
0.0.0.0 /var/chef/cache/cookbooks/mysql/libraries/provider_mysql_client.rb:4:in '<top (required)>'
0.0.0.0
0.0.0.0 Relevant File Content:
0.0.0.0 ----------------------
0.0.0.0 /var/chef/cache/cookbooks/mysql/libraries/provider_mysql_client.rb:
0.0.0.0
0.0.0.0 1: require 'chef/provider/lwrp_base'
0.0.0.0 2: require_relative 'helpers'
0.0.0.0 3:
0.0.0.0 4: class Chef
0.0.0.0 5: class Provider
0.0.0.0 6: class MysqlClient < Chef::Provider::LWRPBase
0.0.0.0 7>> include MysqlCookbook::Helpers
0.0.0.0 8: provides :mysql_client if defined?(provides)
0.0.0.0 9:
0.0.0.0 10: use_inline_resources if defined?(use_inline_resources)
0.0.0.0 11:
0.0.0.0 12: def whyrun_supported?
0.0.0.0 13: true
0.0.0.0 14: end
0.0.0.0 15:
0.0.0.0 16: action :create do
0.0.0.0
0.0.0.0 System Info:
0.0.0.0 ------------
0.0.0.0 chef_version=12.21.31
0.0.0.0 platform=ubuntu
0.0.0.0 platform_version=16.04
0.0.0.0 ruby=ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]
0.0.0.0 program_name=chef-client worker: ppid=31986;start=12:48:17;
0.0.0.0 executable=/opt/chef/bin/chef-client
0.0.0.0
0.0.0.0
0.0.0.0 Running handlers:
0.0.0.0 [2018-02-07T12:48:23+00:00] ERROR: Running exception handlers
0.0.0.0 Running handlers complete
0.0.0.0 [2018-02-07T12:48:23+00:00] ERROR: Exception handlers complete
0.0.0.0 Chef Client failed. 0 resources updated in 05 seconds
0.0.0.0 [2018-02-07T12:48:23+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
0.0.0.0 [2018-02-07T12:48:23+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
0.0.0.0 [2018-02-07T12:48:23+00:00] ERROR: uninitialized constant MysqlCookbook::Helpers
0.0.0.0 [2018-02-07T12:48:23+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
Я просмотрел файл, где он, кажется, падает (provider_mysql_client.rb), который начинается с следующего кода:
require 'chef/provider/lwrp_base'
require_relative 'helpers'
class Chef
class Provider
class MysqlClient < Chef::Provider::LWRPBase
include MysqlCookbook::Helpers
provides :mysql_client if defined?(provides)
Я не Ruby dev (мой фон в PHP и JavaScript), но мне кажется, что он включает в себя файл helpers.rb
который находится в том же каталоге, что и указанный выше файл.
Содержимое которого начинается следующим образом:
module MysqlCookbook
module HelpersBase
require 'shellwords'
def el6?
return true if node['platform_family'] == 'rhel' && node['platform_version'].to_i == 6
false
end
Для меня это выглядит несовместимым с приведенным выше предложением include, который ссылается на MysqlCookbook :: Helpers - похоже, он должен называться MysqlCookbook :: HelpersBase (опять же я не Ruby dev, поэтому я могу ошибаться здесь).
Я не совсем уверен, как продвигаться вперед с этим и заставить работать шеф-клиент успешно завершаться. Я нашел следующую проблему в кулинарных книгах GitHub - https://github.com/chef-cookbooks/mysql/issues/540, которая, похоже, соответствует тому, что происходит для меня, но у нее нет никаких ответов, так что это не особенно полезен для меня.
Любые ввод/предложения оценили, спасибо.
Файл provider_mysql_client.rb больше не существует в версии 8.xx поваренной книги.
Убедитесь, что у вас нет старых файлов из предыдущей версии 7.xx поваренной книги, лежащей вокруг.
Если вы используете Berkshelf, попробуйте удалить его кеш (~/.berkself).
Если вы копируете все на свой целевой сервер, а затем используете повара нуль (-z), посмотрите и там.