chef-client run无法与EOFError同步cookbook:文件结束

时间:2015-11-18 16:56:59

标签: ruby chef chef-recipe

使用chef-client运行cookbook时,运行失败并显示以下错误:   EOFError:文件结束

我对此很新,我不知道这意味着什么。这本食谱是社区食谱的一个非常简单的包装,应该是好的。 https://supermarket.chef.io/cookbooks/powershell

此处再次出现错误:

Synchronizing Cookbooks:
  - windows (1.37.0)
  - ms_dotnet2 (0.0.0)
  - ms_dotnet45 (0.0.0)
  - powershell (3.1.0)
  - chef_handler (1.1.8)
  - ewe-powershell (0.1.0)

  ================================================================================
  Error Syncing Cookbooks:
  ================================================================================

  Unexpected Error:
  -----------------
  EOFError: end of file reached


  Running handlers:
[2015-11-18T08:30:15-08:00] ERROR: Running exception handlers
  Running handlers complete
[2015-11-18T08:30:15-08:00] ERROR: Exception handlers complete
  Chef Client failed. 0 resources updated in 24 seconds
[2015-11-18T08:30:15-08:00] FATAL: Stacktrace dumped to c:/chef/cache/chef-stacktrace.out
[2015-11-18T08:30:15-08:00] FATAL: EOFError: end of file reached

C:\WINDOWS\system32>

这里是堆栈跟踪:

Generated at 2015-11-18 08:30:15 -0800
EOFError: end of file reached
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/protocol.rb:153:in `read_nonblock'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/protocol.rb:153:in `rbuf_fill'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/protocol.rb:144:in `readline'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/http/response.rb:39:in `read_status_line'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/http/response.rb:28:in `read_new'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/http.rb:1412:in `block in transport_request'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/http.rb:1409:in `catch'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/http.rb:1409:in `transport_request'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/http.rb:1382:in `request'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/http.rb:1375:in `block in request'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/http.rb:852:in `start'
C:/opscode/chef/embedded/lib/ruby/2.0.0/net/http.rb:1373:in `request'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/http/basic_client.rb:65:in `request'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/http.rb:264:in `block in send_http_request'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/http.rb:298:in `block in retrying_http_errors'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/http.rb:296:in `loop'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/http.rb:296:in `retrying_http_errors'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/http.rb:260:in `send_http_request'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/http.rb:170:in `streaming_request'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/rest.rb:180:in `streaming_request'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/rest.rb:118:in `get'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/cookbook/synchronizer.rb:277:in `download_file'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/cookbook/synchronizer.rb:254:in `sync_file'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/cookbook/synchronizer.rb:152:in `block (2 levels) in sync_cookbooks'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/util/threaded_job_queue.rb:52:in `call'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/util/threaded_job_queue.rb:52:in `block (3 levels) in process'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/util/threaded_job_queue.rb:50:in `loop'
C:/opscode/chef/embedded/lib/ruby/gems/2.0.0/gems/chef-12.5.1-universal-mingw32/lib/chef/util/threaded_job_queue.rb:50:in `block (2 levels) in process'

这是否意味着protocol.rb中存在一些EOFError? 但这是社区食谱的一部分,我认为它看起来非常可靠。

2 个答案:

答案 0 :(得分:0)

当chef-client启动时,它要做的一件事就是下载它将用于运行的cookbook代码。这是在本地缓存,以加快未来的运行,但第一次或文件更改等等。此异常是说它尝试从服务器下载ewe-powershell cookbook时失败。这可能意味着它在上传过程中已损坏。快速首先检查是-l debug那个并重新上传它。如果失败了,我会开始尝试弄清楚哪个文件无法下载。如果您调出Chef的日志级别(<set> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:propertyName="X" android:valueType="floatType" android:valueFrom="-720" android:valueTo="0" /> </set> ),您应该看到它尝试获取哪个URL,这将告诉您哪个文件失败。有了这些,请尝试直接从Bookshelf(处理文件上传和下载的Chef Server服务)中进行卷曲。

答案 1 :(得分:0)

这是由于网络错误造成的。它们不是客户端错误,无法通过删除和重新上载cookbook来修复。

我在要点中提供了一些信息:

https://gist.github.com/lamont-granquist/e25af8f50cb4ae4f8050

还有更多信息:

https://discourse.chef.io/t/eoferror-when-decrypting-data-bags/5716/2 https://github.com/chef/chef/issues/1881

EOFErrors已被追踪到破损的代理,PMTU问题(VPN或过滤ICMP dest无法访问),巨型帧,网络驱动程序/硬件中的错误TCP卸载,Xen错误等。

如果使用足够大的数据包,您应该能够在命令行上复制问题。如果您的厨师服务器是chef.example.com,那么您可以在窗口上发送一个大的ping数据包:

ping chef.example.com -f -l 9999

您还可以在unix上发送大型ping包或大型GET请求:

ping -s 9999 chef.example.com
curl http://chef.example.com/`printf '%*s' 9999 '' | tr ' ' 'a'`

这样的方法可以帮助完全在任何与厨师相关的软件之外复制问题并显示其网络。最终解决方案必须花费时间来调试底层网络问题。在这种情况下,听起来网络神奇地修复了自己。

(请记住&#34;网络&#34;我在两端都包括主机TCP堆栈和网络驱动程序,包括网络通信必须通过的任何虚拟化技术 - &#34;网络&#34 34;在最广泛的意义上可能......)