てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] 親サブネットから利用可能な子サブネットを求める ipsubnet フィルター

はじめに

Ansible には、IP アドレスを扱うための様々なフィルターがあります。

docs.ansible.com

その中に ipsubnet というフィルターがあります。

このフィルターにはいくつか機能があり、例えば「10.0.0.0/24」内で /25 で区切ったときの N 番目のサブネットは何か求められます。

この記事では簡単な例でご紹介します。

  • 動作確認環境
    • Ansible 2.9.19

書式

 ipsubnet(親サブネット, 何番目) 

サンプルPlaybook

サンプルのPlaybookと出力例をコメントで記載します。

---
- hosts: localhost
  gather_facts: false

  tasks:
    - name: subnet manipulation
      debug:
        msg:
          # 以下は /24 の最初を求めるので "10.0.0.0/24"
          - "{{ '10.0.0.0/24' | ipsubnet(24, 0) }}"
          # 以下は /25 の最初を求めるので "10.0.0.0/25"
          - "{{ '10.0.0.0/24' | ipsubnet(25, 0) }}"
          # 以下は /25 のインデックス1を求めるので "10.0.0.128/25"
          - "{{ '10.0.0.0/24' | ipsubnet(25, 1) }}"
          # 以下は /25 のインデックス2を求めるので false、つまり範囲外
          - "{{ '10.0.0.0/24' | ipsubnet(25, 2) }}"
          # 以下は /25 を求めるので 10.0.0.240/28
          - "{{ '10.0.0.0/24' | ipsubnet(28, -1) }}"

おわりに

自前で計算しようとすると以外と手間な気がするので、このようなフィルターがあるのは助かります。