Ich hatte bereits ein paar Spielbücher, also fing ich an, sie im Spielbuchverzeichnis zu organisieren . Es muss relative Pfade zu VAR-Dateien geben.
Aktuelles Spielbuch:
---
- hosts: aws_instance.jenkins-agents
user: ec2-user
vars_files:
- ../../../vars/main.yaml
- ../../../vars/vault.yaml
...
Gibt es eine Möglichkeit, die dir-Struktur beizubehalten, aber die Lochness-Familie ( ../../../
) zu vermeiden ?
Ich weiß für Rollen Sie können den Pfad zu ihnen angeben, aber ich habe für vars_files nichts Ähnliches gefunden
Projektbedingungen:
- Wir müssen die Playbooks vom Stamm des Projekts aus ausführen
- Sowohl vars als auch playbooks dir befinden sich im Stammverzeichnis des Projekts
- Dieses Projekt verfügt nicht über statisches Inventar / Hosts, wird jedoch im laufenden Betrieb generiert, wenn Sie ein Playbook ausführen
../../../vars
?Antworten:
Sie werden feststellen, dass die offiziellen Empfehlungen für das Verzeichnislayout alle Playbooks auf die Stammebene stellen. Dies ist beabsichtigt, da Ansible andere Schemata nicht gut handhabt.
Sie können Playbooks wie begonnen in ein Unterverzeichnis einfügen. Dies erfordert jedoch (wie Sie bereits festgestellt haben) die Verwendung relativer Pfade von den Playbooks zu anderen von ihnen verwendeten Ressourcen. Ansible verwendet den Playbook-Pfad, um die Suche zu starten. So wird es geschrieben. Zum größten Teil ist dies genau das, womit Sie sich befassen müssen, wenn Sie sich entscheiden, dorthin zu ziehen, wo Playbooks leben.
Sie scheinen jedoch mehr Verschachtelung zu haben, als Sie sollten:
Warum navigieren Sie in drei Verzeichnissen? Ich würde ein Layout erwarten, das dem offiziellen ähnelt, aber einen Unterordner für Playbooks enthält. dann würden Sie mit nur enden
Das ist eine viel kleinere Änderung.
Zweitens ist es ziemlich selten, dass Sie tatsächlich verwenden möchten
vars_files
. Die meisten in Ansible verwendeten Variablen variieren entweder je nach Host (und sollten daher ingroup_vars
/host_vars
im Projektstamm gespeichert werden) oder sind rollenspezifisch (und sollten daher invars
/defaults
im Rollenverzeichnis gespeichert werden). Einige Dokumentationslinks:Persönlich denke ich, dass es am besten ist, so wenig wie möglich in Ihren Spielbüchern zu haben, aber alles an Rollen zu delegieren. Hier ist ein Beispiel für das gesamte Spielbuch in Ihrem Setup:
Dies gibt Ihnen viel mehr Flexibilität bei der Wiederverwendung.
Wenn Sie keine relativen Pfade für Rollen verwenden möchten, können Sie diese im Stammverzeichnis überschreiben,
roles_path
inansible.cfg
dem Sie Ihre Ansible-Befehle ausführen.quelle
Da ich die Antwort von 030 noch nicht kommentieren kann (habe gerade ein Konto eröffnet), werde ich hier antworten.
Gruppen-Vars-Verzeichnisse sind relativ zum Ansible-Pfad.
Sie müssen Ansible nicht über / etc / ansible ausführen. Sie können es von ~ / .hidden / directory / stuff ausführen, wenn Sie möchten. Stellen Sie einfach sicher, dass Sie eine Verzeichnisstruktur beibehalten. Dh:
Dann können Sie so etwas ausführen
Hiermit werden Gruppenvariablen aus dem Ordner pipeline / group_vars gelesen. Es ist besser, zuerst in Ihren ansible-Stammordner zu cd, da er nach Pfaden aus dem aktuellen Ordner sucht, in dem Sie sich befinden, wenn er sie nicht am Standardspeicherort (/ etc / ansible) findet, sodass Sie Ihre ansible.cfg in / ablegen können Pipeline, ohne andere Befehlszeilenargumente angeben zu müssen. Optional können Sie auch bestimmte Pfade in ansible.cfg definieren.
Sie können noch einen Schritt weiter gehen und separate Gruppenvariablen für jede Umgebung / jeden Standort / etc einrichten:
Führen Sie die folgenden Schritte mit include-vars aus.
ansible-playbook deploy_app.yml -i prod
quelle
Um solche Probleme zu vermeiden, gibt es in Ansible Hosts und Gruppen .
quelle
/etc
Variante würde bei uns nicht funktionieren. Ich hoffe, dass es sie vom Projekt abholen kann.