Files
wlan-lanforge-scripts/py-json/wct-example.py

159 lines
5.7 KiB
Python
Executable File

#!/usr/bin/python3
'''
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# -
# Example of how to operate a WCT instance using cli-socket -
# -
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
make sure pexpect is installed:
$ sudo yum install python3-pexpect
$ sudo yum install python3-xlsxwriter
You might need to install pexpect-serial using pip:
$ pip3 install pexpect-serial
$ pip3 install XlsxWriter
'''
import sys
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit()
import argparse
import logging
import time
from time import sleep
import pexpect
import xlsxwriter
import pprint
import LANforge
from LANforge import LFRequest
from LANforge import LFUtils
from LANforge.LFUtils import NA
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def main():
host = "ct524-debbie.jbr.candelatech.com"
base_url = "http://%s:8080"%host
resource_id = 1 # typically you're using resource 1 in stand alone realm
radio = "wiphy0"
start_id = 200
end_id = 202
padding_number = 10000 # the first digit of this will be deleted
ssid = "jedway-wpa2-x64-3-1"
passphrase = "jedway-wpa2-x64-3-1"
clisock = 3990
cliprompt = 'lfgui# '
parser = argparse.ArgumentParser(description="test creating a station")
parser.add_argument("-m", "--host", type=str, help="json host to connect to")
parser.add_argument("-r", "--radio", type=str, help="radio to create a station on")
parser.add_argument("-a", "--start_id", type=int, help="starting station id")
parser.add_argument("-b", "--end_id", type=int, help="ending station id")
parser.add_argument("-s", "--ssid", type=str, help="station ssid")
parser.add_argument("-p", "--passwd", type=str, help="password for ssid")
args = None
try:
args = parser.parse_args()
if (args.host is not None):
host = args.host,
baseurl = base_url = "http://%s:8080"%host
if (args.radio is not None):
radio = args.radio
if (args.start_id is not None):
start_id = args.start_id
if (args.end_id is not None):
end_id = args.end_id
if (args.ssid is not None):
ssid = args.ssid
if (args.passwd is not None):
passphrase = args.passwd
except Exception as e:
logging.exception(e)
usage()
exit(2)
# station numbers are heavily manipulated strings, often using manual padding
# sta200 is not sta0200 nor sta00200, and we can format these numbers by adding
# a 1000 or 10000 to the station id, and trimming the first digit off
j_printer = pprint.PrettyPrinter(indent=2)
json_post = ""
json_response = ""
found_stations = []
lf_r = LFRequest.LFRequest(base_url+"/port/1/1/wiphy2")
wiphy0_json = lf_r.getAsJson()
if (wiphy0_json is None) or (wiphy0_json['interface'] is None):
print("Unable to find radio. Are we connected?")
exit(1)
desired_stations = LFUtils.portNameSeries("sta", start_id, end_id, padding_number)
#LFUtils.debug_printer.pprint(desired_stations)
print("Example 1: will create stations %s"%(",".join(desired_stations)))
for sta_name in desired_stations:
url = base_url+"/port/1/%s/%s" % (resource_id, sta_name)
print("Ex 1: Checking for station : "+url)
lf_r = LFRequest.LFRequest(url)
json_response = lf_r.getAsJson(show_error=False)
if (json_response != None):
found_stations.append(sta_name)
for sta_name in found_stations:
print("Ex 1: Deleting station %s ...."%sta_name)
lf_r = LFRequest.LFRequest(base_url+"/cli-form/rm_vlan")
lf_r.addPostData( {
"shelf":1,
"resource": resource_id,
"port": sta_name
})
json_response = lf_r.formPost()
sleep(0.05) # best to give LANforge a few millis between rm_vlan commands
LFUtils.waitUntilPortsDisappear(resource_id, base_url, found_stations)
print("Ex 1: Next we create stations...")
#68727874560 was previous flags
for sta_name in desired_stations:
print("Ex 1: Next we create station %s"%sta_name)
lf_r = LFRequest.LFRequest(base_url+"/cli-form/add_sta")
lf_r.addPostData( LFUtils.staNewDownStaRequest(sta_name, resource_id=resource_id, radio=radio, ssid=ssid, passphrase=passphrase))
lf_r.formPost()
sleep(0.1)
LFUtils.waitUntilPortsAppear(resource_id, base_url, desired_stations)
for sta_name in desired_stations:
sleep(1)
print("doing portSetDhcpDownRequest on "+sta_name)
lf_r = LFRequest.LFRequest(base_url+"/cli-form/set_port")
data = LFUtils.portDhcpUpRequest(resource_id, sta_name)
lf_r.addPostData(data)
lf_r.jsonPost()
LFUtils.waitUntilPortsAppear(resource_id, base_url, desired_stations)
# Now lets do some cli-socket scripting
gui_telnet = pexpect.spawn('telnet %s %s'%(host, clisock))
if (gui_telnet == None):
print ("Unable to telnet to %s:%s"%(host,clisock));
exit(1)
gui_telnet.expect('lfgui# ')
gui_telnet.sendline("cv create 'WiFi Capacity' 'wct'")
gui_telnet.expect('OK')
gui_telnet.sendline("cv load wct wct-wpa2-x64-two-loops")
gui_telnet.expect('OK')
gui_telnet.sendline("cv click wct 'Auto Save Report'")
gui_telnet.expect('OK')
gui_telnet.sendline("cv click wct Start")
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
if __name__ == '__main__':
main()
####
####
####