Ansible Playbook Run에서 호스트 이름을 추출하는 방법

Ansible Playbook Run에서 호스트 이름을 추출하는 방법

다음 쉘 스크립트를 수행해야 합니다. Ansible Playbook Run을 통해 성공적으로 실행된 후 HOSTNAME을 추출하려고 합니다.

실행될 Ansible-Playbook 실행 명령이 포함되어 있고 출력을 로그 파일에 기록하는 텍스트 파일이 있습니다. result.log

"result.log" 파일은 다음과 같습니다.

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

실패가 "0"이고 도달 불가능이 "0"이고 변경이 0보다 크면 HOSTNAME만 인쇄합니다. 이 경우 TESTLINUX01

도움을 주셔서 감사합니다.

답변1

다음과 같은 것을 사용할 수 있습니다.

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

먼저 필요한 모든 값을 추출한 다음 원하는 값과 비교하고 일치하는 경우 호스트 이름을 인쇄합니다.

  • grep -Po "changed=\K\d+"changed" 앞의 숫자를 반환합니다.
  • IF 문:
    • $changed -ge 1변경된 값이 "1"보다 큰 경우
    • -a그리고
    • $unreachable -eq 0연결할 수 없음이 "0"과 같습니다.
    • -a그리고
    • $failed -eq 0실패가 "0"과 같으면 다음과 같습니다.
  • cut -s -f1 -d: $file | tr -s ' '호스트 이름을 인쇄합니다

답변2

답변을 주시고 해결책을 제공해 주신 모든 분들께 감사드립니다. 다음 코드가 나에게 적합합니다.

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"

관련 정보