Bagaimana cara menguji penyediaan dan konfigurasi dalam pengaturan yang memungkinkan?

33

Melihat mencoba membangun ketahanan ke dalam pengaturan Ansible kami yang berkaitan dengan penyediaan dan konfigurasi.

Saya memahami beberapa metode pengujian pada sisi konfigurasi hal-hal tapi saya bertanya-tanya bagaimana cara terbaik untuk mengimplementasikan pengujian pada sisi penyediaan hal-hal, dan jika ada alat yang dapat membantu dengan jenis implementasi ini.

Saat ini banyak pengujian kami dilakukan secara seri selama buku pedoman yang masuk akal untuk hal-hal seperti "memiliki layanan muncul; apakah vip tersedia; apakah tugas async ini selesai" tetapi yang benar-benar mengkhawatirkan saya adalah kemampuan kami untuk mengelola penyimpangan konfigurasi pada lapisan aplikasi dan penyediaan (seperti konfigurasi VM). Saya sadar Ansible bukan alat terbaik untuk bekerja dengan konfigurasi drift, tetapi saya ingin tahu pendapat Anda sendiri.

Jika Anda memiliki sesuatu untuk sepenuhnya mengotomatiskan proses, bahkan lebih baik. (kami memiliki beberapa skrip jelek yang dilaporkan kembali menjadi kendur setiap hari).

Catatan : Saat ini kami memiliki beberapa kondisi di mana reprovision mungkin terjadi (mis. Membangun kembali dari cadangan, masalah sistem kritis) tetapi biasanya ia hanya mengulangi beberapa tugas konfigurasi yang dimungkinkan dan tidak memikirkannya lagi.

Naphta
sumber
2
serverspec.org
Matt Schuchard
Apakah Ansible hanya berjalan satu kali setelah penyediaan? Jika tidak, frekuensi apa yang sedang dijalankan? Hanya mencoba memahami masalah sebelum menawarkan solusi.
Woodland Hunter
Hai @Naphta, salah satu jawaban telah menyelesaikan pertanyaan Anda, mohon pertimbangkan untuk menerimanya dengan mengklik tanda centang. Ini menunjukkan kepada komunitas yang lebih luas bahwa Anda telah menemukan solusi dan memberikan reputasi kepada penjawab dan diri Anda sendiri. Tidak ada kewajiban untuk melakukan ini.
Richard Slater
I'm aware Ansible isn't the best tool for working with configuration drift Tolong jelaskan.
030

Jawaban:

19

Beberapa opsi di luar sana ..

Alat uji: Diurutkan berdasarkan bintang github

  • Serverspec - Ruby, alat paling populer di luar sana, dibangun di atas rspec ruby
  • Goss - YAML, sederhana, biner mandiri <10MB, sangat cepat, dapat menghasilkan tes dari status sistem
  • Inspec - Ruby, anggap sebagai serverpec yang ditingkatkan, sintaksis yang hampir sama, dibuat oleh para koki. Dibangun agar lebih mudah diperluas dari serverpec
  • Testinfra - Python, memiliki fitur keren untuk dapat menggunakan inventaris / var Ansible

Perbedaan utama di antara mereka:

Pada akhirnya, saya akan menyarankan menghabiskan satu hari bereksperimen dengan mereka semua untuk merasakan mereka sebelum memutuskan untuk diri sendiri.

  • Dengan pengecualian Goss, semua kerangka kerja dapat berjalan melawan mesin jarak jauh (mis. Over ssh). Goss hanya berjalan secara lokal atau di buruh pelabuhan dengan dgoss.
  • Semua kerangka kerja dapat dijalankan secara lokal di server, tetapi membutuhkan Python atau Ruby untuk diinstal atau disematkan. Inspec menyediakan bundel <150MB mandiri dengan ruby ​​versi tertanam. Goss adalah biner <10MB tunggal tanpa ketergantungan eksternal.
  • Goss telah membangun dukungan untuk output nagios / sensu, ini memungkinkan integrasi yang lebih mudah dengan alat pemantauan.
  • Tes Goss cenderung lebih sederhana, tetapi kurang fleksibel karena didasarkan pada YAML. Kerangka kerja lain memungkinkan Anda untuk memanfaatkan kekuatan penuh dari bahasa yang mendasari Python / Ruby untuk menulis tes atau memperluas fungsionalitas alat. (kesederhanaan vs fleksibilitas)
  • Goss memungkinkan Anda untuk menghasilkan tes dari kondisi sistem saat ini
  • Testinfra sepengetahuan saya adalah satu-satunya yang memiliki dukungan bawaan untuk inventaris dan variabel yang mungkin
  • Inspec didukung oleh Chef

Pengujian kontinu / divergensi:

  • Chef Compliance - bekerja dengan inspec untuk terus menguji server Anda, produk berbayar
  • Goss - Dapat dengan mudah dihubungkan ke Nagios atau Sensu. Juga, mendukung mengekspos tes server sebagai titik akhir http.

Menguji memanfaatkan untuk pengembangan:

  • dapur - Alat uji Harness, meluncurkan instance, menjalankan kode manajemen konfigurasi, menjalankan test suite. Dibuat oleh para koki
  • Molekul - Mirip dengan dapur uji, tetapi ditulis khusus untuk memungkinkan

Pengungkapan Lengkap: Saya adalah pengarang goss

PEMBARUAN: InSpec 4.x atau lebih tinggi menggunakan lisensi komersial / open source campuran - lihat komentar.

Ahmed Elsabbahy
sumber
4
Saya mengerti Anda sedikit bias, tetapi inspec tidak perlu kepatuhan untuk berjalan secara berkala. Dan tidak ada dependensi untuk dikelola, semua lib dan kerangka kerja yang diperlukan (ruby) dibundel dalam paket yang dapat diinstal secara lokal pada setiap node, ketika dijalankan melalui ssh / winrm, inspec menempatkan dirinya di tempatnya. Anda menunjukkan tentang perintah eksternal secara eksklusif yang tidak benar, banyak tes dilakukan oleh kode ruby ​​internal. (Saya pikir ini layak untuk dicatat)
Tensibai
Saya telah memperbarui jawaban untuk memperbaiki perintah eksternal dan membundel ruby ​​untuk inspec. Bisakah Anda mengklarifikasi atau mengirim saya tautan yang menjelaskan bagaimana inspec dapat digunakan sendiri untuk mendeteksi / melaporkan penyimpangan?
Ahmed Elsabbahy
Nah, bagian pelaporan akan ada di tangan Anda, memang tujuan Kepatuhan untuk membuat representasi. Tetapi Anda dapat menjalankan inspec dalam sebuah crontab dan hanya mengandalkan surat crontab ketika ada tes yang gagal memberi tahu Anda (misalnya).
Tensibai
Secara keseluruhan, tahnks untuk diedit, itu terdengar eksposisi yang adil dari alat Anda dan orang lain. Saya khawatir ini akan menjadi usang dengan cepat, tetapi bagaimanapun juga +1 untuk cantuman dan petunjuk.
Tensibai
Ah, ya .. semua alat bisa dimanfaatkan dengan cara itu. Saya mencoba menyediakan alat (atau integrasi dengan alat) yang menyediakan pelaporan yang lebih baik. Setahu saya ada kepatuhan, atau membungkus alat dengan cara yang membuat mereka nagios / sensu / beberapa alat pemantauan lainnya ramah. Contoh: slideshare.net/m_richardson/... Permintaan maaf jika awalnya dianggap bias, tidak dimaksudkan.
Ahmed Elsabbahy
13

Dua alat saya lihat bagi ini INSPEC dan ServerSpec . Serverspec adalah alat berbasis Ruby yang dibuat di atas RSpec . InSpec terinspirasi oleh RSpec dan ServerSpec.

Saya telah menggunakan ServerSpec. Itu keren, tapi mungkin tidak 100% stabil. Saya mempunyai masalah dengan pengujian untuk versi perangkat lunak tertentu di Ubuntu.

Saya sudah membaca dokumen InSpec tetapi belum menggali lebih dalam. Ini pada dasarnya melakukan hal yang sama dengan Serverspec.

Dilihat oleh Github melakukan, sepertinya bekerja pada ServerSpec telah agak berkurang, sedangkan InSpec baru saja menggenjot produksinya.

PEMBARUAN: InSpec 4.x atau lebih tinggi menggunakan lisensi komersial / open source campuran - lihat komentar.

Dave Swersky
sumber
1
"Saya punya masalah dengan pengujian untuk versi perangkat lunak tertentu di Ubuntu." Saya memperbaikinya setelah memperhatikan pertanyaan tentang hal itu di SO: stackoverflow.com/questions/42417864/…
Matt Schuchard
Untuk sedikit memperjelas, InSpec mengemulasi RSpec tetapi tidak membangunnya.
coderanger
1
@ MattSchuchard Terima kasih untuk referensi itu!
Dave Swersky
baik "tidak 100% stabil" untuk alat pengujian tidak terdengar bagus
ᴳᵁᴵᴰᴼ
InSpec sangat baik sebagai alat uji, dan membuatnya mudah untuk menginstal apa pun di server, sedangkan ServerSpec hanya dapat melakukan ini dengan beberapa pekerjaan tambahan. Beberapa pekerjaan akan diperlukan untuk memiliki InSpec menggunakan inventaris Ansible - mungkin lebih mudah jika inventaris dalam format YAML (Ansible 2.4+).
RichVel
10

Saat menggunakan alat manajemen konfigurasi, seperti Ansible, alat itu sendiri akan bertanggung jawab mencegah penyimpangan konfigurasi. Setelah Anda menggunakan Ansible untuk mengatur konfigurasi tertentu, eksekusi Ansible yang berulang akan memastikan konfigurasi Anda sesuai dengan definisi yang Anda tentukan. Ini juga mengharuskan kode Ansible Anda ditulis dengan cara yang idempoten.

Dengan adanya hal di atas, penyediaan ketentuan dapat dicapai dengan menjalankan buku pedoman yang dimungkinkan dalam satu lingkaran dari beberapa server. Misalnya, pekerjaan cron, atau Jenkins, dapat menjalankan buku pedoman setiap 30 menit dan melaporkan kembali segala kegagalan. Tidak memiliki kegagalan berarti bahwa konfigurasi Anda dalam pemeriksaan, mengalami kegagalan berarti bahwa ada masalah dalam memasukkan server ke kondisi yang Anda inginkan .

Dalam kasus di mana Anda tidak dapat mempercayai kode Anda untuk ditulis sebagai idempoten, dan dengan demikian Anda tidak dapat benar-benar menjalankan Ansible berulang-ulang dalam satu loop dari server otomatis yang ada solusinya. Anda dapat melakukan hal yang sama seperti di atas (jalankan Ansible in a loop) tetapi gunakan mode dry run-nya . Setiap kali laporan yang memungkinkan bahwa perubahan diperlukan, pekerjaan Jenkins (atau pekerjaan cron) dapat memberi tahu Anda bahwa konfigurasi yang Anda setujui telah diubah dan server tidak dalam keadaan yang diinginkan .

Untuk memastikan bahwa kode Ansible Anda benar-benar melakukan apa yang menurut Anda seharusnya dilakukan, solusi yang disebutkan oleh Dave Swersky berlaku. Kedua INSPEC dan Serverspec adalah alat yang memverifikasi dalam berbagai cara yang playbooks Anda benar-benar tidak apa yang Anda maksud. Cara terbaik untuk mengeksekusi alat-alat semacam ini di lingkungan uji (bahkan wadah buruh pelabuhan) adalah dengan menggunakan kitchen.ci yang menangani semua perekat antara berbagai alat pengujian unit infra, dan pelaksanaan buku pedoman / modul / buku masak Anda.

Kitchen.ci pada awalnya digunakan untuk menguji buku masak Chef, tetapi plugin ada untuk alat Ansible dan CM lainnya juga.

Evgeny
sumber
5

Test Kitchen memiliki plugin penyedia dapur yang memungkinkan untuk menguji kode yang mungkin. Ini tidak sedalam integrasi Chef tetapi mendapatkan pekerjaan untuk sebagian besar kasus. Ada juga proyek Molekul yang lebih baru yang merupakan sistem pengujian Ansible khusus.

pembuat kode
sumber
0

Anda dapat melacak perbedaan konfigurasi / infrastruktur / drift menggunakan Outthentic , mudah untuk membuat suite uji untuk "memperbaiki" keadaan yang diinginkan dan menjalankannya kembali setiap kali Anda perlu melacak perubahan yang tidak diinginkan.

Alexey Melezhik
sumber
1
Selamat datang di DevOps.se Alexey. Meskipun alat Anda dapat membantu pengguna dalam hal ini, agar ini menjadi jawaban di sini, harus ada lebih banyak untuk menyampaikan bagaimana ini relevan dengan pertanyaan. Kalau tidak, itu terlihat seperti iklan hanya tautan.
anak ayam
Hai! Tentu, hanya diberi lebih banyak detail.
Alexey Melezhik
Dari sudut pandang saya, ini tidak lebih dari apa yang dapat dilakukan oleh rundeck dan berada di luar jangkauan untuk pertanyaan ini. Khususnya sebagai jawaban tidak menjelaskan bagaimana hal itu dapat menyelesaikan audit seribu server dan diberitahu tentang penyimpangan atau menyajikan laporan yang dapat dibaca manusia untuk auditor dengan memberikan beberapa hasil parseable. Dari apa yang baru saja saya baca itu tidak lebih dari yang dapat dilakukan oleh Inspec (sebagai contoh) dan memberikan hasil yang kurang dapat digunakan pada skala sementara membutuhkan banyak alat eksternal untuk melakukan pekerjaan dan dengan demikian menjadi kurang portabel.
Tensibai
"bagaimana ia bisa menyelesaikan audit seribu server" - Saya bisa menemukan apa pun tentang ribuan server dalam pertanyaan
Alexey Melezhik
"dan diberi tahu adanya penyimpangan atau menyajikan laporan yang dapat dibaca manusia untuk auditor dengan memberikan beberapa hasil yang dapat diuraikan." saya juga tidak menemukan ini dalam pertanyaan.
Peringatan