2

我需要检查与厨师的联系。

我在尝试。

execute "check_sayc" do
command "$comprobacionPuerto='nc -zw3 server port && echo 'opened'
|| echo 'closed'|grep 'opened' if  [[ -z $comprobacionPuerto ]]
then Chef::Log.fatal 'connections refuse' else Chef::Log.info 'connections open' fi'"
end

Mixlib::ShellOut::ShellCommandFailed: execute[check_sayc]
(cb_prueba_frontal_deploy_databag::default line 7) had an error:    
Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received
'127'

怎么了?

4

1 回答 1

4

您正在混合使用 shell 代码和 Ruby 代码execute来完成无法以这种方式工作的事情。此外,您在command.

我不确定执行您在那里尝试的操作是否有意义nc,但使用纯红宝石可能更容易:

ruby_block "check sayc" do
  block do
    server = "www.google.com"
    port = 80

    begin
      Timeout.timeout(5) do
        Socket.tcp(server, port){}
      end
      Chef::Log.info 'connections open'
    rescue
      Chef::Log.fatal 'connections refused'
    end
  end
end

这应该与您尝试实现的目标相同,但避免了订单问题以及如何将 shellout 的输出传输回 ruby​​ 以在 Chef 中处理的问题。

编辑:我将连接尝试包装到超时块中。这可能会泄漏半开的套接字,直到它们稍后被垃圾收集。但我认为这在 Chef 环境中是安全的。

于 2013-02-22T11:20:56.670 回答