Ansible出力から1行を取得しようとしています。

Ansible出力から1行を取得しようとしています。

問題のサーバーに対するrootアクセス権を持つユーザーを表示するために/ etc / sudoersファイルを読み取るためにansibleを使用しています。

これは .sh ファイルです。

    #!/bin/bash

    username=`sudo cat /etc/sudoers | grep "NOPASSWD: ALL" | grep -v ^#`
    hostname=`sudo hostname`

    echo "xyz | $username | $hostname"

これは出力を生成する別の.shファイルです。このファイルを最初に実行します。

 #!/bin/bash

 /bin/ansible-playbook /etc/ansible/scripts/sudoerscheck.yaml >| 
 /root/script/sudoers.dat
 /bin/cat /root/script/sudoers.dat | grep xyz | awk -F '|' '{ print $2":"$3 
 }' | awk -F '\"' '{ print $1 }' >| /root/script/sudoers.txt

以下のAnsible出力。

 ok: [test1] => {
"changed": false, 
"shell_result.stdout_lines": [
    "xyz | oracle ALL=(ALL)       NOPASSWD: ALL", 
    "cuser ALL=(ALL) NOPASSWD: ALL", 
    "dogfish        ALL=(ALL)       NOPASSWD: ALL | test1"
]
}


ok: [test2] => {
  "changed": false,
  "shell_result.stdout_lines": [
    "xyz |  | test2"
   ]
 }
  ok: [test3] => {
  "changed": false,
  "shell_result.stdout_lines": [
    "xyz | ADMINS \tALL=(ALL)\tNOPASSWD: ALL",
    "oracle        ALL=(ALL)       NOPASSWD: ALL | test3

以下の出力を取得する方法を教えてください。そして、ユーザー名は変更されることがあります

 test1 oracle cuser dogfish
 test2 NULL
 test3 oracle ADMINS

ベストアンサー1

これはうまくいきます。

#!/bin/bash
OUTPUT=$(cat /etc/passwd | grep -v nologin | grep -v root | awk -F: '{ print 
 $1 }')
block1=`hostname`
while read -r line
do
if [[ `sudo -l -U $line | grep NOPASSWD` ]];then
    echo $block1 $line 
else
    echo $block1 $line 
fi
done <<< "$OUTPUT"

おすすめ記事