Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:ansible:detail [11.01.2020 21:12. ] – [inventory - Beispiel] django | centos:ansible:detail [24.09.2022 14:26. ] (aktuell) – gelöscht django | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Ansible - Erweiterte Konfigurationsbeispiele ====== | ||
- | {{: | ||
- | Nachdem wir uns bereits eingehend mit den **[[centos: | ||
- | |||
- | ===== Inventory ===== | ||
- | Zur Verwaltung/ | ||
- | |||
- | Im Kapitel **[[centos: | ||
- | |||
- | Im Kapitel **[[https:// | ||
- | |||
- | {{page> | ||
- | |||
- | |||
- | ==== ~/ | ||
- | Im Kapitel **[[centos: | ||
- | |||
- | In der Ansible-Konfigurationsdatei **''/ | ||
- | |||
- | < | ||
- | |||
- | [defaults] | ||
- | |||
- | # some basic default values... | ||
- | |||
- | # | ||
- | ... | ||
- | </ | ||
- | |||
- | Unsere erweiterte YAML-Konfigurationsdatei für die Hosts wolen wir aber künftig in der Ansible-Administationsumgebung unseres Admin-Users vorhalten und pflegen. Im Beispiel unseres Adminusers **django** wäre dies entsprechend der Pfad **''/ | ||
- | |||
- | Wir hinterlegen also dort, dass zukünftig die Inventory-Datei **'' | ||
- | # vim / | ||
- | |||
- | < | ||
- | |||
- | # some basic default values... | ||
- | |||
- | # Django : 2020-01-01 | ||
- | # default: # | ||
- | inventory | ||
- | </ | ||
- | |||
- | === inventory - Beispiel === | ||
- | Dort legen wir uns unsere erweiterte Host-Datei im YAML-Format an. | ||
- | $ vim / | ||
- | |||
- | <file bash / | ||
- | all: | ||
- | hosts: | ||
- | n3r0.intra.nausch.org: | ||
- | g33k.intra.nausch.org: | ||
- | children: | ||
- | centos8: | ||
- | vars: # Variablen, die für die ganze Gruppe gelten | ||
- | ansible_ssh_port: | ||
- | ansible_ssh_user: | ||
- | ansible_ssh_private_key_file: | ||
- | hosts: | ||
- | www8.dmz.nausch.org: | ||
- | ansible_ssh_host: | ||
- | centos7: | ||
- | vars: # Variablen, die für die ganze Gruppe gelten | ||
- | ansible_ssh_port: | ||
- | ansible_ssh_user: | ||
- | ansible_ssh_private_key_file: | ||
- | hosts: | ||
- | www7.dmz.nausch.org: | ||
- | ansible_ssh_host: | ||
- | # optische Abtrennung zu nachfolgenden Definitionen | ||
- | ffmucgluon: | ||
- | vars: # Variablen, die für die ganze Gruppe gelten | ||
- | ansible_ssh_port: | ||
- | ansible_ssh_user: | ||
- | ansible_ssh_private_key_file: | ||
- | contact_info: | ||
- | hosts: | ||
- | ff_pliening_gbw_ug: | ||
- | hostname: ff_pliening_gbw_ug | ||
- | latitude: -48.19861319429455 | ||
- | longitude: -168.2017571420684 | ||
- | branch: stable | ||
- | domain: ffmuc_muc_ost | ||
- | director: ffmuc_muc_ost | ||
- | modell: TP-Link TL-WDR4300 v1 | ||
- | ansible_ssh_host: | ||
- | |||
- | ff_pliening_gbw_egod: | ||
- | hostname: ffplieninggbwegod | ||
- | pretty_hostname: | ||
- | latitude: 48.198652080 | ||
- | longitude: 11.797969940 | ||
- | branch: stable | ||
- | domain: ffmuc_muc_ost | ||
- | director: ffmuc_muc_ost | ||
- | modell: Ubiquiti UniFi-AC-MESH | ||
- | ansible_ssh_host: | ||
- | |||
- | ff_pliening_gbw_ogod: | ||
- | hostname: ffplieninggbwogod | ||
- | pretty_hostname: | ||
- | latitude: 48.198699460 | ||
- | longitude: 11.798053090 | ||
- | branch: stable | ||
- | domain: ffmuc_muc_ost | ||
- | director: ffmuc_muc_ost | ||
- | modell: Ubiquiti UniFi-AC-MESH | ||
- | ansible_ssh_host: | ||
- | |||
- | ff_pliening_gbw_dgod: | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | ff_pliening_gbw_cpod: | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | ff_pliening_gbw_kvm_ol: | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | ... #YAML end syntax</ | ||
- | |||
- | |||
- | Die YAML-Konfigurationsdatei enthält entsprechende Bemerkungen, | ||
- | |||
- | <WRAP center round info 100%> | ||
- | Natürlich gilt zu bedenken, dass das gezeigte Beispiel mit nur 8 Hosts und überschaubaren Variablen doch schon recht umfangreich geworden ist, wenn dies alles in eine Inventory-Datei gepackt wird. Bei Dutzenden oder Hunderten von Maschinen wird dies dann daraus schwer zu handeln - von verschachtelten Gruppen in Gruppen, oder Host die Mitglied in mehreren Gruppen sein sollen, sprechen wir dann besser gar nicht. Hier werden wir später auf eine **[[# | ||
- | </ | ||
- | |||
- | /* Viele Hinweise und Beispiel zu den Gruppen finden sich auch hier im Kapitel **[[https:// | ||
- | |||
- | === playbook === | ||
- | Unsere gerade angelegte Inventory-Datei wollen wir nun verwenden um die Geolocation-Daten unserer Freifunk-Knoten zu organisieren. Die Geodaten sind in der obigen Inventory-Datei in den beiden Variablen **'' | ||
- | $ ~/ | ||
- | |||
- | <file bash ~/ | ||
- | --- | ||
- | - hosts: ffmucgluon | ||
- | gather_facts: | ||
- | |||
- | tasks: | ||
- | - name: "Set GEO location of our own ffmuc-nodes" | ||
- | # | ||
- | raw: uci set gluon-node-info.@location[0]=" | ||
- | |||
- | === Script ausführen === | ||
- | Nun wollen wir unser ersten Playbook ausführen, um die Geodaten aus der Inventory-Datei auf unseren Freifunk-Knoten abzugleichen; | ||
- | $ ansible-playbook -v 08_change_contact.yml | ||
- | |||
- | < | ||
- | <font style=" | ||
- | <font style=" | ||
- | |||
- | PLAY [ffmucgluon] ********************************************************************************************************************** | ||
- | |||
- | <font style=" | ||
- | <font style=" | ||
- | changed: [ff_pliening_gbw_kvm_ol] => {" | ||
- | changed: [ff_pliening_gbw_ogod] => {" | ||
- | changed: [ff_pliening_gbw_ug] => {" | ||
- | changed: [ff_pliening_gbw_dgod] => {" | ||
- | changed: [ff_pliening_gbw_cpod] => {" | ||
- | <font style=" | ||
- | <font style=" | ||
- | <font style=" | ||
- | <font style=" | ||
- | <font style=" | ||
- | <font style=" | ||
- | <font style=" | ||
- | < | ||
- | </ | ||
- | |||
- | === Ergebnis === | ||
- | Alle unsere eigenen definierten Freifunk Knoten haben nun auf der **[[https:// | ||
- | |||
- | ==== Komplexere und größere Umgebungen ==== | ||
- | Wie schon im vorhergehenden Beispiel angemerkt, wird es bei einer größeren Anzahl von Hostdefinitionen mit umfangreichen oder verschachtelten (Gruppe in Gruppe) Gruppenzugehörigkeiten mit verschiedensten zugeordneten Variablen sehr schnell " | ||
- | |||
- | In dem nachfolgenden Konfigurationsbeispiel sehen wir uns eine kleinere Installation an, die zwar nicht genau dem Kriterien **" | ||
- | |||
- | * **Standard-Nodes**: | ||
- | * **Offloader**: | ||
- | |||
- | In unserem Konfigurationsbeispiel haben wir folgende Komponenten und (Betriebs-)Systeme im Einsatz, woraus sich unterschiedliche Gruppenkonstellationen ergeben, die im Betrieb zum Tragen kommen bzw. verwendet werden. | ||
- | - **Gruppe** aller WiFi-AccessPoints mit **Gluon** **'' | ||
- | * ff_pliening_gbw_cpod | ||
- | * ff_pliening_gbw_dod | ||
- | * ff_pliening_gbw_egod | ||
- | * ff_pliening_gbw_ogod | ||
- | * ff_pliening_gbw_ug | ||
- | * ff_roding_as_nausch | ||
- | - **Gruppe** aller Offloader **'' | ||
- | * ff_pliening_gbw_client | ||
- | * ff-django-raspi | ||
- | * ff_pliening_gbw_futro_mesh | ||
- | * ff_pliening_gbw_kvm_ol | ||
- | - **Gruppe** **'' | ||
- | * ff_pliening_gbw_cpod | ||
- | * ff_pliening_gbw_dod | ||
- | * ff_pliening_gbw_egod | ||
- | * ff_pliening_gbw_ogod | ||
- | * ff_pliening_gbw_ug | ||
- | * ff_roding_as_nausch | ||
- | * ff_pliening_gbw_futro_mesh | ||
- | * ff_pliening_gbw_kvm_ol | ||
- | - **Gruppe** **'' | ||
- | * ff_pliening_gbw_futro_mesh | ||
- | - **Gruppe** **'' | ||
- | * ff_pliening_gbw_kvm_ol | ||
- | - **Gruppe** **'' | ||
- | * ff_pliening_gbw_futro_mesh | ||
- | * ff_pliening_gbw_kvm_ol | ||
- | - **Gruppe** **'' | ||
- | * ff_pliening_gbw_futro_mesh | ||
- | * ff_pliening_gbw_kvm_ol | ||
- | - **Gruppe** **'' | ||
- | * ff_pliening_gbw_cpod | ||
- | * ff_pliening_gbw_dod | ||
- | * ff_pliening_gbw_egod | ||
- | * ff_pliening_gbw_ogod | ||
- | * ff_pliening_gbw_ug | ||
- | * ff_roding_as_nausch | ||
- | * ff_pliening_gbw_client | ||
- | * ff-django-raspi | ||
- | * ff_pliening_gbw_futro_mesh | ||
- | * ff_pliening_gbw_kvm_ol | ||
- | |||
- | Nachfolgendes Schaubild visualisiert die einzelnen Gruppen und die entsprechenden Überlappungen. | ||
- | |||
- | {{ : | ||
- | |||
- | |||
- | === inventory - Beispiel === | ||
- | Die **Inventory**-Datei **'' | ||
- | $ vim ~/ | ||
- | |||
- | <file bash ~/ | ||
- | all: | ||
- | children: | ||
- | ffmuc: | ||
- | hosts: | ||
- | ff_pliening_gbw_cpod: | ||
- | ff_pliening_gbw_dgod: | ||
- | ff_pliening_gbw_egod: | ||
- | ff_pliening_gbw_ogod: | ||
- | ff_pliening_gbw_ug: | ||
- | ff_roding_as_nausch: | ||
- | oldeb: | ||
- | hosts: | ||
- | ff_pliening_gbw_client: | ||
- | ff-django-raspi: | ||
- | olfutro: | ||
- | hosts: | ||
- | ff_pliening_gbw_futro_mesh: | ||
- | olkvm: | ||
- | hosts: | ||
- | ff_pliening_gbw_kvm_ol: | ||
- | olgluon: | ||
- | children: | ||
- | olkvm: | ||
- | olfutro: | ||
- | olall: | ||
- | children: | ||
- | oldeb: | ||
- | olgluon: | ||
- | gluonall: | ||
- | children: | ||
- | ffmuc: | ||
- | olgluon: | ||
- | ffmucall: | ||
- | children: | ||
- | ffmuc: | ||
- | olall: | ||
- | ... #YAML end syntax | ||
- | </ | ||
- | |||
- | Die Datei ist relativ übersichtlich und doch recht einfach zu verstehen. Würden wir nun aber die Host- und Gruppenspezifischen Variablen mit in die Datei aufnehmen, wäre dies jedoch gänzlich anders. Dabei haben wir hier nur 10 Hosts und noch keine 100 oder noch mehr. | ||
- | |||
- | Ansible bietet daher einen skalierbareren Ansatz, um den Überblick über Host- und Gruppenvariablen zu behalten. Man kann für jeden Host und jede Gruppe die Variablen in einer jeweils zugehörigen Datei auslagern. Ansible wir beim Aufruf und Abarbeiten eines Playbooks diese hostspezifischen Dateien im Verzeichnis **'' | ||
- | |||
- | Wir legen also die beiden Verzeichnisse an. | ||
- | $ mkdir ~/ | ||
- | $ mkdir ~/ | ||
- | |||
- | Somit haben wir dann aktuell folgende Verzeichnisstruktur auf unserem Admin-/ | ||
- | < | ||
- | ├── authkeys | ||
- | ├── files | ||
- | │ ├── CentOS7 | ||
- | │ └── CentOS8 | ||
- | ├── includes | ||
- | ├── inventory | ||
- | │ ├── group_vars | ||
- | │ └── host_vars | ||
- | ├── playbooks | ||
- | └── templates | ||
- | └── chrony-client</ | ||
- | |||
- | Je **Gruppe** speichern wir also eine individuelle Datei im Verzeichnis **'' | ||
- | $ vim ~/ | ||
- | |||
- | <file bash ~/ | ||
- | ansible_ssh_port: | ||
- | ansible_ssh_user: | ||
- | ansible_ssh_private_key_file: | ||
- | contact_info: | ||
- | </ | ||
- | |||
- | Für die anderen Gruppe(n) verfahren wie ebenso. | ||
- | |||
- | Je **Host** speichern wir dann jeweils eine individuelle Datei im Verzeichnis **'' | ||
- | $ vim ~/ | ||
- | |||
- | <file bash ~/ | ||
- | hostname: ffplieninggbwegod | ||
- | pretty_hostname: | ||
- | latitude: 48.198652080 | ||
- | longitude: 11.797969940 | ||
- | branch: stable | ||
- | domain: ffmuc_muc_ost | ||
- | director: ffmuc_muc_ost | ||
- | modell: Ubiquiti UniFi-AC-MESH | ||
- | ansible_ssh_host: | ||
- | |||
- | Auch für die anderen Hosts legen wir entsprechende Dateien mit den Variablen an. | ||
- | |||
- | |||
- | FIXME Text ergänzen FIXME | ||
- | |||
- | /* | ||
- | * **145** Zeilen (ohne Variablen): | ||
- | * mit **76** Hosts | ||
- | * und **13** Unter-/ | ||
- | |||
- | Bei durchschnittlich 15 Variablen pro Host und 5 Variablen pro Gruppe ergäbe das eine Inventory-Datei mit | ||
- | * **145** Zeilen (ohne Variablen): 145 | ||
- | * mit **76** Hosts ~15 Variablen pro Host: 1.140 | ||
- | * und **13** Unter-/ | ||
- | ergäbe dies eine Inventory-Datei mit **__1.350__** Zeilen. 8-o | ||
- | |||
- | */ | ||
- | |||
- | /* | ||
- | |||
- | https:// | ||
- | https:// | ||
- | |||
- | https:// | ||
- | |||
- | |||
- | FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME | ||
- | |||
- | |||
- | |||
- | /* https:// |