
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.
Name | Küche testen | Molekül | Neu erstellen |
---|
Sprache | Rubin | Python | Bash / Rubin |
Beobachter | 132 | 126 | 0 |
Sterne | 1413 | 1154 | 1 |
Gabeln | 502 | 174 | 2 |
Lizenz | Apache 2.0 | MIT | Beliebig |
Commits | 1929 | 1264 | 0 |
Veröffentlichungen | 101 | 121 | 0 |
Mitwirkende | 109 | 82 | 5 |
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

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

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.

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:
- Wir haben Listen IPv4 nur in den Oracle Listener-Einstellungen aktiviert
- Orakel verwendet FQDN
- Linux enthält eine spezielle Datenbank "myhostname" zum Auflösen des Hostnamens, die nach dem Auflösen von / etc / hosts & dns verwendet wird
- 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?
- Vagabund erstellt vm
- vagrant aktualisiert
/etc/hosts
( vm-oracle x2) - Oracle Listener hörte IPv4
- Orakel Zuhörer gelöst vm-Orakel. & IPv6 erhalten
- FEHLGESCHLAGEN
Was ist im Fall von vm-oracle passiert ? ?
- Vagabund erstellt vm
- vagrant aktualisiert / etc / hosts ( vm-oracle & vm-oracle. )
- Oracle Listener hörte IPv4
- Orakel Zuhörer gelöst vm-Orakel. & IPv4 erhalten
- 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.