1. atsushi586

    Posted

    atsushi586
Changes in title
+Ansibleを使ってサブネットマスクの範囲に対象のIPがあるか調べる
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,76 @@
+# 概要
+`Ansibleを使って、対象のIPがサブネットマスク付きのIPに該当する場合は処理を実行する`を実現したくて、その方法を教えてもらったので備忘録として作成。
+
+## `netaddr`を使う
+pythonのライブラリの一つみたいです。
+インストールがされていない方は下記コマンドでインストールしてください。
+
+```
+# pip install netaddr
+```
+もし証明書関連のエラーが出てインストール出来ない場合はpip.confファイルを作成して再度インストールを実行してみてください。ここの記事が参考になると思います。
+
+https://qiita.com/agajo/items/73d6f14855da703972e0
+
+
+## 使ってみる
+いただきもののコードですが、下記コードを使って本当にサブネットマスク指定でヒットするか確認してみます。
+
+```
+---
+- 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`は使っていないのでインストール出来ない訳がある人はこっちを使ってみると良いかも。