先日 YAMAHA さんから ルーター用の ansible モジュールが公開されたので使ってみた。
- YAMAHA 公式サイト: Ansibleによる運用自動化について
- Asible Galaxy: https://galaxy.ansible.com/yamaha_network/rtx
- Github: https://github.com/yamaha-network/ansible-collection-rtx
試してみたこと
既存 VPN 設定の接続先のアドレスを変更してトンネルを有効化してみた。(Azure との接続検証でよくやる)
プレイブックは以下の通り。
---
- hosts: RTX830
connection: network_cli
gather_facts: false
tasks:
- name: check status tunnel 1
yamaha_network.rtx.rtx_command:
commands:
- show status tunnel 1
register: result
- name: show status tunnel 1
debug:
msg: "{{ result.stdout_lines[0] }}"
- name: modify tunnel settings
yamaha_network.rtx.rtx_config:
lines:
- ipsec ike remote address 1 XX.XX.XX.XX
- ipsec ike remote name 1 XX.XX.XX.XX ipv4-addr
- tunnel enable 1
parents: tunnel select 1
- name: wait for VPN connection
pause:
seconds: 3
- name: check status tunnel 1
yamaha_network.rtx.rtx_command:
commands:
- show status tunnel 1
register: result
- name: show status tunnel 1
debug:
msg: "{{ result.stdout_lines[0] }}"
vars:
ansible_network_os: yamaha_network.rtx.rtx
ansible_become: true
普通に使える。(当たり前か
famichiki:ansible famikichi$ ansible-playbook -i inventories/inventory rtx.yml
PLAY [RTX830] ****************************************************************************
TASK [check status tunnel 1] ***********************************************************
ok: [rtx830]
TASK [show status tunnel 1] ************************************************************
ok: [rtx830] => {
"msg": [
"TUNNEL[1]: ",
"Description: azure-vnet-1",
" Current status is disabled."
]
}
TASK [modify tunnel settings] ************************************************************
changed: [rtx830]
TASK [wait for VPN connection] *********************************************************
Pausing for 3 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)
ok: [rtx830]
TASK [check status tunnel 1] ***********************************************************
ok: [rtx830]
TASK [show status tunnel 1] ************************************************************
ok: [rtx830] => {
"msg": [
"TUNNEL[1]: ",
"Description: azure-vnet-1",
" Interface type: IPsec",
" Current status is Online.",
" from 2021/04/01 12:51:48.",
" 3 seconds connection.",
" Received: (IPv4) 1753615 packets [111073822 octets]",
" (IPv6) 0 packet [0 octet]",
" Transmitted: (IPv4) 1742064 packets [86585090 octets]",
" (IPv6) 0 packet [0 octet]",
" IKE keepalive:",
" [Type]: rfc4306",
" [Status]: OK",
" [Next send]: 2 sec after"
]
}
PLAY RECAP *******************************************************************************
rtx830 : ok=6 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
対話形式になるコマンドについても prompt と answer を使用して対応することができた。(結果は長いので割愛)
書き方が悪いのか、たまに prompt を認識してくれないときがあるけど原因は不明。
---
- hosts: RTX830
connection: network_cli
gather_facts: false
tasks:
- name: get configuration
yamaha_network.rtx.rtx_command:
commands:
- command: 'show config 2'
check_all: true
prompt:
- "Input passwords of CONFIG2\r\nLogin Password: "
- 'Administrator Password: '
answer:
- 'loginpassword'
- 'adminpassword'
register: result
- name: debug
debug:
msg: "{{ result.stdout_lines[0] }}"
vars:
ansible_network_os: yamaha_network.rtx.rtx
ansible_become: true
その他
-
edit_macro が存在するところを見る限り macro の設定にも対応していそう。
(面倒なので検証はしない -
プロンプトの判別はここでやってる。
-
指定できるパラメータは Cisco の ios_command, ios_config と同等っぽい。
-
日本語やコンソール幅の対策として一時的に以下コマンドが実行されており、最終的にはとっておいた元の設定に戻されている
- console character ascii
- console lines infinity
- console columns 200