mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +00:00 
			
		
		
		
	LFUtils.py: lots of debug additions, whitespace/formatting
This commit is contained in:
		| @@ -2,22 +2,20 @@ | ||||
| # Define useful common methods                                  - | ||||
| # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||||
| import sys | ||||
| import os | ||||
| if sys.version_info[0] != 3: | ||||
|     print("This script requires Python 3") | ||||
|     exit() | ||||
|  | ||||
| import os | ||||
| import pprint | ||||
| import json | ||||
| import time | ||||
| from time import sleep | ||||
| from random import seed | ||||
| seed( int(round(time.time() * 1000))) | ||||
|  | ||||
| seed(int(round(time.time() * 1000))) | ||||
| from random import randint | ||||
| from LANforge import LFRequest | ||||
|  | ||||
| debug_printer = pprint.PrettyPrinter(indent=2) | ||||
| #global base_url # = "http://localhost:8080" | ||||
|  | ||||
| NA = "NA"  # used to indicate parameter to skip | ||||
| ADD_STA_FLAGS_DOWN_WPA2 = 68719477760 | ||||
| @@ -47,9 +45,12 @@ class PortEID: | ||||
|         resource = json_s['resource'] | ||||
|         port_id = json_s['id'] | ||||
|         port_name = json_s['name'] | ||||
|  | ||||
|  | ||||
| # end class PortEID | ||||
|  | ||||
| def staNewDownStaRequest(sta_name, resource_id=1, radio="wiphy0", flags=ADD_STA_FLAGS_DOWN_WPA2, ssid="", passphrase="", debug_on=False): | ||||
| def staNewDownStaRequest(sta_name, resource_id=1, radio="wiphy0", ssid="", passphrase="", | ||||
|                          debug_on=False): | ||||
|     """ | ||||
|     For use with add_sta. If you don't want to generate mac addresses via patterns (xx:xx:xx:xx:81:*) | ||||
|     you can generate octets using random_hex.pop(0)[2:] and gen_mac(parent_radio_mac, octet) | ||||
| @@ -59,7 +60,7 @@ def staNewDownStaRequest(sta_name, resource_id=1, radio="wiphy0", flags=ADD_STA_ | ||||
|     :type sta_name: str | ||||
|     """ | ||||
|     data = { | ||||
|         "shelf":1, | ||||
|         "shelf": 1, | ||||
|         "resource": resource_id, | ||||
|         "radio": radio, | ||||
|         "sta_name": sta_name, | ||||
| @@ -137,6 +138,7 @@ def portUpRequest(resource_id, port_name, debug_on=False): | ||||
|         debug_printer.pprint(data) | ||||
|     return data | ||||
|  | ||||
|  | ||||
| def portDownRequest(resource_id, port_name, debug_on=False): | ||||
|     """ | ||||
|     Does not change the use_dhcp flag | ||||
| @@ -159,8 +161,9 @@ def portDownRequest(resource_id, port_name, debug_on=False): | ||||
|     return data | ||||
|  | ||||
|  | ||||
| def generateMac(parent_mac, random_octet): | ||||
|     print("************ random_octet: %s **************"%(random_octet)) | ||||
| def generateMac(parent_mac, random_octet, debug=False): | ||||
|     if debug: | ||||
|         print("************ random_octet: %s **************" % (random_octet)) | ||||
|     my_oct = random_octet | ||||
|     if (len(random_octet) == 4): | ||||
|         my_oct = random_octet[2:] | ||||
| @@ -168,13 +171,14 @@ def generateMac(parent_mac, random_octet): | ||||
|     octets[4] = my_oct | ||||
|     return ":".join(octets) | ||||
|  | ||||
|  | ||||
| # this produces a named series similar to "sta000, sta001, sta002...sta0(end_id)" | ||||
| # the padding_number is added to the start and end numbers and the resulting sum | ||||
| # has the first digit trimmed, so f(0, 1, 10000) => {0000, 0001} | ||||
| def portNameSeries(prefix="sta", start_id=0, end_id=1, padding_number=10000): | ||||
|     name_list = [] | ||||
|     for i in range((padding_number+start_id), (padding_number+end_id+1)): | ||||
|         sta_name = prefix+str(i)[1:] | ||||
|     for i in range((padding_number + start_id), (padding_number + end_id + 1)): | ||||
|         sta_name = prefix + str(i)[1:] | ||||
|         name_list.append(sta_name) | ||||
|     return name_list | ||||
|  | ||||
| @@ -188,71 +192,82 @@ def generateRandomHex(): | ||||
|         random_hex.append(hex(random_dec)) | ||||
|     return random_hex | ||||
|  | ||||
|  | ||||
| # return reverse map of aliases to port records | ||||
| def portAliasesInList(json_list): | ||||
|     if len(json_list) < 1: | ||||
|         raise Exception("empty list") | ||||
| # | ||||
| # expect nested records, which is an artifact of some ORM | ||||
| # that other customers expect: | ||||
| # [ | ||||
| #   { | ||||
| #       "1.1.eth0": { | ||||
| #           "alias":"eth0" | ||||
| #       } | ||||
| #   }, | ||||
| #   { ... } | ||||
|  | ||||
| def portListToAliasMap(json_list): | ||||
|     reverse_map = {} | ||||
|     if len(json_list) < 1: | ||||
|         return reverse_map | ||||
|  | ||||
|     json_interfaces = json_list | ||||
|     if 'interfaces' in json_list: | ||||
|         json_interfaces = json_list['interfaces'] | ||||
|  | ||||
|     # expect nested records, which is an artifact of some ORM | ||||
|     # that other customers expect: | ||||
|     # [ | ||||
|     #   { | ||||
|     #       "1.1.eth0": { | ||||
|     #           "alias":"eth0" | ||||
|     #       } | ||||
|     #   }, | ||||
|     #   { ... } | ||||
|  | ||||
|     for record in json_interfaces: | ||||
|         if len(record.keys()) < 1: | ||||
|             continue | ||||
|         record_keys = record.keys() | ||||
|         #debug_printer.pprint(record_keys) | ||||
|         k2 = "" | ||||
|         # we expect one key in record keys, but we can't expect [0] to be populated | ||||
|         json_entry = None | ||||
|         for k in record_keys: | ||||
|             k2 = k | ||||
|         if k2.__contains__("Unknown"): | ||||
|             #debug_printer.pprint("skipping: "+k2) | ||||
|             json_entry = record[k] | ||||
|         # skip uninitialized port records | ||||
|         if k2.find("Unknown") >= 0: | ||||
|             continue | ||||
|         port_json = record[k2] | ||||
|         reverse_map[port_json['alias']] = record | ||||
|     #print("resulting map: ") | ||||
|     #debug_printer.pprint(reverse_map) | ||||
|         reverse_map[k2] = json_entry | ||||
|  | ||||
|     return reverse_map | ||||
|  | ||||
|  | ||||
| def findPortEids(resource_id=1, base_url="http://localhost:8080", port_names=()): | ||||
| def findPortEids(resource_id=1, base_url="http://localhost:8080", port_names=(), debug=False): | ||||
|     port_eids = [] | ||||
|     if len(port_names) < 0: | ||||
|         return [] | ||||
|     port_url = "/port/1" | ||||
|     if base_url.endswith('/'): | ||||
|         port_url = port_url[1:] | ||||
|     for port_name in port_names: | ||||
|         url = "/port/1/%s/%s"%(resource_id,port_name) | ||||
|         url = f"{port_url}/{resource_id}/{port_name}" | ||||
|         lf_r = LFRequest.LFRequest(url) | ||||
|         try: | ||||
|             response = lf_r.getAsJson() | ||||
|             response = lf_r.getAsJson(debug) | ||||
|             if response == None: | ||||
|                 continue | ||||
|             port_eids.append(PortEID(response)) | ||||
|         except: | ||||
|             print("Not found: "+port_name) | ||||
|     return None | ||||
|             print("Not found: " + port_name) | ||||
|     return port_eids | ||||
|  | ||||
|  | ||||
| def waitUntilPortsAdminDown(resource_id=1, base_url="http://localhost:8080", port_list=()): | ||||
|     print("waitUntilPortsAdminDown") | ||||
|     up_stations = port_list.copy() | ||||
|     sleep(1) | ||||
|     port_url = "/port/1" | ||||
|     if base_url.endswith('/'): | ||||
|         port_url = port_url[1:] | ||||
|     while len(up_stations) > 0: | ||||
|         up_stations = [] | ||||
|         for port_name in port_list: | ||||
|             url = base_url+"/port/1/%s/%s?fields=device,down" % (resource_id, port_name) | ||||
|             url = f"{base_url}{port_url}/{resource_id}/{port_name}?fields=device,down" | ||||
|             lf_r = LFRequest.LFRequest(url) | ||||
|             json_response = lf_r.getAsJson(show_error=False) | ||||
|             if json_response == None: | ||||
|                 print("port %s disappeared"%port_name) | ||||
|                 print(f"port {port_name} disappeared") | ||||
|                 continue | ||||
|             if "interface" in json_response: | ||||
|                 json_response = json_response['interface'] | ||||
| @@ -261,18 +276,23 @@ def waitUntilPortsAdminDown(resource_id=1, base_url="http://localhost:8080", por | ||||
|         sleep(1) | ||||
|     return None | ||||
|  | ||||
|  | ||||
| def waitUntilPortsAdminUp(resource_id=1, base_url="http://localhost:8080", port_list=()): | ||||
|     print("waitUntilPortsAdminUp") | ||||
|     down_stations = port_list.copy() | ||||
|     sleep(1) | ||||
|     port_url = "/port/1" | ||||
|     if base_url.endswith('/'): | ||||
|         port_url = port_url[1:] | ||||
|     #url = /%s/%s?fields=device,down" % (resource_id, port_name) | ||||
|     while len(down_stations) > 0: | ||||
|         down_stations = [] | ||||
|         for port_name in port_list: | ||||
|             url = base_url+"/port/1/%s/%s?fields=device,down" % (resource_id, port_name) | ||||
|             url =  f"{base_url}{port_url}/{resource_id}/{port_name}?fields=device,down" | ||||
|             lf_r = LFRequest.LFRequest(url) | ||||
|             json_response = lf_r.getAsJson(show_error=False) | ||||
|             if json_response == None: | ||||
|                 print("port %s disappeared"%port_name) | ||||
|                 print("port %s disappeared" % port_name) | ||||
|                 continue | ||||
|             if "interface" in json_response: | ||||
|                 json_response = json_response['interface'] | ||||
| @@ -282,78 +302,103 @@ def waitUntilPortsAdminUp(resource_id=1, base_url="http://localhost:8080", port_ | ||||
|     return None | ||||
|  | ||||
|  | ||||
| def waitUntilPortsDisappear(resource_id=1, base_url="http://localhost:8080", port_list=()): | ||||
| def waitUntilPortsDisappear(resource_id=1, base_url="http://localhost:8080", port_list=(), debug=False): | ||||
|     if (debug): | ||||
|         print("waitUntilPortsDisappear") | ||||
|     url = "/port/1" | ||||
|     if base_url.endswith('/'): | ||||
|         url = url[1:] | ||||
|     found_stations = port_list.copy() | ||||
|     sleep(1) | ||||
|     while len(found_stations) > 0: | ||||
|         found_stations = [] | ||||
|         for port_name in port_list: | ||||
|         sleep(1) | ||||
|             url = base_url+"/port/1/%s/%s" % (resource_id, port_name) | ||||
|             lf_r = LFRequest.LFRequest(url) | ||||
|             json_response = lf_r.getAsJson(show_error=False) | ||||
|         for port_name in port_list: | ||||
|             check_url = f"{base_url}{url}/{resource_id}/{port_name}" | ||||
|             if debug: | ||||
|                 print("checking:"+check_url) | ||||
|             lf_r = LFRequest.LFRequest(check_url) | ||||
|             json_response = lf_r.getAsJson(show_error=debug) | ||||
|             if (json_response != None): | ||||
|                 found_stations.append(port_name) | ||||
|     return None | ||||
|     return | ||||
|  | ||||
|  | ||||
| def waitUntilPortsAppear(resource_id=1, base_url="http://localhost:8080", port_list=()): | ||||
| def waitUntilPortsAppear(resource_id=1, base_url="http://localhost:8080", port_list=(), debug=False): | ||||
|     if debug: | ||||
|         print("waitUntilPortsAppear") | ||||
|     found_stations = [] | ||||
|     sleep(2) | ||||
|     port_url = "/port/1" | ||||
|     ncshow_url = "/cli-form/nc_show_ports" | ||||
|     if base_url.endswith('/'): | ||||
|         port_url = port_url[1:] | ||||
|         ncshow_url = ncshow_url[1:] | ||||
|  | ||||
|     while len(found_stations) < len(port_list): | ||||
|         found_stations = [] | ||||
|         for port_name in port_list: | ||||
|             sleep(1) | ||||
|             url = base_url+"/port/1/%s/%s" % (resource_id, port_name) | ||||
|             url = f"{base_url}{port_url}/{resource_id}/{port_name}" | ||||
|             lf_r = LFRequest.LFRequest(url) | ||||
|             json_response = lf_r.getAsJson(show_error=False) | ||||
|             if (json_response != None): | ||||
|                 found_stations.append(port_name) | ||||
|             else: | ||||
|                lf_r = LFRequest.LFRequest(base_url+"/cli-form/nc_show_ports") | ||||
|                lf_r.addPostData({"shelf":1, "resource":resource_id, "port":port_name, "flags":1}) | ||||
|                 lf_r = LFRequest.LFRequest(f"{base_url}{ncshow_url}") | ||||
|                 lf_r.addPostData({"shelf": 1, "resource": resource_id, "port": port_name, "flags": 1}) | ||||
|                 lf_r.formPost() | ||||
|     sleep(2) | ||||
|     print("These stations appeared: "+", ".join(found_stations)) | ||||
|     return None | ||||
|     if debug: | ||||
|         print("These stations appeared: " + ", ".join(found_stations)) | ||||
|     return | ||||
|  | ||||
| def removePort(resource, port_name, baseurl="http://localhost:8080/"): | ||||
|     lf_r = LFRequest.LFRequest(baseurl+"cli-json/rm_vlan") | ||||
|  | ||||
| def removePort(resource, port_name, baseurl="http://localhost:8080/", debug=False): | ||||
|     if debug: | ||||
|         print("removePort") | ||||
|     url = "/cli-json/rm_vlan" | ||||
|     if baseurl.endswith('/'): | ||||
|         url = url[1:] | ||||
|     lf_r = LFRequest.LFRequest(baseurl + url) | ||||
|     lf_r.addPostData({ | ||||
|         "shelf": 1, | ||||
|         "resource": resource, | ||||
|         "port": port_name | ||||
|     }) | ||||
|     lf_r.jsonPost(False) | ||||
|     lf_r.jsonPost(debug) | ||||
|  | ||||
| def removeCX(mgrURL, cxNames): | ||||
|  | ||||
| def removeCX(baseurl, cxNames, debug=False): | ||||
|     url = "/cli-json/rm_cx" | ||||
|     if baseurl.endswith('/'): | ||||
|         url = url[1:] | ||||
|     for name in cxNames: | ||||
|       #print(f"Removing CX {name}") | ||||
|         data = { | ||||
|           "test_mgr":"all", | ||||
|           "cx_name":name | ||||
|             "test_mgr": "all", | ||||
|             "cx_name": name | ||||
|         } | ||||
|       lf_r = LFRequest.LFRequest(mgrURL+"cli-json/rm_cx") | ||||
|         lf_r = LFRequest.LFRequest(baseurl + url) | ||||
|         lf_r.addPostData(data) | ||||
|       lf_r.jsonPost() | ||||
|         lf_r.jsonPost(debug) | ||||
|  | ||||
| def removeEndps(mgrURL, endpNames): | ||||
|  | ||||
| def removeEndps(baseurl, endpNames, debug=False): | ||||
|     url = "/cli-json/rm_endp" | ||||
|     if baseurl.endswith('/'): | ||||
|         url = url[1:] | ||||
|     lf_r = LFRequest.LFRequest(baseurl + url) | ||||
|     for name in endpNames: | ||||
|       #print(f"Removing endp {name}") | ||||
|         data = { | ||||
|         "endp_name":name | ||||
|             "endp_name": name | ||||
|         } | ||||
|       lf_r = LFRequest.LFRequest(mgrURL+"cli-json/rm_endp") | ||||
|         lf_r.addPostData(data) | ||||
|       lf_r.jsonPost() | ||||
|         lf_r.jsonPost(debug) | ||||
|  | ||||
|  | ||||
| def execWrap(cmd): | ||||
|     if os.system(cmd) != 0: | ||||
|       print("\nError with " + cmd + ",bye\n") | ||||
|         print("\nError with '" + cmd + "', bye\n") | ||||
|         exit(1) | ||||
|  | ||||
|  | ||||
| ### | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jed Reynolds
					Jed Reynolds