#!/usr/bin/python3.8 import requests import json import urllib3 urllib3.disable_warnings() API_TOKEN = 'Token 0ee155b764ce14be8a2c2b44b075fcfed9a0f2ec' 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 = '1' vlan_database = { 100: 1, 300: 27, 200: 2 } vlan_from_switch = [ { "id": 1, "mode": "", "untagged_vlan": [100], "tagged_vlans": [ 200, 300, ] }, { "id": 2, "mode": "", "untagged_vlan": [100], "tagged_vlans": [ 100, ] }, { "id": 3, "mode": "", "untagged_vlan": [1064], "tagged_vlans": [ 100, 200, 300, ] }, ] 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)