Inventariare gli host ESXi con OCS Inventory

Non essendo possibile installare l’agente di OCS sugli Host ESX si può ricorrere all’uso del tool FusionInventory. Questo tool avrebbe la possibilità di effettuare una scansione della rete alal ricerca degli ESX ed eseguirne l’inventario. Tuttavia la sua configurazione non è per nulla semplice. La strada alternativa può essere quella di utilizzare il tool a riga di comando fusioninventory-esx (che esegue l’inventario) e poi il tool di OCS ocsinventory-injector.pl per inserirlo nell’inventario. Il primo comando esegue l’inventario del server e lo scrive in un file XML, mentre il secondo inserisce i dati nel DB di OCS. Una volta inserito in OCS lo si porta su GLPI con la consueta procedura di allineamento dei due software.

Avendo molti host da scansionare e volendo aggiornare l’inventario regolarmente ho proceduto come segue:

  1. ho creato una struttura di directory di questo tipo:/root/Import/Scripts (contenete gli scripts); :/root/Import/Base (contiene un solo file, con la lista degli host, uno per riga); /root/Import/Data (dove vengono salvati i files generati dal primo comando e poi letti dal secondo).
  2. ho trovato e adattato lo script allegato (esxinventory.sh) che legge il file con i nomi degli host, esegue l’inventario e salva i files
  3. ho creato uno script che pulisce la directory /root/Import/Data, richiama il file esxinventory.sh e a seguire lancia il comando per inserire i dati in OCS (fullinventory.sh). Questo comando può essere eseguito tramite cron per mantenere aggiornato l’inventario.

L’unica cosa che questo script non fa è la corretta impostazione del TAG : questo va impostato a mano con PHPMyadmin (problema abbastanza secondario, considerato che questo campo è l’unico che OCS non sovrascrive mai).

Questo è lo script fullinventory.sh:

#!/bin/bash
cd /root/Import/Data
rm -f *
/root/Import/Scripts/esxinventory.sh /root/Import/Base/esx.txt
/root/Import/Scripts/ocsinventory-injector.pl –directory /root/Import/Data/
echo “”
echo “*******************************************************”
echo “FINE SCRIPT”
echo “*******************************************************”

 

Questo invece è esxinventory.sh:

#!/bin/bash

clear;
# Comando trap
trap bashtrap INT
# Funzione trap, eseguita alla pressione di CTRL+C
bashtrap()
{
echo “”
echo “”
echo “ATTENZIONE!!! Rilevata sequenza comandi CTRL+C!”
echo “Si è sicuri di voler interrompere lo script?”
echo “1 – SI, interrompere script”
echo “2 – NO, annulla interruzione e prosegui lo script”
echo “”
echo -n “Immettere la scelta (1 o 2): “
scelta=”0″
while [[ $scelta != “1” && $scelta != “2” ]]; do
read scelta
if [[ $scelta != “1” && $scelta != “2” ]] ; then
echo -n “Scelta non valida, ripeti: “;
fi
done
echo “”
if [ $scelta == “1” ] ; then
echo “INTERRUZIONE SCRIPT…”
echo “”
break;
else
echo “PREOSECUZIONE SCRIPT…”
echo “”
fi
}

echo “*******************************************************”
echo “INIZIO LETTURA DEL FILE “$1
echo “*******************************************************”
# verifica esistenza del file
if [ ! -f $1 ]; then
echo “Il file $1 non esiste!”
else

# Link filedescriptor 10 con stdin
exec 10<&0
# stdin rimpiazzato con argomento 1 passato allo script
exec < $1
let count=0

# Memorizza nell’array ARRAY le righe del file e verifica, saltando, le righe vuote
while read LINE; do
if [ ! -z $LINE ]; then
ARRAY[$arraycount]=$LINE
((arraycount++));
fi
((count++))
done

# Ripristino stdin dal filedescriptor 10 e chiusura filedescriptor 10
exec 0<&10 10<&-

totale=${#ARRAY[@]}
echo “Totale righe lette: “$totale
echo “”
echo “Lista righe lette:”
for ((i=0; i<totale; i++)); do
echo $i – ${ARRAY[i]}
done
echo “”

# Eventuale comando che sfrutta le righe del file appena letto
echo “*******************************************************”
echo “ESECUZIONE COMANDO”
echo “*******************************************************”
temp1=”0″
for ((i=0; i<totale; i++)); do
temp1=$(echo “scale=2; 100/$totale” | bc )
percentuale=$(echo “scale=2; $temp1*$(($i+1))” | bc )
# Ad esempio se il file è una lista di pacchetti da installare…
fusioninventory-esx –user root –password XXXXXXXX! –host ${ARRAY[i]} –directory /root/Import/Data/
# Ed eventuale scrittura di un array da usare come report…
REPORT[$i]=”$i – $? – ${ARRAY[i]}”
echo “———————————————————————-“
done

# Eventuale scrittura di un file di report utilizzando l’array precedentemente creato
# echo “==========================================================================”>>report_log.txt
# date>>report_log.txt
# echo “==========================================================================”>>report_log.txt
# for ((i=0; i<=totale; i++)) ; do
# echo ${REPORT[i]}>>report_log.txt
# done
# echo “————————————————————————–“>>report_log.txt
# echo “”>>report_log.txt

fi

echo “”
echo “*******************************************************”
echo “FINE SCRIPT”
echo “*******************************************************”

© 2021 Catfish Blog | Tema: Storto di CrestaProject WordPress Themes.