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

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 !

Alexis La Goutte

Rédigé par

Alexis La Goutte

Alexis La Goutte est depuis 6 ans consultant Réseau & Sécurité chez Cheops Technology. Il intervient chez des ETI de l’ouest et quelques grands comptes nationaux. Spécialisé dans le réseau, et plus particulièrement sur les produits Aruba, et dans la virtualisation & sécurisation du réseau VMware NSX. Alexis est certifié Aruba Certified Mobility eXpert (ACMX) et Aruba Certified ClearPass Professional (ACCP) également membre des programmes Aruba Ambassador Partner et MVP Airheads depuis 2017.
Lors qu’il lui reste du temps, il est Core dev pour Wireshark (contributeur au dissector WiFi, TLS, QUIC…) depuis 2011. Il contribue aussi au module PowerNSX qui permet l’automatisation NSX via PowerShell. il y a aussi crée en 2018, PowerAruba qui regroupe différents modules concernant l’automatisation (utilisation des API REST) des produits Aruba/HPE (PowerArubSW), pour ArubaCX (PowerArubaCX) et enfin pour ClearPass (PowerArubaCP).
Depuis 2020, Alexis est devenu vExpert, et reconnu aussi dans la catégorie vExpert NSX.