
Ini adalah versi teks dari presentasi 2018-04-25 di Saint-Petersburg Linux User Group . Contoh konfigurasi terletak di https://github.com/ultral/ansible-role-testing
Saya kira Anda membuat manajemen konfigurasi, bukan bash . Itu berarti bahwa Anda harus mengujinya bagaimana. Apakah Anda pernah menguji peran yang memungkinkan? Bagaimana kamu melakukannya?
Bagaimana cara melakukannya?
Dalam kasus saya, kami memiliki:
- Banyak peran yang berbeda mungkin.
- Host Hyper-V sebagai hypervisor.
- Cloud pribadi dengan kemungkinan terbatas untuk membuat VM sesuai permintaan.
- Proksi untuk akses internet.
- Ketidakmampuan menguji peran yang mungkin di dalam docker, karena peran = seluruh konfigurasi VM.
- Keputusan untuk menerapkan kebijakan green build untuk repositori git dengan peran yang dimungkinkan.
Mari kita bandingkan solusi yang ada untuk pengujian.
Nama | Dapur uji | Molekul | Buat yang baru |
---|
Bahasa | ruby | ular sanca | bash / ruby |
Pengamat | 132 | 126 | 0 |
Bintang | 1413 | 1154 | 1 |
Garpu | 502 | 174 | 2 |
Lisensi | Apache 2.0 | MIT | Apa saja |
Berkomitmen | 1929 | 1264 | 0 |
Rilis | 101 | 121 | 0 |
Kontributor | 109 | 82 | 5 |
Kami memutuskan untuk tidak menemukan kembali roda & mendapatkan solusi siap produksi. Tim infrastruktur kami memiliki keterampilan ruby ββyang kuat & pengalaman hebat dengan ruby, akibatnya kami memilih Test Kitchen & inspec
Dapur-ci

Gagasan utamanya adalah membuat VM baru, menerapkan peran yang memungkinkan & melakukan beberapa tes asap.
Kebijakan pembangunan hijau

Kami juga menerapkan kebijakan pembangunan hijau. Kami menjalankan tes untuk setiap komit ke cabang master & jika tes ok, saat menerapkan peran yang mungkin.
Virtualisasi bersarang
Seperti yang Anda ingat, kami memiliki cloud pribadi dengan kemungkinan terbatas untuk membuat VM sesuai permintaan. Kami memutuskan untuk membuat VM di dalam VM.

Pertama-tama kami mencoba menjalankan Virtualbox x32 tanpa bersarang. Itu ide yang buruk karena panik kernel. Sebagian besar VM kami di infrastruktur kami adalah x86_64, jadi kami memutuskan untuk melanjutkan penelitian. Akibatnya kami memutuskan untuk menggunakan virtualisasi bersarang. Semoga itu didukung oleh server host kami.
Menghadapi masalah
Saya menerapkan testkitchen dan menghadapi beberapa masalah.
Lewati pengaturan proxy dari host ke VM tamu testkitchen
Dalam beberapa pengujian, kami mengonfigurasi pengaturan klien proksi di dalam VM yang dibuat oleh testkitchen. Namun, proksi tidak dikonfigurasi pada host testkitchen & tidak dapat menggunakan variabel tambahan dengan nilai kosong
Solusi: buat erb template untuk mengatur proxy default jika variabel ENV tidak diatur
<%= ENV['http_proxy'].to_s.empty? ? 'http://proxy.example.com:3128' : ENV['http_proxy'] %>
Kelola pengaturan jaringan melalui playbook
Beberapa peran mengkonfigurasi antarmuka jaringan. Test suit terlihat seperti:
- Menyebarkan pengaturan jaringan ke VM
- Muat ulang jaringan
- Itu gagal
Solusi: tambahkan antarmuka ke VM
Gagal jika kotak kasus berisi nama "-"
Virtualbox tidak dapat menggunakan "_" dalam nama vm
Solusi: ganti nama koper "vm_" => "vm-"
Tes Oracle gagal tanpa "." di akhir nama VM
Kami menggunakan peran dalam produksi, namun ketika kami memutuskan untuk mengujinya, itu gagal. Kami mereproduksinya.
Saya ingin menunjukkan petunjuk.
[root@vm-oracle vagrant]# getent ahosts vm-oracle 127.0.0.1 STREAM vm-oracle 127.0.0.1 DGRAM 127.0.0.1 RAW [root@vm-oracle vagrant]# getent ahosts vm-oracle. fe80::a00:27ff:febd:bd6a STREAM vm-oracle fe80::a00:27ff:febd:bd6a DGRAM fe80::a00:27ff:febd:bd6a RAW 10.0.2.15 STREAM 10.0.2.15 DGRAM 10.0.2.15 RAW [root@oracle vagrant]# getent ahosts oracle.example.com. 192.168.128.182 STREAM oracle.example.local 192.168.128.182 DGRAM 192.168.128.182 RAW
Apakah Anda punya ide apa yang sedang terjadi?
Itu adalah bug yang rumit:
- kami mengaktifkan mendengarkan IPv4 hanya dalam pengaturan pendengar oracle
- oracle menggunakan FQDN
- linux berisi database khusus "myhostname" untuk menyelesaikan hostname, ini digunakan setelah / etc / hosts & dns resolving
- Vagrant menciptakan VM & updated
/etc/hosts
Saya ingin sedikit memperjelasnya:
Apa yang terjadi dalam kasus vm-oracle ?
- gelandangan dibuat vm
- vagrant updated
/etc/hosts
( vm-oracle x2) - pendengar oracle mendengarkan IPv4
- pendengar oracle memutuskan vm-oracle. & dapatkan IPv6
- GAGAL
Apa yang terjadi dalam kasus vm-oracle. ?
- gelandangan dibuat vm
- gelandangan diperbarui / etc / hosts ( vm-oracle & vm-oracle. )
- pendengar oracle mendengarkan IPv4
- pendengar oracle memutuskan vm-oracle. & dapatkan IPv4
- Ok
OOM akan datang
OOM secara acak membunuh para VM. Testkitchen gagal dengan kesalahan aneh.
Solusi: tambah RAM
Build lambat
Itu bekerja lambat
Solusi:
- Packer . Kotak gelandangan prebuild dengan tugas-tugas umum
- Konkurensi
Kesimpulan
Di satu sisi, implementasi saat ini berfungsi, tetapi di sisi lain, ada beberapa masalah
- tidak ramah pengguna.
- kami mencampur ruby ββ& python.
- tidak ada pemeriksaan indepoten.
- itu bekerja lambat.
- sulit untuk melacak log di satu pekerjaan.
Akibatnya, molekul & buruh pelabuhan mungkin solusi yang cukup menarik.