0

誰かがこれで私を助けてくれることを願っています。

私はルビーでこのメソッドを持っています:

def puppetrun_oneClass!
   ProxyAPI::Puppet.new({:url => puppet_proxy.url}).runSingle fqdn
end

次に、この他のメソッド内で呼び出します。

def update_multiple_puppetrun_oneClass_deploy
   if @hosts.map(&:puppetrun_oneClass!).uniq == [true]
      notice "Successfully executed, check reports and/or log files for more details"
   else
      error "Some or all hosts execution failed, Please check log files for more information"
   end
end

ここで、@hostsはホスト名の配列です。

今、 puppetrun_oneClass を拡張したいと思います! @myDeployパラメーターを受け入れるには、 @ myDeployパラメーターは文字列を含む変数です。

どうすればそれができますか?? そして、変更されたメソッドをどのように呼び出す必要がありますか?

ありがとう!!

4

1 に答える 1

0

map引数として追加するだけでよいのですが、これは長い形式のブロックをループに宣言する必要があることを意味します。

新しい方法:

def puppetrun_oneClass!(deploy)
  # ... Code using `deploy` variable
end

新しい通話:

@hosts.map { |h| host.puppetrun_oneClass!(@myDeploy) }.uniq

uniqそれらのいずれかが失敗したかどうかを確認したいだけの場合、ここではかなり手間のかかるアプローチであることに注意してください。findすべてをやみくもに実行するのではなく、失敗した最初のもので停止するものを試してみてください。

!@hosts.find { |h| !host.puppetrun_oneClass!(@myDeploy) }

これにより、それらのいずれも偽の状態を返さなくなります。それらをすべて実行してエラーを探したい場合は、次を試してください。

 failures = @hosts.reject { |h| host.puppetrun_oneClass!(@myDeploy) }

 if (failures.empty?)
   # Worked
 else
   # Had problems, failures contains list of failed `@hosts`
 end

@hosts最初の部分は、失敗したエントリの配列を返します。このリストを取得し、それを使用してより堅牢なエラー メッセージを生成し、おそらく機能しなかったメッセージを説明すると便利です。

于 2013-05-13T16:37:06.417 に答える