Ansible-Inventar mit dynamischen und statischen Hosts und Variablen verwalten

Ansible-Inventar mit dynamischen und statischen Hosts und Variablen verwalten

Ich frage mich, was eine gute Lösung wäre, um eine Umgebung mit einer Kombination aus dynamischen und statischen Hosts sowie Variablen und Gruppen zu verwalten.

Ich denke an eine Kombination aus physischen Hosts in einem Rechenzentrum mit einer Kombination aus bestimmten Aufgaben (physischer Datenbankknoten) plus Proxmox-Hosts, die einige dynamische VMs verwalten, zusammen mit einigen Cloud-Anbietern für die Verwaltung neuer VMs in einigen Situationen, in denen die physische Leistung nicht ausreicht (Outsourcing von Leistungsspitzen).

In diesem Fall ist eine dynamische Bestandsaufnahme eine gute Praxis. Natürlich gibt es einige Plugins für AWS, Hetzner usw. Aber ist es möglich, dies mit statischen Einträgen zu kombinieren?

Ich baue eine Datenbank mit allen Einträgen und Skripten auf, die die Liste der Cloud-VMs pro Anfrage in der Datenbank aktualisiert. Alle dynamischen Hosts werden zusammen mit den statischen Hosts und einigen Gruppenvariablen und Hostvariablen in der Datenbank gespeichert. Und es gibt einen Webdienst, der das dynamische JSON-Inventar ausgibt, das ein Python-Skript lädt und das als dynamisches Inventar in meinen Playbooks verwendet wird.

Meine Frage ist: Bin ich der Einzige mit dieser Art von Setup? Wenn ich an ein Unternehmen mit einigen VMWare-Hosts zusammen mit einer dynamischen Anzahl von VMs auf diesen Hosts und einigen anderen physischen Systemen denke, wäre es „klar“, dass es für dieses Setup eine Art „Tool“ oder Hilfe geben sollte. Aber soweit ich sehen kann, gibt es entweder ein statisches Inventar (YAML, INI) oder ein dynamisches Inventar (JSON). Aber entwickelt jeder Administrator seine eigene dynamische Inventardatenbank? Oder gibt es ein bestimmtes Software-„Produkt“ oder „Projekt“? Oder ist es eine „bessere“ Vorgehensweise, unterschiedliche Inventare für „statische“ und „dynamische“ Umgebungen zu haben?

Antwort1

Ansible hat mehrere veröffentlichteInventar-PluginsJa, Sie können sie entweder als mehrere -iOptionen kombinieren oder ein Verzeichnis angeben, das mehrere Inventare enthält.

Beispielsweise könnten Sie Folgendes allesamt in den Verzeichnissen inventory/stage/und haben inventory/prod/:

  • hcloud für Hetzner
  • aws_ec2 für AWS
  • YAML mit einer statischen Hostliste
  • Ihr individuelles Inventarskript
  • konstruiert, um Gruppen und Variablen aus Ausdrücken zu erzeugen

Gruppennamen sollten für ein bestimmtes Objekt konsistent sein, sodass Spiele statische Muster verwenden können.

Konstruiertist ziemlich praktisch. Verwenden Sie Jinja-Ausdrücke für Fakten aus dem Inventar oder von Hosts, um Gruppen und Variablen zu erstellen. Sie möchten beispielsweise, dass einige EC2-Tags und einige reguläre Hostnamen-Ausdrücke Mitglieder einer Gruppe sind.

Sollte dies nicht ausreichen, können Sie Ihre eigenen Inventarisierungs-Plugins schreiben. Normalerweise kommunizieren diese mit einer API, beispielsweise wenn Sie ein Inventarisierungs-Plugin von Proxmox hacken. Oder verzichten Sie auf die Mehrfachinventur auf der Ansible-Seite, finden Sie ein für Sie geeignetes Multi-Cloud-Tool und lassen Sie dieses JSON für die Inventarisierung ausgeben.

verwandte Informationen