【Ansible】YAMAHA ルーター用 Ansible モジュールを使ってみた

先日 YAMAHA さんから ルーター用の ansible モジュールが公開されたので使ってみた。

試してみたこと

既存 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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です