aglitke.prism

Prism

Die Prism-Rolle erstellt einen Rahmen, um eine Gruppe von unterschiedlichen Zielen mit einer einheitlichen Playbook-Schnittstelle zu steuern. Zum Beispiel möchten Sie möglicherweise Volumes über verschiedene Arten von Speichersystemen bereitstellen oder VLANs auf Switches verwalten, die von verschiedenen Anbietern stammen. Prism ermöglicht es Ihnen, Backends zu definieren, die eine Reihe von Operationen unterstützen, und spezifische Ziele zu konfigurieren, die diese Backends nutzen. Nach der Konfiguration können Playbooks generiert werden, um spezifische Operationen an einem Ziel durchzuführen, ohne dabei die zugrunde liegende Implementierung zu berücksichtigen.

Diese Rolle dient als Grundlage für andere Rollen, die ihre eigenen Backends und Operationen bereitstellen.

Requirements

Getestet mit Ansible >= 2.3.0, funktioniert aber möglicherweise auch mit älteren Versionen.

Configuration

Um diese Rolle effektiv zu verwenden, müssen Sie zunächst die Konzepte von Operationen, Backends und Zielen verstehen. Operationen stehen für die Arbeit, die Sie ausführen möchten. Backends beschreiben die Arten von Systemen, die gesteuert werden können. Schließlich repräsentieren Ziele spezifische Instanzen eines Systems. Zum Beispiel möchten wir die Fernobjektspeicherung abstrahieren. Die benötigten Operationen sind: Erstellen, Abrufen, Aktualisieren und Löschen. Viele Backends sind möglich, aber zwei offensichtliche Beispiele sind: HTTP/REST und FTP. Angenommen, wir haben eine REST-API erreichbar unter http://api.example.com/v2 mit dem Benutzernamen 'foo' und dem Passwort 'pass' und wir haben einen FTP-Server unter 192.168.2.47 mit dem Verzeichnis '/pub/api', Benutzernamen 'ftp' und Passwort 'secret'. Jede dieser Konfigurationen stellt ein Ziel dar.

Um die Backends zu konfigurieren, erstellen Sie zunächst ein Verzeichnis, um Ihre Playbook-Vorlagen zu speichern. Der Standardort ist templates/ in dieser Rolle. Erstellen Sie dann ein Unterverzeichnis für jedes unterstützte Backend (z. B. ftp und http). Erstellen Sie anschließend Vorlagen-Playbooks in jedem Backend-Verzeichnis für jede unterstützte Operation (siehe Beispiel unten). Die Dateien sollten den Namen <operation>.yml.j2 tragen.

Um die Ziele zu konfigurieren, erstellen Sie ein Verzeichnis für die Zieldefinitionsdateien. Der Standardort ist /etc/prism/targets. Erstellen Sie für jedes Ziel eine Konfigurationsdatei <target>.yml (siehe Beispiel unten).

Example operation

Die folgende Datei (gespeichert als create.yml.j2 im rest/ Unterverzeichnis des Templates-Verzeichnisses) definiert die Erstellungsoperation für das 'rest' Backend.

- hosts: "{{ target_host }}"
  remote_user: "{{ target_user }}"

  tasks:
  - name: REST: Create operation
    uri:
      url: "{{ backend_config.base_url }}/{{ params.path }}"
      method: POST
      user: "{{ backend_config.auth.username }}"
      password: "{{ backend_config.auth.password }}"
      body: "{{ params.object.data }}"

Example target definition

Die folgende Datei (gespeichert als web.yml) definiert ein Ziel namens 'web'.

# Der Host und Benutzer, die beim Ausführen des generierten Playbooks verwendet werden
target_host: host.example.com
target_user: admin

# Das Backend, das dieses Ziel verwendet
backend: rest

# Ziel-spezifische Konfigurationsparameter
backend_config:
  base_url: http://api.example.com/v2
  auth:
    username: foo
    password: pass

Generating a playbook

Das folgende Playbook kann verwendet werden, um ein Playbook zu erstellen, das ein Objekt mit dem 'web'-Ziel speichert:

# Generiere das Playbook mit der lokalen Maschine
- hosts: localhost
  roles:
    - prism

  vars:
    # Optional: Überschreiben, wenn nicht das Standard verwendet wird
    target_definitions_dir: /etc/prism/targets

    # Optional: Überschreiben, wenn nicht das Standard verwendet wird
    playbook_templates_dir: /etc/prism/templates
    
    # Setzen Sie den Namen des generierten Playbooks. Wenn diese Variable weggelassen wird, wird kein Playbook generiert.
    generated_playbook: /tmp/prism-playbook.yml

    # Wählen Sie ein Ziel für diese Operation
    target: web

    # Wählen Sie die Operation
    operation: create

    params:
      path: messages
      object:
        id: 1
        data: TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=

  # Keine Aufgabe erforderlich, da die Aufgaben zur Playbook-Generierung in der Rolle definiert sind.

Dies generiert ein Playbook in /tmp/prism-playbook.yml, das mit ansible-playbook ausgeführt werden kann, um die Aktion auszuführen:

- hosts: host.example.com
  remote_user: admin

  tasks:
  - name: REST: Create operation
    uri:
      url: "http://api.example.com/v2/messages"
      method: POST
      user: foo
      password: pass
      body: TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=

Um zu einem 'ftp'-Ziel zu wechseln, müssen Sie nur eine Zeile ändern und das generierte Playbook wird so konfiguriert, dass es mit dem FTP-Server gemäß der FTP-Operationvorlage und der Zielkonfiguration kommuniziert.

target: ftp

License

GPLv3

Author Information

Geschrieben von Adam Litke - alitke@redhat.com

Über das Projekt

Control a heterogeneous set of targets from a uniform playbook interface

Installieren
ansible-galaxy install aglitke.prism
GitHub Repository
Lizenz
Unknown
Downloads
93
Besitzer