Unity-Powershell : Les premiers pas vers l’automatisation

Par défaut

Interview d’Erwan Quelin : made in Nantes développe des scripts pour les baies UNITY Dell EMC.

Entretien avec Erwan Quélin sur le développement de ton module PowerShell

Basé sur Nantes, Erwan est depuis près de 6 ans Ingénieur Systèmes chez Cheops Technology. Ses interventions sont multiples et auprès de clients très diversifiés dans la région Ouest. Spécialisé dans la virtualisation autour des produits VMware et dans le stockage autour des gammes VNX, Unity et VPLEX de Dell EMC, Erwan est certifié VMware Certified Professional – Datacenter virtualization 4, 5 et 6 ainsi que EMC Implementation Engineer – VNX et Unity et vient d’intégrer le programme VMware vExpert et Dell EMC Elect pour l’année 2017.

Erwan, pourrais tu nous en dire un peu plus sur le développement de ce script ?

L’automatisation du système d’information est un sujet prépondérant qui ne s’inscrit pas uniquement au sein des GAFA. Dans le cadre de mes missions et de mes prestations  je cherche systématiquement à automatiser de façon optimum et permanente les tâches parfois répétitives mais nécessaires à la mise en place d’une baie de stockage ou d’une infrastructure de virtualisation. Cela génère un véritable gain de temps sur des tâches qui n’ont pas de valeur ajoutée pour mes clients (comme créer X LUN…) et me garantit également une cohérence dans mes déploiements en m’assurant par exemple que deux baies sont configurées strictement de manière identique.

Lorsque Dell EMC a mis sur le marché les baies Unity, je me suis rapidement intéressé au fait qu’elles disposaient d’API RESTFul qui permettait de les administrer via de simples requêtes http. Face à ce constat, je me suis lancé dans le développement d’un module PowerShell qui permettra d’administrer entièrement les baies EMC Unity en ligne de commande.

PowerShell

Tu nous donnes plus de détails sur ce module ?

Avant de rentrer dans les détails du module Unity-Powershell, il est peut-être nécessaire d’expliquer ce qu’est PowerShell et quel est son intérêt par rapport aux autres langages.

PowerShell est à la fois un langage de scripting basé sur .NET ainsi qu’une interface en ligne de commande. Il est développé par Microsoft et vient remplacer la vénérable console cmd.exe en proposant des commandes supplémentaires permettant de gérer tout type d’équipements compatibles.

PowerShell est bien évidemment principalement utilisé pour manager l’écosystème Microsoft (Windows Server, Exchange, Sharepoint…) mais certains éditeurs mettent à disposition des commandes supplémentaires sous la forme de modules pour administrer leur produit.

Une des extensions les plus connues est PowerCLI. Développée par VMware, elle permet d’administrer via des lignes de commandes PowerShell tout un ensemble de produits de l’éditeur (vSphere ESXi, vSphere vCenter,…). Il y a quelques mois, Microsoft a rendu le projet PowerShell Open Source et il l’a porté sur les systèmes d’exploitation Linux et Mac OS.

Que signifie alors cmdlet’s ?

Les commandes PowerShell sont appelées Commandlets. Lancées unitairement,  elles permettent d’exécuter une action précise, comme par exemple la commande Get-Service qui comme son nom l’indique permet d’afficher des informations concernant les services Windows.

Selon toi, en quoi Powershell se différencie de ses homologues  ?

Ce qui fait la puissance et la simplicité d’utilisation de Powershell c’est la notion d’objet et de pipeline. La commande Get-Service n’a pas simplement affiché du texte mais a généré un objet qui peut être manipulé (par exemple appliquer un filtre n’affichant que les services démarrés) ou bien envoyer vers une autre commande au travers d’un pipeline. La commande ci-dessous va permettre en une ligne  de redémarrer le service DnsCache :

> Get-Service -Name DnsCache | Restart-Service

En y ajoutant un peu de logique avec des If et autres boucles, il est alors possible de développer des scripts  puissants qui permettront d’administrer beaucoup plus simplement un système.

Unity-Powershell

A quoi sert alors précisément ton script ?

Le module Unity-Powershell a été développé en s’appuyant sur les mêmes mécanismes. Il va permettre aux administrateurs de récupérer des informations sur une ou plusieurs baies Unity et de les configurer. Là où la création d’un LUN nécessiterait plus d’une dizaine de clics, le module permet de réaliser la même opération en une seule ligne de commande et de manière consistante pour chaque LUN créé.

Le module peut être utilisé sur n’importe quel poste de travail ou serveur Windows à partir du moment ou Powershell 5 est disponible. Il est possible (et recommandé) de télécharger le module puis de l’activer avec les lignes de commande suivantes :

https://www.powershellgallery.com/packages/Unity-Powershell/0.14.1

> Install-Module -Name Unity-Powershell -Scope CurrentUser
> Import-Module -Name Unity-Powershell

Une fois le module disponible, on peut lister les nouvelles commandes qu’il apporte :

En cas de doute, une aide est disponible pour chaque commande :

> Get-Help -Name Get-UnityPool

Maintenant que l’on a fait un premier tour du propriétaire, rentrons dans le vif du sujet et connectons nous à une baie Unity. Il va vous falloir connaitre son FQDN ou son adresse IP ainsi qu’un utilisateur et un mot de passe.

> connect-Unity -Server unity01.okcomputer.lab

Si tout se passe bien, la commande va vous afficher des informations concernant la baie sur laquelle vous vous êtes connecté comme par exemple son nom et le modèle. Essayons maintenant de récupérer des informations concernant les storage pools. Les commandes permettant d’interroger une baie commence toutes par GET. Assez logiquement on pourra lister les pools avec la commande suivante :

 > Get-UnityPool

Il est possible de limiter notre recherche à un pool spécifique

Avec ces commandes, on voit apparaître un élément important du fonctionnement des baies Unity :  les ID. Chaque élément est référencé non pas par un nom mais par un ID unique. Par conséquent, cette référence est utilisée par pratiquement toutes les commandes du module.

Si vous voulez par exemple ajouter une description au premier pool, il faudra renseigner la commande Set-UnityPool avec son ID ‘pool_1’ :

> Set-UnityPool -ID ‘pool_1’ -Description ‘Pool avec FastVP active’

On a vu qu’avec un peu de pratique, les commandes étaient relativement simples à utiliser et qu’elles pouvaient remplacer avantageusement l’interface graphique. Le fait que le module soit développé en Powershell va vous donner la possibilité de l’intégrer au sein de scripts qui permettront par exemple de créer plusieurs LUN d’un coup, puis d’automatiquement les présenter aux serveurs concernés, on pourrait aussi imaginer développer un programme qui augmenterait automatiquement la taille d’un LUN en fonction de critères que vous auriez définis.

En utilisant d’autres modules Powershell existants comme par exemple Pester (https://github.com/pester/Pester), il est possible de définir un framework de test que vous utiliserez pour vous assurer que vos baies Unity sont toujours configurées suivant un référentiel préétabli.

Il serait difficile de décrire tous les cas d’usages possibles tant les possibilités sont grandes.

J’espère que cet article vous aura permis de voir l’intérêt d’utiliser le module Unity-Powershell pour administrer vos baies Unity et qu’il vous aura donné envie d’aller plus loin avec. Le module est toujours en développement et est ouvert à toutes les contributions, si vous vous sentez l’envie d’écrire du code et de la documentation, signaler un bug ou tout simplement donner votre avis sur le module.

N’hésitez pas à contacter Erwan sur Twitter:

ou sur GitHub: https://github.com/equelin

Adresse du projet Unity-Powershell: https://github.com/equelin/Unity-Powershell

Documentation : http://unity-powershell.readthedocs.io/en/latest/?badge=latest

Pour suivre Erwan et pour plus d’informations sur son parcours et ses compétences :

Voir mon profil LinkedIn Erwan Quelin Voir le profil d’Erwan Quelin

Share This...Buffer this pageShare on LinkedInTweet about this on TwitterShare on Google+Email this to someonePin on PinterestShare on Facebook