centos:ansible:ffmuc-rpb4-ol

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
centos:ansible:ffmuc-rpb4-ol [31.08.2020 11:28. ] djangocentos:ansible:ffmuc-rpb4-ol [05.09.2020 16:56. ] – [Verzeichnis-Struktur] django
Zeile 83: Zeile 83:
         └── Raspbian</code>         └── Raspbian</code>
  
 +/*
 +Gemäß **[[http://docs.ansible.com/ansible/latest/playbooks_best_practices.html|Ansible's Best Practices]]** gibt es durchaus einige Möglichkeiten wie man seine Playbooks organisiert. In aller Regel wird man hier die eigenen individuellen Bedürfnisse (seiner Unternehmung) vornan stellen. 
 +
 +<WRAP center round tip 90%>
 +Jedoch empfiehlt es sich durchaus auf Empfohlenes zurückzugreifen! So empfiehlt es sich zum Beispiel auch, Rollen anstelle von Aufgaben zu verwenden, da dies wesentlich bei der Flexibilität und besseren Organisation der eigenen Playbooks/Codes helfen!
 +</WRAP>
 +
 +Ansible bietet **[[https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#content-organization|zwei Beispiele]]** für Verzeichnis-Layouts. Wir werden im folgen Beispiel uns eine Umgebung aufbauen, in der unser Inventory, also unsere Hosts und Nodes, in mehreren **''groups''** und **''childs''** aufteilen.
 +
 +Mit dieser Struktur sind wir dann in der Lage jede Inventardatei mit ihrer **''group_vars''** und **''host_vars''** in ein separates Verzeichnis zu packen. Fernen können wir so einfach neue Rollen **''roles''**erzeugen, in dem wir dann einfach die bereits vorgefertigte Rollenvorlage **''common''** kopieren.
 +
 +Werfen wir also einfach mal auf die beschrieben Verzeichnisstruktur einen genaueren Blick. Die entsprechende Verwendung der einzelnen Verzeichnisse und DAteien ist in der Aufstellung entsprechend angegeben.
 +<code>ansible/
 +├── filter_plugins                 # (optionales) Verzeichnis für individuelle filter plugins
 +├── library                        # (optionales) Verzeichnis für benutzerdefinierte Module
 +├── module_utils                   # (optionales) Verzeichnis für benutzerdefinierte module_utils zur Unterstützung von Modulen
 +
 +├── inventories                    # Verzeichnis für die einzelnen (unterschiedlichen) Invenory
 +│   ├── production                 # Verzeichnis für die Hosts aus der Gruppe production
 +│   │   ├── hosts.yml              # YML-Datei mit den Host-Definitionen aus der Gruppe production
 +│   │   ├── group_vars             # Verzeichnis für die Gruppenspezifischen Variablen der Gruppe production
 +│   │   └── host_vars              # Verzeichnis für die Hostspezifischen Variablen der Gruppe production
 +│   │    
 +│   └── staging                    # Verzeichnis für die Hosts aus der Gruppe staging
 +│       ├── hosts.yml              # YML-Datei mit den Host-Definitionen aus der Gruppe production
 +│       ├── group_vars             # Verzeichnis für die Gruppenspezifischen Variablen der Gruppe 
 +│       └── host_vars              # Verzeichnis für die Hostspezifischen Variablen der Gruppe production
 +
 +├── roles                          # Verzeichnis für die einzelnen (unterschiedlichen) Rollen
 +│   └── common                     # Verzeichnis "role" common mit seinen entsprechenden Definitionen - Vorlage zum Kopieren
 +│       ├── defaults               # Verzeichnis "defaults"
 +│       │   └── main.yml           # Standardvariablen mit niedrigerer Priorität für diese Rolle
 +│       ├── files                  # Verzeichnis "files"
 +│       │   └── main.yml           # (Skript-)Dateien zur Verwendung als Kopier- bzw. Script-Rressource
 +│       ├── handlers               # Verzeichnis "handlers"
 +│       │   └── main.yml           # Datei mit den Definitionen zu den rollenspezifischen "handlers"
 +│       ├── library                # Verzeichnis für benutzerdefinierte Module einer der Rolle (role) "common"
 +│       ├── lookup_plugin          # Verzeichnis für weitere Arten von Plugins, wie in diesem Fall "lookup"
 +│       ├── meta                   # Verzeichnis "meta" für Rollenspezifische Definitionen/Abhängigkeiten
 +│       │   └── main.yml           # Datei mit Rollenspezifischen Definitionen
 +│       ├── module_utils           # Verzeichnis "module_utils", die benutzerdefinierte module_utils der Rollen enthalten könnte
 +│       ├── tasks                  # Verzeichnis "tasks" für kleinere Aufgabendateien
 +│       │   └── main.yml           # Datei für kleinere Aufgaben, falls diese benötigt werden würden 
 +│       ├── templates              # Verzeichnis mit den Templates
 +│       │   └── main.j2            # Template-Datei mit dem Dateisuffix/-Ende .j2
 +│       └── vars                   # Verzeichnis "vars", mit den zu dieser Rolle zugeordneten Variablen
 +│           └── main.yml           # Datei mit den Rollenspezifischen Variablen
 +
 +└── site.yml                       # master playbook
 +</code>
 +
 +Um dieses Verzeichnis-Layout einfach und schnell auf den Weg zu bringen, verwenden wir die nachfolgend gezeigten zwei Befehle bzw. genauer gesagt die beiden Befehlskette:
 +   $ mkdir -p ~/ansible/inventories/{production,staging}/{group_vars,host_vars} \
 +              ~/ansible/{library,module_utils,filter_plugins} \
 +              ~/ansible/roles/common/{tasks,handlers,templates,files,vars,defaults,meta,library,module_utils,lookup_plugin}
 +
 +   $ touch    ~/ansible/inventories/{production,staging}/hosts.yml \
 +              ~/ansible/site.yml \
 +              ~/ansible/roles/common/{tasks,handlers,templates,files,vars,defaults,meta}/main.yml
 +*/
 === Ansible-Konfigurationsdatei === === Ansible-Konfigurationsdatei ===
 Als nächstes kopieren wir uns die Vorlage-Konfiguratinsdatei aus dem Verzeichnis **''/etc/ansible/''** in unser Homeverzeichnis. Als nächstes kopieren wir uns die Vorlage-Konfiguratinsdatei aus dem Verzeichnis **''/etc/ansible/''** in unser Homeverzeichnis.