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