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
Control a heterogeneous set of targets from a uniform playbook interface
ansible-galaxy install aglitke.prism