概要
Ansibleを使って、対象のIPがサブネットマスク付きのIPに該当する場合は処理を実行する
を実現したくて、その方法を教えてもらったので備忘録として作成。
netaddr
を使う
pythonのライブラリの一つみたいです。
インストールがされていない方は下記コマンドでインストールしてください。
# pip install netaddr
もし証明書関連のエラーが出てインストール出来ない場合はpip.confファイルを作成して再度インストールを実行してみてください。ここの記事が参考になると思います。
使ってみる
いただきもののコードですが、下記コードを使って本当にサブネットマスク指定でヒットするか確認してみます。
---
- hosts: localhost
tasks:
- name: net range test
debug:
msg: "{{ item }} は範囲内です"
loop:
- 192.168.12.0
- 192.168.12.1
- 192.168.12.254
- 192.168.12.255
- 192.168.15.0
- 192.168.15.1
- 192.168.15.254
- 192.168.15.255
when: (item | ipaddr("192.168.12.0/24"))
ipaddr
のところでIPの範囲を指定しています。
上記コードだと、192.168.12.0〜192.168.12.255
の範囲のIPだけがヒットしてメッセージ付きで出力されるはず。
実行結果(一部抜粋)
TASK [net range test] *********************************************************************************************************************************
ok: [localhost] => (item=192.168.12.0) => {
"msg": "192.168.12.0 は範囲内です"
}
ok: [localhost] => (item=192.168.12.1) => {
"msg": "192.168.12.1 は範囲内です"
}
ok: [localhost] => (item=192.168.12.254) => {
"msg": "192.168.12.254 は範囲内です"
}
ok: [localhost] => (item=192.168.12.255) => {
"msg": "192.168.12.255 は範囲内です"
}
skipping: [localhost] => (item=192.168.15.0)
skipping: [localhost] => (item=192.168.15.1)
skipping: [localhost] => (item=192.168.15.254)
skipping: [localhost] => (item=192.168.15.255)
バッチリですね。範囲外はskipping
で出力されてます。
サブネットマスク付きで書いたら範囲にあるか調べてくれるので非常に便利。
おまけ
インベントリファイルにサブネット付きでIPを書く方法を教えてもらったのでこちらも記載。
[myhosts]
172.17.12.[0:255]
この指定でmyhostsグループを指定すれば172.17.12.0〜172.17.12.255が対象になります。こっちはnetaddr
は使っていないのでインストール出来ない訳がある人はこっちを使ってみると良いかも。