[ DATE ] : 2025-09-10 07:15
Alletra - Script bash
Ce script bash se connecte en SSH à une baie HPE Alletra/3PAR et collecte l’état global (santé + logs + sécurité), il filtre les événements sur la dernière semaine et génère un rapport structure.
3PAR et 3paradm Les baies de stockage HPE 3PAR (aujourd’hui intégrées aux gammes Alletra et Primera) reposent sur un système d’exploitation propriétaire fourni par HPE. Ce système n’est pas un Linux standard un OS embarqué, intégré au firmware de la baie, qui inclut nativement la gestion du stockage, du réseau, de la haute disponibilité et de la supervision.
L’administration de la baie se fait via une CLI propriétaire 3PAR, accessible en SSH. Cette interface dispose de ses propres commandes (comme showvv, showpd, showcpg, showeventlog) et ne fournit pas d’accès à un shell Linux classique.
Le compte 3paradm est le compte administrateur principal de la baie et permet l’accès complet à la CLI 3PAR et à toutes les fonctionnalités d’administration : gestion des volumes, des disques, des hôtes, des alertes, des logs et des opérations de maintenance.
Script bash Le problème rencontré avec ce scipt est la demande du mot de passe à chaque appel de fonction, chaque commande étant exécutée via une connexion SSH distincte vers la baie. En raison de l’utilisation d’un OS propriétaire 3PAR / Alletra, les fonctionnalités SSH sont limitées et il n’est pas possible de mettre en place une authentification par clés SSH pour l’utilisateur 3paradm.
Cette contrainte empêche l’automatisation complète des connexions et oblige à fournir le mot de passe à chaque exécution. Cette limitation est inhérente à la conception de la CLI 3PAR et du firmware de la baie, et ne peut pas être contournée par des mécanismes SSH standards.
C’est pour celà que ce script Bash existe également en version Ansible (https://n0tes.fr/2025/09/10/Ansible-Alletra/ ).
#!/bin/bash # ===================================================================== # VARIABLES DEFINITION # ===================================================================== REMOTE_USER="3paradm" REMOTE_SERVER="PROD-SRV-0042.my.company.org" LOCAL_REPORT="$(date +"%Y-%m-%d")_ALLETRA_Check.txt" CURRENT_DATE=$(date +"%Y%m%d") LAST_DATE=$(date -d "-1 week" +"%Y%m%d") function general_infos() { echo -e "\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "┃ GENERAL INFORMATIONS" >> "$LOCAL_REPORT" echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "□━━━━━━ NODE DATES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showdate" >> "$LOCAL_REPORT" echo -e "□━━━━━━ HOSTS SET ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showhostset" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showhostset -summary" >> "$LOCAL_REPORT" echo -e "□━━━━━━ MAINTENANCE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showmaint" >> "$LOCAL_REPORT" } function health() { echo -e "\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "┃ HEALTH" >> "$LOCAL_REPORT" echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "□━━━━━━ GUI ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showcim" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showwsapi" >> "$LOCAL_REPORT" } function use() { echo -e "\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "┃ USE" >> "$LOCAL_REPORT" echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "□━━━━━━ CONSUMED SPACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showsr" >> "$LOCAL_REPORT" } #showsr - Show System Reporter status (Amount of space consumed by the various System Reporter databases on the System Reporter volume) function logs() { echo -e "\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "┃ REBOOT REPORT" >> "$LOCAL_REPORT" echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showreset" >> "$LOCAL_REPORT" echo -e "\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "┃ LOGS REPORT" >> "$LOCAL_REPORT" echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "□━━━━━━ FATAL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showeventlog -startt $LAST_DATE -sev Fatal -oneline" >> "$LOCAL_REPORT" echo -e "□━━━━━━ CRITICAL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showeventlog -startt $LAST_DATE -sev Critical -oneline" >> "$LOCAL_REPORT" echo -e "□━━━━━━ DEGRADED ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showeventlog -startt $LAST_DATE -sev Degraded -oneline" >> "$LOCAL_REPORT" echo -e "□━━━━━━ MAJOR ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showeventlog -startt $LAST_DATE -sev Major -oneline" >> "$LOCAL_REPORT" echo -e "\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "┃ ALERT REPORT" >> "$LOCAL_REPORT" echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "\n□━━━━━━ NEW ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showalert -n -oneline" >> "$LOCAL_REPORT" echo -e "\n□━━━━━━ SERVICES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showalert -svc -oneline" >> "$LOCAL_REPORT" echo -e "\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "┃ AUDIT REPORT" >> "$LOCAL_REPORT" echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "□━━━━━━ FAILED ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showauditlog -d -startt $LAST_DATE -op_res Unknown" >> "$LOCAL_REPORT" echo -e "□━━━━━━ UNKNOW ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showauditlog -d -startt $LAST_DATE -op_res Failed" >> "$LOCAL_REPORT" echo -e "\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "┃ USERS REPORT" >> "$LOCAL_REPORT" echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" echo -e "□━━━━━━ LIST USER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showuser -showcols Username,Role,Privilege,Domain,Default" >> "$LOCAL_REPORT" echo -e "□━━━━━━ CONNECTION ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showuserconn -showcols Connected_since,Name,Level,Role,IP_Addr,Clienthost,Clientname,Clientversion,Client,Domain" >> "$LOCAL_REPORT" } function list_volumes() { echo -e "\n━━━━━━ List of volumes ━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showvv -d" >> "$LOCAL_REPORT" } function storage_details() { echo -e "\n━━━━━━ Storage details ━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showpd" >> "$LOCAL_REPORT" } function system_capacity() { echo -e "\n━━━━━━ System capacity ━━━━━━" >> "$LOCAL_REPORT" ssh "$REMOTE_USER@$REMOTE_SERVER" "showcpg" >> "$LOCAL_REPORT" } #======================================== # Main Program #======================================== function generate_report() { echo -e "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" > "$LOCAL_REPORT" echo -e "┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" > "$LOCAL_REPORT" echo -e "┃ ALLETRA - WEEKLY REPORT ON PROD-SRV-0042" >> "$LOCAL_REPORT" echo -e "┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" > "$LOCAL_REPORT" echo -e "┃ Date $(date +"%Y-%m-%d")" >> "$LOCAL_REPORT" echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> "$LOCAL_REPORT" # Call functions general_infos health use logs # Check if [[ $? -eq 0 ]]; then echo "\nSUCESS - SEE $LOCAL_REPORT\n" else echo "\n ERROR WHILE EXECUTING COMMANDS\n" fi } # Call MAIN function generate_report
Documentation MAN 3paradm