diff --git a/update_vlans_on_switch.py b/update_vlans_on_switch.py new file mode 100755 index 0000000..40290f5 --- /dev/null +++ b/update_vlans_on_switch.py @@ -0,0 +1,911 @@ +#!/usr/bin/python3.8 +import requests +import json +import urllib3 + +urllib3.disable_warnings() +API_TOKEN = 'Token 30498d1f93d710e3d518bc7d3d48a5221b0e48df' +API_HOST = "https://demo.netbox.dev/" +API_APP = "api/dcim/interfaces/" + +headers = { + 'Authorization': API_TOKEN, + 'User-Agent': 'PyScript 0.1', + 'Content-Type': 'application/json', + 'accept': 'application/json' +} + +# device_id = (input('Input id of patchpanel:\n')) +device_id = '4' +vlan_database = { + 1001: 3, + 1008: 4, + 1009: 5, + 1010: 6, + 1011: 7, + 1017: 8, + 1018: 9, + 1019: 10, + 1020: 11, + 1021: 12, + 1022: 13, + 1023: 14, + 1024: 15, + 1026: 16, + 1028: 17, + 1029: 18, + 1032: 1, + 1033: 19, + 1035: 20, + 1036: 21, + 1039: 22, + 1040: 23, + 1043: 24, + 1063: 25, + 1064: 26, + 1065: 27, + 1066: 28, + 1067: 29, + 1068: 30, + 1069: 31, + 1070: 32, + 1071: 33, + 1072: 34, + 1073: 35, + 1074: 36, + 1075: 37, + 1076: 38, + 1077: 39, + 1078: 40, + 1080: 41, + 1081: 42, + 1082: 43, + 1083: 44, + 1084: 45, + 1096: 46, + 1099: 54, + 1100: 55, + 1112: 56, + 1113: 57, + 1128: 58, + 1139: 2, + 1224: 47, + 1225: 48, + 3000: 59, + 3001: 60, + 3002: 61, + 3003: 62, + 3004: 63, + 3005: 64, + 3006: 65, + 3007: 66, + 3008: 67, + 3009: 68, + 3010: 69, + 3011: 70, + 3020: 71, + 1: 82, + 2: 83, + 1102: 78, + 1144: 79, + 1145: 80, + 1226: 81 +} + +vlan_from_switch = [ + { + "id": 1, + "mode": "", + "untagged_vlan": [1035], + "tagged_vlans": [ +1035, + ] +}, +{ + "id": 2, + "mode": "", + "untagged_vlan": [1035], + "tagged_vlans": [ +1035, + ] +}, +{ + "id": 3, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 4, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 5, + "mode": "", + "untagged_vlan": [1], + "tagged_vlans": [ +1, + ] +}, +{ + "id": 6, + "mode": "", + "untagged_vlan": [1], + "tagged_vlans": [ +1, + ] +}, +{ + "id": 7, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 8, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 9, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 10, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 11, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 12, + "mode": "", + "untagged_vlan": [], + "tagged_vlans": [ +1032, +1035, +1096, +1139, +1225, + ] +}, +{ + "id": 13, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 14, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 15, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 16, + "mode": "", + "untagged_vlan": [1075], + "tagged_vlans": [ +1075, + ] +}, +{ + "id": 17, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 18, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 19, + "mode": "", + "untagged_vlan": [1040], + "tagged_vlans": [ +1040, + ] +}, +{ + "id": 20, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 21, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 22, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 23, + "mode": "", + "untagged_vlan": [1040], + "tagged_vlans": [ +1040, + ] +}, +{ + "id": 24, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 25, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1032, +1096, +1099, + ] +}, +{ + "id": 26, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 27, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1032, +1064, +1065, +1096, + ] +}, +{ + "id": 28, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 29, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 30, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1032, +1096, +1099, + ] +}, +{ + "id": 31, + "mode": "", + "untagged_vlan": [], + "tagged_vlans": [ +1099, + ] +}, +{ + "id": 32, + "mode": "", + "untagged_vlan": [], + "tagged_vlans": [ +1099, + ] +}, +{ + "id": 33, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 34, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 35, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 36, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 37, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 38, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 39, + "mode": "", + "untagged_vlan": [1096], + "tagged_vlans": [ +1096, + ] +}, +{ + "id": 40, + "mode": "", + "untagged_vlan": [1064], + "tagged_vlans": [ +1064, + ] +}, +{ + "id": 41, + "mode": "", + "untagged_vlan": [1036], + "tagged_vlans": [ +1036, + ] +}, +{ + "id": 42, + "mode": "", + "untagged_vlan": [1043], + "tagged_vlans": [ +1043, + ] +}, +{ + "id": 43, + "mode": "", + "untagged_vlan": [1064], + "tagged_vlans": [ +1064, + ] +}, +{ + "id": 44, + "mode": "", + "untagged_vlan": [1064], + "tagged_vlans": [ +1064, + ] +}, +{ + "id": 45, + "mode": "", + "untagged_vlan": [1032], + "tagged_vlans": [ +1021, +1032, +1035, +1064, +1075, +1076, +1096, +1099, +1139, +1225, +1226, + ] +}, +{ + "id": 46, + "mode": "", + "untagged_vlan": [], + "tagged_vlans": [ +1021, +1032, +1035, +1036, +1063, +1064, +1065, +1075, +1076, +1077, +1096, +1099, +1139, +1224, +1225, +1226, + ] +}, +{ + "id": 47, + "mode": "", + "untagged_vlan": [1], + "tagged_vlans": [ +1, +1001, +1008, +1009, +1010, +1011, +1017, +1018, +1019, +1020, +1021, +1022, +1023, +1024, +1026, +1028, +1029, +1032, +1033, +1035, +1036, +1039, +1040, +1043, +1063, +1064, +1065, +1066, +1067, +1068, +1069, +1070, +1071, +1072, +1073, +1074, +1075, +1076, +1077, +1078, +1080, +1081, +1096, +1099, +1100, +1112, +1113, +1128, +1139, +1224, +1225, + ] +}, +{ + "id": 48, + "mode": "", + "untagged_vlan": [1], + "tagged_vlans": [ +1, +1001, +1008, +1009, +1010, +1011, +1017, +1018, +1019, +1020, +1021, +1022, +1023, +1024, +1026, +1028, +1029, +1032, +1033, +1035, +1036, +1039, +1040, +1043, +1063, +1064, +1065, +1066, +1067, +1068, +1069, +1070, +1071, +1072, +1073, +1074, +1075, +1076, +1077, +1078, +1080, +1081, +1096, +1099, +1100, +1112, +1113, +1128, +1139, +1224, +1225, +1226, + ] +}, +{ + "id": 49, + "mode": "", + "untagged_vlan": [], + "tagged_vlans": [ +1001, +1008, +1009, +1010, +1011, +1017, +1018, +1019, +1020, +1021, +1022, +1023, +1024, +1026, +1028, +1029, +1032, +1033, +1035, +1036, +1039, +1040, +1043, +1063, +1064, +1065, +1066, +1067, +1068, +1069, +1070, +1071, +1072, +1073, +1074, +1075, +1076, +1077, +1078, +1080, +1081, +1096, +1099, +1100, +1112, +1113, +1128, +1139, +1224, +1225, +1226, + ] +}, +{ + "id": 50, + "mode": "", + "untagged_vlan": [], + "tagged_vlans": [ +1001, +1008, +1009, +1010, +1011, +1017, +1018, +1019, +1020, +1021, +1022, +1023, +1024, +1026, +1028, +1029, +1032, +1033, +1035, +1036, +1039, +1040, +1043, +1063, +1064, +1065, +1066, +1067, +1068, +1069, +1070, +1071, +1072, +1073, +1074, +1075, +1076, +1077, +1078, +1080, +1081, +1096, +1099, +1100, +1112, +1113, +1128, +1139, +1224, +1225, +1226, + ] +}, +{ + "id": 51, + "mode": "", + "untagged_vlan": [1], + "tagged_vlans": [ +1, +1001, +1008, +1009, +1010, +1011, +1017, +1018, +1019, +1020, +1021, +1022, +1023, +1024, +1026, +1028, +1029, +1032, +1033, +1035, +1036, +1039, +1040, +1043, +1063, +1064, +1065, +1066, +1067, +1068, +1069, +1070, +1071, +1072, +1073, +1074, +1075, +1076, +1077, +1078, +1080, +1081, +1096, +1099, +1100, +1112, +1113, +1128, +1139, +1224, +1225, + ] +}, +{ + "id": 52, + "mode": "", + "untagged_vlan": [1], + "tagged_vlans": [ +1, +1001, +1008, +1009, +1010, +1011, +1017, +1018, +1019, +1020, +1021, +1022, +1023, +1024, +1026, +1028, +1029, +1032, +1033, +1035, +1036, +1039, +1040, +1043, +1063, +1064, +1065, +1066, +1067, +1068, +1069, +1070, +1071, +1072, +1073, +1074, +1075, +1076, +1077, +1078, +1080, +1081, +1096, +1099, +1100, +1112, +1113, +1128, +1139, +1224, +1225, + ] +}, +] + +FRONTPORT = requests.get(API_HOST + API_APP + '?device_id=' + device_id + '&limit=60', headers=headers, verify=False) +count_of_ports = (FRONTPORT.json()['count']) + + +# print(FRONTPORT.json()) + + +def vid_to_id(vid): + vid_list = [] + for i in vid: + vlan_id = vlan_database[i] + vid_list.append(vlan_id) + return (vid_list) + + +def untagged_vlans_on_port(portid): + untagged_vlans_on_port_list = (vlan_from_switch[portid]['untagged_vlan']) + return untagged_vlans_on_port_list + + +def tagged_vlans_on_port(portid): + tagged_vlans_on_port_list = (vlan_from_switch[portid]['tagged_vlans']) + return tagged_vlans_on_port_list + + +def interface_id(portid): + interface_id_on_switch = (vlan_from_switch[portid]['id']) + return interface_id_on_switch + + +dicts = [] + +ports_on_switch = len(vlan_from_switch) + +for i in range(len(vlan_from_switch)): + portid = (FRONTPORT.json()['results'][i]['id']) + # portid = interface_id(i) + if untagged_vlans_on_port(i) == tagged_vlans_on_port(i): + port_mode = ('access') + dicts.append({'id': portid, + 'mode': port_mode, + 'untagged_vlan': vid_to_id(untagged_vlans_on_port(i))[0]}) + if untagged_vlans_on_port(i) != tagged_vlans_on_port(i) and len(untagged_vlans_on_port(i)) > 0: + port_mode = ('tagged') + dicts.append({'id': portid, + 'mode': port_mode, + 'untagged_vlan': vid_to_id(untagged_vlans_on_port(i))[0], + 'tagged_vlans': vid_to_id(tagged_vlans_on_port(i))}) + if untagged_vlans_on_port(i) != tagged_vlans_on_port(i) and len(untagged_vlans_on_port(i)) == 0: + port_mode = ('tagged') + dicts.append({'id': portid, + 'mode': port_mode, + 'tagged_vlans': vid_to_id(tagged_vlans_on_port(i))}) + + + +print(json.dumps(dicts, indent=2)) + +r = requests.patch(API_HOST + API_APP, json=dicts, headers=headers, verify=False) +print(r.json) +