■ はじめに
Ansible には、IP アドレスに対してさまざまフィルターをかける ipaddrというフィルタープラグインがあります。
過去記事参考: [ipaddr フィルターでプレフィックス表記とネットマスク表記を変換する)
このフィルターを使って、IPアドレスのリストの中から、特定の範囲のIPアドレスだけを抽出する方法を試します。
- 動作確認環境: Ansible 2.8.4
- 要 netaddr (
pip install netaddr
でインストール)
■ サンプル
簡単なサンプルで説明します。
Playbook
検証する Playbook は以下の通りです。
target_list
に定義されているIPアドレスの中で ip_range
(192.168.12.0/24) に含まれているものだけを debug
モジュールで出力します。
--- - hosts: localhost connection: local gather_facts: no # 各種変数の定義 vars: ip_range: 192.168.12.0/24 # この範囲のIPアドレスだけ抽出したい target_list: # 調べたいIPアドレスのリスト - 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 # タスクの定義 tasks: - name: net range test debug: msg: "{{ item }} は {{ ip_range }} の範囲内です" loop: "{{ target_list | ipaddr(ip_range) }}" # フィルター後にループ
実行結果
Playbook を実行します。
$ ansible-playbook -i localhost, test.yml PLAY [localhost] ************************************************************************************************** TASK [net range test] ********************************************************************************************* ok: [localhost] => (item=192.168.12.0) => { "msg": "192.168.12.0 は 192.168.12.0/24 の範囲内です" } ok: [localhost] => (item=192.168.12.1) => { "msg": "192.168.12.1 は 192.168.12.0/24 の範囲内です" } ok: [localhost] => (item=192.168.12.254) => { "msg": "192.168.12.254 は 192.168.12.0/24 の範囲内です" } ok: [localhost] => (item=192.168.12.255) => { "msg": "192.168.12.255 は 192.168.12.0/24 の範囲内です" } PLAY RECAP ******************************************************************************************************** localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.12.0/24
の範囲内の IP アドレスだけ抽出されました。ループ前に抽出されるので、 そもそも 192.168.15.0
などはループの対象にはならず、skipped
としても表示されません。
もしループ後に抽出したい場合は、以下の記事のように when
で判断するのが良いと思います。このあたりはお好みで。
なお、192.168.12.0/24
ではなく 192.168.12.0/255.255.255.0
のようなマスク表記でも正常に抽出されました。
192.168.12.0/24
と 192.168.13.0/24
のような範囲同士の比較、抽出もできるようようです。
■ まとめ
ipaddr フィルターで特定の範囲のIPアドレスを抽出する方法をご紹介しました。
ipaddr フィルタープラグインには、他にもさまざまな機能がありますので、IP アドレスに対してなにか加工したい場合は、このフィルターを調べてみると良いかもしれません。