aglitke.prism

Prism

El rol de Prism crea un marco para controlar un grupo de objetivos diversos con una interfaz de playbook uniforme. Por ejemplo, puedes querer aprovisionar volúmenes en diferentes tipos de arreglos de almacenamiento o gestionar VLANs en switches de diferentes proveedores. Prism te permite definir backends que soportan un conjunto de operaciones y configurar objetivos específicos que usan esos backends. Una vez configurados, se pueden generar playbooks para realizar operaciones específicas en un objetivo sin importar su implementación subyacente.

Este rol está destinado a servir como base para otros roles que proporcionen sus propios backends y operaciones.

Requisitos

Probado con Ansible >= 2.3.0, pero también puede funcionar con versiones más antiguas.

Configuración

Para usar este rol de manera efectiva, primero debes entender sus conceptos de operaciones, backends y objetivos. Las operaciones representan el trabajo que deseas realizar. Los backends describen los tipos de sistemas que pueden ser controlados. Finalmente, los objetivos representan instancias específicas de un sistema. Para un ejemplo simple, imaginemos que queremos abstraer el almacenamiento de objetos remoto. Las operaciones que necesitamos son: Crear, Recuperar, Actualizar y Eliminar. Existen muchos backends posibles, pero dos ejemplos obvios son: HTTP/REST y FTP. Ahora supongamos que tenemos una API REST accesible en http://api.ejemplo.com/v2 con nombre de usuario 'foo' y contraseña 'pass', y un servidor FTP en 192.168.2.47 con el directorio '/pub/api', nombre de usuario 'ftp' y contraseña 'secreto'. Cada uno de estos representa un objetivo.

Para configurar los backends, primero crea un directorio para almacenar tus plantillas de playbook. La ubicación por defecto es templates/ en este rol. A continuación, crea un subdirectorio para cada backend que desees soportar (por ejemplo, ftp y http). Luego, crea plantillas de playbooks en cada directorio de backend para cada operación que desees soportar (ver ejemplo abajo). Los archivos deben llamarse <operación>.yml.j2.

Para configurar los objetivos, crea un directorio para almacenar los archivos de definición de objetivos. La ubicación por defecto es /etc/prism/targets. Para cada objetivo, crea un archivo de configuración <objetivo>.yml (ver ejemplo abajo).

Ejemplo de operación

El siguiente archivo (guardado como create.yml.j2 en el subdirectorio rest/ del directorio de plantillas) define la operación de creación para el backend 'rest'.

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

  tasks:
  - name: REST: Crear operación
    uri:
      url: "{{ backend_config.base_url }}/{{ params.path }}"
      method: POST
      user: "{{ backend_config.auth.username }}"
      password: "{{ backend_config.auth.password }}"
      body: "{{ params.object.data }}"

Ejemplo de definición de objetivo

El siguiente archivo (guardado como web.yml) define un objetivo llamado 'web'.

# El host y usuario a usar al ejecutar el playbook generado
target_host: host.ejemplo.com
target_user: admin

# El backend que usa este objetivo
backend: rest

# Parámetros de configuración específicos del objetivo
backend_config:
  base_url: http://api.ejemplo.com/v2
  auth:
    username: foo
    password: pass

Generación de un playbook

El siguiente playbook se puede usar para generar un playbook que almacene un objeto utilizando el objetivo 'web':

# Generar el playbook usando la máquina local
- hosts: localhost
  roles:
    - prism

  vars:
    # Opcional: sobreescribir si no usas la ubicación por defecto
    target_definitions_dir: /etc/prism/targets

    # Opcional: sobreescribir si no usas la ubicación por defecto
    playbook_templates_dir: /etc/prism/templates

    # Establecer el nombre del playbook generado. Si se omite esta variable, no
    # se generará ningún playbook.
    generated_playbook: /tmp/prism-playbook.yml

    # Elegir un objetivo para esta operación
    target: web

    # Seleccionar la operación
    operation: create

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

  # No se necesita tarea porque la tarea de generación de playbook está definida en el rol.

Esto genera un playbook en /tmp/prism-playbook.yml que se puede ejecutar con ansible-playbook para realizar la acción:

- hosts: host.ejemplo.com
  remote_user: admin

  tasks:
  - name: REST: Crear operación
    uri:
      url: "http://api.ejemplo.com/v2/messages"
      method: POST
      user: foo
      password: pass
      body: TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=

Para cambiar a un objetivo 'ftp', solo necesitas cambiar una línea y el playbook generado se configurará para hablar con el servidor ftp según la plantilla de operación ftp y la configuración del objetivo.

target: ftp

Licencia

GPLv3

Información del autor

Escrito por Adam Litke - alitke@redhat.com

Acerca del proyecto

Control a heterogeneous set of targets from a uniform playbook interface

Instalar
ansible-galaxy install aglitke.prism
Licencia
Unknown
Descargas
93
Propietario