Depuis un certain nombre d’année, de multiples équipements réseaux sont pilotables avec les API REST Full. La plupart du temps, des exemples d’utilisation de ces API sont disponibles en python. Mais dans le monde de l’admin system, on retrouve régulièrement des implémentations utilisant PowerShell (PowerCLI pour VMware, Unity-powershell pour les baies EMC Unity …) qui ont l’avantage d’être plus accessible, pour les novices en développement. J’ai voulu combler ce manque, en mettant à votre disposition le module PowerShell PowerArubaSW. Nous allons voir, dans cet article comment utiliser celui-ci, pour administrer des équipements (Switch) HP / Aruba.
C’est quoi PowerArubaSW ?
C’est un module PowerShell, qui permet d’interagir directement avec les commutateurs Aruba (ex-Procuvre/Provision) via l’API RESTfull. Celui-ci permet de dialoguer directement en langage: Machine à Machine (via des objets JSON) sans avoir besoin, par exemple de parser des sorties SSH…
Actuellement, via ce module, il est possible de piloter les fonctionnalités suivantes :
- System (Name, Location, Contact) & Switch Status (Product and Hardware info),
- Vlans (Add/Configure/Remove),
- Vlans Ports (Add/Configure/Remove a vlan (tagged/untagged/forbidden) to an interface),
- REST (Get API Version / Get|Set Rest Timeout),
- LLDP (Get|Set GlobalStatus, Get ports/neighbor stats, Get Remote),
- LACP (Add/Configure/Remove),
- Led Locator (Get|Set Led indicator),
- Ports (Information (name, status, config_mode…) and Statistics).
Le module est actuellement compatible sur du 2530/2930F/2930M/3810/5406, avec un firmware 16.05 minimum (enfin, j’ai testé à partir de firmware 16.05…).
Les API sont disponible depuis la version 16.00 (en v1) mais j’utilise actuellement la version 4 des API (disponible depuis la 16.05…).
Ça s’installe comment ?
Le module est disponible via le gestionnaire de module PSGallery. Depuis un Shell PowerShell, il suffit d’utiliser la commande Install-Module PowerArubaSW pour télécharger et installer automatiquement tous les fichiers nécessaires :
PS C:\Users\alagoutte> install-Module PowerArubaSW -Scope CurrentUser Untrusted repository You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): Y PS C:\Users\alagoutte>
- Puis on importe le module dans la session avec la commande Import-module PowerArubaSW:
PS C:\Users\alagoutte> import-module PowerArubaSW PS C:\Users\alagoutte> get-module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 6.1.0.0 Microsoft.PowerShell.Management {Add-Content, Clear-Content, Clear-Item, Clear-ItemPropert... Manifest 6.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object...} Script 1.1.7.2 PackageManagement {Find-Package, Find-PackageProvider, Get-Package, Get-Pack... Script 0.6 PowerArubaSW {Add-ArubaSWLACP, Add-ArubaSWVlans, Add-ArubaSWVlansPorts,... Script 1.6.7 PowerShellGet {Find-Command, Find-DscResource, Find-Module, Find-RoleCap... Script 2.0.0 PSReadLine {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PS...
Ça s’utilise comment ?
- Première chose à faire, se connecter sur le Switch via la cmdlet Connect-ArubaSW et en fournissant l’adresse IP ou le FQDN du switch:
PS C:\Users\alagoutte> Connect-ArubaSW 10.76.136.131 -httpOnly PowerShell credential request Please enter administrative credentials for your ArubaOS Switch User: admin Password for user admin: ****** Welcome on ALG-WK2930M - Aruba2930M-24G-PoE+ Switch(JL320A)
- Une fois connecté, on peut par exemple récupérer la liste des Vlans avec la commande Get-ArubaSWVlans:
PS C:\Users\alagoutte> Get-ArubaSWVlans uri : /vlans/1 vlan_id : 1 name : DEFAULT_VLAN status : VS_PORT_BASED type : VT_STATIC is_voice_enabled : False is_jumbo_enabled : False is_dsnoop_enabled : False is_dhcp_server_enabled : False is_management_vlan : False uri : /vlans/23 vlan_id : 23 name : MGMT status : VS_PORT_BASED type : VT_STATIC is_voice_enabled : False is_jumbo_enabled : False is_dsnoop_enabled : False is_dhcp_server_enabled : False is_management_vlan : False uri : /vlans/44 vlan_id : 44 name : DATA status : VS_PORT_BASED type : VT_STATIC is_voice_enabled : False is_jumbo_enabled : False is_dsnoop_enabled : False is_dhcp_server_enabled : False is_management_vlan : False
- Il est possible de filtrer sur un nom ou un id en spécifiant en paramètre:
PS C:\Users\alagoutte> Get-ArubaSWVlans -id 23 uri : /vlans/23 vlan_id : 23 name : MGMT status : VS_PORT_BASED type : VT_STATIC is_voice_enabled : False is_jumbo_enabled : False is_dsnoop_enabled : False is_dhcp_server_enabled : False is_management_vlan : False
- Testons maintenant la création d’un VLAN. Il suffit d’utiliser la commande Add-ArubaSWVlans et de préciser les paramètres obligatoires ID et Name:
PS C:\Users\alagoutte> Add-ArubaSWVlans -id 85 -name PowerArubaSW-Vlans uri : /vlans/85 vlan_id : 85 name : PowerArubaSW-Vlans status : VS_PORT_BASED type : VT_STATIC is_voice_enabled : False is_jumbo_enabled : False is_dsnoop_enabled : False is_dhcp_server_enabled : False is_management_vlan : False
- Maintenant que le VLAN est créé, on peut l’affecter en untagged (85) sur un port (8) avec la commande Add-ArubaSWVlansPorts -vlan_id 85 -port_id 8 -port_mode untagged:
PS C:\Users\alagoutte> Add-ArubaSWVlansPorts -vlan_id 85 -port_id 8 -port_mode untagged uri vlan_id port_id port_mode --- ------- ------- --------- /vlans-ports/85-8 85 8 POM_UNTAGGED
Comment obtenir des infos sur les commandes disponibles ?
- Pour obtenir de l’aide sur une commande, il suffit d’utiliser la commande Get-Help et de préciser le nom de la commande du module qui nous intéresse:
PS C:\Users\alagoutte> Get-Help Add-ArubaSWVlans NAME Add-ArubaSWVlans SYNOPSIS Add a Vlan info on ArubaOS Switch (Provision) SYNTAX Add-ArubaSWVlans [-id] <Int32> [[-name] <String>] [-is_voice_enabled] [-is_jumbo_enabled] [-is_dsnoop_enabled] [<CommonParameters>] DESCRIPTION Add vlan info (Id, Name, Voice, Snooping...)
- et pour les exemples : Get-help Add-ArubaSWVlans -example
PS C:\Users\alagoutte> Get-help Add-ArubaSWVlans -example NAME Add-ArubaSWVlans SYNOPSIS Add a Vlan info on ArubaOS Switch (Provision) -------------------------- EXAMPLE 1 -------------------------- PS > Add-ArubaSWVlans -id 85 -Name PowerArubaSW -is_voice_enabled -is_jumbo_enabled:$false Add vlan id 85 with name PowerArubaSW and enable voice vlan and disable jumbo
- Il y a encore tout plein de commandes possible, pour avoir la liste des commandes disponible via Get-Command -Module PowerArubaSW
Quelques cas d’usage
Un besoin fréquent est de disposer un « extract » excel de l’ensemble des ports, avec leur configuration (nom, vlan, LLDP neighbor..), nous avons donc réaliser un script, qui nous génère ce rapport en quelques secondes ! Le script est disponible ici , et voilà un exemple de rendu :
Un autre cas qui m’a été retourné par un utilisateur. Il utilise du monitoring via PRTG et avait besoin de vérifier l’état des alimentations. Ils ont pour cela réalisé un script avec notre module pour récupérer l’état sur le commutateur !
Quoi de neuf dans la version 0.6 ?
Pas de gros changement ! Mais surtout une version stable, avec la correction de certains bugs trouvé !
Mise en place, pour l’ensemble des fonctions / cmdlets, des tests d’intégration (via pester) qui permettront de facilement faire évoluer les fonctions sans régression.
Par exemple, le code est maintenant 5 fois plus rapide ! En effet, des lenteurs ont été relevé via les tests (un délai de 5 sec entre chaque requête ). En désactivant le HTTP keepalive, plus de temps d’attente (Uniquement un Handshake TCP).
Des améliorations aussi concernant la connexion avec l’activation de TLS 1.2 et de meilleurs messages d’erreurs en cas de problèmes.
Et pour terminer l’ajout de cmdlet pour gérer les ports : Get-ArubaSWPort / Set-ArubaSWPort / Get-ArubaSWPortStatistics
Cela permet de récupérer/configurer les paramètres d’un port / interface (Nom, status, mode…) et de récupérer les informations statistiques sur les ports (nombre de paquets/octets/débit/erreur TX&RX…). C’est utilisé dans le script pour récupérer la liste des ports !
Quoi de prévu après ?
- Correction de soucis en cas de commutateur en « stack » (VSF)
- L’ajout d’autres cmdlet sur les modules manquant (DNS, RADIUS…)
- Le support de PowerShell 6 (Core) avec comptabilité Linux/macOS
- Le support multi connections
- Le support multi version (API)
- Et surtout d’autres script !
- …
L’ensemble du code source est disponible sur Github et c’est le même endroit pour signaler des bugs (et contribuer !). Un grand merci à Cédric et Benjamin (et Julien !) pour avoir été les premiers testeurs/contributeurs
Pour terminer… j’ai d’autres modules dans les cartons à savoir PowerArubaCP pour ClearPass ! (avec ajout/suppression de NAS, Services, Endpoints, Guest…) et aussi PowerArubaCX pour faire la même chose que PowerArubaSW mais pour les commutateurs ArubaCX ! On aura l’occasion d’en reparler sur le blog !