ansibleのresponse

ansibleで複数のサーバーの状況を一挙に取得してと考えたが、気をつけて置かないと行けないいくつかの事が出てきたのでちょっとメモ

ansibleからssh経由でshell/command moduleにてcommandを投げた際に画面上に表示されるresponseだが

    http://cloudpack.media/wp-admin/post-new.php#post_name
  • stdioとstderrにそれぞれ出力される
  • ansibleが並列にコマンドを投げているのに対して出力のstdioとstderrはあくまで一つしか無い
  • 接続先hostからのresponseは接続先ホスト(ansible実行元ではない)のstdio+stderrがansible実行元のstdioに出力される。
    この時、stdioにはまず正常系出力が表示され連続してエラー系が表示される。
    また、この正常系・エラー系の区切りは何もない

ansibleの出力には以上の特徴が見られる。

つまりansibleが並列処理をして複数の実行を行いっている以上、sshである利点と同時にsshの弱点が出てくるようになる。
そのままダイレクトで出力を保存したりするとその出力結果の整合性や順序は保証されるものでない。

では、出力結果を受け取りたいとするとどのようにすべきか?
考えられる手段は3つあって

  1. そもそもallやグループ単位で実行しない
  2. callback pluginにて排他出力を行う
  3. 実行したい内容をmodule化する

以上が考えられる
1に関しては要するにansibleの1回の実行で対象となるhostは最初から1台に絞ると言うことだがかなり限定された用途であり且つ力技が許される状態で無いと実用性がない。
しかもはっきり言って遅い。

2、3に関しては実用性があると思われるが少々手間が掛かりそうなので今後、色々調べてみる。

元記事は、こちら