Adding Routes to Fujitsu K5 Routers and Subnets
2016-12-21
Machine-translated — the English original is authoritative.
Redes K5 – Enrutamiento – “API Quickie”
El siguiente script demuestra cómo agregar y eliminar rutas en ambas Subredes K5 y Routers K5 utilizando las llamadas a la API nativa de OpenStack. Cuando el tiempo lo permita, profundizaré en estas características, pero mientras tanto, ¡es mejor estar mirándolo que esperarlo!
Este archivo contiene texto Unicode oculto o bidireccional que puede ser interpretado o compilado de manera diferente a lo que aparece a continuación. Para revisarlo, abra el archivo en un editor que revele caracteres Unicode ocultos.
Más información sobre caracteres Unicode bidireccionales
| #!/usr/bin/python | |
| """Resumen: Ejemplos de llamadas a la API de Python 2.7X para agregar rutas a subredes y routers | |
| Este es un script de ejemplo muy básico y rudimentario, asegúrese de limpiarlo!! | |
| Requisitos previos: archivo k5contractsettingsV7.py en el mismo directorio con los detalles de inicio de sesión del contrato K5 | |
| adminUser = 'username' | |
| adminPassword = 'password' | |
| contract = 'contract_name' | |
| contractid = 'contract_id' | |
| defaultid = 'default_project_id' | |
| region = 'uk-1' | |
| Autor: Graham Land | |
| Fecha: 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): | |
| """Resumen – Obtener un token de proyecto con ámbito regional utilizando un nombre de usuario y contraseña | |
| Devuelve: | |
| Objeto: Objeto de Token de Proyecto con Ámbito Regional | |
| Args: | |
| adminUser (TYPE): nombre de usuario | |
| adminPassword (TYPE): contraseña | |
| contract (TYPE): nombre del contrato | |
| projectid (TYPE): id del proyecto | |
| region (TYPE): región | |
| """ | |
| 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 'Fallo al establecer el ámbito del Token de Proyecto Regional' | |
| def add_static_route_to_subnet(k5token, subnetid, routes, region): | |
| """Resumen | |
| Args: | |
| adminUser (TYPE): Descripción | |
| adminPassword (TYPE): Descripción | |
| subnet (TYPE): Descripción | |
| routes (TYPE): Descripción | |
| project (TYPE): Descripción | |
| contract (TYPE): Descripción | |
| region (TYPE): Descripción | |
| Devuelve: | |
| TYPE: Descripción | |
| """ | |
| 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 ("\nError inesperado:", sys.exc_info()) | |
| def clear_routes_on_subnet(k5token, subnetid, region): | |
| """Resumen | |
| Args: | |
| adminUser (TYPE): Descripción | |
| adminPassword (TYPE): Descripción | |
| subnet (TYPE): Descripción | |
| project (TYPE): Descripción | |
| contract (TYPE): Descripción | |
| region (TYPE): Descripción | |
| Devuelve: | |
| TYPE: Descripción | |
| """ | |
| 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 ("\nError inesperado:", sys.exc_info()) | |
| def get_subnet_routes(k5token, subnetid, region): | |
| """Resumen | |
| Args: | |
| adminUser (TYPE): Descripción | |
| adminPassword (TYPE): Descripción | |
| subnet (TYPE): Descripción | |
| project (TYPE): Descripción | |
| contract (TYPE): Descripción | |
| region (TYPE): Descripción | |
| Devuelve: | |
| TYPE: Descripción | |
| """ | |
| 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 ("\nError inesperado:", sys.exc_info()) | |
| def get_router_routes(k5token, routerid, region): | |
| """Resumen | |
| Args: | |
| adminUser (TYPE): Descripción | |
| adminPassword (TYPE): Descripción | |
| router (TYPE): Descripción | |
| project (TYPE): Descripción | |
| contract (TYPE): Descripción | |
| region (TYPE): Descripción | |
| Devuelve: | |
| TYPE: Descripción | |
| """ | |
| 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 ("\nError inesperado:", sys.exc_info()) | |
| def add_static_route_to_router(k5token, routerid, routes, region): | |
| """Resumen | |
| Args: | |
| adminUser (TYPE): Descripción | |
| adminPassword (TYPE): Descripción | |
| router (TYPE): Descripción | |
| routes (TYPE): Descripción | |
| project (TYPE): Descripción | |
| contract (TYPE): Descripción | |
| region (TYPE): Descripción | |
| Devuelve: | |
| TYPE: Descripción | |
| """ | |
| 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: | |
| # Asegúrese de establecer todos los valores a continuación para que coincidan con los IDs de las subredes y routers locales | |
| 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"}] | |
| # Obtener un token con ámbito de proyecto | |
| k5token = get_scoped_token(adminUser, adminPassword, contract, demoProjectid, region).headers['X-Subject-Token'] | |
| # Imprimir el token – solo para tranquilidad 🙂 | |
| print k5token | |
| # Listar todas las rutas actualmente asociadas con el router | |
| result = get_subnet_routes(k5token, demoSubnetid, region) | |
| # Imprimir los resultados | |
| print result.json() | |
| # Agregar las nuevas rutas a la subred deseada | |
| result = add_static_route_to_subnet(k5token, demoSubnetid, demoRoutes, region) | |
| # Imprimir los resultados | |
| print result.json() | |
| # Limpiar todas las rutas de la subred – solo envía una ruta vacía [] | |
| result = clear_routes_on_subnet(k5token, demoSubnetid, region) | |
| # Imprimir los resultados | |
| print result.json() | |
| # Obtener las rutas actualmente asociadas con un router | |
| result = get_router_routes(k5token, demoRouterid, region) | |
| # Imprimir los resultados | |
| print result.json() | |
| # Agregar un nuevo conjunto de rutas al router | |
| result = add_static_route_to_router(k5token, demoRouterid, demoRoutes, region) | |
| # Imprimir los resultados | |
| print result.json() | |
| except: | |
| print("\nError inesperado:", sys.exc_info()) | |
| ''' | |
| Salida de ejemplo —————- | |
| 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'}} | |
| [Finalizado en 24.2s] | |
| ''' | |
| if __name__ == "__main__": | |
| main() | |
ver raw
K5_Example_Route_Maintenance_API.py
alojado con ❤ por GitHub
Originally published on allthingscloud.eu (2016-12-21).