Alle meine Ansible-Playbooks / -Rollen werden in mein Git-Repo eingecheckt.
Für Ansible Galaxy-Rollen muss ich sie jedoch immer explizit einzeln auf jedem Computer herunterladen, auf dem ich Ansible ausführen möchte.
Es ist sogar schwierig, im Voraus genau zu wissen, welche Ansible Galaxy-Rollen benötigt werden, bis sich Ansible zur Laufzeit über eine fehlende Rolle beschwert.
Wie soll man die Rollenabhängigkeiten von Ansible Galaxy verwalten? Ich möchte, dass sie entweder zusammen mit dem Rest meines Ansible-Codes in mein Git-Repo eingecheckt werden oder dass sie automatisch identifiziert und heruntergeladen werden, wenn ich Ansible auf einem neuen Computer ausführe.
Antworten:
Sie sollten eine
requirements.yml
Datei für diesen Anwendungsfall verwenden. Beschreiben Sie die von Ihnen benötigten Rollen mithilfe einer Vielzahl von Installationsmethoden:Dann installieren Sie sie:
Hier ist ein funktionierendes Beispiel (Installation von OpenDaylight mit Ansible als Vagrant-Provisioner). Weitere Informationen finden Sie in den entsprechenden Ansible-Dokumenten .
quelle
Wie vorgeschlagen, können Sie für diesen Bedarf eine ansible Galaxie verwenden.
Ansible verfügt über eine Funktion, mit der Sie eine
requirements.yml
Datei erstellen können, in der alle Ihre Rollen aufgelistet sind. Das erfahren Sie hier: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-fileZum Beispiel (require.yml):
Anschließend führen Sie
ansible-galaxy install -r requirements.yml
diese Datei aus, um alle dort aufgeführten Rollen herunterzuladen.Wenn Sie es dann weiter automatisieren möchten, können Sie ein einfaches Shell-Skript erstellen, das die beiden Befehle ausführt.
Zum Beispiel (ansible.sh):
./ansible.sh
quelle
2.2.1
Ich stelle oft fest, dass ich ein Java JDK installiere. Die Verwendung einer Rolle erleichtert diese Berührung. Ich habe verschiedene Möglichkeiten ausprobiert (einschließlich vieler Git-Module und Submodule ... Ich muss mehrere Git-Systeme für die Arbeit verwenden und alles wird hässlich). Meine größte Anforderung ist, dass ich keinen Rollencode in mein Playbook-Projekt einchecke, meistens, damit ich alles an einem Ort aufbewahren kann.
Der Inhalt meiner Datei 'require.yml':
Ich führe ein separates Playbook aus, install-role.yml:
Ich führe dieses erste Spielbuch aus, dann führe ich meine Rollen in jedem Spielbuch normal aus. Für mich besteht das Geheimnis darin, sicherzustellen, dass es von git ignoriert wird, damit ich die Rollen nicht versehentlich einchecke. Da ich den Ordner jedes Mal lösche, stelle ich sicher, dass ich keine Fehler erzwingen oder ignorieren muss.
quelle
Eine andere Lösung ist die Verwendung von Git-Submodulen. Immerhin ist Ansible Galaxy nur ein Verzeichnis von Github-Repositories ...
Ich benutze diesen Befehl, um automatisch eine Galaxy-Rolle als Submodul hinzuzufügen:
Übernehmen Sie die Änderungen dann in Ihr Git-Repo. Wenn Sie Ihr Repo in Zukunft klonen, stellen Sie sicher, dass Sie es mit Submodulen klonen, z
git clone ... --recursive
Ein Vorteil davon ist, dass ein Git-Submodul immer auf eine bestimmte Version verweist (Git-Commit-Hash). Dadurch wird verhindert, dass Sie nicht getestete Updates in Ihrer produktiven Umgebung ausführen. Eine neue Version einer Galaxy-Rolle kann Fehler aufweisen oder ganz anders funktionieren als zuvor. Mit einem Git-Submodul entscheiden Sie, ob und wann Sie eine Rolle auf die neue Version aktualisieren.
Außerdem müssen Sie sich nicht zusätzlich darum kümmern, Galaxienrollen in Ihrer Liste auf die schwarze Liste
.gitignore
zu setzen, um zu verhindern, dass deren Code in Ihr Repository übernommen wird.quelle
--force
Flag erneut herunterzuladen , wird nicht angezeigt, ob oder was sich tatsächlich geändert hat. Es ist eine Black Box, die Sie nur steuern können, wenn Sie die heruntergeladenen Galaxienrollen in SCM behalten. Aus anderen Gründen ist das trotzdem eine gute Idee. Beim Ziehen von Submodulen sehen Sie zumindest, welche Rollen sich geändert haben.Sie können eine Ansible-Rolle verwenden, um die erforderlichen Rollen mithilfe des Befehlsmoduls zu installieren .
Hier ist ein sehr einfaches Beispiel, das ausgeführt wird
ansible-galaxy install
:Das
ansible_roles_list
kann als Variable oder als Rollenparameter angegeben werden.Wenn Sie dies in einer Rolle tun, muss es vorher angewendet werden allen anderen Rollen, die Sie damit installieren möchten, in einem separaten Playbook . Dies liegt daran, dass Ansible prüft, ob alle Rollen verfügbar sind, bevor das Playbook ausgeführt wird, auf das Sie verweisen.
quelle
Zu diesem Zeitpunkt gibt es meines Wissens keine automatische Möglichkeit, Rollen zur Laufzeit herunterzuladen. Am besten binden Sie sie entweder in Ihr eigenes Repo ein oder verfügen über eine ordnungsgemäße Dokumentation, in der alle Anforderungen aufgeführt sind. Sie können sogar ein Playbook vor dem Flug erstellen, in dem Ihre Rollen installiert sind. :) :)
quelle
Hier sind meine Anforderungen an die Rolle und werden in install.yml verwendet
main.yml
quelle