仅在 vagrant 中发生的 chef 运行 中的 NoMethodError 错误
NoMethodError error in chef run that only occurs in vagrant
我有一本包含 docker 食谱(以及许多其他食谱)的食谱。当我尝试在 Vagrant 中使用这本食谱时,我得到了一个 NoMethodError
for coerce_shell_command
。这是日志的相关部分:
==> default: Compiling Cookbooks...
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/libraries/autoload.rb:19:in `<top (required)>'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `setup_run_context'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/chef-12.6.0/bin/chef-solo:25:in `<top (required)>'
==> default: /usr/bin/chef-solo:54:in `load'
==> default: /usr/bin/chef-solo:54:in `<main>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:39:in `<class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:2:in `<module:DockerCookbook>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:1:in `<top (required)>'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `setup_run_context'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/chef-12.6.0/bin/chef-solo:25:in `<top (required)>'
==> default: /usr/bin/chef-solo:54:in `load'
==> default: /usr/bin/chef-solo:54:in `<main>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:44:in `<class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:2:in `<module:DockerCookbook>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:1:in `<top (required)>'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `setup_run_context'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/chef-12.6.0/bin/chef-solo:25:in `<top (required)>'
==> default: /usr/bin/chef-solo:54:in `load'
==> default: /usr/bin/chef-solo:54:in `<main>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:49:in `<class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:2:in `<module:DockerCookbook>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:1:in `<top (required)>'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `setup_run_context'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/chef-12.6.0/bin/chef-solo:25:in `<top (required)>'
==> default: /usr/bin/chef-solo:54:in `load'
==> default: /usr/bin/chef-solo:54:in `<main>'
==> default:
==> default: ================================================================================
==> default: Recipe Compile Error in /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb
==> default: ================================================================================
==> default:
==> default: NoMethodError
==> default: -------------
==> default: undefined method `coerce_shell_command' for DockerCookbook::DockerBase:Class
==> default:
==> default: Cookbook Trace:
==> default: ---------------
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:56:in `block in <class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:599:in `call'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:599:in `exec_in_resource'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:427:in `coerce'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:91:in `initialize'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:52:in `new'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:52:in `derive'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/mixin/properties.rb:150:in `property_type'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:54:in `<class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:2:in `<module:DockerCookbook>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:1:in `<top (required)>'
==> default:
==> default: Relevant File Content:
==> default: ----------------------
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:
==> default:
==> default: 49: NonEmptyArray = property_type(
==> default: 50: is: [Array, nil],
==> default: 51: coerce: proc { |v| Array(v).empty? ? nil : Array(v) }
==> default: 52: ) unless defined?(NonEmptyArray)
==> default: 53:
==> default: 54: ShellCommand = property_type(
==> default: 55: is: [String],
==> default: 56>> coerce: proc { |v| coerce_shell_command(v) }
==> default: 57: ) unless defined?(ShellCommand)
==> default: 58:
==> default: 59: UnorderedArrayType = property_type(
==> default: 60: is: [UnorderedArray, nil],
==> default: 61: coerce: proc { |v| v.nil? ? nil : UnorderedArray.new(Array(v)) }
==> default: 62: ) unless defined?(UnorderedArrayType)
==> default: 63:
==> default: 64: PartialHashType = property_type(
==> default: 65: is: [PartialHash, nil],
==> default:
==> default:
==> default: Running handlers:
==> default: [2016-01-28T16:27:24-08:00] ERROR: Running exception handlers
==> default: Running handlers complete
==> default: [2016-01-28T16:27:24-08:00] ERROR: Exception handlers complete
==> default: Chef Client failed. 0 resources updated in 05 seconds
==> default: [2016-01-28T16:27:24-08:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> default: [2016-01-28T16:27:24-08:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
==> default: [2016-01-28T16:27:24-08:00] ERROR: undefined method `coerce_shell_command' for DockerCookbook::DockerBase:Class
==> default: [2016-01-28T16:27:24-08:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)`
(完整的流浪者日志 here)
我正在使用 vagrant-berkshelf 安装我的包装器食谱及其所有依赖项。我能够在预期的文件中找到该函数 docker/libraries/helpers_base.rb
但是,厨师似乎没有找到它。
我认为这不是食谱中的错误,因为它在 运行:
时有效
- 连接到我们厨师服务器的服务器
- test-kitchen 在 ec2
上
- test-kitchen 与 vagrant driver
我尝试过的事情:
- 厨师零供给者
- 厨师独奏供应商
- 改变 synced_folder_type
- 正在清除 berkshelf 的缓存
然而,每次 运行 vagrant up 时,我都会继续遇到同样的错误。
这是您使用的 compat_resource 版本中的错误:
==> default: Using compat_resource (12.5.26)
我认为它已在 12.7.0 中修复。当您再次尝试时,您提取了解决问题的新食谱。
看起来像这里的相关错误:
https://github.com/chef-cookbooks/docker/issues/621
(看起来它可能还没有修复,但它 'smells' compat_resource 相关,这是你应该关注的错误)
我有一本包含 docker 食谱(以及许多其他食谱)的食谱。当我尝试在 Vagrant 中使用这本食谱时,我得到了一个 NoMethodError
for coerce_shell_command
。这是日志的相关部分:
==> default: Compiling Cookbooks...
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /opt/chef/embedded/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/libraries/autoload.rb:19:in `<top (required)>'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `setup_run_context'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/chef-12.6.0/bin/chef-solo:25:in `<top (required)>'
==> default: /usr/bin/chef-solo:54:in `load'
==> default: /usr/bin/chef-solo:54:in `<main>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:39:in `<class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:2:in `<module:DockerCookbook>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:1:in `<top (required)>'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `setup_run_context'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/chef-12.6.0/bin/chef-solo:25:in `<top (required)>'
==> default: /usr/bin/chef-solo:54:in `load'
==> default: /usr/bin/chef-solo:54:in `<main>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:44:in `<class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:2:in `<module:DockerCookbook>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:1:in `<top (required)>'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `setup_run_context'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/chef-12.6.0/bin/chef-solo:25:in `<top (required)>'
==> default: /usr/bin/chef-solo:54:in `load'
==> default: /usr/bin/chef-solo:54:in `<main>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:49:in `<class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:2:in `<module:DockerCookbook>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:1:in `<top (required)>'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `setup_run_context'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/chef-12.6.0/bin/chef-solo:25:in `<top (required)>'
==> default: /usr/bin/chef-solo:54:in `load'
==> default: /usr/bin/chef-solo:54:in `<main>'
==> default:
==> default: ================================================================================
==> default: Recipe Compile Error in /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb
==> default: ================================================================================
==> default:
==> default: NoMethodError
==> default: -------------
==> default: undefined method `coerce_shell_command' for DockerCookbook::DockerBase:Class
==> default:
==> default: Cookbook Trace:
==> default: ---------------
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:56:in `block in <class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:599:in `call'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:599:in `exec_in_resource'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:427:in `coerce'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:91:in `initialize'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:52:in `new'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/property.rb:52:in `derive'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/mixin/properties.rb:150:in `property_type'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:54:in `<class:DockerBase>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:2:in `<module:DockerCookbook>'
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:1:in `<top (required)>'
==> default:
==> default: Relevant File Content:
==> default: ----------------------
==> default: /tmp/vagrant-chef/e6a0063338a4a700e2c49f12beaa529f/cookbooks/docker/libraries/docker_base.rb:
==> default:
==> default: 49: NonEmptyArray = property_type(
==> default: 50: is: [Array, nil],
==> default: 51: coerce: proc { |v| Array(v).empty? ? nil : Array(v) }
==> default: 52: ) unless defined?(NonEmptyArray)
==> default: 53:
==> default: 54: ShellCommand = property_type(
==> default: 55: is: [String],
==> default: 56>> coerce: proc { |v| coerce_shell_command(v) }
==> default: 57: ) unless defined?(ShellCommand)
==> default: 58:
==> default: 59: UnorderedArrayType = property_type(
==> default: 60: is: [UnorderedArray, nil],
==> default: 61: coerce: proc { |v| v.nil? ? nil : UnorderedArray.new(Array(v)) }
==> default: 62: ) unless defined?(UnorderedArrayType)
==> default: 63:
==> default: 64: PartialHashType = property_type(
==> default: 65: is: [PartialHash, nil],
==> default:
==> default:
==> default: Running handlers:
==> default: [2016-01-28T16:27:24-08:00] ERROR: Running exception handlers
==> default: Running handlers complete
==> default: [2016-01-28T16:27:24-08:00] ERROR: Exception handlers complete
==> default: Chef Client failed. 0 resources updated in 05 seconds
==> default: [2016-01-28T16:27:24-08:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> default: [2016-01-28T16:27:24-08:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
==> default: [2016-01-28T16:27:24-08:00] ERROR: undefined method `coerce_shell_command' for DockerCookbook::DockerBase:Class
==> default: [2016-01-28T16:27:24-08:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)`
(完整的流浪者日志 here)
我正在使用 vagrant-berkshelf 安装我的包装器食谱及其所有依赖项。我能够在预期的文件中找到该函数 docker/libraries/helpers_base.rb
但是,厨师似乎没有找到它。
我认为这不是食谱中的错误,因为它在 运行:
时有效- 连接到我们厨师服务器的服务器
- test-kitchen 在 ec2 上
- test-kitchen 与 vagrant driver
我尝试过的事情:
- 厨师零供给者
- 厨师独奏供应商
- 改变 synced_folder_type
- 正在清除 berkshelf 的缓存
然而,每次 运行 vagrant up 时,我都会继续遇到同样的错误。
这是您使用的 compat_resource 版本中的错误:
==> default: Using compat_resource (12.5.26)
我认为它已在 12.7.0 中修复。当您再次尝试时,您提取了解决问题的新食谱。
看起来像这里的相关错误:
https://github.com/chef-cookbooks/docker/issues/621
(看起来它可能还没有修复,但它 'smells' compat_resource 相关,这是你应该关注的错误)