Files
wlan-lanforge-scripts/py-json/create_wanlink.py
Jed Reynolds b23e9c8dc0 create_wanlink.py: endpoint names changed to "-A" and "-B" as per API standard.
Alo moves version check ahead of imports.

Signed-off-by: Jed Reynolds <jed@candelatech.com>
2021-09-09 08:49:58 -07:00

241 lines
7.4 KiB
Python
Executable File

#!/usr/bin/python3
# Create and modify WAN Links Using LANforge JSON AP : http://www.candelatech.com/cookbook.php?vol=cli&book=JSON:+Managing+WANlinks+using+JSON+and+Python
# Written by Candela Technologies Inc.
# Updated by: Erin Grimes
import sys
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit(1)
import os
import importlib
import time
from time import sleep
import urllib
from urllib import error
import pprint
if 'lanforge-scripts' not in sys.path:
sys.path.append(os.path.join(os.path.abspath('../..'), 'lanforge-scripts'))
LANforge = importlib.import_module("lanforge-scripts.py-json.LANforge")
LFRequest = importlib.import_module("lanforge-scripts.py-json.LANforge.LFRequest")
LFUtils = importlib.import_module("lanforge-scripts.py-json.LANforge.LFUtils")
j_printer = pprint.PrettyPrinter(indent=2)
# todo: this needs to change
resource_id = 1
def main(base_url, args={}):
print(base_url)
json_post = ""
json_response = ""
num_wanlinks = -1
# see if there are old wanlinks to remove
lf_r = LFRequest.LFRequest(base_url+"/wl/list")
print(lf_r.get_as_json())
# remove old wanlinks
if (num_wanlinks > 0):
lf_r = LFRequest.LFRequest(base_url+"/cli-json/rm_cx")
lf_r.addPostData({
'test_mgr': 'all',
'cx_name': args['name']
})
lf_r.jsonPost()
sleep(0.05)
try:
json_response = lf_r.getAsJson()
LFUtils.debug_printer.pprint(json_response)
for key, value in json_response.items():
if (isinstance(value, dict) and "_links" in value):
num_wanlinks = 1
except urllib.error.HTTPError as error:
print("Error code "+error.code)
lf_r = LFRequest.LFRequest(base_url+"/cli-json/rm_endp")
lf_r.addPostData({
'endp_name': args['name']+"-A"
})
lf_r.jsonPost()
sleep(0.05)
lf_r = LFRequest.LFRequest(base_url+"/cli-json/rm_endp")
lf_r.addPostData({
'endp_name': args['name']+"-B"
})
lf_r.jsonPost()
sleep(0.05)
# create wanlink endpoint A
lf_r = LFRequest.LFRequest(base_url+"/cli-json/add_wl_endp")
lf_r.addPostData({
'alias': args['name']+"-A",
'shelf': 1,
'resource': '1',
'port': args['port_A'],
'latency': args['latency_A'],
'max_rate': args['rate_A'],
})
lf_r.jsonPost()
sleep(0.05)
# create wanlink endpoint B
lf_r = LFRequest.LFRequest(base_url+"/cli-json/add_wl_endp")
lf_r.addPostData({
'alias': args['name']+"-B",
'shelf': 1,
'resource': '1',
'port': args['port_B'],
'latency': args['latency_B'],
'max_rate': args['rate_B'],
})
lf_r.jsonPost()
sleep(0.05)
# create cx
lf_r = LFRequest.LFRequest(base_url+"/cli-json/add_cx")
lf_r.addPostData({
'alias': args['name'],
'test_mgr': 'default_tm',
'tx_endp': args['name']+"-A",
'rx_endp': args['name']+"-B",
})
lf_r.jsonPost()
sleep(0.05)
# modify wanlink endpoint A
lf_r = LFRequest.LFRequest(base_url+"/cli-json/set_wanlink_info")
lf_r.addPostData({
'name': args['name']+"-A",
'max_jitter': args['jitter_A'],
'jitter_freq': args['jitter_freq_A'],
'drop_freq': args['drop_A']
})
lf_r.jsonPost()
sleep(0.05)
# modify wanlink endpoint B
lf_r = LFRequest.LFRequest(base_url+"/cli-json/set_wanlink_info")
lf_r.addPostData({
'name': args['name']+"-B",
'max_jitter': args['jitter_B'],
'jitter_freq': args['jitter_freq_B'],
'drop_freq': args['drop_B']
})
lf_r.jsonPost()
sleep(0.05)
# start wanlink once we see it
seen = 0
while (seen < 1):
sleep(1)
lf_r = LFRequest.LFRequest(base_url+"/wl/"+args['name']+"?fields=name,state,_links")
try:
json_response = lf_r.getAsJson()
if (json_response is None):
continue
LFUtils.debug_printer.pprint(json_response)
for key, value in json_response.items():
if (isinstance(value, dict)):
if ("_links" in value):
if (value["name"] == args['name']):
seen = 1
else:
pass
# else:
# print(" name was not wl_eg1")
# else:
# print("value lacks _links")
# else:
# print("value not a dict")
except urllib.error.HTTPError as error:
print("Error code "+error.code)
continue
print("starting wanlink:")
# print("the latency is {laten}".format(laten=latency))
lf_r = LFRequest.LFRequest(base_url+"/cli-json/set_cx_state")
lf_r.addPostData({
'test_mgr': 'all',
'cx_name': args['name'],
'cx_state': 'RUNNING'
})
lf_r.jsonPost()
running = 0
while (running < 1):
sleep(1)
lf_r = LFRequest.LFRequest(base_url+"/wl/"+args['name']+"?fields=name,state,_links")
try:
json_response = lf_r.getAsJson()
if (json_response is None):
continue
for key, value in json_response.items():
if (isinstance(value, dict)):
if ("_links" in value):
if (value["name"] == args['name']):
if (value["state"].startswith("Run")):
LFUtils.debug_printer.pprint(json_response)
running = 1
except urllib.error.HTTPError as error:
print("Error code "+error.code)
continue
print("Wanlink is running")
# stop wanlink
lf_r = LFRequest.LFRequest(base_url+"/cli-json/set_cx_state")
lf_r.addPostData({
'test_mgr': 'all',
'cx_name': args['name'],
'cx_state': 'STOPPED'
})
lf_r.jsonPost()
running = 1
while (running > 0):
sleep(1)
lf_r = LFRequest.LFRequest(base_url+"/wl/"+args['name']+"?fields=name,eid,state,_links")
LFUtils.debug_printer.pprint(json_response)
try:
json_response = lf_r.getAsJson()
if (json_response is None):
continue
for key, value in json_response.items():
if (isinstance(value, dict)):
if ("_links" in value):
if (value["name"] == args['name']):
if (value["state"].startswith("Stop")):
LFUtils.debug_printer.pprint(json_response)
running = 0
except urllib.error.HTTPError as error:
print("Error code "+error.code)
continue
print("Wanlink is stopped.")
# print("Wanlink info:")
# lf_r = LFRequest.LFRequest(base_url+"/wl/wl_eg1")
# json_response = lf_r.getAsJson()
# LFUtils.debug_printer.pprint(json_response)
# lf_r = LFRequest.LFRequest(base_url+"/wl_ep/wl_eg1-A")
# json_response = lf_r.getAsJson()
# LFUtils.debug_printer.pprint(json_response)
# lf_r = LFRequest.LFRequest(base_url+"/wl_ep/wl_eg1-B")
# json_response = lf_r.getAsJson()
# LFUtils.debug_printer.pprint(json_response)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if __name__ == '__main__':
main()