Автоматизация и программируемость ACI€¦ · • Системы...

Post on 23-May-2020

19 views 0 download

Transcript of Автоматизация и программируемость ACI€¦ · • Системы...

Автоматизация и программируемость 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.