Teste mich, wenn du kannst. Träumen YML-Entwickler davon, ansible zu testen?

Küchen-CI-Schema


Es handelt sich um eine Textversion der Präsentation 2018-04-25 in der Saint-Petersburg Linux User Group . Das Konfigurationsbeispiel finden Sie unter https://github.com/ultral/ansible-role-testing


Ich nehme an, dass Sie Konfigurationsmanagement machen, nicht Bash . Es bedeutet, dass Sie es wie testen müssen. Haben Sie jemals Ansible-Rollen getestet? Wie machst du das


Wie geht das?


In meinem Fall haben wir:


  • Viele verschiedene Ansible-Rollen.
  • Hyper-V-Hosts als Hypervisor.
  • Eine private Cloud mit eingeschränkter Möglichkeit, VMs bei Bedarf zu erstellen.
  • Ein Proxy für den Internetzugang.
  • Inability Test Ansible Rollen innerhalb von Docker aufgrund einer Rolle = gesamte VM-Konfiguration.
  • Entscheidung zur Implementierung einer Green Build-Richtlinie für ein Git-Repository mit ansiblen Rollen.

Vergleichen wir vorhandene Testlösungen.


NameKüche testenMolekülNeu erstellen
SpracheRubinPythonBash / Rubin
Beobachter1321260
Sterne141311541
Gabeln5021742
LizenzApache 2.0MITBeliebig
Commits192912640
Veröffentlichungen1011210
Mitwirkende109825

NametestinfraServerspezinspecGoss
Githubphilpep / testinframizzy / serverspeckoch / inspecaelsabbahy / goss
SprachePythonRubinRubingeh
Beobachter9314516567
Sterne997210511672170
Gabeln138361330156
LizenzApache 2.0MITApache 2.0Apache 2.0
Commits38018544609309
Veröffentlichungen3528234647
Mitwirkende4311015931

Wir haben beschlossen, das Rad nicht neu zu erfinden und die produktionsreife Lösung zu erhalten. Unser Infrastruktur-Team verfügte über ausgeprägte Ruby-Kenntnisse und großartige Erfahrungen mit Ruby. Daher haben wir uns für Test Kitchen & Inspec entschieden


Küche-ci


Küchen-CI-Schema


Die Hauptidee besteht darin, eine neue VM zu erstellen, eine ansible Rolle zu übernehmen und einige Rauchtests durchzuführen.


Grüne Baupolitik


Grünes Build-Richtlinienschema


Außerdem haben wir eine Green-Build-Richtlinie implementiert. Wir haben Tests für jedes Commit in der Hauptniederlassung durchgeführt und wenn Tests in Ordnung sind, wenn ansible Rollen angewendet werden.


Verschachtelte Virtualisierung


Wie Sie sich erinnern, hatten wir eine private Cloud mit begrenzten Möglichkeiten, VMs bei Bedarf zu erstellen. Wir haben uns entschieden, VMs in VMs zu erstellen.


wir müssen tiefer gehen


Zunächst haben wir versucht, Virtualbox x32 ohne Verschachtelung auszuführen. Es war eine schlechte Idee wegen der Kernel-Panik. Die überwiegende Mehrheit unserer VMs in unserer Infrastruktur ist x86_64, daher haben wir beschlossen, die Forschung fortzusetzen. Aus diesem Grund haben wir uns für die Verwendung verschachtelter Virtualisierung entschieden. Hoffentlich wurde es von unseren Host-Servern unterstützt.


Konfrontierte Probleme


Ich habe testkitchen implementiert und war mit einigen Problemen konfrontiert.


Übergeben Sie die Proxy-Einstellungen vom Host an die Testkitchen-Gast-VM


In einigen Testanzügen haben wir die Proxy-Client-Einstellungen in der von testkitchen erstellten VM konfiguriert. Der Proxy wurde jedoch nicht auf dem Testkitchen-Host konfiguriert und ansible kann keine zusätzlichen Variablen mit leeren Werten verwenden


Lösung: Erstellen Sie eine erb-Vorlage zum Festlegen des Standard-Proxys, wenn keine ENV-Variablen festgelegt sind


<%= ENV['http_proxy'].to_s.empty? ? 'http://proxy.example.com:3128' : ENV['http_proxy'] %> 

Verwalten Sie die Netzwerkeinstellungen über das Playbook


Einige Rollen konfigurieren Netzwerkschnittstellen. Testanzug sah aus wie:


  • Stellen Sie Netzwerkeinstellungen auf VMs bereit
  • Netzwerk neu laden
  • Es ist fehlgeschlagen

Lösung: Fügen Sie Schnittstellen zu VMs hinzu


Fehlschlagen, wenn der Koffer "-" enthält


Virtualbox kann "_" nicht in einem VM-Namen verwenden


Lösung: Koffer umbenennen "vm_" => "vm-"


Oracle-Test schlägt ohne "." am Ende des VM-Namens


Wir verwenden die Rolle in der Produktion, aber als wir beschlossen, sie zu testen, ist sie fehlgeschlagen. Wir haben es reproduziert.


Ich möchte einen Hinweis geben.


 [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 

Haben Sie Ideen, was passiert?


Es ist ein kniffliger Fehler:


  1. Wir haben Listen IPv4 nur in den Oracle Listener-Einstellungen aktiviert
  2. Orakel verwendet FQDN
  3. Linux enthält eine spezielle Datenbank "myhostname" zum Auflösen des Hostnamens, die nach dem Auflösen von / etc / hosts & dns verwendet wird
  4. Vagrant hat eine VM erstellt und /etc/hosts aktualisiert

Ich möchte es etwas näher erläutern:
Was ist im Fall von vm-oracle passiert?


  1. Vagabund erstellt vm
  2. vagrant aktualisiert /etc/hosts ( vm-oracle x2)
  3. Oracle Listener hörte IPv4
  4. Orakel Zuhörer gelöst vm-Orakel. & IPv6 erhalten
  5. FEHLGESCHLAGEN

Was ist im Fall von vm-oracle passiert ? ?


  1. Vagabund erstellt vm
  2. vagrant aktualisiert / etc / hosts ( vm-oracle & vm-oracle. )
  3. Oracle Listener hörte IPv4
  4. Orakel Zuhörer gelöst vm-Orakel. & IPv4 erhalten
  5. Ok

OOM kommt


OOM tötete zufällig VMs. Testküche wurde mit seltsamen Fehlern gescheitert.


Lösung: RAM erhöhen


Langsame Builds


Es arbeitete langsam


Lösungen:


  • Packer . Vorgefertigte Vagabundkiste mit allgemeinen Aufgaben
  • Parallelität

Fazit


Einerseits funktioniert die aktuelle Implementierung, andererseits gibt es einige Probleme


  • ist nicht benutzerfreundlich.
  • Wir mischen Ruby & Python.
  • Es gibt keine Unabhängigkeitsprüfung.
  • es funktioniert langsam.
  • Es ist schwierig, Protokolle bei einem einzelnen Job zu verfolgen.

Infolgedessen könnte Molecular & Docker eine ziemlich interessante Lösung sein.


Einige verwandte Links


Source: https://habr.com/ru/post/de436960/


All Articles