Anda dapat menggunakan modul wait_for Ansible yang memeriksa port TCP tertentu terbuka.
Karena dalam hal ini, semua port harus sudah terbuka, kita dapat menggunakan no minimal. percobaan, cukup untuk menutup masalah jaringan:
- name: Check all port numbers are accessible from current host
wait_for:
host: mywebserver.com
port: "{{ item }}"
state: started # Port should be open
delay: 0 # No wait before first check (sec)
timeout: 3 # Stop checking after timeout (sec)
ignore_errors: yes
with_items:
- 443
- 80
- 80443
Secara default, Ansible akan memeriksa sekali setiap detik (dapat dikonfigurasi dalam Ansible 2.3 menggunakan sleep
atribut), jadi ini akan memeriksa 3 kali per port.
Jalankan ini di sebuah buku pedoman melawan inventaris Anda yang terdiri dari 400+ host - Ansible akan memeriksa secara paralel bahwa semua host dapat mencapai mywebserver.com
pada port tersebut.
Kami menggunakan di ignore_errors: yes
sini agar kesalahan ditandai dengan warna merah tetapi tidak menghentikan eksekusi.
Port terbuka dilaporkan sebagai ok
item dalam output dan port tertutup dilaporkan sebagai failed
(Anda harus menggunakan -vv
flag on ansible-playbook
untuk melihat output ini).
Output fine-tuning
Jika Anda ingin keluaran yang lebih spesifik untuk kasus-kasus keberhasilan dan kegagalan, kode harus lebih kompleks, menambahkan tugas kedua:
wait_for
tugas harus register
berupa variabel
- tugas kedua menghasilkan keluaran menggunakan
debug
berdasarkan kondisi keberhasilan / kegagalan (misalnya menggunakan ekspresi kondisional Jinja2 )
- maka Anda harus meletakkan kedua tugas ini dalam file sertakan (tanpa
with_items
loop apa pun ), dan menulis tugas playbook utama yang menggunakan include
... with_items
untuk memanggil file sertakan sekali per port.
host: mywebserver.com
.host: x
tidak diperlukan. Saya baru saja menguji ulang dengan Ansible 2.3.1 danhost
atributwait_for
tugas default ke server saat ini sedang diproses dari inventaris.hosts
atribut.AFAIK tidak ada modul bawaan untuk tujuan ini, tetapi Anda dapat menggunakan
shell
+nc
:sumber
-G 1
tidak dapat saya temukan di halaman manual?Anda dapat menggunakan modul wait_for untuk hal yang sama
contoh yang dikutip dari dokumentasi:
sumber
Kami menggunakan alat kami dda-serverspec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ) untuk tugas semacam itu. Anda dapat menentukan harapan Anda
{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}
dan uji harapan ini terhadap localhost atau remote oleh ssh. Untuk pengujian jarak jauh Anda harus menentukan target:
{:existing [{:node-name "test-vm1"
:node-ip "35.157.19.218"}
{:node-name "test-vm2" :node-ip "18.194.113.138"}] :provisioning-user {:login "ubuntu"}}
Anda dapat menjalankan tes dengan
java -jar dda-serverspec.jar --targets targets.edn serverspec.edn
sumber