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

シェル コードと 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

これは、達成しようとしているのとほぼ同じことを行う必要がありますが、順序の問題と、シェルアウトの出力を Ruby に転送して Chef で処理する方法についての質問を回避できます。

編集:接続試行をタイムアウトブロックにラップしました。これにより、後でガベージ コレクションが行われるまで、ハーフ オープン ソケットがリークする可能性があります。しかし、これは Chef のコンテキストでは安全だと思います。

于 2013-02-22T11:20:56.670 に答える