$Date: 2023/07/06 20:22:18 $
「Ansible」とは、米国Red Hat社が開発するオープンソースの構成管理ツールです。
ヤマハでは、ヤマハネットワーク機器(※対象機種は後述)をAnsibleで制御するためのモジュールをAnsible Galaxyにて公開しています。
Ansibleを活用することにより、コンフィグバックアップのような定型的な作業を自動化したり、CIツールと連携してイベントドリブンで設定変更したりすることができます。
本ドキュメントでは、ヤマハから公開しているAnsibleモジュールの使い方について説明します。
モジュールやプラグインなどを含むAnsibleコンテンツ配布形式
ユーザーが実行したい処理を記述するYAML形式のファイル
プレイブックの中で利用できる処理ユニット
操作対象機器のIPアドレスやホスト名(FQDN)を記述するファイル
Ansibleを実行する端末
操作対象の機器
以下の機種およびファームウェアで、ヤマハAnsibleモジュールに対応しています。
Ansible Collection | 機種 | ファームウェア |
---|---|---|
rtx | vRX | すべてのリビジョン |
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
SSH サーバー機能を利用する場合は、事前に本コマンドを実行してホスト鍵を生成する必要がある。 既にホスト鍵が設定されている状態で本コマンドを実行した場合、ユーザに対してホスト鍵を更新するか否かを確認する。 ホスト鍵の生成には、機種によって異なるが、1024ビット鍵では数秒から 数分程度、2048ビット鍵では数分から十数分程度の時間がかかる。
TFTP で設定を取得した場合は、sshd host key generate [bit=bit] KEY1 KEY2 KEY3 という形式で保存される。 KEY1 - KEY3 は、秘密鍵を機器固有の方式で暗号化した文字列である。
bit キーワードは、RTX5000 / RTX3500 Rev.14.00.21 以降、RTX1210 Rev.14.01.11 以降のファームウェア、および、Rev.15.02 系以降のすべてのファームウェアで使用可能。
ログインユーザ名とパスワードを設定する。
登録できるユーザは最大 32 人。
ユーザ名に使用できる文字は、半角英数字およびハイフン (-)、アンダーバー(_)。
第 1 書式では、パスワードは平文で入力し、暗号化して保存される。また、パスワードを省略すると、コマンド入力後にプロンプトに応じて改めてパスワードを入力する形になる。パスワードに使用できる文字は、半角英数字および記号 (7bit ASCII Code で表示可能なもの )。 第 2 書式では、password に暗号化されたパスワードを入力する。
TFTP で設定を取得した場合は、パスワードが暗号化されて保存されているため、常に第 2 書式の形で表示される。
同一のユーザ名を複数登録することはできない。
既に登録されているユーザ名で設定を行った場合は、元の設定が上書きされる。
syslog execute command を on に設定している場合には、設定パスワードがログに残ることを防ぐために、パスワードを省略した書式で入力するか、一時的にsyslog execute command を off に設定する、さもなくばclear log を実行するなどの操作を行うことが望ましい。