SlideShare a Scribd company logo
1 of 38
Download to read offline
Как написать расширение для Neutron,
если действительно нужно
1
Что такое Neutron?
2
● https://docs.openstack.org
● https://wiki.openstack.org/wiki/Neutron
● https://developer.openstack.org/
Не стоит изобретать велосипед
3
Архитектура
4
Service plugin + agent
5
Service plugin + agent
6
1. три функции для neutron API: get_plugin_type(),
get_plugin_name(), get_plugin_description()
2. список supported_extension_aliases
3. функции оповещения агентов
4. функции для предоставления информации агентам
https://github.com/openstack/neutron-lib/blob/master/neutron_lib/services/base.py#L52
Service plugin + agent
7
Service plugin + agent
8
1. три функции для neutron API: get_state(), after_start(),
after_updated()
2. функции обработки событий от плагина
3. функции для запроса к плагину
Service plugin + agent
9
Service plugin + agent
10
event: PORT, AFTER_UPDATE
Service plugin + agent
11
foobar RPC
Service plugin + agent
# grep "service_plugins" /etc/neutron/neutron.conf
service_plugins = router,metering,qos,foobar
# neutron agent-list --agent_type="Foobar agent" -c agent_type
-c alive -c admin_state_up -c binary
+--------------+-------+----------------+----------------------+
| agent_type | alive | admin_state_up | binary |
+--------------+-------+----------------+----------------------+
| Foobar agent | :-) | True | neutron-foobar-agent |
| Foobar agent | :-) | True | neutron-foobar-agent |
+--------------+-------+----------------+----------------------+
API extension
13
API extension
14
1. регистрирует новый ресурс
2. определяет поля ресурса
3. определяет дополнительные методы API
API extension
15
API extension
16
API extension
17
1. модель для работы с базой
2. миграция (alembic)
3. Mixin с CRUD методами ресурса: get_chatbot(), get_chatbots(),
create_chatbot(), update_chatbot()
4. дополнительные методы: bind_port(), unbind_port()
5. плагин для работы с API extension
get/create/update/delete_chatbot()
get_chatbots()
API extension
18
1. GET, POST -> http://<neutron_url>/chatbots
2. GET, PUT -> http://<neutron_url>/chatbots/<uuid>
3. PUT - > http://<neutron_url>/chatbots/<uuid>/bind_port
4. PUT - > http://<neutron_url>/chatbots/<uuid>/unbind_port
scheduler API extension
19
1. список ботов на агенте: GET -> .../agents/<agent_id>/chatbots
2. добавление бота на агент: POST -> .../agents/<agent_id>/chatbots
3. удаление бота: DELETE -> .../agents/<agent_id>/chatbots/<chatbot_id>
4. список агентов с ботом: GET -> .../chatbots/<chatbot_id>/foobar-agents
scheduler API extension
20
scheduler API extension
21
scheduler API extension
22
1. модель для работы с биндингом agent_id <-> chatbot_id
2. миграция (alembic)
3. Mixin с CRUD методами ресурса: list_chatbot_on_agent(),
add_chatbot_to_agent(), remove_chatbot_from_agent(),
list_agent_hosting_chatbot()
4. плагин для работы с API extension
scheduler API extension
23
1. список ботов на агенте: GET -> .../agents/<agent_id>/chatbots
2. добавление бота на агент: POST -> .../agents/<agent_id>/chatbots
3. удаление бота: DELETE -> .../agents/<agent_id>/chatbots/<chatbot_id>
4. список агентов с ботом: GET -> .../chatbots/<chatbot_id>/foobar-agents
failover / auto scheduling
24
failover / auto scheduling
25
Failover
1. периодические проверки статуса агента
2. если агент стал недоступен -> запуск функции перемещения
3. получает список ресурсов на недоступном агенте
4. загружает scheduler driver
5. выбирает целевой агент(ы) -> вызов filter_agents()
6. запускает функцию переноса для каждой единицы ресурса -> вызов
bind()
Auto scheduling
1. периодические проверки списка ресурсов
2. получает список свободных ресурсов
3. загружает scheduler driver
4. выбирает целевой агент(ы) -> вызов filter_agents()
5. запускает функцию переноса для каждой единицы ресурса -> вызов
bind()
https://github.com/openstack/neutron/blob/master/neutron/scheduler/base_scheduler.py
failover / auto scheduling
26
failover / auto scheduling
27
failover / auto scheduling
28
# grep “foobar” /etc/neutron/neutron.conf
foobar_scheduler_driver =
neutron_foobar.services.foobar.scheduler.foobar_agent_scheduler.ChanceScheduler
automatic_foobar_agent_failover = 1
failover / auto scheduling
29
Что умеет плагин:
1. управлять ресурсом chatbot
2. управлять портами
3. предоставляет API для настройки ресурса
4. предоставляет API для биндинга chatbotа к агентам
5. есть failover / auto scheduling
ML2 plugin extension
30
# neutron port-show f45a6e1a-5cb1-4d6a-bf7c-ec88351c9aa8
+-----------------------+-------------------------------------------------------+
| Field | Value |
+-----------------------+-------------------------------------------------------+
| admin_state_up | True |
| binding:host_id | rvc3-os4 |
| binding:profile | {} |
| binding:vif_details | {"port_filter": false, "ovs_hybrid_plug": false} |
| binding:vif_type | ovs |
| binding:vnic_type | normal |
| chatbot:ip_address | 1.1.1.1 |
| created_at | 2017-04-10T11:43:46Z |
| description | |
| device_id | 41cec597-b8fe-4b32-a240-100d193fb3f1 |
| device_owner | network:router_interface |
| extra_dhcp_opts | |
| id | f45a6e1a-5cb1-4d6a-bf7c-ec88351c9aa8 |
| mac_address | fa:16:3e:be:40:c4 |
| name | |
| network_id | f97a97ac-ea2c-4555-a1ae-ebc0f0f61c02 |
| port_security_enabled | False |
| project_id | 736753fee1c94c0c8e90aad16b392ea1 |
| qos_policy_id | |
| revision_number | 98 |
| status | ACTIVE |
| tenant_id | 736753fee1c94c0c8e90aad16b392ea1 |
| updated_at | 2018-01-15T16:36:00Z |
+-----------------------+-------------------------------------------------------+
# neutron port-create --chatbot:ip_address=1.1.1.1 .....
ML2 plugin extension
31
Процесс получения информации:
1. запрос к Neutron API
2. вызов функции get_port() плагина ML2
3. вызов extend_port_dict() у всех ML2 extension
4. возвращение результата
ML2 plugin extension
32
1. GET -> extend_port/network/subnet_dict()
2. POST -> process_create_port/network/subnet()
3. PUT -> process_update_port/network/subnet()
https://github.com/openstack/neutron-lib/blob/master/neutron_lib/plugins/ml2/api.py#L1008
ML2 plugin extension
33
ML2 plugin extension
34
# grep extension_drivers /etc/neutron/plugins/ml2/ml2_conf.ini
extension_drivers = qos,port_security,foobar
ML2 plugin extension
35
Testing
36
1. Unit тесты <- local
2. Functional <- local
3. Fullstack <- devstack / live
4. Tempest <- devstack / live <- rally
a. Api
b. Scenario
https://docs.openstack.org/neutron/ocata/devref/development.environment.html
project architecture
37
38
KEEP
CALM
and
ASK
QUESTIONS

More Related Content

Similar to How to write an extension for Neutron if you really need to

Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Roman Tsisyk
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...Cisco Russia
 
Автономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдера
Автономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдераАвтономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдера
Автономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдераCisco Russia
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”GlobalLogic Ukraine
 
GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesVictor Login
 
Обзор новых возможностей Contact Center Enterprise версии 10
Обзор новых возможностей Contact Center Enterprise версии 10 Обзор новых возможностей Contact Center Enterprise версии 10
Обзор новых возможностей Contact Center Enterprise версии 10 Cisco Russia
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflowit-people
 
Сетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
Сетевая безопасность в 2014: новые проблемы и их решение на базе CiscoСетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
Сетевая безопасность в 2014: новые проблемы и их решение на базе CiscoSkillFactory
 
#ITsubbotnik Spring 2017: Sergey Mishanin "Report Portal. Руководство для аде...
#ITsubbotnik Spring 2017: Sergey Mishanin "Report Portal. Руководство для аде...#ITsubbotnik Spring 2017: Sergey Mishanin "Report Portal. Руководство для аде...
#ITsubbotnik Spring 2017: Sergey Mishanin "Report Portal. Руководство для аде...epamspb
 
Новые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGНовые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGCisco Russia
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Sergiy Shychynov
 
Использование API Яндекс.Карт
Использование API Яндекс.КартИспользование API Яндекс.Карт
Использование API Яндекс.КартFDConf
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 

Similar to How to write an extension for Neutron if you really need to (20)

Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25Tarantool Modules, Tarantool Meetup 2016-08-25
Tarantool Modules, Tarantool Meetup 2016-08-25
 
Обзор SObjectizer 5.5
Обзор SObjectizer 5.5Обзор SObjectizer 5.5
Обзор SObjectizer 5.5
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
Кулинарный мастер-класс "Готовим безопасный офис нового поколения на основе C...
 
Автономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдера
Автономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдераАвтономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдера
Автономные Сети: упрощение развертывания уровня доступа в сети сервис-провайдера
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
 
GitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с KubernetesGitLab, Prometheus и Grafana с Kubernetes
GitLab, Prometheus и Grafana с Kubernetes
 
Обзор новых возможностей Contact Center Enterprise версии 10
Обзор новых возможностей Contact Center Enterprise версии 10 Обзор новых возможностей Contact Center Enterprise версии 10
Обзор новых возможностей Contact Center Enterprise версии 10
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflow
 
Сетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
Сетевая безопасность в 2014: новые проблемы и их решение на базе CiscoСетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
Сетевая безопасность в 2014: новые проблемы и их решение на базе Cisco
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
#ITsubbotnik Spring 2017: Sergey Mishanin "Report Portal. Руководство для аде...
#ITsubbotnik Spring 2017: Sergey Mishanin "Report Portal. Руководство для аде...#ITsubbotnik Spring 2017: Sergey Mishanin "Report Portal. Руководство для аде...
#ITsubbotnik Spring 2017: Sergey Mishanin "Report Portal. Руководство для аде...
 
Новые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGНовые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNG
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4
 
Использование API Яндекс.Карт
Использование API Яндекс.КартИспользование API Яндекс.Карт
Использование API Яндекс.Карт
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 

How to write an extension for Neutron if you really need to

  • 1. Как написать расширение для Neutron, если действительно нужно 1
  • 2. Что такое Neutron? 2 ● https://docs.openstack.org ● https://wiki.openstack.org/wiki/Neutron ● https://developer.openstack.org/
  • 6. Service plugin + agent 6 1. три функции для neutron API: get_plugin_type(), get_plugin_name(), get_plugin_description() 2. список supported_extension_aliases 3. функции оповещения агентов 4. функции для предоставления информации агентам https://github.com/openstack/neutron-lib/blob/master/neutron_lib/services/base.py#L52
  • 8. Service plugin + agent 8 1. три функции для neutron API: get_state(), after_start(), after_updated() 2. функции обработки событий от плагина 3. функции для запроса к плагину
  • 10. Service plugin + agent 10 event: PORT, AFTER_UPDATE
  • 11. Service plugin + agent 11 foobar RPC
  • 12. Service plugin + agent # grep "service_plugins" /etc/neutron/neutron.conf service_plugins = router,metering,qos,foobar # neutron agent-list --agent_type="Foobar agent" -c agent_type -c alive -c admin_state_up -c binary +--------------+-------+----------------+----------------------+ | agent_type | alive | admin_state_up | binary | +--------------+-------+----------------+----------------------+ | Foobar agent | :-) | True | neutron-foobar-agent | | Foobar agent | :-) | True | neutron-foobar-agent | +--------------+-------+----------------+----------------------+
  • 14. API extension 14 1. регистрирует новый ресурс 2. определяет поля ресурса 3. определяет дополнительные методы API
  • 17. API extension 17 1. модель для работы с базой 2. миграция (alembic) 3. Mixin с CRUD методами ресурса: get_chatbot(), get_chatbots(), create_chatbot(), update_chatbot() 4. дополнительные методы: bind_port(), unbind_port() 5. плагин для работы с API extension get/create/update/delete_chatbot() get_chatbots()
  • 18. API extension 18 1. GET, POST -> http://<neutron_url>/chatbots 2. GET, PUT -> http://<neutron_url>/chatbots/<uuid> 3. PUT - > http://<neutron_url>/chatbots/<uuid>/bind_port 4. PUT - > http://<neutron_url>/chatbots/<uuid>/unbind_port
  • 19. scheduler API extension 19 1. список ботов на агенте: GET -> .../agents/<agent_id>/chatbots 2. добавление бота на агент: POST -> .../agents/<agent_id>/chatbots 3. удаление бота: DELETE -> .../agents/<agent_id>/chatbots/<chatbot_id> 4. список агентов с ботом: GET -> .../chatbots/<chatbot_id>/foobar-agents
  • 22. scheduler API extension 22 1. модель для работы с биндингом agent_id <-> chatbot_id 2. миграция (alembic) 3. Mixin с CRUD методами ресурса: list_chatbot_on_agent(), add_chatbot_to_agent(), remove_chatbot_from_agent(), list_agent_hosting_chatbot() 4. плагин для работы с API extension
  • 23. scheduler API extension 23 1. список ботов на агенте: GET -> .../agents/<agent_id>/chatbots 2. добавление бота на агент: POST -> .../agents/<agent_id>/chatbots 3. удаление бота: DELETE -> .../agents/<agent_id>/chatbots/<chatbot_id> 4. список агентов с ботом: GET -> .../chatbots/<chatbot_id>/foobar-agents
  • 24. failover / auto scheduling 24
  • 25. failover / auto scheduling 25 Failover 1. периодические проверки статуса агента 2. если агент стал недоступен -> запуск функции перемещения 3. получает список ресурсов на недоступном агенте 4. загружает scheduler driver 5. выбирает целевой агент(ы) -> вызов filter_agents() 6. запускает функцию переноса для каждой единицы ресурса -> вызов bind() Auto scheduling 1. периодические проверки списка ресурсов 2. получает список свободных ресурсов 3. загружает scheduler driver 4. выбирает целевой агент(ы) -> вызов filter_agents() 5. запускает функцию переноса для каждой единицы ресурса -> вызов bind() https://github.com/openstack/neutron/blob/master/neutron/scheduler/base_scheduler.py
  • 26. failover / auto scheduling 26
  • 27. failover / auto scheduling 27
  • 28. failover / auto scheduling 28 # grep “foobar” /etc/neutron/neutron.conf foobar_scheduler_driver = neutron_foobar.services.foobar.scheduler.foobar_agent_scheduler.ChanceScheduler automatic_foobar_agent_failover = 1
  • 29. failover / auto scheduling 29 Что умеет плагин: 1. управлять ресурсом chatbot 2. управлять портами 3. предоставляет API для настройки ресурса 4. предоставляет API для биндинга chatbotа к агентам 5. есть failover / auto scheduling
  • 30. ML2 plugin extension 30 # neutron port-show f45a6e1a-5cb1-4d6a-bf7c-ec88351c9aa8 +-----------------------+-------------------------------------------------------+ | Field | Value | +-----------------------+-------------------------------------------------------+ | admin_state_up | True | | binding:host_id | rvc3-os4 | | binding:profile | {} | | binding:vif_details | {"port_filter": false, "ovs_hybrid_plug": false} | | binding:vif_type | ovs | | binding:vnic_type | normal | | chatbot:ip_address | 1.1.1.1 | | created_at | 2017-04-10T11:43:46Z | | description | | | device_id | 41cec597-b8fe-4b32-a240-100d193fb3f1 | | device_owner | network:router_interface | | extra_dhcp_opts | | | id | f45a6e1a-5cb1-4d6a-bf7c-ec88351c9aa8 | | mac_address | fa:16:3e:be:40:c4 | | name | | | network_id | f97a97ac-ea2c-4555-a1ae-ebc0f0f61c02 | | port_security_enabled | False | | project_id | 736753fee1c94c0c8e90aad16b392ea1 | | qos_policy_id | | | revision_number | 98 | | status | ACTIVE | | tenant_id | 736753fee1c94c0c8e90aad16b392ea1 | | updated_at | 2018-01-15T16:36:00Z | +-----------------------+-------------------------------------------------------+ # neutron port-create --chatbot:ip_address=1.1.1.1 .....
  • 31. ML2 plugin extension 31 Процесс получения информации: 1. запрос к Neutron API 2. вызов функции get_port() плагина ML2 3. вызов extend_port_dict() у всех ML2 extension 4. возвращение результата
  • 32. ML2 plugin extension 32 1. GET -> extend_port/network/subnet_dict() 2. POST -> process_create_port/network/subnet() 3. PUT -> process_update_port/network/subnet() https://github.com/openstack/neutron-lib/blob/master/neutron_lib/plugins/ml2/api.py#L1008
  • 34. ML2 plugin extension 34 # grep extension_drivers /etc/neutron/plugins/ml2/ml2_conf.ini extension_drivers = qos,port_security,foobar
  • 36. Testing 36 1. Unit тесты <- local 2. Functional <- local 3. Fullstack <- devstack / live 4. Tempest <- devstack / live <- rally a. Api b. Scenario https://docs.openstack.org/neutron/ocata/devref/development.environment.html