prism

Призма

Роль Prism создает структуру для управления группой различных целей с единым интерфейсом плейбука. Например, вы можете захотеть настроить объемы на разных типах хранилищ или управлять VLAN на коммутаторах от различных производителей. Prism позволяет вам определить бэкенды, которые поддерживают набор операций, и настраивать конкретные цели, использующие эти бэкенды. После настройки могут быть сгенерированы плейбуки для выполнения конкретных операций на цели, не обращая внимания на её внутреннюю реализацию.

Эта роль предназначена для того, чтобы служить основой для других ролей, которые предоставляют свои собственные бэкенды и операции.

Требования

Тестировалось с Ansible >= 2.3.0, но может также работать со старыми версиями.

Настройка

Чтобы эффективно использовать эту роль, вам сначала нужно понять ее концепции операций, бэкендов и целей. Операции представляют работу, которую вы хотите выполнить. Бэкенды описывают типы систем, которые могут быть контролируемыми. Наконец, цели представляют собой конкретные экземпляры системы. Для простого примера давайте представим, что мы хотим абстрагировать удаленное объектное хранилище. Нам нужны операции: Создать, Получить, Обновить и Удалить. Возможно много бэкендов, но два очевидных примера: HTTP/REST и FTP. Теперь предположим, что у нас есть REST API, доступный по адресу http://api.example.com/v2 с именем пользователя 'foo' и паролем 'pass', и у нас есть FTP-сервер по адресу 192.168.2.47 с директорией '/pub/api', именем пользователя 'ftp' и паролем 'secret'. Каждая из этих систем представляет собой цель.

Чтобы настроить бэкенды, сначала создайте директорию для хранения шаблонов плейбуков. Расположение по умолчанию - templates/ в этой роли. Далее создайте поддиректорию для каждого бэкенда, который вы хотите поддерживать (например, ftp и http). Затем создайте шаблонные плейбуки в каждой директории бэкендов для каждой операции, которую вы хотите поддерживать (см. пример ниже). Файлы должны называться <operation>.yml.j2.

Чтобы настроить цели, создайте директорию для хранения файлов определения целей. Расположение по умолчанию - /etc/prism/targets. Для каждой цели создайте файл конфигурации <target>.yml (см. пример ниже).

Пример операции

Следующий файл (сохраненный как create.yml.j2 в поддиректории rest/ директории шаблонов) определяет операцию создания для бэкенда 'rest'.

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

  tasks:
  - name: REST: Операция создания
    uri:
      url: "{{ backend_config.base_url }}/{{ params.path }}"
      method: POST
      user: "{{ backend_config.auth.username }}"
      password: "{{ backend_config.auth.password }}"
      body: "{{ params.object.data }}"

Пример определения цели

Следующий файл (сохраненный как web.yml) определяет цель с именем 'web'.

# Хост и пользователь, которые будут использоваться при выполнении сгенерированного плейбука
target_host: host.example.com
target_user: admin

# Бэкенд, который использует эта цель
backend: rest

# Специфические параметры конфигурации для цели
backend_config:
  base_url: http://api.example.com/v2
  auth:
    username: foo
    password: pass

Генерация плейбука

Следующий плейбук может быть использован для генерации плейбука, который будет сохранять объект, используя цель 'web':

# Генерация плейбука на локальной машине
- hosts: localhost
  roles:
    - prism

  vars:
    # Необязательно: переопределите, если не используете по умолчанию
    target_definitions_dir: /etc/prism/targets

    # Необязательно: переопределите, если не используете по умолчанию
    playbook_templates_dir: /etc/prism/templates

    # Установите имя выходного плейбука. Если эта переменная опущена, плейбук не будет сгенерирован.
    generated_playbook: /tmp/prism-playbook.yml

    # Выберите цель для этой операции
    target: web

    # Выберите операцию
    operation: create

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

  # Задача не требуется, так как задача генерации плейбука определена в роли.

Это сгенерирует плейбук в /tmp/prism-playbook.yml, который может быть выполнен с помощью ansible-playbook для выполнения действия:

- hosts: host.example.com
  remote_user: admin

  tasks:
  - name: REST: Операция создания
    uri:
      url: "http://api.example.com/v2/messages"
      method: POST
      user: foo
      password: pass
      body: TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQu=

Чтобы переключиться на цель 'ftp', вам нужно изменить всего одну строку, и сгенерированный плейбук будет настроен для общения с FTP-сервером согласно шаблону операции FTP и конфигурации цели.

target: ftp

Лицензия

GPLv3

Информация об авторе

Написано Адамом Литке - alitke@redhat.com

О проекте

Control a heterogeneous set of targets from a uniform playbook interface

Установить
ansible-galaxy install aglitke/prism
Лицензия
Unknown
Загрузки
79
Владелец