Renommer les points d’accès (cas d’usage)
Lisez et suivez cet exemple pour renommer rapidement vos points d’accès (AP) à l’aide d’un script Python et d’API.
Parfois, vous et d’autres administrateurs sans fil devez renommer les points d’accès réseau (AP) Juniper Mist sur un site spécifique. Des noms cohérents permettent de mettre de l’ordre et de la cohérence dans la documentation de l’inventaire réseau. Par exemple, un site peut être physiquement déplacé vers un nouvel emplacement et adopter une nouvelle convention de nommage.
Pour effectuer cette tâche de changement de nom, vous pouvez effectuer une action de changement de nom en bloc dans le portail Juniper Mist à l’aide d’une expression régulière. Cette option est simple et facilement disponible, mais elle peut devenir complexe si vous avez de nombreux appareils à renommer.
Une autre option consiste à créer un script Python pour renommer les points d’accès. Cette option simplifie la tâche de renommer de nombreux appareils. L’exemple de script ci-dessous illustre la séquence de renommage du script Python. Le script renomme des points d’accès spécifiques qui ont déjà été revendiqués sur un site. Le script utilise trois fichiers, comme suit :
-
Le premier fichier (config.json) contient les variables de configuration.
-
Le deuxième fichier (ap-names.csv) est un fichier CSV qui contient le adresse MAC du AP à renommer ainsi que le nouveau nom du AP.
-
Le troisième fichier (main-rename-ap.py) est le script Python lui-même, qui prend des informations des deux autres fichiers.
Pour utiliser le script, vous placez les trois fichiers dans le même répertoire de travail.
Le premier fichier, qui contient la configuration au format JSON (JavaScript Object Notation), inclut les variables nécessaires pour se connecter à l’API afin d’effectuer les appels nécessaires pour rechercher et renommer les points d’accès spécifiés.
-
Lorsque vous effectuez des modifications de configuration à l’aide de l’API, assurez-vous de bien comprendre les données que vous modifiez. Assurez-vous également d’effectuer la validation pour vous assurer que tout fonctionne toujours correctement.
-
Remplacez les valeurs d’espace réservé par des valeurs réelles, telles que l’ID de votre organisation, l’ID de site, le nom de l’AP, etc.
{
"api": {
"org_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"token": "ApUYc...hsO",
"mist_url": "https://{api-endpoint}.mist.com/api/v1/"
},
"site": {
"id": "{site-id}"
}
}
À la place de {api-endpoint}, utilisez le point de terminaison d’API de votre région globale. Voir Points de terminaison d’API et régions globales.
Le script Python utilise le contenu du fichier CSV pour identifier le AP (par le adresse MAC), puis le renommer avec le nouveau nom ap-names.csv.
name,mac
{ap-name1},aabbcc001122
{ap-name2},aabbcc001123
{ap-name3},aabbcc001124
Par défaut, lorsque vous revendiquez un AP, l’AP prend le nom de sa propre adresse MAC. Le script Python principal effectue le travail réel de recherche et de renommage de l’AP, qui se compose des fonctions suivantes :
-
(def) : obtenez l’adresse MAC de l’AP à renommer.
-
Trouvez l’AP sur le site.
-
Renommez l’AP.
La fonction principale (def) utilise les autres fonctions pour terminer la tâche et boucle, si nécessaire.
Voici à quoi ressemble le main-rename-ap.py scénario :
#!/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))
Pour exécuter le script, appelez-le main-rename-ap.py et fournissez le nom de fichier config.json et le nom de fichier ap-names.csv comme arguments. Par exemple :
user@linux-host} python main-rename-ap.py config.json ap-names.csv
Après avoir exécuté le script, la sortie devrait ressembler à ceci :
** 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
Vous pouvez également consulter le portail Juniper Mist et vérifier les modifications en consultant l’inventaire de l’appareil. L’automatisation ne se limite pas aux API RESTful et à Python. Vous pouvez trouver d’autres options d’automatisation telles que l’utilisation de l’API WebSocket et webhook et des outils pour vous aider dans le processus de développement.