Je dois accomplir le script suivant. J'essaie d'extraire le nom d'hôte après son exécution avec succès via Ansible Playbook Run.
J'ai un fichier texte qui contient la commande d'exécution Ansible-Playbook à exécuter et écrit le résultat dans le fichier journal: result.log
Voici à quoi ressemble le fichier "result.log"
PLAY RECAP *********************************************************************
TESTLINUX01 : ok=6 changed=1 unreachable=0 failed=0
Si la valeur de l'échec est "0", Inatteignable est "0" et Changed est supérieur à 0, puis n'imprimez que le HOSTNAME. Dans ce cas, TESTLINUX01
Merci de votre aide.
Vous pouvez utiliser quelque chose comme ça:
#!/bin/bash
file="result.log"
changed=`grep -Po "changed=\K\d+" $file`
unreachable=`grep -Po "unreachable=\K\d+" $file`
failed=`grep -Po "failed=\K\d+" $file`
if [ $changed -ge 1 -a $unreachable -eq 0 -a $failed -eq 0 ]
then
cut -s -f1 -d: $file | tr -s ' '
fi
Nous extrayons d’abord toutes les valeurs nécessaires, puis nous les comparons à vos valeurs souhaitées. Si elles correspondent, nous affichons le nom d’hôte.
grep -Po "changed=\K\d+
retourne le nombre devant "changé"$changed -ge 1
si modifié est supérieur à "1"-a
et$unreachable -eq 0
inaccessible était égal à "0"-a
et$failed -eq 0
échec était égal à "0", alors:cut -s -f1 -d: $file | tr -s ' '
imprime le nom d'hôteMerci à tous d'avoir répondu et fourni la solution. Le code suivant me convient:
cat $file
$file >> $LOGFILE
SUCCESS=`grep "unreachable=0 failed=0" $LOGFILE | awk '{printf "%s ", $1;}'`
echo "Success: $SUCCESS"
FAILURE=`grep -E "unreachable=0 failed=[1-9]" $LOGFILE | awk '{printf "%s ", $1;}'`
echo "Failure: $FAILURE"
Unreachable=`grep -E "unreachable=1 failed=0" $LOGFILE | awk '{printf "%s ", $1;}'`
echo "Unreachable: $Unreachable"