Ansible Playbook 実行からホスト名を抽出する方法

Ansible Playbook 実行からホスト名を抽出する方法

次のシェル スクリプトを実行する必要があります。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+「変更」の前の数字を返します
  • 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"

関連情報