YAMAHAの公式Ansibleモジュールが公開されたので試してみる
念願のAnsibleモジュール
先日Twitterでついに念願のヤマハのansibleモジュールが公開されたよう。
ヤマハ公式のドキュメント
ヤマハのansible github
というわけで自宅の環境で早速試してみることとする。
環境
-
コントロールノード
.., ....,,:;+ccllll ...,,+:; cllllllllllllllllll wlinux2@hogehoge ,cclllllllllll lllllllllllllllllll ------------------------------ llllllllllllll lllllllllllllllllll OS: Pengwin on Windows 10 x86_64 llllllllllllll lllllllllllllllllll Kernel: 4.19.104-microsoft-standard llllllllllllll lllllllllllllllllll Uptime: 11 days, 10 hours, 39 mins llllllllllllll lllllllllllllllllll Packages: 926 (dpkg), 9 (brew) llllllllllllll lllllllllllllllllll Shell: bash 5.1.4 Resolution: 3840x2160 llllllllllllll lllllllllllllllllll WM: X410 llllllllllllll lllllllllllllllllll Terminal: vscode llllllllllllll lllllllllllllllllll CPU: AMD Ryzen 7 3700X (16) @ 3.593GHz llllllllllllll lllllllllllllllllll Memory: 1654MiB / 25606MiB llllllllllllll lllllllllllllllllll
-
ターゲットノード
FWX120 Rev.11.03.27 (Fri Apr 20 08:57:10 2018) -
ディレクトリ
とりあえず実験なのでトップディレクトリでやっているが、roleを使って出来るようにとりあえずこんな感じでおいてある。
追加変数の都合でこのような形を取ってある。tree. ├── ansible.cfg ├── backup ├── group_vars │ ├── all.yml │ ├── vault.yml │ └── yamaha.yml ├── inventories │ ├── inventory ├── roles │ └── yamaha │ └── tasks │ ├── main.yml │ └── network_backup.yml ├── template │ └── yamaha │ └── 192.168.x.x_config.2021-03-30@13:14:23 ├── network_backup.yml └── fwx120.yml
事前準備
まずAnsibleのインストールやら、ansible-galaxy でコレクションをいれたりparamikoをインストールなどはしておく。
また対象機器が古いく、opensshが新しい物だと(自分の環境だとOpenSSH_8.4p1 Debian-5, OpenSSL 1.1.1j 16 Feb 2021
)ヤマハ機器へのSSHが出来ないので、.ssh/config
でSSH接続の設定を入れておく。
Host FWX120
HostName 192.168.x.x
User ANSIBLE-USER
KexAlgorithms +diffie-hellman-group1-sha1
Ciphers +3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,
そのほかにターゲットノード側にSSHのユーザやパスワードなど設定をしておく。
config表示
接続確認まで出来たら公式にあるサンプルを元に実行してみる。
公式のそのままだと動かなかったり、インデントがいまいちで怒られたりするので手を入れている。
---
- hosts: FWX120
vars_files:
- group_vars/yamaha.yml
collections:
- yamaha_network.rtx
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をplaybook内に書いているが/group_vars/yamaha.yml
に記載するようにしている。
また
collections:
- yamaha_network.rtx
で指定しているためモジュールはFQCN表記でなくても動くと思うが一応フルパスで書くことが推奨なのでフルパスで。
ansible_network_os: yamaha_network.rtx.rtx
ansible_user: ansible
ansible_ssh_pass: {{SSH PASS}}
ansible_become: true
ansible_become_password: {{BECOME PASS}}
あとは実行するだけ。
$ ansible-playbook -i inventories/inventory fwx120.yml
PLAY [FWX120] ************************************************************************
TASK [Gathering Facts] ***************************************************************
ok: [192.168.1.x]
TASK [get configuration] *************************************************************
ok: [192.168.1.x]
TASK [debug] *************************************************************************
ok: [192.168.1.x] => {
"msg": [
"description 1 yamaha",
"login password *",
"administrator password *",
"login user ansible *",
"security class 1 on off on",
"console character ascii",
"console columns 200",
"console lines infinity",
"console prompt FWX120",
"ip route default gateway 192.168.1.1",
(( 中略 ))
"sshd service on",
"sshd host 192.168.1.1-192.168.1.254",
"sshd host key generate *",
"statistics cpu on",
"statistics memory on",
"statistics traffic on",
"statistics flow on",
"statistics route on",
"statistics nat on",
"statistics filter on"
]
}
TASK [set description] ***************************************************************
ok: [192.168.1.x]
PLAY RECAP ***************************************************************************
192.168.1.x : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ひとまずconfigは表示できているようできちんと動いていることがわかった。
バックアップ取得
コンフィグの表示は出来たようなので次はバックアップ取得するplaybookを書いてみる。
例によって公式にある物をベースに手を入れた物。
---
- hosts: FWX120
vars_files:
- group_vars/yamaha.yml
collections:
- yamaha_network.rtx
connection: network_cli
tasks:
- name: get configuration
yamaha_network.rtx.rtx_config:
backup: yes
backup_options:
dir_path: ./template/yamaha/
backup
のオプションで保存場所を変更している。
今回は/template
の中で機器ごとにconfigを吐き出せるようにしてみた。
バックアップファイルを元にconfig投入できるようになれば人間の手からルータを完全に手放すことが出来る。
晴れてIaCの完成というわけ。
で、実行してみる。
$ ansible-playbook -i inventories/inventory network_backup.yml
PLAY [FWX120] ************************************************************************
TASK [Gathering Facts] ***************************************************************
ok: [192.168.1.x]
TASK [get configuration] *************************************************************
changed: [192.168.1.x]
PLAY RECAP ***************************************************************************
192.168.1.x : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
成功したようだ、きちんとファイルが作成されているかチェックする。
$ ls template/yamaha/
192.168.1.x_config.2021-03-30@13:14:23
というわけで想定通りの場所にコンフィグを吐き出すことが出来た。
$ tail /template/yamaha/hoge_config.2021-03-30
sshd service on
sshd host 192.168.1.1-192.168.1.254
sshd host key generate *
statistics cpu on
statistics memory on
statistics traffic on
statistics flow on
statistics route on
statistics nat on
statistics filter on
中身も先ほど確認した物ができているようだ。
role化
roleで実行するように試してみる。
---
- name: Manage Network setting
hosts: YAMAHA
vars_files:
- group_vars/yamaha.yml
- group_vars/all.yml
- group_vars/vault.yml
connection: network_cli
become: true
roles:
- { role: yamaha, tags: manage }
---
- include_tasks: roles/yamaha/tasks/fwx120.yml
- include_tasks: roles/yamaha/tasks/network_backup.yml
---
- 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
---
- name: get configuration
yamaha_network.rtx.rtx_config:
backup: yes
backup_options:
dir_path: ../../../template/yamaha/fwx120
実行してみると・・・・・・
$ ansible-playbook -i inventories/inventory management_network.yml
PLAY [Manage Network setting] ********************************************************
TASK [Gathering Facts] ***************************************************************
ok: [192.168.1.x]
TASK [yamaha : include_tasks] ********************************************************
included: /roles/yamaha/tasks/fwx120.yml for 192.168.1.x
TASK [yamaha : get configuration] ****************************************************
ok: [192.168.1.x]
TASK [yamaha : debug] ****************************************************************
config省略
TASK [yamaha : set description] ******************************************************
ok: [192.168.1.x]
TASK [yamaha : include_tasks] ********************************************************
included: /roles/yamaha/tasks/network_backup.yml for 192.168.1.x
TASK [yamaha : get configuration] ****************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: PermissionError: [Errno 13] Permission denied: b'../../../template'
fatal: [192.168.1.x]: FAILED! => {"msg": "Unexpected failure during module execution.", "stdout": ""}
PLAY RECAP ***************************************************************************
192.168.1.x : ok=6 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
permission error で止まってしまう・・・・・・
権限緩くしてもダメだし今回は諦めよう
おそらく書き出しするときのユーザがダメなんだろうと思うけどansible_become_user
つけてもうまくいかないしうーん、誰か教えてください
現状
とりあえずrole化以外コンフィグの取得と保存は出来た。
次はconfigを元に設定追加が出来るかを試したい。
この記事に追加する予定。
いつになるかはわかりません。
Discussion
良記事ありがとうございます。
パスのパーミッションの問題は、以下で行けました!