This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Мастер-класс по использованию программных интерфейсов для управления инфраструктурой ЦОД Программные интерфейсы управления (API) архитектурой, ориентированной на приложения (ACI)
• Несколько слов об API • Объектная модель ACI • Использование REST API для управления APIC • Cobra SDK • Arya – генератор кода на Python • ACI toolkit
Парсинг результата в виде XML и последующая обработка
Cobra Использование метода “lookupByClass” для поиска всех endpoints (fvCEp) endpoints = md.lookupByClass('fvCEp')print([str(ep.dn) for ep in endpoints])['uni/tn-Cisco/ap-Blog/epg-MySQL/cep-00:50:56:82:D2:FE', 'uni/tn-Cisco/ap-Blog/epg-MySQL/cep-00:50:56:82:C3:D0']
30
Tip: To inspect http requests use debuglevel on httplib: import httplibhttplib.HTTPConnection.debuglevel = 1
Query Filters in Cobra
Built in helpers .lookupByClass and .lookupByDn use .query under the covers For advanced queries, you can use .query directly In this example, we recursively print a full subtree for all endpoints
def printtree(mos, indent=0): for mo in mos: print ' ' * indent, str(mo.meta.className) printtree(mo.children, indent=indent+2)
• Более эффективно, возвращается меньшее число объектов • Фильтрация ответа, по определенным критериям condition(s): § Синтаксис: http://URI?condition[&condition[&...]]
Тип фильтра Синтаксис Cobra Query Property Описание
query-target {self | children | subtree} AbstractQuery.queryTarget Define the scope of query
target-subtree-class <class name> AbstractQuery.classFilter Respond only elements including specified class
query-target-filter <filter expressions> AbstractQuery.propFilter Respond only elements matching conditions
rsp-subtree {no | children | full} AbstractQuery.subtree specifies child object level included in the response
rsp-subtree-class <class name> AbstractQuery.subtreeClassFilter Respond only specified classes
rsp-subtree-filter <filter expressions> AbstractQuery.subtreePropFilter (>1.0.2m) Respond only classes matching conditions
order-by <classname.property>| {asc | desc} NotImplemented Sort the response based on the property values
Подтверждение изменений в конфигурации
REST Создание нового тенанта
POST /api/mo/uni.xml
<fvTenant name="Cisco"/>
Cobra Создать объект и подтвердить внесение изменений
33
Совет: To get the configured XML body for the object you've created/modified, add the rsp-include query parameter: POST /api/mo/uni.xml?rsp-subtree=modified
Еще один совет: Disable the annoying Requests Insecure Warning. Put this at the top of your script: import requests.packages.urllib3requests.packages.urllib3.disable_warnings()
Получение конфигурации, которую нужно превратить в код 1. Right-click –> save XML 2. Использовать API
inspector 3. Запрос конфигурации из
APIC при помощи REST
36
Выберите "only configuration" и "subtree"
Использование arya (2/2)
# arya.py -f accportprof-vm-vpc10.xml
37
#!/usr/bin/env python'''Autogenerated code using arya.pyOriginal Object Document Input: <?xml version="1.0" encoding="UTF-8"?><imdata totalCount="1"><infraAccPortP descr="" dn="uni/infra/accportprof-vm-vpc10" name="vm-vpc10" ownerKey="" ownerTag=""><infraHPortS descr="" name="vm-vpc10" ownerKey="" ownerTag="" type="range"><infraRsAccBaseGrp fexId="101" tDn="uni/infra/funcprof/accbundle-vm-vpc10"/><infraPortBlk descr="" fromCard="1" fromPort="10" name="block1" toCard="1" toPort="10"/></infraHPortS></infraAccPortP></imdata>'''raise RuntimeError('Please review the auto generated code before ' + 'executing the output. Some placeholders will ' + 'need to be changed')
# list of packages that should be imported for this code to workimport cobra.mit.accessimport cobra.mit.requestimport cobra.mit.sessionimport cobra.model.infraimport cobra.model.polfrom cobra.internal.codec.xmlcodec import toXMLStr
# log into an APIC and create a directory objectls = cobra.mit.session.LoginSession('https://1.1.1.1', 'admin', 'password')md = cobra.mit.access.MoDirectory(ls)md.login()
# the top level object on which operations will be madepolUni = cobra.model.pol.Uni('')infraInfra = cobra.model.infra.Infra(polUni)
# commit the generated code to APICprint toXMLStr(infraInfra)c = cobra.mit.request.ConfigRequest()c.addMo(infraInfra)md.commit(c)
Готовый Cobra script для создания профиля vPC
Остается добавить APIC IP и credentials а так же удалить предупреждение о том что код без проверки запускать нельзя
ACI toolkit
Программируемость и ACI
39
ACI предоставляет: REST API Полностью открытая модель объектов Доступ при помощи JSON или XML Python SDK для доступа к объектам Но…. Существенные затраты на обучение
§ 5000+ классов § Новые концепции
Почему появился ACI Toolkit?
41
Снижение входного барьера Адресовать 80% сценариев использования Дать примеры скриптов конечным Заказчикам Ускорить процесс перехода на ACI
• Скрипты, написаны при помощи Toolkit просто создавать и редактировать
• Пока нет полной функциональности, наиболее часто используемые операции
• Фокус в основном на конфигурацию
Tenant
Context / VRF
Subnet
Bridge Domain
Outside EPG
EPG
App. Profile
Taboo
Contract
Filter Entry
L3 Interface
L2 Interface
Interface
Node
Link
POD
1
* * 1 * * 1
1
* *
* * *
*
Provide / Consume
1
* *
*
*
*
1 1
* *
1
*
Provide / Consume
*
*
1
1
* 1
1
1 1
1
1 * 1 *
1
2
1
*
1
*
1
*
Network Physical Policy
Jan/2015
ACI Toolkit Модель политик
Скрипты
Очень просто начать процесс разработки и отладки
Приложение «CLI»
Эмуляция NX-OS CLI полностью написаная на Python Использует возможности toolkit Знакомый интерфейс для сетевого инженера Фокус на задачах поддержки
§ show epg § shutdown / no shutdown на interface
Приложение «Cable Plan»
47
Дает возможность импортировать существующий кабельный план :
§ XML файла § APIC
Выполнить экспорт и сравнение загруженных ранее кабельных планов Advanced use can build cable plan XML file, query, and modify cable plan
Приложение «ACI Endpoint Tracker»
Отслеживает подключение и историю перемещений оконечных Сохраняет данные в open source MySQL Database, давая возможность выполнять собственные запросы Основа для средств визуализации Помогает ответить на следующие вопросв:
§ Какие Endpoint подключены к сети? § Куда подключен определенный
Endpoint? § Кто был подключен в прошлый Четверг между 3:30am и 4:00am?
Удобно переключиться в режим «Unenforced» во время откладки
контрактов между EPG
Создание профиля приложения Bridge Domain логическая конструкция обозначающая границы L2-сегмента
Bridge Domain: 10.0.0.1_255.255.255.0
Tenant: Hello_Connect VRF: VRF_INSIDE
Новая концепция: Bridge Domain
Bridge Domain - логическая конструкция представляющая L2-сегмент передачи данных внутри фабрики Один или несколько EPG могут быть ассоциированы с одним BD Можно «превратить» в аналог VLAN: 1. Влючить flood для L2
unknown unicast 2. Включить ARP Flooding
Название BD удобно сделать «говорящим», например
использовать для этого адрес и маску подсети
Создание профиля приложения Знакомая концепция: подсети – primary/secondary IP адреса на SVI-интерфейсах
Bridge Domain: 10.0.0.1_255.255.255.0
Tenant: Hello_Connect VRF: VRF_INSIDE
Secondary 10.1.1.x/24
Primary 10.0.0.x/24
interface vlan123 ip address 10.0.0.1 255.255.255.0 ip address 10.1.1.1 255.255.255.0 secondary
Новая концепция: профиль приложения § Сетевой профиль приложения представляет собой набор EPG и политик, которые определяют правила взаимоотношений между группами
Inbound/Outbound политики
Сетевой Профиль Приложения
Inbound/Outbound политики
EPG A Service A
Service A
Service A
Service A
Service B
Service B
Service B
Service B
EPG B Service C
Service C
Service C
Service C
Service C Service C
EPG C Service D
Service E
Service D
Service E
Создание профиля приложения Сетевой профиль ANP содержит один или несколько EPG
Bridge Domain: 10.0.0.1_255.255.255.0
Tenant: Hello_Connect VRF: VRF_INSIDE
vPC_to_UCS_a vlan-10
vPC_to_UCS_b vlan-10
EPG: db Security Zone
vPC_to_UCS_a vlan-20
vPC_to_UCS_b vlan-20
EPG: app Security Zone
ANP: Hello_world Нет контрактов = нет передачи данных
Ø Интерфейс, при помощи которого конечное устройство подключается к сети
Ø Имеет адрес (identity), местоположения, атрибуты (version, patch level)
Ø Может быть физическим или виртуальным Примеры:
§ End Point Group (EPG) определяются при помощи: — Физический портов (leaf или FEX) — Логический порт (VM port group) — VLAN ID — VXLAN (VNID) — IP адрес (применимо ко внешним подключениям external/border leaf) — IP Prefix/Subnet (применимо ко внешним подключениям external/border leaf) — Атрибуты виртуальных машин (план)