Kami terus memompa Ansible

Alasan artikel ini adalah postingan di chat @ pro_ansible:





Vladislav? Shishkov, [17.02.21 20:59] Tuan-tuan, ada dua pertanyaan mengenai operasi panjang kustom, misalnya, cadangan: 1. Apakah mungkin untuk memperketat bilah kemajuan bash kustom melalui ansible? (jika melalui sebuah plugin, lalu masukkan beberapa contoh atau dokumentasi pliz) 2. Sepertinya Anda ingin menulis plugin untuk bash ini, tetapi muncul pertanyaan, bagaimana caranya dan bagaimana menyelesaikan momen-momen eksekusi yang idempoten?





Pencarian cepat di halaman belakang memori tidak menunjukkan sesuatu yang cocok. Namun demikian, saya benar-benar ingat bahwa kode Ansible mudah dibaca, dan ekstensi dukungan "tinkers" oleh plugin dan modul Python biasa. Dan jika demikian, maka tidak ada yang menghalangi untuk sekali lagi mendorong batas-batas kemungkinan. Pegang bir saya! ...





Jelas bahwa standar Ansible sudah mengetahui cara melakukan kedua langkah tersebut, hanya "pembuangan" yang dihasilkan dikumpulkan menjadi satu kesatuan dan dikirim ke host kontrol setelah proses berakhir, dan kami ingin melakukannya secara real time. Oleh karena itu, Anda setidaknya dapat melihat implementasi yang ada, dan secara maksimal - entah bagaimana menggunakan kembali kode yang ada.





Pertanyaan awal dapat diringkas menjadi dua langkah sederhana:





  1. Tangkap stdout dari sebuah perintah pada host target





  2. Kirimkan ke host manajemen.





Kami mentransfer data ke host kontrol

Saya sarankan mulai dari akhir: dengan pengaturan saluran transmisi tambahan ke host kontrol. Solusi untuk pertanyaan ini terlihat cukup jelas: ingat bahwa Ansible berjalan di atas ssh, dan gunakan fungsi penerusan port:





Kode 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