0

カピストラーノ タスクでは、superfunctionメソッドを呼び出しています。残念ながら、それはエラーをスローしていUnexpected Returnます。superfunctionタスク内でさらに解析するために、メソッドからの出力を取得する必要があります。

def superfunction(cmd_type, command, client)
    run "#{command}" do |channel, stream, data|
        hostname = "#{channel[:host]}".tr('"','')
        result = "#{data}".to_s.strip
        return hostname, result
    end

end


task :gather, :roles => :hosts do
...
   servername, redhat_version = superfunction("redhat_version", "cat /etc/redhat-release", client)
end
4

1 に答える 1

0

メソッドが返された後にブロックが呼び出されているため、エラーが生成されています(おそらくカピストラーノが内部に保存しています)。簡単な回避策として、ブロックを使用して必要な変数を取得できます。

def superfunction(cmd_type, command, client)
  run "#{command}" do |channel, stream, data|
    hostname = "#{channel[:host]}".tr('"','')
    result = "#{data}".to_s.strip
    yield(hostname, result)
  end
end

task :gather, :roles => :hosts do
  superfunction("redhat_version", "cat /etc/redhat-release", client) do |servername, redhat_version|
    # Use servername and redhat_version here
  end
end
于 2012-10-02T20:29:31.423 に答える