私たちはAnsibleをポンプし続けます

この記事の理由は@ pro_ansibleのチャットへの投稿でした





ウラディスラフ?Shishkov、[17.02.21 20:59]紳士、カスタムの長い操作、たとえばバックアップに関して2つの質問があります。1。カスタムbashのプログレスバーをansibleで締めることはできますか?(プラグインを使用する場合は、いくつかの例またはドキュメントplizを開始します)2。このbashのプラグインを作成したいようですが、べき等である実行の瞬間をどのように解決するかという疑問が生じます。





記憶の裏庭をすばやく検索しても、適切なものは何も見つかりませんでした。それでも、Ansibleコードは読みやすく、「いじくり回し」はプラグインと通常のPythonモジュールの両方による拡張機能をサポートしていることをはっきりと覚えています。もしそうなら、可能性の限界をもう一度押し上げることを妨げるものは何もありません。私のビールを持ってて! ...





標準のAnsibleが両方のステップを実行する方法をすでに知っていることは明らかです。結果の「排気」のみが単一の全体に収集され、プロセスの終了後に制御ホストに送信されます。これをリアルタイムで実行したいと考えています。したがって、少なくとも既存の実装を確認でき、最大で、既存のコードを何らかの方法で再利用できます。





元の質問は、2つの簡単なステップに要約できます。





  1. ターゲットホスト上のコマンドのstdoutをキャプチャします





  2. 管理ホストに送信します。





制御ホストにデータを転送します

« »: . : , Ansible ssh, :





Python
#  - :
# https://github.com/ansible/ansible/blob/5078a0baa26e0eb715e86c93ec32af6bc4022e45/lib/ansible/plugins/connection/ssh.py#L662
self._add_args(
    b_command,
    (b"-R", b"127.0.0.1:33333:" + to_bytes(self._play_context.remote_addr, errors='surrogate_or_strict', nonstring='simplerepr') + b":33335"),
    u"ANSIBLE_STREAMING/streaming set"
)
      
      



? ssh- 33333 127.0.0.1, - 33335.





netcat



( , ?): nc -lk 33335



.





, , Ansible , , : , nc 127.0.0.1 33333



, - .





stdout

- . stdout - - Ansible «shell». , - , , command. , , , . « », .





« » :





#   basic.py,    import' 
import socket

#   run_command - - :
# https://github.com/ansible/ansible/blob/5078a0baa26e0eb715e86c93ec32af6bc4022e45/lib/ansible/module_utils/basic.py#L2447
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
clientSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
clientSocket.connect(("127.0.0.1",33333));

#   run_command - - :
# https://github.com/ansible/ansible/blob/5078a0baa26e0eb715e86c93ec32af6bc4022e45/lib/ansible/module_utils/basic.py#L2455
clientSocket.send(b_chunk);

#   run_command - - 
# https://github.com/ansible/ansible/blob/5078a0baa26e0eb715e86c93ec32af6bc4022e45/lib/ansible/module_utils/basic.py#L2481
clientSocket.close()
      
      



? , Ansible. : connection plugin, Ansible. chemtech «-2019» ( , Python- ), :-)





, «». , tmux .





:





  • stdout -Python , Ansible' - , , ;





  • ssh- stdout Ansible .





Ansible?

- , , Ansible. , .





, , .








All Articles