ArubaOS-Switch API (1) – první kroky s cURL

Část 1 z celkových 2 v seriálu ArubaOS-Switch API

ArubaOS-Switch API (1) – první kroky s cURL

Nový kód pro prvky jako jsou 2530, 2920, 5400R, 3800 nebo 3810 přichází s novou funkcí – RESTful API. Jde o programovatelný přístup, který umožní moderně a pohodlně automatizovat konfiguraci zařízení. Podobné API najdete třeba i v projektu OpenSwitch, připravuje se v budoucnu i pro Comware 7, je k dispozici u řešení jako jsou ClearPass, iMC nebo SDN kontroler.

Jak to funguje a co se s tím dá dělat? Dnes si představíme jednoduché ovládání. Použijeme cURL, tedy jednoduchý „prohlížeč“. Existuje i Windows verze, já jsem pro komunikaci s prvkem použil Ubuntu.

Základní práce

Nejprve se přihlašme, abychom získali token ve formě cookie.

$ curl --insecure -X POST https://16.21.188.197/rest/v1/login-sessions -H "Content-Type: application/json" -H "Accept: application/json" -d '{"userName":"manager", "password":"hpe"}'
{"uri":"/rest/v1/login-sessions","cookie":"sessionId=kC9GF2IkJjez9WixspEcPyoucwQDamodCI4TkVkAOPzkcmUeXEECQCO0dQaTUcH"}

Co jsme dostali zpět? Jde o datový výstup ve formátu JSON. Takto formátovaný se ale nečte nejlépe, nainstalujme si zkrášlovač JSON výstupu.

$ sudo apt-get install yajl-tools

Do příkazu curl přidejme přepínač -s (abychom nebyli obtěžování ve výstupu progres řádkou) a přes pipu to pošleme do zkrášlovače.

$ curl -s --insecure -X POST https://16.21.188.197/rest/v1/login-sessions -H "Content-Type: application/json" -H "Accept: application/json" -d '{"userName":"manager", "password":"hpe"}' | json_reformat
{
    "uri": "/rest/v1/login-sessions",
    "cookie": "sessionId=WSWAiijQtlbXBBAakCSBAiBZR4v9rFkb2pqEr2PI9SiiUakVNAT7aLpSg1jP7y8"
}

V tuto chvíli nás zajímá řetězec cookie, v kterém je uložen náš token. Ten budeme po nějaký čas používat místo přihlášení (prvek by se jinak musel například pokaždé ptát RADIUS serveru, což u API, které může ovládat robot v docela velkém tempu nemusí být dobrý nápad).

Uložme si ten řetězec do proměnné prostředí, ať to nemusíme stále opisovat.

$ export cookie=sessionId=WSWAiijQtlbXBBAakCSBAiBZR4v9rFkb2pqEr2PI9SiiUakVNAT7aLpSg1jP7y8

Teď už můžeme zavolat nějakou funkci, třeba získat systémové informace.

$ curl -s --insecure --cookie $cookie -X GET https://16.21.188.197/rest/v1/system | json_reformat
{
    "uri": "/system",
    "name": "HP-2920-24G-PoEP",
    "location": "",
    "contact": ""
}

Použití

Zkusme si teď třeba elegantně vytáhnout informace o VLAN.

$ curl -s --insecure --cookie $cookie -X GET https://16.21.188.197/rest/v1/vlans | json_reformat
{
    "collection_result": {
        "total_elements_count": 1,
        "filtered_elements_count": 1
    },
    "vlan_element": [
        {
            "uri": "/rest/v1/vlans/1",
            "vlan_id": 1,
            "name": "DEFAULT_VLAN",
            "status": "VS_PORT_BASED",
            "type": "VT_STATIC",
            "is_voice_enabled": false,
            "is_jumbo_enabled": false,
            "is_dsnoop_enabled": false
        }
    ]
}

Nebo údaje o portech.

$ curl -s --insecure --cookie $cookie -X GET https://16.21.188.197/rest/v1/ports | json_reformat
{
    "collection_result": {
        "total_elements_count": 24,
        "filtered_elements_count": 24
    },
    "port_element": [
        {
            "uri": "/rest/v1/ports/1",
            "id": "1",
            "name": "",
            "is_port_enabled": true,
            "config_mode": "PCM_AUTO",
            "trunk_mode": "PTT_NONE",
            "lacp_status": "LAS_DISABLED",
            "trunk_group": "",
            "is_flow_control_enabled": false,
            "is_dsnoop_port_trusted": false,
            "internal_mode": null
        },
        {
            "uri": "/rest/v1/ports/2",
            "id": "2",
            "name": "",
            "is_port_enabled": true,
            "config_mode": "PCM_AUTO",
            "trunk_mode": "PTT_NONE",
            "lacp_status": "LAS_DISABLED",
            "trunk_group": "",
            "is_flow_control_enabled": false,
            "is_dsnoop_port_trusted": false,
            "internal_mode": null
        },
        ...
        {
            "uri": "/rest/v1/ports/23",
            "id": "23",
            "name": "",
            "is_port_enabled": true,
            "config_mode": "PCM_AUTO",
            "trunk_mode": "PTT_NONE",
            "lacp_status": "LAS_DISABLED",
            "trunk_group": "",
            "is_flow_control_enabled": false,
            "is_dsnoop_port_trusted": false,
            "internal_mode": null
        },
        {
            "uri": "/rest/v1/ports/24",
            "id": "24",
            "name": "",
            "is_port_enabled": true,
            "config_mode": "PCM_AUTO",
            "trunk_mode": "PTT_NONE",
            "lacp_status": "LAS_DISABLED",
            "trunk_group": "",
            "is_flow_control_enabled": false,
            "is_dsnoop_port_trusted": false,
            "internal_mode": null
        }
    ]
}

V předchozím výstupu máme u portu napsánu i URI, tedy cestu v API ke konkrétnímu portu (této navigaci v rámci API se obvykle říká HATEOAS a je velmi příjemná). Vypišme si tedy jen jeden konkrétní port.

$ curl -s --insecure --cookie $cookie -X GET https://16.21.188.197/rest/v1/ports/1 | json_reformat
{
    "uri": "/rest/v1/ports/1",
    "id": "1",
    "name": "",
    "is_port_enabled": true,
    "config_mode": "PCM_AUTO",
    "trunk_mode": "PTT_NONE",
    "lacp_status": "LAS_DISABLED",
    "trunk_group": "",
    "is_flow_control_enabled": false,
    "internal_mode": null,
    "is_dsnoop_port_trusted": false
}

Chcete něco změnit? Nic složitého – místo HTTP metody GET použijeme PUT (příklaz pro modifikaci) a jako data pošleme JSON strukturu. V ní vyplníme to, co chceme změnit. Co třeba jméno?

$ curl -s --insecure --cookie $cookie -X PUT https://16.21.188.197/rest/v1/ports/1 -d '{"name":"myTest"}' | json_reformat
{
    "uri": "/rest/v1/ports/1",
    "id": "1",
    "name": "myTest",
    "is_port_enabled": true,
    "config_mode": "PCM_AUTO",
    "trunk_mode": "PTT_NONE",
    "lacp_status": "LAS_DISABLED",
    "trunk_group": "",
    "is_flow_control_enabled": false,
    "internal_mode": null,
    "is_dsnoop_port_trusted": false
}

Chcete důkazy? Podívejte se do klasického CLI.

HP-2920-24G-PoEP# show interfaces 1

 Status and Counters - Port Counters for port 1

  Name  : myTest
  MAC Address      : 308d99-a23e3f
  Link Status      : Down
  Totals (Since boot or last clear) :

A je to – RESTful interface, nic záhadného, všechny fungují podobně a pro psaní skriptů či aplikací je to velmi snadné a pohodlné. Příště si vyzkoušíme jak se do využít z Python a napíšeme skriptík, který přiřadí vašim portům automaticky hezké náhodné názvy. Ne že by to bylo tak užitečné, ale krásně si ukážeme sílu API a skriptování (ručně proti robotovi nemáte šanci).

Series NavigationArubaOS-Switch API (2) – skript v Python >>
Similar posts
  • ArubaOS-Switch 16.02: IP SLA i pro Ar... IP SLA Ve světě směrovačů už poměrně dlouho existuje možnost monitorovat dostupnost a kvalitu spojení s využitím L3 protokolů. Můžete například z pobočky v pravidelných intervalech testovat dostupnost brány datového centra nebo klíčového serveru včetně měření doby jeho reakce (round-trip-time). Dá se také namířit dva routery proti sobě tak, že jeden se ptá a druhý [...]
  • OpenSwitch a Ansible automatizace pra... Minule jsme napojili naši virtuální topologii na Ansible a spustili náš první testovací Playbook. Dnes provodeme automatizovanou konfiguraci L3 fabric a otestujeme síť. Příprava konfiguračních podkladů Pro zprovoznění L3 fabric potřebujeme Loopback adresu, IP adresy na jednotlivých spojeních mezi prvky a nastavení BGP (autonomní systémy, peering). V našem Ansible prostředí si vytvoříme jeden YAML soubor, [...]
  • OpenSwitch a Ansible automatizace pra... V minulém díle jsme si rozjeli Lead-Spine OpenSwitch topologii s využitím Dockeru a skript nám vygeneroval také hosts file pro Ansible. Dnes se vyzkoušíme napojení na Ansible 2.1. Příprava Ansible a vašeho VM První co potřebujeme udělat je nainstalovat Ansible minimálně ve verzi 2.1. Postup najdete zde: http://docs.ansible.com/ansible/intro_installation.html Dále vyřešíme nastavení SSH klienta v naší [...]
  • OpenSwitch a Ansible automatizace pra... Na stránkách netsvet.cz i cloudsvet.cz často píšeme o desired state konceptech v ovládání infrastruktury a o automatizaci. V tomto seriálu si ukážeme jak může vypadat moderní práce se sítí postavenou na OpenSwitch projektu, L3 BGP fabricu a Ansible automatizaci. Dnes začneme tím, že si sestavíme virtuální infrastrukturu. Jak získat Leaf-spine topologii několika OpenSwitchů? Pro testování [...]
  • 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 [...]

Napsat komentář

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