OpenStack назван одним из лучших open source проектов (по версии http://opensource.com/business/14/12/top-10-open-source-projects-2014) и написан полностью на Python. OpenStack уже включает в себя целую кучу готовых к использованию батареек, но если есть необходимость добавить что-то свое -- вы можете это сделать без изменения базового кода, просто написав собственное расширение. Я расскажу, что такое OpenStack и что он умеет из коробки, какие возможности расширения своей функциональности предоставляет эта платформа и как мы это используем у себя в уютненьком Яндексе.
5. 〉 Он задуман как платформа для облаков любых типов и размеров
〉 Его компоненты взаимосвязаны на уровне API
〉 Построен на известных компонентах
5Подходы к расширению OpenStack
Почему OpenStack
8. 〉 Приложения взаимодействуют между собой через разнообразные
HTTP API
〉 Keystone предоставляет общее пространство имен и систему
авторизации
8Как устроен OpenStack
Взаимодействие
9. 〉 Приложения генерируют события, на которые можно реагировать
〉 Зависит от инсталляции
9Как устроен OpenStack
Взаимодействие
11. 〉 Каталог проектов и пользователей и их ролей
〉 Концепция проектов
〉 Система аутентификации и авторизации
〉 Генерация и проверка токена
〉 Каталог сервисов
11Как устроен OpenStack
Keystone, the OpenStack Identity Service
27. 〉 Использование API и событий
〉 Только поддержка токена
〉 Готовые библиотеки
〉 Полная свобода
27Как писать для OpenStack
Новое приложение
28. Вся реализация абстракций:
〉 методы аутентикации в Keystone
〉 драйверы виртуализации, образов, томов и т.д. в Nova
〉 драйверы сетевого оборудования в Neutron
28Как писать для OpenStack
Драйверы
29. 〉 Атомарное API
〉 Можно использовать для модификация поведения
29Как писать для OpenStack
Драйверы
30. 〉 Сложно писать
〉 Внутренний API меняется
30Как писать для OpenStack
Драйверы
31. 〉 Тот же драйвер, но запускается отдельно
〉 Доступен только через RPC
31Как писать для OpenStack
Агенты
32. Позволяет изменять запрос или ответ:
〉 в Swift всё — middleware
〉 ограничения и аудит
〉 вне контекста приложения
32Как писать для OpenStack
Middleware
33. Позволяют работать с API:
〉 новые вызовы
〉 обработка существующих вызовов после роутинга и до
сериализации
〉 контекст приложения
33Как писать для OpenStack
Расширения
34. Механизм хуков:
〉 наилучший вариант при изменении внутреннего поведения
〉 требует апстрима
34Как писать для OpenStack
Хуки
35. 35
Как писать для OpenStack
Новое
приложение
Драйверы Middleware Расширения Хуки
Возможности Любые
Определены
API Мало Любые Минимальны
Интеграция Сильная Сильная Сильная Сильная Не для
этого
Интерфейс Легкий Сложный Легкий Несложный Легкий
Поддержка
Не
требуется
Как
написание
Легко Легко Сложно
Модификация
апстрима Нет Нет Нет Нет Да
36. 〉 Фреймворк для построения интерфейсов
〉 Переопределение через monkey patch
〉 Подключение новых интерфейсов
36Как писать для OpenStack
Веб-интерфейс Horizon
38. 〉 Расширения Keystone для хранения маппингов и синхронизации
пользователей
〉 Расширения системы авторизации для приема Cookies
〉 Переопределение модуля проверки пароля
〉 Переписанный Horizon для передачи Cookies
〉 Приложения Horizon для управления
38Что мы пишем
Аутентификация и Single Sign-On
39. 〉 Новый backend-драйвер для nsupdate
〉 Новый драйвер обработки событий
〉 Расширения здесь и в Nova для проверки и синхронизации
39Что мы пишем
Designate
40. 〉 Агент для получения LLDP
〉 API extension для заведения сетей
〉 API extension для настройки VLAN
40Что мы пишем
Neutron
41. 〉 Регистрация во всяких системах через обработку событий
〉 Выдача информации внешним системам через API extensions
〉 Свои команды в клиенте через entry points
〉 Визуализации и автоматизации в отдельных приложениях
41Что мы пишем
Интеграция