Malá učebnice OpenFlow (7) – ovládání API z Python

Část 7 z celkových 15 v seriálu Malá učebnice OpenFlow

V dnešním díle začneme využívat REST API kontroleru z jazyka Python a vytvoříme první jednoduchý skript bez jakýchkoli HP specifických knihoven.

Možná se nepovažujete za programátora a jazyky typu Java nebo C++ považujete za nesmírně složité. Přesto jste už spoustu malých aplikací, chcete-li skriptů napsali. Možná to byl jednoduchý BAT ve Windows nebo Shell skript v Linuxu, který porovnal nějaké soubory a pak je zkopíroval. Možná to bylo makro v Excelu. Nebo (a to je u síťařu nejpravděpodobnější) nějaké síťové udělátko – TCL skript (s kouzelným slovíčkem expect), nějaký parser syslogu nebo sofistikovanější operace v PERLu? Pak vám určitě sedne i Python. Jde o dynamický interpretovaný jazyk, s kterým se dají napsat obrovské projekty jako je OpenStack. Současně je ale dostatečně jednoduchý a přívětivý, aby se dal považovat i za skriptovací jazyk – pokud jste zvládli výše uvedené, není Python o mnoho složitější.

Pro naše pokusy budeme používat Python v Ubuntu Linux (ale existuje i verze pro Windows), třeba klidně přímo ve vaší VM s HP VAN SDN kontrolerem. Pro skripty nebudeme využívat žádnou knihovnu, která by byla specifická pro HP kontroler – získané zkušenosti se vám tak budou hodit nejen pro HP SDN kontroler, ale jiné kontrolery i obecně jakékoli jiné REST API (například eAPI v HP iMC apod.). Pro zjednodušení práce s webovými voláními použijeme otevřenou knihovnou Requests. Na VM si nainstalujte pip (sudo apt-get install python-pip) a potom zadejte pip install requests.

První skript – login

RESTful API je webové moderní rozhraní jehož dokumentaci najdete přímo v kontroleru na adrese https://ip:8443/api (případně potom kompletní model na https://ip:8443/sdn/v2.0/models). Přístup k němu využívá to samé, jako grafické webové rozhraní, tedy Keystone (to jsme řešili při instalaci v jednom z dílů tohoto seriálu). Aby se pro každé volání nemuselo znovu a znovu ověřovat jméno a heslo funguje Keystone na principu tokenů. Na základě přihlášení získáte kód, který je aktivní po nějakou dobu (například jedné hodiny), a kterým se naše skripty budou autorizovat. Tím začneme.

Stáhněte si kód skriptu login. Co se tam děje? Nejprve používáme argparse na zpracování argumentů. Tímto způsobem získáme IP adresu kontroleru, jméno a heslo. Můžeme tedy zavolat autentizační API, které čeká na adrese /sdn/v2.0/auth a očekává metodu POST a data obsahující JSON strukturu s jménem a heslem (JSON je lidsky čitelný způsob zápisu strukturovaných dat jako jsou objekty, pole a hodnoty). Do proměnné data si zapíšeme datovou strukturu jako Python dictionary (což je velmi pohodlné) a pak už voláme API (a dictionary jednoduše konvertujeme na JSON).

Jako výsledek dostaneme jinou JSON strukturu, ve které bude i políčko token. Requests knihovna je tak jednoduchá, že se k výslednému JSON dostaneme jednoduše jako r.json(). Tím pádem nám stačí jen označit cestu k názvu parametr, který nás zajímá (a to je objekt „record“ a v něm atribut „token“) a máme hodnotu tokenu. Chceme tento token uchovat, aby jej mohly používat další skripty a další naše pokusy (nechceme pokaždé generovat nový) a tak si je zapíšeme do souboru. Vytvoříme si jednoduchý JSON s informací o IP adrese kontroleru a aktuálním tokenu a máme hotovo:

hp@ubuntu:~$ python login.py --ip=10.10.10.201 --user=hp --password=hp
Token: 5d68da9c4dc7419998ae17e5a476e0a4
hp@ubuntu:~$

Na závěr dnešního dílu si pojďme otestovat, že nám vše funguje. Stáhněte si apps. Je to skript, který nic zvlášť užitečného nedělá – vypíše seznam aplikací nainstalovaných v kontroleru. Jeho hlavní přínos je spíše v otestování RESTful komunikace s kontrolerem. Co v něm děláme? Nejdřív si ze souboru načteme IP kontroleru a token. Pak vytvoříme Python dictionary, která reprezentuje hlavičky, které přidáme do našeho HTTP dotazu. Všimněte si, že jedna z nich obsahuje token – tímto způsobem se ověřujeme. Pošleme GET dotaz na /sdn/v2.0/apps. Výsledkem je jednoduchý JSON s polem objektů, kde každé reprezentuje jednu aplikaci a poskytuje o ní údaje jako je název, verze apod. Nás bude zajímat jen název. Python krásně umí datové struktury procházet – jednoduše řekneme, že v JSON je objektové pole pojmenované „apps“ a my chceme projít všechny jeho záznamy (a v cyklu je dostat jako proměnnou record). Každý takový záznam obsahuje název, verzi apod., ale my jen jednoduše vytiskneme hodnotu klíče „name“. A to je všechno:

hp@ubuntu:~$ python apps.py
Installed apps:
---------------
Path Diagnostics
Link Manager
Node Manager
OpenFlow Link Discovery
OpenFlow Node Discovery
Path Daemon
Topology Manager
Topology Viewer
hp@ubuntu:~$

V dnešním díle jsme si ukázali, jak v Python vytvořit jednoduchý skript na výpis aplikací v kontroleru a authentifikaci. Příště už můžeme dělat něco užitečnějšího, ale o moc složitější to nebude. Co vás čeká? Budeme vyhledávat koncové stanice v síti, blokovat jejich provoz (dávat do karantény), omezovat propustnost (rate limit), zrcadlit provoz či aplikovat limit na přenesená data.

Series Navigation<< Malá učebnice OpenFlow (6) – portyMalá učebnice OpenFlow (8) – topologie a stanice >>
Similar posts
  • L3 a kontejnery bez overlay: Project ... Část 6 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 5 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • HPE Networking na GitHub – skri... Zaměstnanci HPE publikovali zajímavé skripty a celé knihovny jako open source v licenci Apache2, tedy k volnému použití včetně jakýchkoli modifikací. https://github.com/HPENetworking/scriptsonly Obsah se bude jistě dost rozšiřovat… přidejte si záložku [...]
  • L3 a kontejnery bez overlay: Project ... Část 4 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]
  • L3 a kontejnery bez overlay: Project ... Část 3 z celkových 6 v seriálu L3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico praktickyL3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezdL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGPL3 a kontejnery bez [...]

No Comments Yet

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *