Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
linux:ansible:playbook_example_09 [22.09.2022 15:46. ] – angelegt django | linux:ansible:playbook_example_09 [19.11.2024 13:26. ] (aktuell) – [Ansible - Erweiterte Konfigurationsbeispiel: Inventory] django | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Ansible - erweiterte Konfigurationsbeispiele: Ansible mit Hilfe von Ansible einrichten | + | ====== Ansible - Erweiterte Konfigurationsbeispiel: Inventory |
{{: | {{: | ||
- | ===== Ausgangssituation ===== | + | Nachdem wir uns bereits eingehend mit den **[[basics# |
- | In verteilten | + | |
- | Schauen wir uns hierzu einfach mal nachstehende Skizze an. | + | Klar ist natürlich dass sich da eine Hobby-mässige Installation mit einer Hand voll Geräten sich wohl erheblich von einer professionellen Umgebung mit hunderten oder gar mehr Hosts unterscheiden wird. Bei ersteren wird man vermutlich alle Information bestmöglich versuchen z.B. in einer Datei oder in einem Verzeichnis vor zuhalten. Bei grösseren Installationen wird man hingegen eine **[[# |
+ | * **[[https:// | ||
+ | * **[[https:// | ||
+ | * **[[https:// | ||
+ | * **[[https:// | ||
- | < | + | Egal was wir als Basis verwenden, Ziel sollte immer sein aus den aktuell gepflegten Daten alle Informationen so für Ansible aufzubereiten, |
- | state Firewall_A { | + | |
- | Firewall_A : ----------- | + | |
- | Firewall_A : A-Firewall | + | |
- | Firewall_A : ----------- | + | |
- | } | + | |
- | state Internet { | + | ===== Inventory ===== |
- | state fremdgehostetes_System | + | Zur Verwaltung/ |
- | fremdgehostetes_System : Host beim Housing-Provider | + | |
- | fremdgehostetes_System : Hostname <was-das-auch-immer-für-ein geiler-FQDN-sein-mag> | + | |
- | fremdgehostetes_System : IP-Adresse: aa-bb-cc-dd | + | |
- | } | + | |
- | state DMZ { | + | Im Kapitel **[[first# |
- | state bredmz { | + | |
- | bredmz : EDMZ-Netzwerkswitch (bredmz) | + | |
- | bredmz : Netz: | + | |
- | } | + | |
- | state bridmz { | + | |
- | bridmz : EDMZ-Netzwerkswitch (bridmz) | + | |
- | bridmz : Netz:10.10.0.0/24 | + | |
- | } | + | |
- | state edmz_switch { | + | |
- | edmz_switch : EDMZ-Switch | + | |
- | edmz_switch : Netgear Typ: x | + | |
- | } | + | |
- | + | Im Kapitel **[[https://docs.ansible.com/ | |
- | state FWB { | + | |
- | FWB : FQDN: vml000010.dmz.nausch.org | + | |
- | FWB : ------------------------------------ | + | |
- | FWB : Services: iptables | + | |
- | } | + | |
- | state FWC { | + | |
- | FWC : FQDN: vml000020.dmz.nausch.org | + | |
- | FWC : ------------------------------------ | + | |
- | FWC : Services: iptables | + | |
- | } | + | |
- | state DMZ_HOSTs { | + | ==== Ansible-Konfigurationsdatei und Inventory-Definition ==== |
- | state IDMZ_Repository_Host { | + | In der Ansible-Konfigurationsdatei **'' |
- | | + | $ less / |
- | | + | <code bash> |
- | | + | |
- | IDMZ_Repository_Host : Services : syslog, httpd, rpm-repository, tftp/pxe | + | |
- | } | + | |
- | state EDMZ_Repository_Host { | + | |
- | | + | |
- | EDMZ_Repository_Host : CNAME : mail | + | |
- | | + | |
- | | + | |
- | } | + | |
- | } | + | |
- | } | + | |
+ | [defaults] | ||
- | state Intranet { | + | # some basic default values... |
- | state Switch { | + | |
- | Switch : Physikalischer Netzwerk-Switch | + | |
- | Switch : Netz 10.10.10.0/26 | + | |
- | } | + | |
- | state Workstation { | + | |
- | Workstation : Gerät: Djangos Admin-Workstation | + | |
- | Workstation : Hostname: pml010040 | + | |
- | Workstation : CNAME: office-work | + | |
- | Workstation : MAC: | + | |
- | Workstation : IP: | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | FWB -down-> edmz_switch | + | |
- | bredmz -down-> FWB | + | # |
- | FWC -up-> bredmz | + | ... |
- | FWC -up-> bridmz | + | </code> |
- | | + | |
- | bridmz | + | Unsere eigene Konfigurationsdatei für die Hosts wollen wir aber künftig unserer Ansible-Administationsumgebung beim jeweiligen Admin-Users vorhalten. Im Beispiel unseres Adminusers **django** wäre dies entsprechend der Pfad **''/ |
- | + | ||
- | Switch | + | |
- | + | ||
- | Workstation -up-> Switch | + | |
- | edmz_switch | + | In unserer benutzerspezifischen Ansible-Konfigurationsdatei wird auch bereits auf das entsprechende Ziel verwiesen. |
- | | + | $ less ~/ |
- | </uml> | + | <code bash> some basic default values... |
- | Von der Admin-Workstation bzw. dem Ansible-Controll-Node aus, wollen wir nun nicht nur zum nächstgelegenen Host erreichen, sondern auch zum übernächsten oder gar zu einem Host im Internet, den wir aber aus Sicherheitsgründen nicht direkt erreichen dürfen und auch können. | + | # Generated by Ansible |
+ | # default: # | ||
+ | inventory | ||
+ | </ | ||
- | Die Komfortabelste Variante ist nun die Nutzung der Option **ProxyCommand**. Bei " | + | === inventory - Beispiel mit einer yml-Datei=== |
+ | Dort legen wir uns unsere erweiterte | ||
+ | $ vim ~/ | ||
- | Weitaus einfacher gestaltet sich o.g. Szenario in dem man auf die SSH-Clientkonfigurationsdatei ~/.ssh/config zurückgreift. Nachfolgendes Beispiel zeigt exemplarisch solch eine Clientspezifische Konfigurationsdatei: | + | <file bash ~/ |
+ | all: | ||
+ | hosts: | ||
+ | n3r0.intra.nausch.org: | ||
+ | g33k.intra.nausch.org: | ||
+ | children: | ||
+ | centos8: | ||
+ | vars: # Variablen, | ||
+ | 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: | ||
- | $ vim ~/ | + | ff_pliening_gbw_egod: |
- | <file bash ~/ | + | |
- | Host * | + | |
- | Port 22 | + | |
- | | + | |
- | user admin | + | |
- | | + | |
- | # Django | + | |
- | # ssh-jumps über mehrere Sprunghosts | + | modell: Ubiquiti UniFi-AC-MESH |
+ | | ||
- | # Erster Sprunghost (fwc) - direkt erreichbar | + | ff_pliening_gbw_ogod: |
- | # Host --> | + | |
- | Host fwc | + | |
- | | + | |
- | | + | longitude: 11.798053090 |
+ | | ||
+ | domain: ffmuc_muc_ost | ||
+ | director: ffmuc_muc_ost | ||
+ | modell: Ubiquiti UniFi-AC-MESH | ||
+ | ansible_ssh_host: | ||
- | # Zweiter Sprunghost (fwb) - nur über fwc erreichbar | + | ff_pliening_gbw_dgod: |
- | # Host --> | + | hostname: ffplieninggbwdgod |
- | Host fwb | + | prettyhostname: |
- | | + | latitude: 48.198671230 |
- | | + | longitude: 11.798122820 |
- | | + | branch: stable |
+ | | ||
+ | | ||
+ | | ||
+ | | ||
- | # Dritter Sprunghost (fwa) - nur über fwb erreichbar | + | ff_pliening_gbw_cpod: |
- | # Host --> fwc --> fwb --> fwa | + | hostname: ffplieninggbwcpod |
- | Host fwa | + | pretty_hostname: |
- | | + | latitude: 48.198726280 |
- | Port 22222 | + | |
- | user sysadmin | + | branch: stable |
- | | + | domain: ffmuc_muc_ost |
- | | + | director: ffmuc_muc_ost |
+ | modell: Ubiquiti UniFi-AC-MESH | ||
+ | | ||
- | # externer Server im Internet nur über externe Firewall " | + | ff_pliening_gbw_kvm_ol: |
- | # also: Host --> fwc --> | + | hostname: ffplieninggbwkvmol |
- | Host s1u7 | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
+ | | ||
+ | | ||
+ | |||
+ | ... #YAML end syntax</ | ||
+ | |||
+ | Die YAML-Konfigurationsdatei enthält entsprechende Bemerkungen, | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | 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 | ||
+ | |||
+ | <WRAP center round alert 90%> | ||
+ | Wollen wir später auch noch vertrauliche Informationen in einzelnen **'' | ||
+ | </WRAP> | ||
+ | |||
+ | Hier werden wir später auf eine **[[# | ||
+ | |||
+ | </ | ||
+ | |||
+ | Zum Testen, ob die definierten Hosts in unserem **inventory**-File auch erreichbar ist, können wir nun z.B. mit dem Befehl **'' | ||
+ | |||
+ | <html> | ||
+ | <pre class=" | ||
+ | <font style=" | ||
+ | | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | }</font> | ||
+ | <font style=" | ||
+ | ... | ||
+ | </ | ||
+ | <font style=" | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }</ | ||
+ | <font style=" | ||
+ | ...</ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Komplexere und grössere Umgebungen ==== | ||
+ | Wie schon im vorhergehenden Beispiel angemerkt, wird es bei einer grösseren 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**: Dies sind einfach ausgedrückt Standard-WLAN-Access-Points((**A**ccess **P**oint)), | ||
+ | * **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. | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | * 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 ~/ansible/ | ||
+ | |||
+ | <file bash ~/ansible/ | ||
+ | all: | ||
+ | | ||
+ | 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 | ||
</ | </ | ||
- | Nun können wir ganz einfach | + | Die Datei ist relativ übersichtlich und doch recht einfach |
- | $ ssh fwa | + | |
+ | Ansible bietet daher einen skalierbareren Ansatz, um den Überblick über Host- und Gruppenvariablen | ||
+ | |||
+ | Diese beiden Verzeichnisse wurden bereits bei der initialen Konfiguration unserer Ansible-Umgebung mit Hilfe des Ansible-Playbooks **'' | ||
+ | $ tree inventories/ | ||
+ | < | ||
+ | ├── group_vars | ||
+ | │ └── all | ||
+ | └── host_vars</ | ||
+ | |||
+ | |||
+ | 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 | ||
+ | $ 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. | ||
+ | |||
+ | === Zusammenfassung === | ||
+ | Nun haben alle unsere eigenen definierten Freifunk Knoten haben nun auf der **[[https:// | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | Zum Thema administrativer Aufwand wollen wir uns kurz noch ein kleines Rechenbeispiel ansehen. Nehmen wir mal an, wie hätten eine etwas grössere Installation mit folgenden Eckdaten: | ||
+ | * **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 | ||
+ | |||
+ | Wir sehen, dass sich die Pflege hier doch sehr schnell zu einer doch erheblichen Herausforderung auswachsen wird! Ein weiteres Thema ist, dass YML-Files bedingt durch Ihre Struktur zwar für den Menschen recht gut zu lesen und auch zu bearbeiten sind. \\ | ||
+ | |||
+ | **__Aber__** wenn man solch eine Datei aus einer **CMDB** automatisiert erzeugen möchte, klappt dies schon nicht mehr so einfach, wie anfänglich angenommen. Wir werden uns daher im nächsten Beispiel eine doch geeignetere Variante ansehen. | ||
+ | </ | ||
+ | |||
+ | ==== CMDB-basierte professionelle Umgebungen ==== | ||
+ | Wie schon im vorhergehenden Beispiel angemerkt, wird es zum einen bei professionellen Umgebungen, nicht mehr praktikabel pflegbar sein, alle Informationen in einer YML-Datei mit verschiedenen Host- oder Gruppen basierenden Variablen-Definitionen versuchen vor zuhalten. Der Export und das automatische Generieren von Inventory-Daten in strukturierter **'' | ||
+ | |||
+ | Bei der Grundkonfiguration unserer Ansible-Umgebung mit Hilfe des Ansible-Playbooks **'' | ||
+ | < | ||
+ | ├── group_vars | ||
+ | │ └── all | ||
+ | └── host_vars</ | ||
+ | |||
+ | Wir können nun entweder eine Inventory-Datei **'' | ||
+ | $ less ~/ | ||
+ | |||
+ | <file bash hosts># Generiert mit Hilfe von Ansible am 2022-09-20 - diese Datei nicht manuell bearbeiten! | ||
+ | # Inventory Datei für die System-Umgebung bei nausch.org | ||
+ | # | ||
+ | # Hinweise: | ||
+ | # | ||
+ | # leere Zeilen werden ignoriert | ||
+ | # Host- und Gruppendefinitionen werden mit [] abgegrenzt | ||
+ | # Hosts können über ihren Hostnamen, FQN oder ihrer IP-Adresse definiert | ||
+ | # | ||
+ | # | ||
+ | # Host-Definitionen | ||
+ | |||
+ | # Hosts ohne Gruppenzuordnung | ||
+ | localhost | ||
+ | |||
+ | [intranet] | ||
+ | pml010002 | ||
+ | pml010003 | ||
+ | pml010004 | ||
+ | ... | ||
+ | ... | ||
+ | pml010124 | ||
+ | pml010125 | ||
+ | pml010126 | ||
+ | |||
+ | [IDMZ] | ||
+ | vml030010 | ||
+ | vml030020 | ||
+ | vml030030 | ||
+ | vml030040 | ||
+ | ... | ||
+ | ... | ||
+ | vml030230 | ||
+ | vml030240 | ||
+ | vml030250 | ||
+ | |||
+ | [EDMZ] | ||
+ | vml050010 | ||
+ | vml050020 | ||
+ | vml050030 | ||
+ | vml050040 | ||
+ | vml050250 | ||
+ | |||
+ | [TKDMZ] | ||
+ | vml070010 | ||
+ | vml070020 | ||
+ | vml070030 | ||
+ | |||
+ | [external] | ||
+ | customer_no_001 | ||
+ | customer_no_002 | ||
+ | ... | ||
+ | ... | ||
+ | customer_no_042 | ||
+ | |||
+ | [gluon] | ||
+ | ff_pliening_gbw__ug_ | ||
+ | ff_pliening_gbw_egod | ||
+ | ff_pliening_gbw_ogod | ||
+ | ff_pliening_gbw_dgod | ||
+ | ff_pliening_gbw_cpod | ||
+ | ff_roding_fwg_nausch | ||
+ | |||
+ | [raspbian] | ||
+ | ff_pliening_rpb4_ol_v6 | ||
+ | |||
+ | # Host-Gruppen-Definitionen | ||
+ | # (zu welcher Gruppe gehören Untergruppen bzw. Hosts) | ||
+ | |||
+ | [freifunk: | ||
+ | gluon | ||
+ | raspbian | ||
+ | |||
+ | [linux: | ||
+ | intranet | ||
+ | IDMZ | ||
+ | EDMZ | ||
+ | TKDMZ | ||
+ | external | ||
+ | </ | ||
+ | |||
+ | Die betreffenden Host- bzw. Gruppenspezifischen Variablen halten wir hier in entsprechenden Dateien bzw. Unterverzeichnissen vor, wie z.B. die automatisch erzeugte Datei **'' | ||
+ | | ||
+ | <file c++ ansible_environment># | ||
+ | ansible_become: | ||
+ | ansible_become_method: | ||
+ | ansible_become_user: | ||
+ | ansible_become_ask_pass: | ||
+ | |||
+ | Oder z.B. die Definitionen für eine bestimmte Gruppe. | ||
+ | $ less inventories/ | ||
+ | <file c++ ssh_environment># | ||
+ | ssh_port: 22 | ||
+ | ssh_user: django | ||
+ | ssh_protocol: | ||
+ | ssh_keyfile: | ||
+ | |||
+ | Das Beispiel hier zeigt die Host-spezifischen Variablen eines Hosts im Intranet. | ||
+ | $ less inventories/ | ||
+ | |||
+ | <file c++ pml111002># | ||
+ | host_alias: printer | ||
+ | host_mac: " | ||
+ | host_ipv4: " | ||
+ | host_ipv6: ":: | ||
+ | host_sshjump: | ||
+ | |||
+ | Unser Inventory hat nun in etwa nachfolgenden strukturellen Aufbau, bei dem auch wieder die entsprechend gekürzt und die Stellen mit Hilfe von **'' | ||
+ | < | ||
+ | ├── group_vars | ||
+ | │ ├─── all | ||
+ | │ | ├── ansible_environment | ||
+ | │ | ├── ssh_environment | ||
+ | │ | └── vault | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | │ | ||
+ | | | ||
+ | ├── hosts | ||
+ | └── host_vars | ||
+ | ├── ff_pliening_gbw_cpod | ||
+ | ├── ff_pliening_gbw_dgod | ||
+ | ├── ff_pliening_gbw_egod | ||
+ | ├── ff_pliening_gbw_ogod | ||
+ | ├── ff_pliening_gbw__ug_ | ||
+ | ├── ff_pliening_rpb4_ol_v6 | ||
+ | ├── ff_roding_fwg_nausch | ||
+ | ├── pml111002 | ||
+ | ├── pml111003 | ||
+ | ├── pml111004 | ||
+ | ... | ||
+ | ... | ||
+ | ├── pml010124 | ||
+ | ├── pml010125 | ||
+ | ├── pml010126 | ||
+ | ├── vml030010 | ||
+ | ├── vml030020 | ||
+ | │ ├── dhcpd | ||
+ | │ ├── named | ||
+ | │ └── hostconfig | ||
+ | ├── vml030030 | ||
+ | ├── vml030040 | ||
+ | ... | ||
+ | ... | ||
+ | ├── vml030230 | ||
+ | ├── vml030240 | ||
+ | ├── vml030250 | ||
+ | ├── vml050010 | ||
+ | ├── vml050020 | ||
+ | │ ├── vhosts | ||
+ | │ └── hostconfig | ||
+ | ├── vml000030 | ||
+ | │ ├── exporter | ||
+ | │ ├── github | ||
+ | │ └── hostconfig | ||
+ | ├── vml050030 | ||
+ | ├── vml050040 | ||
+ | │ ├── prometheus | ||
+ | │ ├── grafana | ||
+ | │ ├── apache | ||
+ | │ └── hostconfig | ||
+ | ├── vml050250 | ||
+ | ├── vml070010 | ||
+ | ├── vml070020 | ||
+ | ├── vml070030 | ||
+ | ├── customer_no_001 | ||
+ | ├── customer_no_002 | ||
+ | ... | ||
+ | ... | ||
+ | └── customer_no_002 | ||
+ | </ | ||
- | Auch können wir nun ohne großem Heckmeck Dateien von einem Ende zum anderen Ende kopieren. | ||
- | $ scp ~/ | ||
- | $ scp 51u7:/ | + | === Zusammenfassung === |
+ | <WRAP center round tip 80%> | ||
+ | Wir haben nun eine standardisiertes Inventory. Die hilft uns zum einen bei der ggf. manuellen Pflege, da Informationen strukturiert immer an definierten Stellen stehen. Dies verlangt natürlich den Admins einiges an Disziplin ab, aber so können sich alle darauf verlassen, dass benötigte Informationen und Konfigurationsoptionen an den gleichen Stellen stehen (sollten). | ||
- | Somit ist natürlich auch Ansible in der Lage die definierten Zielhost aus dem Inventory | + | Pflegt man die Inventory-Daten hingegen über eine (WEB)UI einer CMBD-Anwendung und generiert dann automatisiert die entsprechenden Inventory-Daten, ist dann auch sicher gestellt, dass alle Daten wirklich gleich strukturiert und an den vorgesehenen Stellen stehen. Wie das von Statten geht, werden wir uns später noch eingehender ansehen. |
+ | </ | ||
- | ===== Lösungsmöglichkeit ===== | ||
- | FIXME | + | ====== Links ====== |
+ | * **[[detail|zurück zum Kapitel " | ||
+ | * **=> [[playbook_example_10|weiter zum Kapitel " | ||
+ | * **[[start|Zurück zur " | ||
+ | * **[[wiki: | ||
+ | * **[[http:// |