Bonjour à tous, je bloque sur la création d'une sonde Nagios, je vous explique vite fait le contexte :
Je suis en alternance, et mon tuteur m'a demandé de créer une sonde Nagios qui vérifie si les paquets installé sur une machine dispose d'une version dans les dépôts, si oui alors tout est ok, sinon je demande au Nagios de m'afficher un Warning, si le paquet 'apt-show-versions' que j'utilise dans mon script n'est pas installé alors je remonte un CRITICAL au Nagios, enfin je dois mettre en place une whitelist de paquets à ignorer par machine (ou groupe de machines).
J'avais le choix entre Python et le Shell et j'ai choisis le second, mais si vous avez une idée en Python n'hésitez pas
Donc maintenant le contexte mis en place, je vous explique ou je bloque. La première partie normalement devrait être bonne mais je vois absolument pas comment intégrer une whitelist par machine dans mon script
Voilà mon script pour l'instant :
Code :
- #!/bin/bash
- #Script qui verifie si les paquets installer sur une machine ne dispose
- #pas de versions dans les depots.
- #Warning si retour=1, Tout est Ok si retour=0 sinon Critical
- STATE_OK=1
- STATE_WARNING=0
- STATE_CRITICAL=2
- which apt-show-versions >/dev/null
- STATE=$?
- if [ "$STATE" = 0 ]
- then
- apt-show-versions | grep 'No available version in archive' >/dev/null
- STATE=$?
- if [ "$STATE" = "$STATE_OK" ]
- then
- echo "There is no package without version in archive"
- exit 0 #Ok dans Nagios
- elif [ "$STATE" = "$STATE_WARNING" ]
- then
- echo "Some package have no available version in archive"
- exit 1 #Warning dans Nagios
- fi
- else
- echo "apt-show-versions is missing"
- exit $STATE_CRITICAL
- fi
|
Merci d'avance
Edit: J'ai pas préciser mais si je dois passer le script en Python ce sera Python 3
Edit 2: Ok a tête reposé et grâce à l'aide d'un ami je sais comment intégrer ma Whitelist mais je bloque sur la mise en œuvre, je vous mets ci dessous la version avec les commentaires aux endroits où je bloque.
Pour moi il faudrait créer un tableau qui récupère uniquement le nom du paquet sur la sortie standard de apt-show-versions (donc autant d'éléments dans mon tableau que de ligne sur la sortie) et vérifier si le paquet présent dans la whitelist et présent dans le tableau apt-show-versions. Si oui alors enlever l’occurrence présente dans le tableau apt-show-versions et à la fin du traitement si le tableau apt-show-versions est vide alors Ok sinon Warning avec en sortie un echo des éléments présent dans le tableau apt-show-versions. Éventuellement on peut remonter un Warning si certains paquets whitelisté ne sont pas présent dans les dépôts ou installés.
Si je dois listé mes problèmes :
- Comment récupérer uniquement le premier champs ET la première ligne de ma sortie standard : apt-show-versions | grep 'No available version in archive' | cut -d: -f1 // Ne récupère que le premier champs mais de toute les lignes
Edit: Apparemment awk est parfait pour ce genre de problème, mais j'ai pas l'habitude de m'en servir du coup je vais me renseigner dessus voir si de base il est disponible sur toute nos machines et si oui m'en servir pour formater ma sortie comme je le souhaite.
Edit2: apt-show-versions | grep 'No available version in archive' | cut -d: -f1 | head -n 1 // Récupère le premier champs ET la première ligne. Du coup je pense ne pas avoir besoin d'awk mais cela reste a voir, si vous avez une version avec awk je suis preneur, pour voir comment cela fonctionne.
- Comment insérer la sortie de la commande au dessus dans mon tableau : Je vais avoir besoin d'une boucle for pour mettre chaque ligne de ma sortie dans mon tableau, mais comment ?
La deuxième version :
Code :
- #!/bin/bash
- #Script qui verifie si les paquets installer sur une machine ne dispose
- #pas de versions dans les depots.
- #Warning si retour=1, Tout est Ok si retour=0 sinon Critical
- STATE_OK=1
- STATE_WARNING=0
- STATE_CRITICAL=2
- declare -a whitelist=( "paquet" ) #Déclaration d'un tableau avec indice, "paquet" étant le paquet whitelisté
- #readonly -a whitelist=( "paquet" ) #Déclaration d'un tableau en read only
- #Je mets les commandes ci-dessous ici au cas où j'en aurais besoin
- #apt-show-versions | cut -d: -f1 recupere le premier champs de la sortie standard
- #apt-show-versions | grep 'No available version in archive' | cut -d: -f1 idem qu'au dessus mais sur un grep des paquets ne disposant pas de version dans les dépôts
- which apt-show-versions >/dev/null
- STATE=$?
- if [ "$STATE" = 0 ]
- then
- apt-show-versions | grep 'No available version in archive' >/dev/null
- STATE=$?
- if [ "$STATE" = "$STATE_OK" ]
- then
- echo "There is no package without version in archive"
- exit 0 #Ok dans Nagios
- #elif [ "$STATE" = "$STATE_WARNING" ]
- #then
- #for ((i=0 ; ${#whitelist[@]} - $i ; i++))
- #do read p <<< "${whitelist[i]}"
- #apt-show-versions | grep "$p"
- #STATE=$?
- #if [ "$STATE" = 0 ] #Le paquet est trouvé sur la sortie standard de apt-show-versions
- #then
- #Ignorer le paquet puisqu'il est dans la whitelist
- #else
- #Le paquet whitelisté n'est pas installé éventuelle remonter d'un warning
- #echo "Some package have no available version in archive"
- #exit 1 #Warning dans Nagios
- #fi
- fi
- else
- echo "apt-show-versions is missing"
- exit $STATE_CRITICAL #Critical dans Nagios
- fi
|
Message édité par Ghrew le 03-01-2019 à 15:55:58