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

O projekcie

Control a heterogeneous set of targets from a uniform playbook interface

Zainstaluj
ansible-galaxy install aglitke.prism
Licencja
Unknown
Pobrania
93
Właściciel