突貫ですが作ってみました。
Ansibleのhostsファイルに書かれているホストを対象として実行すると以下のように出力するだけです。
ホスト名
IPアドレス
IPアドレス
ホスト名
IPアドレス
:
事前注意としては、Ansibleのhostsファイルで
server[001:005]みたいな書き方が出来ると思いますが、その場合ちゃんと動きません。
毎月の棚卸し時、ホスト名と実際振られているIPアドレスをリストアップを自動でやれたら少しは便利かなと思いました。
IP管理表とDNSと実機って結構ずれてしまうので。
シェルはこれ
ip_list.sh
#!/bin/bash
filename=$1
while read line
do
line_name=`echo $line | grep -v "^#\|^\[" `
if [ "$line_name" != "" ];
then
ansible -m setup $line_name | grep "ansible_hostname\| \"address\"" | awk '{print $2}' | sed -e "s/,//g" | sed "s/\"//g" | egrep -v "..:..:..:..:..:.." | egrep -v "^fe80:" | grep -v 127.0.0.1 | grep -v "0xF0000\|0xE0000\|0xEA050" | sort -r | uniq
fi
done < ${filename}
例として、hostsの中身を以下とします。コメントアウトされてる行やグループ行はスキップしますー
cat /etc/ansible/hosts
[svr01-03]
svr001
svr002
## mainte
#svr003
[web01-02]
web01
web02
ip_list.shを実行します。
/usr/local/bin/ip_list.sh > /usr/local/bin/ip_list.log
tail -f /usr/local/bin/ip_list.log
svr001
192.168.1.1
10.14.0.1
svr002
192.168.1.2
10.14.0.2
web01
172.17.1.1
10.14.2.1
web02
172.17.1.2
10.14.2.2