Cómo extraer el nombre de host de Ansible Playbook Run

Cómo extraer el nombre de host de Ansible Playbook Run

Necesito lograr el siguiente script de Shell. Intento extraer HOSTNAME después de que se ejecute correctamente a través de Ansible Playbook Run.

Tengo un archivo de texto que contiene el comando de ejecución de Ansible-Playbook que se ejecutará y escribirá el resultado en el archivo de registro: result.log

Así es como se ve el archivo "result.log"

PLAY RECAP *********************************************************************
TESTLINUX01                : ok=6   changed=1    unreachable=0    failed=0

Si el error es "0", Inalcanzable es "0" y Cambiado es más de 0, imprima solo el NOMBRE DEL HOST. En este caso, TESTLINUX01

Gracias por su ayuda.

Respuesta1

Puedes usar algo como esto:

#!/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

Primero extraemos todos los valores necesarios y luego los comparamos con los deseados; si coinciden, imprimimos el nombre del host.

  • grep -Po "changed=\K\d+devuelve el número delante de "cambiado"
  • Declaración SI:
    • $changed -ge 1si se cambia es mayor que igual a "1"
    • -ay
    • $unreachable -eq 0inalcanzable era igual a "0"
    • -ay
    • $failed -eq 0fallido fue igual a "0", entonces:
  • cut -s -f1 -d: $file | tr -s ' 'imprime el nombre de host

Respuesta2

Gracias a todos por responder y dar la solución. El siguiente código me funciona:

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"

información relacionada