1

ansible の python API を使用してリモート マシン (数千台) でスクリプトを実行すると、コードは次のようになります。

runner = ansible.runner.Runner(
  module_name='script',
  module_args='/tmp/get_config.py',
  pattern='*',
  forks=30
)

それから、私は使用します

datastructure = runner.run()

これには時間がかかりすぎます。データ構造 stdout を MySQL に挿入したいと考えています。私が望むのは、マシンがデータを返したら、そのデータを MySQL に挿入し、すべてのマシンが戻るまで次のデータを挿入することです。

これは良い考えですか、それとももっと良い方法がありますか?

4

1 に答える 1

1

すべてのマシンがデータを返すか、接続できないか、SSH セッションがタイムアウトするまで、ランナーの呼び出しは完了しません。これが 1000 台のマシンをターゲットにしており、並行して 30 台のマシン (forks=30) しか実行していないことを考えると、完了するまでにおよそ Time_to_run_script * Num_Machines/30 かかります。これはあなたの期待と一致していますか?

フォークの数をはるかに多くして、ランナーをより早く完了することができます。私はこれを 100 年代に押し込みましたが、大きな問題はありませんでした。

何が起こっているのかを最大限に可視化したいが、1 台のマシンがあなたを支えているかどうかわからない場合は、Python コードで各ホストを連続して実行できます。

参考までに - このモジュールとクラスは Ansible 2.0 では完全になくなっているため、後でコードを書き直す必要がないように、今すぐジャンプすることをお勧めします。

于 2016-02-26T15:30:21.377 に答える