Hinzufügen von Routen zu Fujitsu K5 Routern und Subnetzen

2016-12-21

Hinzufügen von Routen zu Fujitsu K5 Routern und Subnetzen

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

Versteckte Zeichen anzeigen

#!/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).

← All posts