如何从 Ansible Playbook Run 中提取主机名

如何从 Ansible Playbook Run 中提取主机名

我需要完成以下 shell 脚本。我尝试在它运行成功后通过 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 0failed 等于“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"

相关内容