Infoblox ガイド

本ガイドでは、Infoblox NIOS (Network Identity Operating System) で Ansible を使用する方法を説明します。Ansible 統合では、Ansible Playbook を使用して、IP アドレス管理 (IPAM)、DNS、およびインベントリー追跡について Infoblox Core Network Services を自動化できます。

ドキュメントの簡単なサンプルタスクで、NIOS モジュール について確認し、詳細な例は「`モジュールを使用した使用事例`_」のセクションを参照してください。Infoblox 製品の詳細は、Infoblox の Web サイトを参照してください。

Note

本ガイドで使用されている Playbook の例のほとんどは、GitHub リポジトリー network-automation/infoblox_ansible から取得できます。

要件

Infoblox で Ansible nios モジュールを使用する前に、Ansible コントロールノードに infoblox-client をインストールする必要があります。

$ sudo pip install infoblox-client

Note

Infoblox で Ansible を使用するには、WAPI 機能が有効になっている NIOS アカウントが必要です。

認証情報および認証

Playbook で Infoblox の nios モジュールを使用するには、Infoblox システムにアクセスするための認証情報を設定する必要があります。 本ガイドの例では、<playbookdir>/group_vars/nios.yml に保存されている認証情報を使用します。これらの値を、Infoblox 認証情報に置き換えます。

---
nios_provider:
  host:192.0.0.2
  username: admin
  password: ansible

NIOS Lookup プラグイン

Ansible には、NIOS 用に以下の lookup プラグインが含まれます。

  • nios - Infoblox WAPI API を使用して NIOS が指定されたオブジェクト (ネットワークビュー、DNS ビュー、ホストレコードなど) を取得します。
  • nios_next_ip - ネットワークから次に利用可能な IP アドレスを指定します。この例では、「ホストレコードの作成」を参照してください。
  • nios_next_network - ネットワークコンテナーで利用可能な次のネットワーク範囲を返します。

connection: local を指定して、NIOS lookup プラグインをローカルに実行する必要があります。詳細は、「lookup プラグイン」を参照してください。

すべてのネットワークビューの取得

すべてのネットワークビューを取得して変数に保存するには、nios lookup プラグインで set_fact <set_fact_module>モジュールを使用します。

---
- hosts: nios
  connection: local
  tasks:
    - name: fetch all networkview objects
      set_fact:
        networkviews: "{{ lookup('nios', 'networkview', provider=nios_provider) }}"

    - name: check the networkviews
      debug:
        var: networkviews

ホストレコードの取得

ホストレコードのセットを取得するには、nios lookup プラグインで set_fact モジュールを使用し、取得する特定ホストのフィルターを含めます。

---
- hosts: nios
  connection: local
  tasks:
    - name: fetch host leaf01
      set_fact:
         host: "{{ lookup('nios', 'record:host', filter={'name': 'leaf01.ansible.com'}, provider=nios_provider) }}"

    - name: check the leaf01 return variable
      debug:
        var: host

    - name: debug specific variable (ipv4 address)
      debug:
        var: host.ipv4addrs[0].ipv4addr

    - name: fetch host leaf02
      set_fact:
        host: "{{ lookup('nios', 'record:host', filter={'name': 'leaf02.ansible.com'}, provider=nios_provider) }}"

    - name: check the leaf02 return variable
      debug:
        var: host

この Playbook get_host_record.yml を実行すると、以下のような結果が表示されるはずです。

$ ansible-playbook get_host_record.yml

PLAY [localhost] ***************************************************************************************

TASK [fetch host leaf01] ******************************************************************************
ok: [localhost]

TASK [check the leaf01 return variable] *************************************************************
ok: [localhost] => {
< ...output shortened...>
    "host": {
        "ipv4addrs": [
            {
                "configure_for_dhcp": false,
                "host": "leaf01.ansible.com",
            }
        ],
        "name": "leaf01.ansible.com",
        "view": "default"
    }
}

TASK [debug specific variable (ipv4 address)] ******************************************************
ok: [localhost] => {
    "host.ipv4addrs[0].ipv4addr": "192.168.1.11"
}

TASK [fetch host leaf02] ******************************************************************************
ok: [localhost]

TASK [check the leaf02 return variable] *************************************************************
ok: [localhost] => {
< ...output shortened...>
    "host": {
        "ipv4addrs": [
            {
                "configure_for_dhcp": false,
                "host": "leaf02.example.com",
                "ipv4addr": "192.168.1.12"
            }
        ],
    }
}

PLAY RECAP ******************************************************************************************
localhost                  : ok=5    changed=0    unreachable=0    failed=0

上記の出力は、nios lookup プラグインによって取得した leaf01.ansible.com および leaf02.ansible.com のホストレコードを示しています。この Playbook は、他の Playbook で使用できる変数に情報を保存します。これにより、Infoblox を単一のソースとして使用し、動的に変更する情報を収集して使用できます。Ansible 変数の使用方法の詳細は、「変数の使用」を参照してください。取得できるその他のデータオプションは、「nios」の例を参照してください。

この Playbook には、Infoblox lookup playbooks でアクセスできます。

モジュールとのユースケース

nios モジュールをタスク内で使用して、共通の Infoblox ワークフローを簡素化できます。以下の例を使用する前に、NIOS 認証情報 を必ず設定してください。

IPv4 ネットワークの設定

IPv4 ネットワークを設定するには、nios_network モジュールを使用します。

---
- hosts: nios
  connection: local
  tasks:
    - name:Create a network on the default network view
      nios_network:
        network:192.168.100.0/24
        comment: sets the IPv4 network
        options:
          - name: domain-name
            value: ansible.com
        state: present
        provider: "{{nios_provider}}"

最後のパラメーター provider は、group_vars/ ディレクトリーに定義された変数 nios_provider を使用します。

ホストレコードの作成

新たに作成した IPv4 ネットワーク上に leaf03.ansible.com という名前のホストレコードを作成するには、以下を実行します。

---
- hosts: nios
  connection: local
  tasks:
    - name: configure an IPv4 host record
      nios_host_record:
        name: leaf03.ansible.com
        ipv4addrs:
          - ipv4addr:
              "{{ lookup('nios_next_ip', '192.168.100.0/24', provider=nios_provider)[0] }}"
        state: present
provider: "{{nios_provider}}"

この例の IPv4 アドレスは、nios_next_ip lookup プラグインを使用して、ネットワーク上で次に利用可能な IPv4 アドレスを検索します。

正引き DNS ゾーンの作成

正引き DNS ゾーンを設定するには、nios_zone モジュールを使用します。

---
- hosts: nios
  connection: local
  tasks:
    - name:Create a forward DNS zone called ansible-test.com
      nios_zone:
        name: ansible-test.com
        comment: local DNS zone
        state: present
        provider: "{{ nios_provider }}"

逆引き DNS ゾーンの作成

逆引き DNS ゾーンを設定するには、以下を行います。

---
- hosts: nios
  connection: local
  tasks:
    - name: configure a reverse mapping zone on the system using IPV6 zone format
      nios_zone:
        name:100::1/128
        zone_format:IPV6
        state: present
        provider: "{{ nios_provider }}"

動的インベントリースクリプト

Infoblox 動的インベントリースクリプトを使用して、Infoblox NIOS でネットワークノードのインベントリーをインポートできます。Infoblox からインベントリーを収集するには、以下の 2 つのファイルが必要です。

  • infoblox.yaml - NIOS プロバイダーの引数とオプションフィルターを指定するファイル。
  • infoblox.py - NIOS インベントリーを取得する python スクリプト。

Infoblox 動的インベントリースクリプトを使用するには、以下を実行します。

  1. Download the infoblox.yaml ファイルを作成し、これを /etc/ansible ディレクトリーに保存します。

NIOS 認証情報が含まれる #. Modify the infoblox.yaml ファイル

  1. infoblox.py ファイルをダウンロードして、/etc/ansible/hosts ディレクトリーに保存します。

実行可能にする #. infoblox.py ファイルのパーミッションを変更して、ファイルを実行ファイルにします。

$ sudo chmod +x /etc/ansible/hosts/infoblox.py

必要に応じて、./infoblox.py --list を使用してスクリプトをテストできます。数分後に、Infoblox インベントリーが JSON 形式で表示されるはずです。以下のように Infoblox 動的インベントリースクリプトを明示的に使用できます。

$ ansible -i infoblox.py all -m ping

Infoblox 動的インベントリースクリプトをインベントリーディレクトリー (デフォルトでは etc/ansible/hosts) に追加することで暗黙的に使用することもできます。詳細は、動的インベントリーの使用 を参照してください。

See also

Infoblox Web サイト
Infoblox の Web サイト
Infoblox および Ansible デプロイメントガイド
Infoblox が提供する Ansible 統合のデプロイメントガイド
Ansible 2.5 での Infoblox 統合
Infoblox に関する Ansible ブログ投稿
Ansible NIOS モジュール
対応している NIOS モジュールの一覧 (サンプル例あり)
Infoblox Ansible のサンプル
Infoblox の Playbook サンプル