aglitke.prism
Prisma
Rola Prisma tworzy ramy do zarządzania grupą różnych celów za pomocą jednolitego interfejsu playbooków. Na przykład, możesz chcieć skonfigurować wolumeny w różnych rodzajach macierzy pamięci masowej lub zarządzać VLAN-ami na przełącznikach różnych producentów. Prisma pozwala zdefiniować backendy, które obsługują zestaw operacji oraz skonfigurować konkretne cele korzystające z tych backendów. Po skonfigurowaniu, można generować playbooki, aby wykonywać konkretne operacje na celu, niezależnie od jego podstawowej implementacji.
Ta rola ma na celu służenie jako baza dla innych ról, które dostarczają własne backendy i operacje.
Wymagania
Testowane z Ansible >= 2.3.0, ale może również działać z wcześniejszymi wersjami.
Konfiguracja
Aby skutecznie korzystać z tej roli, musisz najpierw zrozumieć jej pojęcia: operacje, backendy i cele. Operacje reprezentują pracę, którą chcesz wykonać. Backend opisuje rodzaje systemów, które można kontrolować. Wreszcie, cele reprezentują konkretne instancje systemu. Dla prostego przykładu, załóżmy, że chcemy uogólnić zdalne przechowywanie obiektów. Potrzebne nam operacje to: Tworzenie, Pobieranie, Aktualizacja i Usuwanie. Istnieje wiele możliwych backendów, ale dwa oczywiste przykłady to: HTTP/REST i FTP. Teraz załóżmy, że mamy REST API dostępne pod adresem http://api.example.com/v2 z loginem 'foo' i hasłem 'pass', a także serwer FTP pod adresem 192.168.2.47 z katalogiem '/pub/api', loginem 'ftp' i hasłem 'secret'. Każdy z tych przykładów reprezentuje cel.
Aby skonfigurować backendy, najpierw utwórz katalog do przechowywania szablonów playbooków. Domyślna lokalizacja to templates/
w tej roli. Następnie stwórz podkatalog dla każdego backendu, który chcesz obsługiwać (np. ftp i http). Następnie utwórz szablon playbooków w każdym katalogu backendu dla każdej operacji, którą chcesz obsługiwać (zobacz poniższy przykład). Pliki powinny być nazwane <operacja>.yml.j2
.
Aby skonfigurować cele, utwórz katalog do przechowywania plików definicji celów. Domyślna lokalizacja to /etc/prism/targets
. Dla każdego celu utwórz plik konfiguracyjny <cel>.yml
(zobacz poniższy przykład).
Przykład operacji
Poniższy plik (zapisany jako create.yml.j2
w podkatalogu rest/
katalogu szablonów) definiuje operację tworzenia dla backendu 'rest'.
- hosts: "{{ target_host }}"
remote_user: "{{ target_user }}"
tasks:
- name: REST: Operacja tworzenia
uri:
url: "{{ backend_config.base_url }}/{{ params.path }}"
method: POST
user: "{{ backend_config.auth.username }}"
password: "{{ backend_config.auth.password }}"
body: "{{ params.object.data }}"
Przykład definicji celu
Poniższy plik (zapisany jako web.yml
) definiuje cel o nazwie 'web'.
# Host i użytkownik do użycia podczas uruchamiania wygenerowanego playbooka
target_host: host.example.com
target_user: admin
# Backend, który wykorzystuje ten cel
backend: rest
# Specyficzne dla celu parametry konfiguracyjne
backend_config:
base_url: http://api.example.com/v2
auth:
username: foo
password: pass
Generowanie playbooka
Poniższy playbook można użyć do wygenerowania playbooka, który zapisze obiekt korzystając z celu 'web':
# Wygeneruj playbook za pomocą lokalnej maszyny
- hosts: localhost
roles:
- prism
vars:
# Opcjonalne: nadpisz, jeśli nie używasz domyślnego
target_definitions_dir: /etc/prism/targets
# Opcjonalne: nadpisz, jeśli nie używasz domyślnego
playbook_templates_dir: /etc/prism/templates
# Ustaw nazwę wygenerowanego playbooka. Jeśli ta zmienna jest pominięta, żaden
# playbook nie zostanie wygenerowany.
generated_playbook: /tmp/prism-playbook.yml
# Wybierz cel dla tej operacji
target: web
# Wybierz operację
operation: create
params:
path: messages
object:
id: 1
data: TG9ycm0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=
# Nie potrzebne zadanie, ponieważ zadanie generowania playbooka jest zdefiniowane w roli.
To generuje playbook w /tmp/prism-playbook.yml
, który można wykonać poleceniem ansible-playbook
, aby wykonać operację:
- hosts: host.example.com
remote_user: admin
tasks:
- name: REST: Operacja tworzenia
uri:
url: "http://api.example.com/v2/messages"
method: POST
user: foo
password: pass
body: TG9ycm0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=
Aby przełączyć się na cel 'ftp', wystarczy zmienić jedną linię, a wygenerowany playbook będzie skonfigurowany do komunikacji z serwerem ftp zgodnie z szablonem operacji ftp i konfiguracją celu.
target: ftp
Licencja
GPLv3
Informacje o autorze
Autor: Adam Litke - alitke@redhat.com
Control a heterogeneous set of targets from a uniform playbook interface
ansible-galaxy install aglitke.prism