如何從 Ansible Playbook Run 中提取主機名稱

如何從 Ansible Playbook Run 中提取主機名稱

我需要完成以下 shell 腳本。我嘗試在透過 Ansible Playbook Run 成功運行後提取主機名稱。

我有一個文字文件,其中包含要執行的 Ansible-Playbook 運行命令並將輸出寫入日誌檔案:result.log

這是「result.log」檔案的樣子

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

如果failed為“0”,Unreachable為“0”,Changed大於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”前面的數字
  • 如果語句:
    • $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"

相關內容