Como extrair o nome do host do Ansible Playbook Run

Como extrair o nome do host do Ansible Playbook Run

Eu preciso realizar o seguinte script de shell. Estou tentando extrair o HOSTNAME depois que ele for executado com sucesso por meio do Ansible Playbook Run.

Eu tenho um arquivo de texto que contém o comando de execução do Ansible-Playbook para ser executado e gravar a saída no arquivo de log: result.log

Esta é a aparência do arquivo "result.log"

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

Se falhou for "0", Inacessível for "0" e Alterado for maior que 0, imprima apenas o HOSTNAME. Neste caso, TESTLINUX01

Obrigado pela ajuda.

Responder1

Você pode usar algo assim:

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

Primeiro extraímos todos os valores necessários e depois os comparamos com os desejados; se corresponderem, imprimimos o nome do host.

  • grep -Po "changed=\K\d+retorna o número antes de "alterado"
  • Declaração SE:
    • $changed -ge 1se alterado é maior que igual a "1"
    • -ae
    • $unreachable -eq 0inacessível era igual a "0"
    • -ae
    • $failed -eq 0falhou foi igual a "0", então:
  • cut -s -f1 -d: $file | tr -s ' 'imprime o nome do host

Responder2

Obrigado a todos por responder e fornecer a solução. O código a seguir funciona para mim:

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"

informação relacionada