다음 쉘 스크립트를 수행해야 합니다. 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"