Laut den Ansible-Dokumenten ist ein Playbook :
... die Basis für ein wirklich einfaches Konfigurationsmanagement- und Multi-Machine-Deployment-System, wie es es noch nicht gibt und das sich sehr gut für die Bereitstellung komplexer Anwendungen eignet.
Und wieder, nach denselben Dokumenten, sind eine Rolle :
... Möglichkeiten zum automatischen Laden bestimmter vars_files, Aufgaben und Handler basierend auf einer bekannten Dateistruktur. Das Gruppieren von Inhalten nach Rollen ermöglicht auch das einfache Teilen von Rollen mit anderen Benutzern.
Die Unterscheidung zwischen diesen und ihren verschiedenen Anwendungsfällen ist mir jedoch nicht sofort klar. Wenn ich meine /etc/ansible/hosts
Datei beispielsweise so konfiguriere , dass sie wie folgt aussieht:
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
... was ist dann dieser " [databases]
" Eintrag ... eine Rolle ? Oder irgendwo der Name einer Playbook-YAML-Datei? Oder etwas anderes?!?
Wenn mir jemand die Unterschiede erklären könnte, würde sich mein Verständnis von Ansible erheblich verbessern!
- Playbook vs Role vs
[databases]
und ähnliche Einträge in/etc/ansible/hosts
- Wenn Playbooks in YAML-Dateien definiert sind, wo sind dann Rollen definiert?
ansible.cfg
Wie kann ich Ansible mit den verfügbaren Playbooks / Rollen hinzufügen / konfigurieren, abgesehen davon , dass ich auf dem Ansible-Server lebe?ansible-playbook someplaybook.yaml
Woher weiß Ansible beispielsweise beim Ausführen , wo sich das Playbook befindet?
quelle
tasks
Sachen machen.playbooks
Aufgaben organisieren und starten.roles
Organisieren Sie eine Reihe von Aufgaben, Handlern usw., die eine bestimmte Funktion ausführen. Einigeplaybook
werden benötigt, um dierole
(s) zu starten . Wie würden Sie eine Sammlung vonroles
und nennenplaybooks
? Sagen Sie zum Beispiel einen, der die Konfiguration aller Hosts an Ihrem Standort verwaltet?Antworten:
[databases]
ist ein einzelner Name für eine Gruppe von Hosts. Sie können mehrere Hosts mit einem einzigen Namen referenzieren.Die Rolle besteht aus einer Reihe von Aufgaben und zusätzlichen Dateien, mit denen der Host für eine bestimmte Rolle konfiguriert werden kann .
Playbook ist eine Zuordnung zwischen Hosts und Rollen.
Beispiel aus Dokumentation beschreibt Beispielprojekt. Es enthält zwei Dinge:
site.yml
,webservers.yml
,fooservers.yml
Sind Spielbücher.roles/common/
undroles/webservers/
enthalten Definitionencommon
undwebservers
Rollen entsprechend.In playbook (
webservers.yml
) hast du so etwas wie:Sie werden in
roles/*
Verzeichnissen definiert . Rollen werden hauptsächlich mithilfe von YAML-Dateien definiert, können jedoch auch Ressourcen eines beliebigen Typs (files/
,templates/
) enthalten. Laut Dokumentation ist die Rollendefinition folgendermaßen strukturiert:Die wichtigste Datei ist
roles/x/tasks/main.yml
, hier definieren Sie Aufgaben, die ausgeführt werden, wenn die Rolle ausgeführt wird.Sucht nach einem Playbook im aktuellen Verzeichnis.
Sucht nach einem Playbook im
somedir/somedir/
Verzeichnis.Es liegt in Ihrer Verantwortung, Ihr Projekt mit allen Playbooks und Rollen auf den Server zu stellen. Ansible hat damit nichts zu tun.
quelle
webservers.yml
Playbook ordnet die[webservers]
Hosts der Rollecommon
undwebservers
zu. Aber was genau ist in dercommon
Rolle enthalten? Es gibt keine Möglichkeit, dies in Verzeichnissen zu definieren. Befinden sich also normalerweise YAML-Dateien in diesen "Rollenverzeichnissen"? Danke noch einmal!Rollen sind eine Möglichkeit, Aufgaben in einem Container zusammenzufassen. Sie könnten eine Rolle für das Einrichten von MySQL haben, eine andere für das Einrichten von Postfix usw.
Ein Spielbuch definiert, was wo passiert . Hier definieren Sie die Hosts (Hostgruppen, siehe unten) und die Rollen, die auf diese Hosts angewendet werden.
[databases]
und die anderen Einträge in Ihrem Inventar sind Hostgruppen. Hostgruppen definieren eine Reihe von Hosts, auf denen ein Spiel ausgeführt wird.Ein Spiel ist eine Reihe von Aufgaben oder Rollen (oder beides) in einem Spielbuch. In den meisten Fällen (und Beispielen) enthält ein Spielbuch nur ein einziges Spiel. Aber Sie können so viele haben, wie Sie möchten. Das heißt, Sie könnten ein Playbook haben, in dem die Rolle
postfix
in der Hostgruppemail_servers
und die Rollemysql
in der Hostgruppe ausgeführt werdendatabases
:In Ansible ist so ziemlich alles in YAML definiert, was für Rollen und Playbooks zählt.
AFAIK Sie müssen beim Aufrufen den Pfad zum Playbook angeben
ansible-playbook
. Soansible-playbook someplaybook.yaml
erwarten würdesomeplaybook.yaml
in Ihnen aktuelle Verzeichnis. Sie können jedoch den vollständigen Pfad angeben:ansible-playbook /path/to/someplaybook.yaml
quelle
Es ist eine terminologische / semantische Frage. Es kann subjektiv sein, obwohl es eine Basisdefinition gibt.
Meine Ansicht ist wie folgt:
Jedes Konfigurationsmanagement- / Bereitstellungssystem verfügt über:
source data
- Daten, die zum Erstellen der Konfiguration des Zielhosts verwendet werdentarget data
- Daten zur Identifizierung von Zielhostsconfig changes
- Liste / Satz von Regeln / Aktionen, die wir mitsource data
Over-Target-Host basierend auf anwendentarget data
In Ansible Begriffen:
source data
- sind die verschiedenen Orte, an denen wir Daten ablegen können -group_vars
,playbook
vars,role
vars usw. Diese Orte wirken sich auf die Priorität aus (wenn eine gleichnamige Variable an verschiedenen Orten neu definiert wird, gibt es sehr spezifische Regeln für den Wert von Variable währendansible
/ansible-playbook
Ausführungtarget data
- ist das Inventar (und es ist auch möglich, Inventar- / Hostgruppenvariablen innerhalb des Inventars zu definieren!)config changes
- ansible hat 4 Abstraktionsebenen:role
S /task
S / Tasklisten (und spezielle Aufgaben wiehandlers
) anwenden.Unter dem Aspekt "Software" sollte die Rolle generisch genug sein, um wiederverwendet zu werden .
Auch in einigen (ziemlich großen) Organisationen werden "Rollen" von Gruppe A ausgeliefert, während sie in Spielbüchern verwendet werden, die von Gruppe B verwaltet werden.
Zusammenfassung
All dies ermöglicht die Gruppierung ähnlicher Konfigurationen - in a
role
. Gruppieren verwandter Subsysteme / Komponenten in einemplaybook
. Auch erwähnenswert, 1 YAML Artikel in einem Textbuch (einschließlichhosts:
und entweder odertasks
,pre_tasks
,post_tasks
,roles
) heißt eineplay
Nun zu Ihrer Frage:
Ja, es ist zunächst verwirrend.
Normalerweise verbinden Sie
source data
Ihre mit der Semantik Ihrer Rolle. Wenn Sie also sehen, dass diese Rollesetup_db
in einem Spiel auf eine verwandte Hostgruppe angewendet wird (z. B.db_hosts
),play
kann a jedoch über eine Vereinigung mehrerer Hostgruppen laufen. Es ist nur eine Frage der Konvention gegen Flexibilität.PS
Bitte schreiben Sie mir zurück, ob dies zur Verwirrung beigetragen oder geklärt hat. Vielen Dank.
quelle
Denken Sie auch daran, dass ein Playbook mehr als eine Rolle aufrufen kann, wenn eine Metadatei verwendet wird, die die verschiedenen Rollen beeinflussen soll.
Beispiel Playbook: dual_role-playbook.yml
Das Schema für Rollenordner und Dateien sieht folgendermaßen aus:
quelle
Einfach gesagt:
Ein Playbook ist wie das Hauptprogramm, es enthält vollständige Anweisungen zum Beenden des Jobs. Bei großen Projekten ist es jedoch nicht wünschenswert, tatsächlich jedes Detail darin zu platzieren. Du brauchst also eine Rolle.
Eine Rolle ist eine Unterroutine und erreicht normalerweise ein Ziel, z. B. das Einrichten eines Datenbankservers. Sie können es in ein
roles/
Verzeichnis stellen oder Rollen von Drittanbietern herunterladen, indem Sie URIs in angebenrolesfile.yml
und ansible-galaxy bitten , diese für Sie herunterzuladen.Dies
[database]
ist eine in der Inventardatei definierte Hostgruppe, in der Hosts aufgelistet sind, die zurdatabase
Gruppe gehören. Sie können auch eine Gruppe von Webservern angeben, indem Sie Folgendes angebenGruppe
web
oderdatabase
kann dann in Playbooks oder Rollen verwendet werden, um die anzuwendenden Hosts anzugeben.Die Gruppen können auch im Befehl
ansible
zum Ausführen von Ad-hoc-Befehlen verwendet werden.quelle