$Date: 2025/07/18 15:32:41 $
「Ansible」とは、米国Red Hat社が開発するオープンソースの構成管理ツールです。
ヤマハでは、ヤマハネットワーク機器(※対象機種は後述)をAnsibleで制御するためのモジュールをAnsible Galaxyにて公開しています。
Ansibleを活用することにより、コンフィグバックアップのような定型的な作業を自動化したり、CIツールと連携してイベントドリブンで設定変更したりすることができます。
本ドキュメントでは、ヤマハから公開しているAnsibleモジュールの使い方について説明します。
モジュールやプラグインなどを含むAnsibleコンテンツ配布形式
ユーザーが実行したい処理を記述するYAML形式のファイル
プレイブックの中で利用できる処理ユニット
操作対象機器のIPアドレスやホスト名(FQDN)を記述するファイル
Ansibleを実行する端末
操作対象の機器
以下の機種およびファームウェアで、ヤマハAnsibleモジュールに対応しています。
| Ansible Collection | 機種 | ファームウェア |
|---|---|---|
| rtx | vRXシリーズ | すべてのリビジョン |
| RTX840 | ||
| RTX3510 | ||
| RTX1300 | ||
| RTX1220 | ||
| RTX830 | ||
| NVR510 | ||
| NVR700W | ||
| RTX1210 | ||
| RTX5000 | ||
| RTX3500 | ||
| FWX120 | ||
| NVR500 | ||
| swx | SWX3220 | すべてのリビジョン |
| SWX3200 | ||
| SWX3100 | ||
| SWX2322P | ||
| SWX2320 | ||
| SWX2310P | ||
| SWX2310 | ||
| SWX2221P | Rev.1.05.03以降 | |
| SWX2220 | Rev.1.04.03以降P |
Ansibleのインストール方法からヤマハ Ansible RTXモジュールを用いてヤマハネットワーク機器を操作するまでの流れを説明します。
SWXモジュールを使用する場合も流れとしては同様です。
説明で使用する構成は以下の通りです。
| 種別 | ソフトウェア/ルーター | バージョン |
|---|---|---|
| コントロールノード | OS | Ubuntu Desktop 20.04 LTS |
| Ansible | 2.10.0 | |
| Python | 3.8.2 | |
| ターゲットノード | RTX1210 | Rev.14.01.36 |
コントロールノード ターゲットノード
[PC(Ubuntu)]------[RTX1210]
192.168.100.100 192.168.100.1
Ansibleのインストール手順はOSや環境によって異なります。
公式ドキュメントなどを参考に、 AnsibleをインストールするPC(以下、コントロールノード)の環境に合わせて適切な方法でインストールしてください。
Ansibleネットワークモジュールでは、デフォルトでPython SSHクライアントライブラリの「paramiko」が必要になるため併せてインストールしてください。
インストール時は、コントロールノードがインターネットに接続できる状態であることを確認してください。
ヤマハのAnsibleモジュールはAnsible Galaxyでコレクションとして配布されています。
コントロールノードでAnsible Galaxyコマンドを実行してコレクションをインストールしてください。
$ ansible-galaxy collection install yamaha_network.rtxなお、ヤマハスイッチ用「swx」コレクションは以下のコマンドでインストールできます。
$ ansible-galaxy collection install yamaha_network.swx
ターゲットホストを指定するために「inventory」ファイルを作成します。
テキストエディタで「inventory」ファイルを作成し、以下の内容を入力してください。
[RTX1210] 192.168.100.1
ターゲットホストの処理内容を指定するためのプレイブックをYAML形式で作成します。
ここでは、CollectionのREADME.mdに記載されているSample Playbookを使用します。
テキストエディタで「rtx.yml」ファイルを作成し、Sample Playbookの内容をコピー&ペーストしてください。
rtx_commandモジュールは、show系コマンドなど実行系コマンドを実行するためのモジュールです。
rtx_configモジュールは、設定系コマンドを実行するためのモジュールです。
---
- hosts: RTX1210
connection: network_cli
tasks:
- name: get configuration
yamaha_network.rtx.rtx_command:
commands:
- show config
register: result
- name: debug
debug:
msg: "{{ result.stdout_lines[0] }}"
- name: set description
yamaha_network.rtx.rtx_config:
lines:
- description 1 yamaha
vars:
ansible_network_os: yamaha_network.rtx.rtx
ansible_user: username
ansible_ssh_pass: password
ansible_become: true
ansible_become_password: become_password
コントロールノードはSSHでターゲットノードに接続するため、ターゲットノードでSSHサーバー機能を有効にする必要があります。
以下の手順でRTX1210の設定を行ってください。
ユーザー名やパスワードは「rtx.yml」で指定したパラメーターと一致させてください。
# administrator password become_password
# login user username password
# sshd host key generate
# sshd service on
最後にプレイブックを実行します。
コマンド実行時は、ディレクトリ構成とファイル配置に注意してください。
この例では「inventory」ファイルと「rtx.yml」ファイルをカレントディレクトリに配置しています。
$ ansible-playbook -i inventory rtx.yml PLAY [RTX1210] ***************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************* ok: [192.168.100.1] TASK [get configuration] ******************************************************************************************************************* ok: [192.168.100.1] TASK [set description] ********************************************************************************************************************* changed: [192.168.100.1] PLAY RECAP ********************************************************************************************************************************* 192.168.100.1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Ansibleの実行例を紹介します。
実行例で使用されている backup オプションや save_when オプションなど詳細については、GitHubで公開されている各コレクションの README.md を参照してください。
RTX1210, RTX830, NVR510のコンフィグファイルを毎日 8:00 にバックアップします。
この例ではAnsibleのcronモジュールを使用してcrontabを設定することで定期実行していますが、JenkinsなどのCIツールと連携して運用することも可能です。
構成とサンプルファイルは以下のとおりです。
コントロールノード ---+--- [RTX1210]
192.168.100.100 | 192.168.100.1
+--- [RTX830]
| 192.168.100.2
+--- [NVR510]
192.168.100.3
[routers:children] RTX1210 RTX830 NVR510 [RTX1210] rtx1210 ansible_host=192.168.100.1 ansible_user=username1 ansible_password=password1 ansible_become_password=become_password1 [RTX830] rtx830 ansible_host=192.168.100.2 ansible_user=username2 ansible_password=password2 ansible_become_password=become_password2 [NVR510] nvr510 ansible_host=192.168.100.3 ansible_user=username3 ansible_password=password3 ansible_become_password=become_password3
---
- hosts: routers
collections:
- yamaha_network.rtx
connection: network_cli
gather_facts: false
tasks:
- name: get configuration
rtx_config:
backup: yes
vars:
ansible_network_os: yamaha_network.rtx.rtx
ansible_user: username
ansible_ssh_pass: password
ansible_become: true
ansible_become_password: become_password
---
- hosts: localhost
gather_facts: false
tasks:
- name: set crontab
cron:
name: backup_config
minute: "0"
hour: "8"
job: "/usr/bin/ansible-playbook -i /YOUR_INVENTORY_PATH/inventory /YOUR_YAML_PATH/backup_config.yml"
# ip lan1 address 192.168.100.1/24 # administrator password become_password1 # login user username1 password1 # sshd host key generate # sshd service on
$ ansible-playbook set_crontab.yml PLAY [localhost] *************************************************************************************************************************** TASK [set crontab] ************************************************************************************************************************* changed: [localhost] PLAY RECAP ********************************************************************************************************************************* localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 $ crontab -l #Ansible: backup_config 0 8 * * * /usr/bin/ansible-playbook -i /YOUR_INVENTORY_PATH/inventory /YOUR_YAML_PATH/backup_config.yml (スケジュール実行後) $ ls backup backup_config.yml inventory set_crontab.yml $ ls backup/ nvr510_config.2020-07-07@08:00:32 rtx1210_config.2020-07-07@08:00:30 rtx830_config.2020-07-07@08:00:31
RTX1210にIPv6でアクセスし、syslog info off コマンドと syslog debug on コマンドを設定します。
構成とサンプルファイルは以下のとおりです。
コントロールノード ------- [RTX1210] IPv6自動設定(RA) 2001:DB8::1
[RTX1210] 2001:DB8::1
---
- hosts: RTX1210
collections:
- yamaha_network.rtx
connection: network_cli
gather_facts: false
tasks:
- name: set syslog level
rtx_config:
save_when: changed
lines:
- syslog info off
- syslog debug on
vars:
ansible_network_os: yamaha_network.rtx.rtx
ansible_become: true
ansible_user: username
ansible_password: password
ansible_become_password: become_password
# ipv6 lan1 address 2001:DB8::1/64 # ipv6 prefix 1 2001:DB8::/64 # ipv6 lan1 rtadv send 1 # administrator password become_password # login user username password # sshd host key generate # sshd service on
$ ansible-playbook -i inventory set_syslog_debug.yml PLAY [RTX1210] ***************************************************************************************************************************** TASK [set syslog level] ******************************************************************************************************************** changed: [2001:DB8::1] PLAY RECAP ********************************************************************************************************************************* 2001:DB8::1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0