■ 1. はじめに
2018/10/04 に Ansible 2.7 がリリースされました。
pip install ansible
で 2.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_*
モジュールでは local
と network_cli
コネクションプラグインに対応しています。あくまで予想ですが、これらの既存のネットワークモジュールいついても、コードの保守性向上のため、将来 local
コネクションプラグインをサポートしなくなるかもしれません。
■ 3. モジュールの追加
Ansible 2.7 で追加されたモジュールのうち、Network modules に分類されるモジュールは以下の通りです。
- aci_interface_policy_ospf - Manage OSPF interface policies (ospf:IfPol)
- bigip_appsvcs_extension - Manage application service deployments
- bigip_cli_alias - Manage CLI aliases on a BIG-IP
- bigip_cli_script - Manage CLI scripts on a BIG-IP
- bigip_device_auth - Manage system authentication on a BIG-IP
- bigip_device_facts - Collect facts from F5 BIG-IP devices
- bigip_firewall_dos_profile - Manage AFM DoS profiles on a BIG-IP
- bigip_firewall_policy - Manage AFM security firewall policies on a BIG-IP
- bigip_firewall_rule - Manage AFM Firewall rules
- bigip_firewall_rule_list - Manage AFM security firewall policies on a BIG-IP
- bigip_monitor_dns - Manage DNS monitors on a BIG-IP
- bigip_profile_http - Manage HTTP profiles on a BIG-IP
- bigip_profile_http_compression - Manage HTTP compression profiles on a BIG-IP
- bigip_profile_oneconnect - Manage OneConnect profiles on a BIG-IP
- bigip_profile_persistence_src_addr - Manage source address persistence profiles
- bigip_remote_role - Manage remote roles on a BIG-IP
- bigip_software_image - Manage software images on a BIG-IP
- bigip_software_install - Install software images on a BIG-IP
- bigip_tunnel - Manage tunnels on a BIG-IP
- bigiq_utility_license_assignment - Manage utility license assignment on BIG-IPs from a BIG-IQ
- cli_command - Run a cli command on cli-based network devices
- cli_config - Push text based configuration to network devices over network_cli
- exos_config - Manage Extreme Networks EXOS configuration sections
- exos_facts - Collect facts from devices running Extreme EXOS
- fmgr_provisioning - Provision devices via FortiMananger
- ftd_configuration - Manages configuration on Cisco FTD devices over REST API
- ftd_file_download - Downloads files from Cisco FTD devices over HTTP(S)
- ftd_file_upload - Uploads files to Cisco FTD devices over HTTP(S)
- meraki_config_template - Manage configuration templates in the Meraki cloud
- meraki_device - Manage devices in the Meraki cloud
- meraki_mr_l3_firewall - Manage MR access point layer 3 firewalls in the Meraki cloud
- meraki_mx_l3_firewall - Manage MX appliance layer 3 firewalls in the Meraki cloud
- meraki_ssid - Manage wireless SSIDs in the Meraki cloud
- meraki_switchport - Manage switchports on a switch in the Meraki cloud
- meraki_vlan - Manage VLANs in the Meraki cloud
- nos_command - Run commands on remote devices running Extreme Networks NOS
- nos_config - Manage Extreme Networks NOS configuration sections
- nos_facts - Collect facts from devices running Extreme NOS
- nxos_rpm - Install patch or feature rpms on Cisco NX-OS devices.
- onyx_igmp - Configures IGMP globl parameters
- opx_cps - CPS operations on networking device running Openswitch (OPX)
- panos_set - Execute arbitrary commands on a PAN-OS device using XPath and element
- routeros_command - Run commands on remote devices running MikroTik RouterOS
- slxos_lldp - Manage LLDP configuration on Extreme Networks SLX-OS network devices.
- voss_command - Run commands on remote devices running Extreme VOSS
- voss_facts - Collect facts from remote devices running Extreme VOSS
■ 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_command
の commands
オプションや、ios_config
の lines
オプションには、コマンドをリストとして指定します。
一方、cli_command
や cli_config
モジュールには文字列で指定します。オプション名の command
、config
も単数形になっています。そのため、複数のコマンドを指定する場合は、lookup
プラグインで別途ファイルを読み込むなどの工夫が必要です。詳細は各公式ドキュメントの Examples を参照してください。
参照:
cli_command
モジュール Examples参照:
cli_config
モジュール Examples
network_cli
コネクションプラグインのみサポート
両モジュールとも network_cli
コネクションプラグインのみサポートしています。 netconf
コネクションプラグインはサポートしていません。
そのため、Junos に設定コマンドを投入する場合、以下の使い分けを意識する必要があります。
■ 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
変数を利用します。
ansible_httpapi_use_ssl: yes # SSL/TSL 接続を有効にする場合は yes(デフォルト no ) ansible_httpapi_validate_certs: no # 証明書を検証しない場合は no(デフォルト yes )
- 参考: httapi コネクションプラグインの詳細
■ 6. ios_user モジュールでユーザーの公開鍵を指定できるように
ios_user
モジュールはCisco IOS のネットワーク機器上のユーザーを管理するモジュールです。
今までは、管理対象のユーザーの認証情報としてパスワードのみ(configured_password
オプション)の対応でした。今回、Ansible 2.7 で sshkey
オプションを利用して公開鍵を指定できるようになりました。
- sshkey オプション利用例(公式ドキュメントから引用)
- name: create a new user ios_user: name: ansible nopassword: True sshkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" # 公開鍵の指定 state: present
- 参考:
ios_user
モジュール詳細
■ まとめ
Ansible 2.7 におけるネットワークモジュールのトピックをご紹介しました。
引き続き、対応王プラットフォームが増え続けている点と、cli_command
/ cli_config
のようなマルチプラットフォーム対応のコマンド実行モジュールが出てきた点が印象的でした。