てくなべ (tekunabe)

ansible / network automation / 学習メモ

【Ansible】Ansible 2.7 リリース、Mikrotik RouterOS などに対応。マルチベンダー対応コマンドモジュールの登場など、ネットワーク対応も強化

■ 1. はじめに

2018/10/04 に Ansible 2.7 がリリースされました。 pip install ansible2.7.0.0 がインストールされます。

ネットワーク対応についても対応のプラットフォームやオプションの追加などが行われました。 この記事では、ネットワークモジュール関連のアップーデートの中で、個人的に気になるトピックをまとめます。

(全体的なアップデートについてはあとで公式ブログでまとめられるかもしれません)


■ 2. 対応プラットフォームの追加

新たに以下のプラットフォーム対応が追加されました。

network_cli コネクションプラグインのみサポート

Extreme NOS、Extreme VOSS、MikroTik RouterOS 対応モジュールについては、local コネクションプラグインをサポートせず、network_cli コネクションプラグインのみをサポートしています。 そのため、ディレクティブで指定する場合は connetcion: network_cli、変数で指定する場合は ansible_connection: network_cli のように指定する必要があります。プラットフォームとコネクションプラグインの対応表は、公式ドキュメントの Settings by Platform を参照してください。

現状、例えば ios_* モジュールでは localnetwork_cli コネクションプラグインに対応しています。あくまで予想ですが、これらの既存のネットワークモジュールいついても、コードの保守性向上のため、将来 local コネクションプラグインをサポートしなくなるかもしれません。


■ 3. モジュールの追加

Ansible 2.7 で追加されたモジュールのうち、Network modules に分類されるモジュールは以下の通りです。


■ 4. マルチベンダー対応のコマンド実行モジュールの追加

「モジュールの追加」にもあげましたが、cli_command / cli_config モジュールが追加されました。これらのモジュールは特定のベンダー固有のモジュールではなく、マルチベンダーに対応しています。 例えば、 Cisco IOS でも Juniper Junos でも使えます。簡単な利用例をご紹介します。

グループ変数定義ファイルサンプル(group_vars/junos.yml)

ansible_network_os: junos
ansible_connection: network_cli    # network_cli のみサポート
ansible_user: junosuser
ansible_ssh_pass: p@ss99

cli_command モジュール利用 Playbook サンプル

- hosts: junos
  gather_facts: no

  tasks:
    - name: command test
      cli_command:
        command: show version
      register: result

    - name: debug 
      debug:
        msg: "{{ result }}"

cli_config モジュール利用 Playbook サンプル

- hosts: junos
  gather_facts: no

  tasks:
    - name: config test
      cli_config:
        config: set system ntp server 10.0.0.123

利用するうえでのポイント

コマンドの指定はリストではなく文字列

プラットフォーム固有モジュールの ios_commandcommands オプションや、ios_configlines オプションには、コマンドをリストとして指定します。 一方、cli_commandcli_config モジュールには文字列で指定します。オプション名の commandconfig も単数形になっています。そのため、複数のコマンドを指定する場合は、lookup プラグインで別途ファイルを読み込むなどの工夫が必要です。詳細は各公式ドキュメントの Examples を参照してください。

network_cli コネクションプラグインのみサポート

両モジュールとも network_cli コネクションプラグインのみサポートしています。 netconf コネクションプラグインはサポートしていません。 そのため、Junos に設定コマンドを投入する場合、以下の使い分けを意識する必要があります。

  • junoc_config を利用する場合は、netconf コネクションプラグイン
  • cli_config を利用する場合は、network_cli コネクションプラグイン


■ 5. httpapi コネクションプラグインで証明書の検証有無を指定可能に

httpapi コネクションプラグインは、HTTP API 機能がある Cisco NX-OS や、Arista EOS のネットワーク機器に対して、HTTP API で接続するコネクションプラグインです。 今回 Ansible 2.7 で、SSL/TLS 接続する際にの明書の検証有無を指定する validate_certs パラメーターが追加されました。デフォルトは yes です。つまり、このコネクションプラグイン自体が導入された Ansible 2.6 のときと同じく、検証する仕様です。 なお、変数で指定する場合は、ansible_httpapi_validate_certs 変数を利用します。

  • SSL/TLS 接続する際に、証明書の検証をしない変数指定例
ansible_httpapi_use_ssl: yes        # SSL/TSL 接続を有効にする場合は yes(デフォルト no )
ansible_httpapi_validate_certs: no  # 証明書を検証しない場合は no(デフォルト yes )


■ 6. ios_user モジュールでユーザーの公開鍵を指定できるように

ios_user モジュールCisco IOS のネットワーク機器上のユーザーを管理するモジュールです。 今までは、管理対象のユーザーの認証情報としてパスワードのみ(configured_password オプション)の対応でした。今回、Ansible 2.7 で sshkey オプションを利用して公開鍵を指定できるようになりました。

- name: create a new user
  ios_user:
    name: ansible
    nopassword: True
    sshkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"   # 公開鍵の指定
    state: present


■ まとめ

Ansible 2.7 におけるネットワークモジュールのトピックをご紹介しました。

引き続き、対応王プラットフォームが増え続けている点と、cli_command / cli_config のようなマルチプラットフォーム対応のコマンド実行モジュールが出てきた点が印象的でした。