Inventaire distant des serveurs ESXI avec l’agent GLPI

Introduction

Pour ce nouvel article, nous allons étudier l’inventaire des serveurs ESXi à travers l’agent GLPI. La supervision des serveurs ESXI est un pilier fondamental de la gestion efficace d’un parc informatique. L’intégration de GLPI offre la possibilité d’automatiser ce processus, garantissant ainsi un suivi rigoureux des ressources. Dans cet article, nous explorerons les prérequis nécessaires à l’utilisation de cette fonctionnalité, les étapes pour effectuer l’inventaire des serveurs ESXi manuellement via la CLI, ainsi que la méthode que je propose pour automatiser ce processus à l’aide d’un script et d’une tâche planifiée.

Configuration de l’agent

Comme pour le scan réseau, vous devez savoir que l’inventaire à distance des serveurs ESXI repose sur un agent installé, pour lequel la fonctionnalité « ESX remote inventory support » doit être installée. Ces paramètres sont essentiels pour garantir une collecte des informations efficace des serveurs distants

Si vous ne disposez pas d’agent, vous pouvez suivre mon tutoriel dédié à l’installation d’un agent sur les systèmes Windows et Linux

Pour accomplir cette tâche, il vous suffit de relancer l’agent sur un hôte, de cocher l’option correspondante et de terminer l’installation :

Une image contenant texte, Appareils électroniques, capture d’écran, logiciel

Description générée automatiquement

Inventaire manuel

Pour réaliser l’inventaire des serveurs ESXi de façon manuelle, nous allons utiliser la ligne de commande en suivant les étapes appropriées via l’interface en ligne de commande (CLI) de VMware ESXi

La première étape sera donc d’ouvrir un terminal powershell en tant qu’administrateur pour exécuter des lignes de commande

Une fois sur le terminal, nous pouvons nous diriger vers le dossier où est stocké l’agent permettant l’inventaire ESXi à travers cette commande

Set-Location ‘C:\Program Files\GLPI-Agent’ 

Vous pouvez afficher les différentes options grâce à cette commande :

./glpi-esx –help

Premièrement, nous allons exporter les fichiers de configuration. Le dossier de destination doit exister, sinon la commande ne fonctionnera pas !

./glpi-esx --host 192.168.1.200 --user administrator@vsphere.local --pasword  motdepasse --path C:\Temp\esxi 

Un fichier qui comprend les informations de l’ESXi au format XML est généré

Une image contenant texte, Police, capture d’écran, algèbre

Description générée automatiquement

La seconde étape est logiquement d’envoyer ce fichier xml vers GLPI. Vous pouvez également ajouter l’option -v pour avoir le mode verbose

./glpi-injector -f esxi-colin.home-2024-01-30-19-35-48.xml --url 192.168.1.207/front/inventory.php 

Vous devriez pouvoir visualiser vos serveurs ESXi dans l’onglet « Ordinateur » de GLPI, confirmant ainsi l’intégration réussie de l’inventaire ESXi avec GLPI

Une image contenant texte, capture d’écran, Police, ligne

Description générée automatiquement

Inventaire automatique

Script

Nous venons de voir comment faire l’inventaire des serveurs ESXI de façon manuelle. L’automatisation est préférable à la méthode manuelle, car cette dernière est chronophage et peut entraîner une perte de temps significative, tandis que l’automatisation permet d’améliorer l’efficacité et de réduire les tâches répétitives.

Pour simplifier et automatiser le processus, j’ai développé un script PowerShell qui sera planifié par une tâche pour s’exécuter de manière hebdomadaire, permettant ainsi d’automatiser l’inventaire des serveurs ESXi sans nécessiter d’interventions manuelles ultérieures

Bien sûre, vous devrez adapter les différents identifiants et adresse IP à votre environnement

Voici le script :

#Definition des variables1 
$glpitools = "C:\Program Files\GLPI-Agent"
$path = "c:\temp\esxi\"
$esxipath =(Get-ChildItem $path).Count
$esxifilename = (Get-ChildItem $path).Name

#Condition if pour creer le fichier c:/temp/esxi s'il n'existe pas
if (Test-Path $path)
{
    Write-Host "Le fichier existe deja"
}
else
{
    New-Item -Path "C:\temp\" -ItemType Directory -Name "esxi"
}

#Condition if pour creer le fichier c:/temp/esxi s'il n'existe pas
if (Test-Path $path)
{
    Write-Host "Le fichier existe deja"
}
else
{
    New-Item -Path "C:\temp\" -ItemType Directory -Name "esxi"
}

#Verification si le répertoire c:/temp/esxi contient des fichiers
if ($esxipath -eq 0 )
{
    Write-Host "Le repertoire est vide"
}
else
{
    Write-Host "Le repertoire n'est pas vide. Je vais proceder a la suppression"
    Remove-Item -Path $path/*
}

#Commande pour se placer dans le fichier glpi ou se trouve le script qui permet de recuperer les informations des esx
Set-Location $glpitools

#Commande pour récupérer les informations des esxi
.\glpi-esx.bat --host 192.168.1.200 --user administrator@vsphere.local --pasword  motdepasse --path $path

#Definition des variables2
$esxipath =(Get-ChildItem $path).Count
$esxifilename = (Get-ChildItem $path).Name

#Boucle pour envoyer les informations sur GLPI tant qu'il y a un fichier
foreach ($resultat in $esxifilename)
{
    $finalpath = $path + $resultat
    .\glpi-injector.bat -f $finalpath --url http://192.168.1.207/front/inventory.php
}

Explication du script

Le script est séparé en plusieurs parties

Cette première partie définie les premières variables et vérifie si le dossier C:/temp/esxi existe. S’il n’existe pas, il le crée

#Definition des variables1 
$glpitools = "C:\Program Files\GLPI-Agent"
$path = "c:\temp\esxi\"
$esxipath =(Get-ChildItem $path).Count
$esxifilename = (Get-ChildItem $path).Name

#Condition if pour creer le fichier c:/temp/esxi s'il n'existe pas
if (Test-Path $path)
{
    Write-Host "Le fichier existe deja"
}
else
{
    New-Item -Path "C:\temp\" -ItemType Directory -Name "esxi"
}
#Condition if pour creer le fichier c:/temp/esxi s'il n'existe pas
if (Test-Path $path)
{
    Write-Host "Le fichier existe deja"
}
else
{
    New-Item -Path "C:\temp\" -ItemType Directory -Name "esxi"
}

#Verification si le répertoire c:/temp/esxi contient des fichiers
if ($esxipath -eq 0 )
{
    Write-Host "Le repertoire est vide"
}
else
{
  Write-Host "Le repertoire n'est pas vide. Je vais proceder a la suppression"
  Remove-Item -Path $path/*
}

#Commande pour se placer dans le fichier glpi ou se trouve le script qui permet de recuperer les informations des esx
Set-Location $glpitools

#Commande pour récupérer les informations des esxi
.\glpi-esx.bat --host 192.168.1.200 --user administrator@vsphere.local --pasword  motdepasse --path $path

#Definition des variables2
$esxipath =(Get-ChildItem $path).Count

$esxifilename = (Get-ChildItem $path).Name

#Boucle pour envoyer les informations sur GLPI tant qu'il y a un fichier
foreach ($resultat in $esxifilename)
{
   $finalpath = $path + $resultat
   .\glpi-injector.bat -f $finalpath --url http://192.168.1.207/front/inventory.php
}

Cette seconde partie va traiter l’import du fichier qui contient les informations du ou des serveurs ESXI. La première condition if ci-dessous permet de nettoyer le dossier C:/Temp/esxi des anciens fichiers au format XML, et ensuite nous exécutons la commande permettant de rapatrier les fichiers XML de configuration

#Verification si le répertoire c:/temp/esxi contient des fichiers 
if ($esxipath -eq 0 )
{
    Write-Host "Le repertoire est vide"
}
else
{
    Write-Host "Le repertoire n'est pas vide. Je vais proceder a la suppression"
    Remove-Item -Path $path/*
 }

#Commande pour se placer dans le fichier glpi ou se trouve le script qui permet de recuperer les informations des esx
Set-Location $glpitools

#Commande pour récupérer les informations des esxi
.\glpi-esx.bat --host 192.168.1.200 ----user administrator@vsphere.local --pasword  motdepasse --path $path

La dernière partie du script définit de nouvelles variables avec les fichiers importés et contient une boucle qui envoie les informations à GLPI pour chaque fichier présent dans le dossier C:/temp/esxi

#Definition des variables2 
$esxipath =(Get-ChildItem $path).Count
$esxifilename = (Get-ChildItem $path).Name

#Boucle pour envoyer les informations sur GLPI tant qu'il y a un fichier
foreach ($resultat in $esxifilename)
{
    $finalpath = $path + $resultat
    .\glpi-injector.bat -f $finalpath --url http://192.168.1.207/front/inventory.php
}

Création de la tâche planifiée

Maintenant que notre script est prêt, nous devons planifier une tâche afin d’automatiser le déploiement sans intervention manuelle

Sur le serveur ou l’agent est installé, nous allons ouvrir le planificateur de tâches et sélectionner « Créer une tâche  »

Une image contenant texte, capture d’écran, logiciel, Page web

Description générée automatiquement

Nous allons indiquer un nom à notre tâche

Une image contenant texte, capture d’écran, logiciel, nombre

Description générée automatiquement

L’étape suivante est la configuration du déclencheur, c’est-à-dire à quelle fréquence mon script s’exécute. Dans mon cas, j’ai décidé de l’exécuter une fois par semaine, le lundi matin à 02h

Une image contenant texte, capture d’écran, logiciel, nombre

Description générée automatiquement

Dans l’onglet « Actions » du Planificateur de tâches, nous allons configurer l’exécution d’un script PowerShell en spécifiant le chemin vers l’exécutable PowerShell (C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe) suivi du paramètre « -File C:\Script\ESXI-Inventory.ps1 », permettant ainsi de lancer le script d’inventaire des serveurs ESXI

Une image contenant texte, logiciel, capture d’écran, nombre

Description générée automatiquement

Conclusion

Nous avons vu une méthodologie complète pour l’inventaire des serveurs ESXi à l’aide de l’agent GLPI. Nous avons également proposé une solution d’automatisation grâce à un script PowerShell, planifié de manière hebdomadaire à l’aide d’une tâche planifiée pour simplifier le processus d’inventaire. Chaque étape du script a été expliquée en détail, du nettoyage des anciens fichiers à l’envoi des informations à GLPI.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut