APIC-EM Software Engineering Insight Programmieren mit APIC-EM Fabian Wirz 8. September 2016
Fabian Wirz Informatikstudent Hochschule Rapperswil Faszination SDN und Cloud Computing Entwickler AnyMulticast Visualizer Network Engineer Software Engineer
Agenda REST inkl. JSON Einführung REST im APIC-EM AnyMulticast-Visualizer-Grundlagen Multicast-Strom in Netzwerk identifizieren Architektur der Applikation
REST inkl. JSON Einführung So einfach und verständlich wie möglich
REST API {"response": ["VLAN300", "VLAN200", "VLAN400, "VLAN1 ], "version": "1.0"}
REST Client Server REpresentational State Transfer Basierend auf HTTP Ressource als URL Alle meine Kontakte phonebook.ch
REST Methoden Methode Get Post Put Delete https://phonebook.ch/contacts https://phonebook.ch/contacts https://phonebook.ch/contact/{id} https://phonebook.ch/contact/{id}
Rückgabeformat Rückgabeformat ist nicht definiert 100 verschiedene Media Types Meistens JSON, HTML oder XML
JSON Beispiel Javascript Object Notation {"contacts":[ {"name":"john", "number":"043 245 12 23"}, {"name":"anna", "number":"055 248 13 84"}, {"name":"peter", "number":"079 456 23 45"} ]}
REST im APIC-EM Wie funktioniert REST im APIC-EM
APIC-EM - Overview REST Application Path Trace Easy QoS Plug & Play IWAN 3 rd Party AnyMulticast Visualizer Northbound Interface (API) REST SDN - Controller Network
AnyMulticast Visualizer Grundlagen Multicast-Ströme im Netzwerk
Welche Informationen kommen von wo? Wenn immer möglich die Informationen vom APIC-EM beziehen AnyMulticast Visualizer REST SSH Topology Informationen (Nodes und Links) Multicast Informationen
APIC-EM REST versus CLI Beispiel: Auslesen der IP-Addresse und Subnetmaske mit Perl IOS: ip address 10.1.2.1 255.255.255.0 NX-OS: 10.1.2.1 /24 if ($device_type =~ "IOS") { if ($orgline =~ /ip address (\d+.\d+.\d+.\d+) (\d+.\d+.\d+.\d+)/) { $IP_addr = $1; $mask = $2; } } elsif ($device_type =~ "Nexus") { if ($orgline =~ /ip address (\d+.\d+.\d+.\d+)\/(.*)/) { $IP_addr = $1; $mask = $2; } }
APIC-EM REST versus CLI Ein Beispiel, wie aus dem APIC-EM die Informationen ausgelesen werden { "ipv4address": "10.23.0.11", "ipv4mask": "255.255.255.0", } ipaddress = interface['ipv4address'] ipmask = interface['ipv4mask'] JSON Antwort Werte auslesen und in Variable speichern Devicetyp unabhängig Kein Regex nötig
Vorteile APIC-EM für Software Entwickler Vorteile Netz verändert sich, aber die Daten bleiben aktuell Standardisierte API Bekannte Paradigmen und Formate (REST, JSON) Single Point of Contact Nachteile Informationen fehlen Einzelne API Abfragemethoden umständlich
Multicast-Strom im Netzwerk identifizieren Multicast-Ströme im Netzwerk
3 Schritte zum Multicast-Strom Topology-Informationen abfragen Multicast-Informationen sammeln Daten miteinander korrelieren
Topology-Informationen abfragen GET /topology/physical-topology "nodes": [{ "label": "BR1-SW111.mc.app", "ip": "10.0.254.111", "softwareversion": "03.03.01SE", "family": "Switches and Hubs", "id": "0e7c1fe7-3083-4752-809f-754c71306566" },
Topology-Informationen abfragen GET /topology/physical-topology "links": [{ "source": "5432db38-76fe-43d5-9a18-3f0a5b1e1981", "startportname": "GigabitEthernet2", "target": "0e7c1fe7-3083-4752-809f-754c71306566", "endportname": "GigabitEthernet1/0/24", "linkstatus": "up", "id": "92134" },
Multicast-Informationen sammeln SSH-Verbindung zu allen Geräten und Multicast-Informationen auslesen SSH-Verbindung Router Switch
Multicast-Informationen sammeln show ip mroute (10.10.213.11, 239.1.1.2), 3d09h/00:02:43, flags: TY Incoming interface: GigabitEthernet3, Forward/Sparse, 5d13h/00:03:05 Outgoing interface list: GigabitEthernet2, Forward/Sparse, 3d09h/00:03:13
Daten miteinander korrelieren GigabitEthernet4 GigabitEthernet3 GigabitEthernet6 GigabitEthernet2 GigabitEthernet1 GigabitEthernet5
Daten miteinander korrelieren SSH-Abfrage (10.10.213.11, 239.1.1.2), 3d09h/00:02:43, flags: TY Incoming interface: GigabitEthernet3, Forward/Sparse, 5d13h/00:03:05 Outgoing interface list: GigabitEthernet2, Forward/Sparse, 3d09h/00:03:13 APIC-EM Abfrage "links": [{ "source": "5432db38-76fe-43d5-9a18-3f0a5b1e1981", "startportname": "GigabitEthernet2", "target": "0e7c1fe7-3083-4752-809f-754c71306566", "endportname": "GigabitEthernet1", "linkstatus": "up", "id": "92134" },
Daten miteinander korrelieren GigabitEthernet4 GigabitEthernet3 GigabitEthernet6 GigabitEthernet2 GigabitEthernet1 GigabitEthernet5
Architektur Wie sieht die Architektur des AnyMulticast Visualizer aus?
Architektur Client Browser Webserver Datenbank Polling Service SSH Network Devices REST APIC-EM