Hinzufügen von Routen zu Fujitsu K5 Routern und Subnetzen
2016-12-21
Machine-translated — the English original is authoritative.
K5-Netzwerktechnik – Routing – „API-Schnellstart“
Das folgende Skript demonstriert, wie Routen sowohl auf K5-Subnetzen als auch auf K5-Routern hinzugefügt und entfernt werden, indem die nativen OpenStack-API-Aufrufe verwendet werden. Wenn die Zeit es zulässt, werde ich diese Funktionen ausführlicher erläutern, aber in der Zwischenzeit ist es besser, sich damit zu beschäftigen, als darauf zu warten!
Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden könnten als das, was unten angezeigt wird. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Erfahren Sie mehr über bidirektionale Unicode-Zeichen
| #!/usr/bin/python | |
| """Zusammenfassung: Python 2.7X API-Beispielaufrufe zum Hinzufügen von Routen zu Subnetzen und Routern | |
| Dies ist ein sehr grobes und unvollendetes Beispielskript – bitte aufräumen!! | |
| Voraussetzungen: Datei k5contractsettingsV7.py im selben Verzeichnis mit den K5-Vertragsanmeldeinformationen | |
| adminUser = 'username' | |
| adminPassword = 'password' | |
| contract = 'contract_name' | |
| contractid = 'contract_id' | |
| defaultid = 'default_project_id' | |
| region = 'uk-1' | |
| Autor: Graham Land | |
| Datum: 21/12/16 | |
| Twitter: @allthingsclowd | |
| Github: https://github.com/allthingscloud | |
| Blog: https://allthingscloud.eu | |
| """ | |
| import requests | |
| import getopt | |
| import sys | |
| from k5contractsettingsV7 import * | |
| def get_scoped_token(adminUser, adminPassword, contract, projectid, region): | |
| """Zusammenfassung – Abrufen eines regionalen projektbezogenen Tokens mit Benutzername und Passwort | |
| Gibt zurück: | |
| Objekt: Regionaler projektbezogener Token-Objekt | |
| Argumente: | |
| adminUser (TYPE): Benutzername | |
| adminPassword (TYPE): Passwort | |
| contract (TYPE): Vertragsname | |
| projectid (TYPE): Projekt-ID | |
| region (TYPE): Region | |
| """ | |
| identityURL = 'https://identity.' + region + \ | |
| '.cloud.global.fujitsu.com/v3/auth/tokens' | |
| try: | |
| response = requests.post(identityURL, | |
| headers={'Content-Type': 'application/json', | |
| 'Accept': 'application/json'}, | |
| json={"auth": | |
| {"identity": | |
| {"methods": ["password"], "password": | |
| {"user": | |
| {"domain": | |
| {"name": contract}, | |
| "name": adminUser, | |
| "password": adminPassword | |
| }}}, | |
| "scope": | |
| {"project": | |
| {"id": projectid | |
| }}}}) | |
| return response | |
| except: | |
| return 'Fehler beim Scoping des regionalen Projekt-Tokens' | |
| def add_static_route_to_subnet(k5token, subnetid, routes, region): | |
| """Zusammenfassung | |
| Argumente: | |
| adminUser (TYPE): Beschreibung | |
| adminPassword (TYPE): Beschreibung | |
| subnet (TYPE): Beschreibung | |
| routes (TYPE): Beschreibung | |
| project (TYPE): Beschreibung | |
| contract (TYPE): Beschreibung | |
| region (TYPE): Beschreibung | |
| Gibt zurück: | |
| TYPE: Beschreibung | |
| """ | |
| subnetURL = 'https://networking.' + region + \ | |
| '.cloud.global.fujitsu.com/v2.0/subnets/' + subnetid | |
| try: | |
| response = requests.put(subnetURL, | |
| headers={'X-Auth-Token': k5token, | |
| 'Content-Type': 'application/json'}, | |
| json={"subnet": {"host_routes": routes}}) | |
| return response | |
| except: | |
| return ("\nUnerwarteter Fehler:", sys.exc_info()) | |
| def clear_routes_on_subnet(k5token, subnetid, region): | |
| """Zusammenfassung | |
| Argumente: | |
| adminUser (TYPE): Beschreibung | |
| adminPassword (TYPE): Beschreibung | |
| subnet (TYPE): Beschreibung | |
| project (TYPE): Beschreibung | |
| contract (TYPE): Beschreibung | |
| region (TYPE): Beschreibung | |
| Gibt zurück: | |
| TYPE: Beschreibung | |
| """ | |
| subnetURL = 'https://networking.' + region + \ | |
| '.cloud.global.fujitsu.com/v2.0/subnets/' + subnetid | |
| try: | |
| response = requests.put(subnetURL, | |
| headers={'X-Auth-Token': k5token, | |
| 'Content-Type': 'application/json'}, | |
| json={"subnet": {"host_routes": []}}) | |
| return response | |
| except: | |
| return ("\nUnerwarteter Fehler:", sys.exc_info()) | |
| def get_subnet_routes(k5token, subnetid, region): | |
| """Zusammenfassung | |
| Argumente: | |
| adminUser (TYPE): Beschreibung | |
| adminPassword (TYPE): Beschreibung | |
| subnet (TYPE): Beschreibung | |
| project (TYPE): Beschreibung | |
| contract (TYPE): Beschreibung | |
| region (TYPE): Beschreibung | |
| Gibt zurück: | |
| TYPE: Beschreibung | |
| """ | |
| subnetURL = 'https://networking.' + region + \ | |
| '.cloud.global.fujitsu.com/v2.0/subnets/' + subnetid | |
| try: | |
| response = requests.get(subnetURL, | |
| headers={'X-Auth-Token': k5token, 'Content-Type': 'application/json', 'Accept': 'application/json'}) | |
| return response | |
| except: | |
| return ("\nUnerwarteter Fehler:", sys.exc_info()) | |
| def get_router_routes(k5token, routerid, region): | |
| """Zusammenfassung | |
| Argumente: | |
| adminUser (TYPE): Beschreibung | |
| adminPassword (TYPE): Beschreibung | |
| router (TYPE): Beschreibung | |
| project (TYPE): Beschreibung | |
| contract (TYPE): Beschreibung | |
| region (TYPE): Beschreibung | |
| Gibt zurück: | |
| TYPE: Beschreibung | |
| """ | |
| try: | |
| routerURL = 'https://networking.' + region + \ | |
| '.cloud.global.fujitsu.com/v2.0/routers/' + routerid | |
| response = requests.get(routerURL, | |
| headers={'X-Auth-Token': k5token, 'Content-Type': 'application/json', 'Accept': 'application/json'}) | |
| return response | |
| except: | |
| return ("\nUnerwarteter Fehler:", sys.exc_info()) | |
| def add_static_route_to_router(k5token, routerid, routes, region): | |
| """Zusammenfassung | |
| Argumente: | |
| adminUser (TYPE): Beschreibung | |
| adminPassword (TYPE): Beschreibung | |
| router (TYPE): Beschreibung | |
| routes (TYPE): Beschreibung | |
| project (TYPE): Beschreibung | |
| contract (TYPE): Beschreibung | |
| region (TYPE): Beschreibung | |
| Gibt zurück: | |
| TYPE: Beschreibung | |
| """ | |
| try: | |
| routerURL = 'https://networking-ex.' + region + \ | |
| '.cloud.global.fujitsu.com/v2.0/routers/' + routerid | |
| response = requests.put(routerURL, | |
| headers={'X-Auth-Token': k5token, | |
| 'Content-Type': 'application/json'}, | |
| json={"router": {"routes": routes}}) | |
| return response | |
| except: | |
| # error_sum = unicode(sys.exc_info()[0]) | |
| # print error_sum | |
| # print sys.exc_info().json() | |
| # error_detail = unicode(sys.exc_info()[1]) | |
| # print error_detail | |
| return sys.exc_info() | |
| def main(): | |
| try: | |
| # Bitte stellen Sie sicher, dass alle untenstehenden Werte mit den IDs der lokalen Subnetze und Router übereinstimmen | |
| demoProject = 'Project_A' | |
| demoProjectid = '7015d1478a4c4bd7b970215d7b0260dd' | |
| demoServerid = '8a33075f-0894-4b9b-8b16-047457952f74' | |
| demoNetworkid = 'b514ab88-0a32-4b84-a73f-d5eabfd9de72' | |
| demoSubnetid = '1588ed79-3efe-44a7-be5b-075eb653f3bd' | |
| demoRouterid = 'df7a88eb-a8fd-4169-b292-77f14b6cd286' | |
| demoRoutes = [{"destination":"192.168.50.0/24","nexthop":"192.168.0.43"},{"destination":"10.10.90.0/24","nexthop":"10.10.50.43"}] | |
| # Holen Sie sich ein projektbezogenes Token | |
| k5token = get_scoped_token(adminUser, adminPassword, contract, demoProjectid, region).headers['X-Subject-Token'] | |
| # Token ausgeben – nur zur Beruhigung 🙂 | |
| print k5token | |
| # Alle Routen auflisten, die derzeit mit dem Router verknüpft sind | |
| result = get_subnet_routes(k5token, demoSubnetid, region) | |
| # Ergebnisse ausgeben | |
| print result.json() | |
| # Fügen Sie die neuen Routen zum gewünschten Subnetz hinzu | |
| result = add_static_route_to_subnet(k5token, demoSubnetid, demoRoutes, region) | |
| # Ergebnisse ausgeben | |
| print result.json() | |
| # Löschen Sie alle Routen aus dem Subnetz – sendet nur eine leere Route [] | |
| result = clear_routes_on_subnet(k5token, demoSubnetid, region) | |
| # Ergebnisse ausgeben | |
| print result.json() | |
| # Holen Sie sich die Routen, die derzeit mit einem Router verknüpft sind | |
| result = get_router_routes(k5token, demoRouterid, region) | |
| # Ergebnisse ausgeben | |
| print result.json() | |
| # Fügen Sie dem Router einen neuen Satz von Routen hinzu | |
| result = add_static_route_to_router(k5token, demoRouterid, demoRoutes, region) | |
| # Ergebnisse ausgeben | |
| print result.json() | |
| except: | |
| print("\nUnerwarteter Fehler:", sys.exc_info()) | |
| ''' | |
| Beispielausgabe —————- | |
| 09855d3ce9a54c81847bb210a2225732 | |
| {u'subnet': {u'name': u'SelectaSub', u'enable_dhcp': True, u'availability_zone': u'uk-1b', u'network_id': u'b514ab88-0a32-4b84-a73f-d5eabfd9de72', u'tenant_id': u'7015d1478a4c4bd7b970215d7b0260dd', u'dns_nameservers': [], u'allocation_pools': [{u'start': u'192.168.1.1', u'end': u'192.168.1.253'}], u'host_routes': [], u'ip_version': 4, u'gateway_ip': u'192.168.1.254', u'cidr': u'192.168.1.0/24', u'id': u'1588ed79-3efe-44a7-be5b-075eb653f3bd'}} | |
| {u'subnet': {u'name': u'SelectaSub', u'enable_dhcp': True, u'availability_zone': u'uk-1b', u'network_id': u'b514ab88-0a32-4b84-a73f-d5eabfd9de72', u'tenant_id': u'7015d1478a4c4bd7b970215d7b0260dd', u'dns_nameservers': [], u'allocation_pools': [{u'start': u'192.168.1.1', u'end': u'192.168.1.253'}], u'host_routes': [{u'destination': u'192.168.50.0/24', u'nexthop': u'192.168.0.43'}, {u'destination': u'10.10.90.0/24', u'nexthop': u'10.10.50.43'}], u'ip_version': 4, u'gateway_ip': u'192.168.1.254', u'cidr': u'192.168.1.0/24', u'id': u'1588ed79-3efe-44a7-be5b-075eb653f3bd'}} | |
| {u'subnet': {u'name': u'SelectaSub', u'enable_dhcp': True, u'availability_zone': u'uk-1b', u'network_id': u'b514ab88-0a32-4b84-a73f-d5eabfd9de72', u'tenant_id': u'7015d1478a4c4bd7b970215d7b0260dd', u'dns_nameservers': [], u'allocation_pools': [{u'start': u'192.168.1.1', u'end': u'192.168.1.253'}], u'host_routes': [], u'ip_version': 4, u'gateway_ip': u'192.168.1.254', u'cidr': u'192.168.1.0/24', u'id': u'1588ed79-3efe-44a7-be5b-075eb653f3bd'}} | |
| {u'router': {u'status': u'ACTIVE', u'external_gateway_info': {u'network_id': u'd730db50-0e0c-4790-9972-1f6e2b8c4915', u'enable_snat': True}, u'name': u'SelectaRtr', u'admin_state_up': True, u'tenant_id': u'7015d1478a4c4bd7b970215d7b0260dd', u'availability_zone': u'uk-1b', u'routes': [{u'destination': u'10.10.50.0/24', u'nexthop': u'10.10.50.43'}, {u'destination': u'192.168.0.0/24', u'nexthop': u'192.168.0.43'}], u'id': u'df7a88eb-a8fd-4169-b292-77f14b6cd286'}} | |
| {u'router': {u'status': u'ACTIVE', u'external_gateway_info': {u'network_id': u'd730db50-0e0c-4790-9972-1f6e2b8c4915', u'enable_snat': True}, u'name': u'SelectaRtr', u'admin_state_up': True, u'tenant_id': u'7015d1478a4c4bd7b970215d7b0260dd', u'availability_zone': u'uk-1b', u'routes': [{u'destination': u'10.10.90.0/24', u'nexthop': u'10.10.50.43'}, {u'destination': u'192.168.50.0/24', u'nexthop': u'192.168.0.43'}], u'id': u'df7a88eb-a8fd-4169-b292-77f14b6cd286'}} | |
| [Beendet in 24,2s] | |
| ''' | |
| if __name__ == "__main__": | |
| main() | |
Rohansicht
K5_Example_Route_Maintenance_API.py
gehostet mit ❤ von GitHub
Originally published on allthingscloud.eu (2016-12-21).