Автоматизация и программируемость aci€¦ · • Системы...
Post on 23-May-2020
19 Views
Preview:
TRANSCRIPT
Автоматизация и программируемость ACI - для конфигурирования и диагностики
Александр Скороходов
Технический консультант
Cisco Systems
Cisco ACI:программируемая инфраструктура
App DBWeb
Внешняя сеть
передачи
данных
QoS
ACL
QoS
LB
QoS
МСЭ, LB
App
App/Sec
Ops:cеть, cерверы,...
DevOps
API
API
API
Программирование ACI: объектная модель и REST API
Иерархия объектной модели в ACI
AAA, SecurityTenants –User, Common
Policy Universe
APIC Controllers …
Layer 4-7 Services
Fabric, Access, Inventory …
VM Domains …
Tenant
FilterApplication
ProfileOutside Network
ContractBridge Domain VRF
EPG
Subnet Subject
BRKACI-2770
Документация по MIM – встроена в APIC GUI
REST API
• Единственный интерфейс управления фабрикой
• Используется всеми методами управления и программирования
• GUI
• CLI
• Cobra SDK
• ACI Toolkit
• Orchestrators
• etc
APIC Cluster
REST
Leaves &
Spines
GUI
CLI
Postman
ACI Toolkit
VisoreObject
Browser
CobraSDK
UCSD
CloudCenter
HTTP метод Функция
GET Чтение объекта по его Distinguished Name (DN) или всех экземпляров класса
POST Создание нового объекта или изменение существующего объекта
DELETE Удаление объекта
REST API: доступ к объектной модели
self children subtreeФильтрация результатов запроса:
Инструменты доступа к модели управления ACI
• Штатные интерфейсы администратора
• APIC GUI, NXOS-подобный CLI
• Ручной доступ к модели
• Save/Post - «программирование без программирования»
• Visore object browser
• Доступ из CLI: mocreate/moset/moquery/modelete
• /.aci файловая система (/aci, /mit, /debug)
• Языки программирования/скриптинга
• Python – детальное обсуждение дальше
• Ruby, Java… любые языки, позволяющие обращаться к REST API
• Системы управления конфигурациями / «инфраструктура как код»
• Ansible, Terraform…
• Оркестраторы
• Cisco UCS Director, CloudCenter, VMWare vRealize Automation, MS Azure Pack…
• Разработка приложений для APIC
• Stateless – HTML/JS код, выполняющийся в контексте APIC GUI
• Stateful – полноценные приложения, выполняющиеся на кластере APIC в Docker контейнерах
© 2019 Cisco and/or its affiliates. All rights reserved.
Примеры применения программируемости ACI
• Настройка• Конфигурирование интерфейсов, создание VPC и т.д.
• Создание тенантов, приложений, групп
• Клонирование объектов• Удобно для создания тестовых сред и т.д.
• Диагностика• Обнаружение отказов, несогласованностей и т.д.
• Отказы (faults), адреса, соседства… - в ACI тоже объекты!
• Статистика: • Поиск TopN, ошибок и т.д.
• Мониторинг состояния и изменений• Подписка (subscription) – для немедленного уведомления
• Расширение функций• Пример: Endpoint Tracker сначала вышел как пример для ACI Toolkit
• ACI Apps – штатный механизм встраивания новых функций
Программирование ACI на Python
Варианты работы с ACI из Python
• Использование типовых REST/HTTP клиентов: requests и т.д.• Универсально, но трудоёмко
• Нет проверки структуры и значений
• Cobra SDK• Полная поддержка модели данных ACI
• Генерируется автоматически вместе с очередным релизом ПО
• Поставляется в скомпилированном виде на контроллере APIC
• Документация https://cobra.readthedocs.io
• ACI Toolkit• Проект с открытым кодом
• Объёмная документация, много готовых примеров
• Встроенная поддержка подписки на события в объектной модели
• Поддержка основных классов модели ACI
• Документация https://acitoolkit.readthedocs.io
• . . .
Cobra SDK
• «Привязка» к Python для APIC REST API: поиск, чтение, создание, модификация и удаление объектов
• Объекты в Cobra - 1:1 представление объектов в MIT
• Политику, используемую в GUI, очень просто использовать как шаблон для разработки
• Для всех данных выполняется локальная валидация
• В данный момент требует Python 2.7
• Инсталляционные файлы – на самом APIC: https://<apic_address>/cobra/_downloads/
• Чтобы работать с Cobra SDK из Python на самом APIC (из его CLI), выполните easy_install --user requests
«Перехватите» XML/JSON запрос с использованием API inspector в GUI...
...или сохраните объект в XML/JSON формате через GUI
APIC REST to Python Adapter: arya.py
• Автоматическая генерация кода для быстрой автоматизации задач
• Администратор выполняет действие через GUI
• Обращение к объекту фиксируется через API Inspector
• arya.py создаёт код на Python из объекта
• Находится на http://github.com/datacenter/arya/
• Web-фронтэнд для локального использования: WebAryahttps://github.com/datacenter/webarya
Подготовка к работе с ACI из Python
• Установите Python 2.7
• Установите Cobra SDK (и его зависимости) по инструкциям на https://<apic_address>/cobra/index.html
• Установите webarya (и его зависимости – arya, flask и т.д) по инструкциям на https://github.com/datacenter/webarya
• Запустите webarya с указание порта для web-доступа:
python webarya.py –p 5000
• Подготовьте шаблоны кода (см далее)
• Подготовьте файл credentials.py с настройками доступа (файл в таком формате поддерживает и ACIToolkit):
LOGIN = "admin"
PASSWORD = “Cisco123"
URL = "https://10.0.0.1"
Полезные советы
• Используйте для тестирования скриптов на рабочей системе администратора с ограниченными полномочиями
• Перед тестированием сделайте «снимок» (Snapshot)конфигурации - но отдавайте себе отчёт в последствиях восстановления
• Можно автоматизировать
• Где возможно – делайте снимок на уровне Tenant
• Разделяйте подход к «одноразовым» скриптам и инструментам долговременного использования
• Пользуйтесь примерами (developer.cisco.com, github.com)
© 2019 Cisco and/or its affiliates. All rights reserved.
Шаблон скрипта для настройки через CobraЭто пример, а не «наилучшая практика»!
from cobra.mit.access import MoDirectory
from cobra.mit.session import LoginSession
from cobra.mit.request import ConfigRequest
# Additional modules/classes as needed
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings() # Disable Cert warning
from credentials import * # Login/pass/URL from credentials.py
ls = LoginSession(URL, LOGIN, PASSWORD)
md = MoDirectory(ls)
md.login()
cr = ConfigRequest()
topMo = ... # Create and modify top level object
cr.addMo(topMo)
md.commit(cr)
Шаблон скрипта для диагностики через CobraЭто пример, а не «наилучшая практика»!from cobra.mit.access import MoDirectory
from cobra.mit.session import LoginSession
from cobra.mit.request import ConfigRequest
# Additional modules/classes as needed
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings() # Disable Cert warning
from credentials import * # Login/pass/URL from credentials.py
ls = LoginSession(URL, LOGIN, PASSWORD)
md = MoDirectory(ls)
md.login()
results = md.lookupByClass('className’, propFilter=‘filterString’)
...
Ссылки по теме
• ACI Programmability Learning Labs
• http://cs.co/DevNet_ACI
• Always-On ACI Sandbox
• http://cs.co/ACI_SBX
• ACI on DevNet
• https://developer.cisco.com/aci
• Code Samples
• https://github.com/datacenter/aci
© 2019 Cisco and/or its affiliates. All rights reserved.
• REST API Documentation
• http://cs.co/ACI_API
• ACI Toolkit Documentation
• https://acitoolkit.readthedocs.io
• Cobra SDK Documentation
• https://cobra.readthedocs.io
• ACI Ansible Documentation
• http://cs.co/ansible_net
Спасибо за внимание!
www.facebook.com/CiscoRu
www.instagram.com/ciscoru
www.youtube.com/user/CiscoRussiaMedia
www.vk.com/cisco
Оцените данную сессию в мобильном приложении конференции
Контакты:
Тел.: +7 495 9611410www.cisco.com
© 2019 Cisco and/or its affiliates. All rights reserved.
top related