aglitke.prism

Prisme

Le rôle Prisme crée un cadre pour gérer un groupe de cibles diverses avec une interface de playbook uniforme. Par exemple, vous pourriez vouloir provisionner des volumes sur différents types de systèmes de stockage ou gérer des VLAN sur des commutateurs fabriqués par différents fournisseurs. Prisme vous permet de définir des backends qui prennent en charge un ensemble d'opérations et de configurer des cibles spécifiques qui utilisent ces backends. Une fois les configurations effectuées, des playbooks peuvent être générés pour effectuer des opérations spécifiques sur une cible sans tenir compte de son implémentation sous-jacente.

Ce rôle est conçu pour servir de base à d'autres rôles qui fournissent leurs propres backends et opérations.

Exigences

Testé avec Ansible >= 2.3.0 mais peut également fonctionner avec des versions plus anciennes.

Configuration

Pour utiliser ce rôle efficacement, vous devez d'abord comprendre ses concepts d'opérations, de backends et de cibles. Les opérations représentent le travail que vous voulez effectuer. Les backends décrivent les types de systèmes qui peuvent être contrôlés. Enfin, les cibles représentent des instances spécifiques d'un système. Pour simplifier, imaginons que nous voulons abstraire le stockage d'objets à distance. Les opérations dont nous avons besoin sont : Créer, Récupérer, Mettre à jour, et Supprimer. De nombreux backends sont possibles, mais deux exemples évidents sont : HTTP/REST et FTP. Supposons que nous ayons une API REST accessible à l'adresse http://api.example.com/v2 avec le nom d'utilisateur 'foo' et le mot de passe 'pass', et que nous ayons un serveur FTP à l'adresse 192.168.2.47 avec le répertoire '/pub/api', le nom d'utilisateur 'ftp' et le mot de passe 'secret'. Chacun de ces éléments représente une cible.

Pour configurer les backends, créez d'abord un répertoire pour stocker vos modèles de playbook. L'emplacement par défaut est templates/ dans ce rôle. Ensuite, créez un sous-répertoire pour chaque backend que vous souhaitez prendre en charge (par exemple, ftp et http). Créez ensuite des modèles de playbook dans chaque répertoire backend pour chaque opération que vous souhaitez prendre en charge (voir exemple ci-dessous). Les fichiers doivent être nommés <operation>.yml.j2.

Pour configurer les cibles, créez un répertoire pour stocker les fichiers de définition des cibles. L'emplacement par défaut est /etc/prism/targets. Pour chaque cible, créez un fichier de configuration <target>.yml (voir exemple ci-dessous).

Exemple d'opération

Le fichier suivant (sauvegardé sous le nom create.yml.j2 dans le sous-répertoire rest/ du répertoire des modèles) définit l'opération de création pour le backend 'rest'.

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

  tasks:
  - name: REST: Opération de création
    uri:
      url: "{{ backend_config.base_url }}/{{ params.path }}"
      method: POST
      user: "{{ backend_config.auth.username }}"
      password: "{{ backend_config.auth.password }}"
      body: "{{ params.object.data }}"

Exemple de définition de cible

Le fichier suivant (sauvegardé sous le nom web.yml) définit une cible appelée 'web'.

# L'hôte et l'utilisateur à utiliser lors de l'exécution du playbook généré
target_host: host.example.com
target_user: admin

# Le backend que cette cible utilise
backend: rest

# Paramètres de configuration spécifiques à la cible
backend_config:
  base_url: http://api.example.com/v2
  auth:
    username: foo
    password: pass

Générer un playbook

Le playbook suivant peut être utilisé pour générer un playbook qui stockera un objet en utilisant la cible 'web':

# Générer le playbook en utilisant la machine locale
- hosts: localhost
  roles:
    - prism

  vars:
    # Optionnel : remplacer si vous n'utilisez pas le par défaut
    target_definitions_dir: /etc/prism/targets

    # Optionnel : remplacer si vous n'utilisez pas le par défaut
    playbook_templates_dir: /etc/prism/templates

    # Définir le nom du playbook de sortie. Si cette variable est omise, aucun
    # playbook ne sera généré.
    generated_playbook: /tmp/prism-playbook.yml

    # Choisir une cible pour cette opération
    target: web

    # Sélectionner l'opération
    operation: create

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

  # Aucune tâche nécessaire car la tâche de génération de playbook est définie dans le rôle.

Cela génère un playbook dans /tmp/prism-playbook.yml qui peut être exécuté avec ansible-playbook pour effectuer l'action :

- hosts: host.example.com
  remote_user: admin

  tasks:
  - name: REST: Opération de création
    uri:
      url: "http://api.example.com/v2/messages"
      method: POST
      user: foo
      password: pass
      body: TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=

Pour passer à une cible 'ftp', il vous suffit de changer une ligne et le playbook généré serait configuré pour communiquer avec le serveur ftp selon le modèle d'opération ftp et la configuration de la cible.

target: ftp

Licence

GPLv3

Informations sur l'auteur

Écrit par Adam Litke - alitke@redhat.com

À propos du projet

Control a heterogeneous set of targets from a uniform playbook interface

Installer
ansible-galaxy install aglitke.prism
Licence
Unknown
Téléchargements
93
Propriétaire