次のシェルスクリプトを実行する必要があります。 Ansible Playbook Runを介してHOSTNAMEが正常に実行された後、HOSTNAMEを抽出しようとしています。
Ansible-Playbook実行コマンドを含むテキストファイルがあり、出力をログファイルに書き込みます:result.log
「result.log」ファイルは次のようになります
PLAY RECAP *********************************************************************
TESTLINUX01 : ok=6 changed=1 unreachable=0 failed=0
失敗が「0」、到達不能が「0」、変更が0より大きい場合、HOSTNAMEのみを出力します。この場合、TESTLINUX01
ご協力ありがとうございました。
次のように使用できます。
#!/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」の前の番号を返します$changed -ge 1
変更された値が「1」以上の場合-a
および$unreachable -eq 0
unreachableは "0"でした-a
および$failed -eq 0
failedは "0"でした。その後:cut -s -f1 -d: $file | tr -s ' '
はホスト名を出力します返信して解決策を提供してくれてありがとう。次のコードは私のためにうまくいきます:
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"