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