Umbenennen von APs (Anwendungsfall)
Lesen Sie dieses Beispiel, um Ihre Access Points (APs) mithilfe eines Python-Skripts und von APIs schnell umzubenennen.
Gelegentlich müssen Sie und andere Wireless-Administratoren Juniper Mist Access Points (APs) an einem bestimmten Standort umbenennen. Eine konsistente Benennung trägt dazu bei, Ordnung und Konsistenz in der Dokumentation des Netzwerkinventars zu gewährleisten. Ein Standort kann z. B. physisch an einen neuen Standort verschoben werden und eine neue Namenskonvention annehmen.
Um diese Umbenennungsaufgabe auszuführen, können Sie im Juniper Mist-Portal eine Massenumbenennungsaktion mithilfe eines regulären Ausdrucks ausführen. Diese Option ist einfach und leicht verfügbar, kann jedoch komplex werden, wenn Sie viele Geräte umbenennen müssen.
Eine weitere Möglichkeit besteht darin, ein Python-Skript zu erstellen, um die APs umzubenennen. Diese Option vereinfacht das Umbenennen vieler Geräte. Das folgende Beispielskript veranschaulicht die Umbenennungssequenz des Python-Skripts. Das Skript benennt bestimmte APs um, die bereits für einen Standort beansprucht wurden. Das Skript verwendet drei Dateien, wie folgt:
-
Die erste Datei (config.json) enthält die Konfigurationsvariablen.
-
Die zweite Datei (ap-names.csv) ist eine CSV-Datei, die die MAC-Adresse des umzubenennenden AP sowie den neuen Namen des APs enthält.
-
Die dritte Datei (main-rename-ap.py) ist das Python-Skript selbst, das Informationen aus den beiden anderen Dateien übernimmt.
Um das Skript zu verwenden, legen Sie alle drei Dateien im selben Arbeitsverzeichnis ab.
Die erste Datei, die die JSON-formatierte Konfiguration (JavaScript Object Notation) enthält, enthält Variablen, die für die Verbindung mit der API erforderlich sind, um die erforderlichen Aufrufe zum Suchen und Umbenennen der angegebenen APs auszuführen.
-
Wenn Sie Konfigurationsänderungen mithilfe der API vornehmen, stellen Sie sicher, dass Sie die Daten verstehen, die Sie ändern. Stellen Sie außerdem sicher, dass Sie eine Validierung durchführen, um sicherzustellen, dass alles noch ordnungsgemäß funktioniert.
-
Ersetzen Sie Platzhalterwerte durch tatsächliche Werte, z. B. Ihre Unternehmens-ID, Standort-ID, AP-Name usw.
{ "api": { "org_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "token": "ApUYc...hsO", "mist_url": "https://{api-endpoint}.mist.com/api/v1/" }, "site": { "id": "{site-id}" } }
Verwenden Sie anstelle von {api-endpoint} den API-Endpunkt für Ihre globale Region. Weitere Informationen finden Sie unter API-Endpunkte und globale Regionen.
Das Python-Skript verwendet den Inhalt der CSV-Datei, um den AP (nach MAC-Adresse) zu identifizieren und ihn dann in den neuen Namen ap-names.csv umzubenennen.
name,mac {ap-name1},aabbcc001122 {ap-name2},aabbcc001123 {ap-name3},aabbcc001124
Wenn Sie einen AP zum ersten Mal beanspruchen, nimmt der AP standardmäßig den Namen seiner eigenen MAC-Adresse an. Das Python-Hauptskript erledigt die eigentliche Arbeit des Findens und Umbenennens des APs, das aus den folgenden Funktionen besteht:
-
(def): Rufen Sie die MAC-Adresse des umzubenennenden AP ab.
-
Den AP finden Sie auf der Website.
-
Benennen Sie den AP um.
Die main-Funktion (def) verwendet die anderen Funktionen, um die Aufgabe zu erledigen und bei Bedarf Schleifen auszuführen.
So sieht das main-rename-ap.py Skript aus:
#!/usr/bin/env python3 """ The format of the MAC address part of this CSV file must be the following: aabbccddeeff """ import argparse import time import json import requests import csv from pprint import pprint def is_ap_in_site(configs: dict, ap_mac: str): """ This function checks for an AP assigned to a site. Parameters: - configs: dictionary containing all configuration information - site_id: ID of the site we will to assign the AP to Returns: - the ID of the AP if the AP is assigned to the site - the current name of the AP """ api_url = f"{configs['api']['mist_url']}sites/{configs['site']['id']}/devices" headers = {'Content-Type': 'application/json', 'Authorization': 'Token {}'.format(configs['api']['token'])} response = requests.get(api_url, headers=headers) if response.status_code == 200: devices = json.loads(response.content.decode('utf-8')) for device in devices: if device['mac'] == ap_mac: return (device['id'], device['name']) else: print('Something went wrong: {}'.format(response.status_code)) return (None, None) def rename_ap(configs: dict, ap_id: str, new_ap_name: str, ap_old_name: str): """ This function renames an AP. Parameters: - configs: dictionary containing all configuration information - ap_id: ID of the AP device object - new_ap_name: name to apply to the AP - ap_old_name: current name of the AP """ api_url = f"{configs['api']['mist_url']}sites/{configs['site']['id']}/devices/{ap_id}" headers = {'Content-Type': 'application/json', 'Authorization': 'Token {}'.format(configs['api']['token'])} body = {} body['name'] = new_ap_name response = requests.put(api_url, headers=headers, data=json.dumps(body)) if response.status_code == 200: device = json.loads(response.content.decode('utf-8')) print(f"{device['mac']} renamed from {ap_old_name} to {device['name']}") else: print(f"AP ID: {ap_id}\tSomething went wrong: {response.status_code}") def retreive_ap_mac_list(csv_filename: str): """ This function converts the content of the CSV file to a Python dictionary. Parameters: - csv_filename: the name of the comma separated value file. Returns: - A dictionary containing the content of the CSV file """ ap_csv = csv.DictReader(csv_filename) ap_list = [] for line in ap_csv: ap_list.append(line) return ap_list def main(): """ This script batch renames the APs listed in a CSV file. """ parser = argparse.ArgumentParser(description='Configures a Mist AP for an APoS site survey') parser.add_argument('config', metavar='config_file', type=argparse.FileType( 'r'), help='file containing all the configuration information') parser.add_argument('ap_list', metavar='aps_names', type=argparse.FileType( 'r'), help='csv file containing new AP names') args = parser.parse_args() configs = json.load(args.config) ap_mac_list = retreive_ap_mac_list(args.ap_list) for ap in ap_mac_list: ap_id, ap_old_name = is_ap_in_site(configs, ap['mac']) if ap_id: rename_ap(configs, ap_id, ap['name'], ap_old_name) else: print(f"AP {ap['name']} is not part of site {configs['site']['id']}") if __name__ == '__main__': start_time = time.time() print('** Start the batch renaming of APs...\n') main() run_time = time.time() - start_time print("\n** Time to run: %s sec" % round(run_time, 2))
Um das Skript auszuführen, rufen Sie das main-rename-ap.py
Skript auf, und geben Sie den config.json-Dateinamen und den ap-names.csv-Dateinamen als Argumente an. Zum Beispiel:
user@linux-host} python main-rename-ap.py config.json ap-names.csv
Nachdem Sie das Skript ausgeführt haben, sollte die Ausgabe in etwa wie folgt aussehen:
** Start the batch renaming of APs... aabbcc001121 renamed from OLD-AP-01 to NEW-AP-01 aabbcc001122 renamed from OLD-AP-02 to NEW-AP-02 aabbcc001122 renamed from OLD-AP-03 to NEW-AP-03 ** Time to run: 3.24 sec
Sie können auch das Juniper Mist-Portal überprüfen und die Änderungen überprüfen, indem Sie das Inventar des Geräts überprüfen. Die Automatisierung ist nicht auf RESTful-APIs und Python beschränkt. Hier finden Sie weitere Automatisierungsoptionen, z. B. die Verwendung von WebSocket- und Webhook-APIs, sowie Tools, die den Entwicklungsprozess unterstützen.