使用 Yamaha 官方 Ansible 模块来操作 Yamaha 路由器。(步骤一:安装模块)

首先

前几天,雅马哈在Ansible Galaxy上发布了用于以Ansible控制雅马哈网络设备的模块。

    Ansibleによる運用自動化について

我觉得应该立刻尝试一下,所以试了一下并记录下了结果。

雅马哈官方模块

在Ansible Galaxy和GitHub页面上都有Yamaha模块的内容。

    • Ansible Galaxyヤマハコレクションページ

 

    GitHubリポジトリ

Ansible版本2.10以后的配置与之前的2.9版本有很大的区别,由于Yamaha模块是基于2.10之后的版本进行创建的,所以在2.9之前将无法运行。

如果使用系统的标准软件包管理工具(如dnf或apt)来安装Ansible,那么安装的版本将是截至2021年4月最新的2.9版本。因此,如果需要使用Yamaha官方模块,就需要使用pip来安装最新版本的Ansible。

安装Ansible

这次我们将在最小配置的CentOS 8.3机器上安装Ansible。

如果您要在已安装Ansible的机器上进行安装,请先删除已安装的Ansible,然后执行安装操作。

升级pip之后,使用pip命令安装Ansible应该能够安装最新版本。

另外,由于还需要 paramiko 模块,所以请一并安装。

请确保以 root 权限执行全部操作。

dnf install python3
pip3 install --upgrade pip
pip3 install ansible
pip3 install paramiko

运行 `ansible –version` 命令,如果显示的版本为2.10或更高,则表示没有问题。

ansible 2.10.7
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.6.8 (default, Aug 24 2020, 17:57:11) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]

安装雅马哈官方模块。

在 Ansible Galaxy 的集合中安装分发的模块。

ansible-galaxy collection install yamaha_network.rtx

2021/4/9补充

由于发现 Yamaha_network.rtx 使用的 ansible.netcommon 版本较低,导致差异比较处理无法正常工作,所以我会先更新 ansible.netcommon。顺带一提,以我的情况来看,已安装的 1.5.0 版本并没有按预期工作。

ansible-galaxy collection install ansible.netcommon
ansible-galaxy collection list ansible.netcommon
# /root/.ansible/collections/ansible_collections
Collection        Version
----------------- -------
ansible.netcommon 2.0.1

# /usr/local/lib/python3.6/site-packages/ansible_collections
Collection        Version
----------------- -------
ansible.netcommon 1.5.0

提前进行SSH连接

在执行 Playbook 之前,我们需要确认是否可以通过 SSH 连接到目标 Yamaha 设备。

如果显示了指纹,请选择“是”接受。

ssh -l [一般ユーザ名] [IPアドレス]

Ansible准备执行

参考ヤマハ官方页面,创建存货文件和播放台。

创建库存文件

因為我擁有一台雅馬哈設備,型號為「NVR500」,所以我將根據參考例子進行改寫。

[NVR500]
192.168.100.1

创建Playbook

我只是更改了主机名,但将其原封不动地复制粘贴。

ansible_become_password用于输入成为Administrator所需的密码。

---
- hosts: NVR500
  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: [一般ユーザ名]
    ansible_ssh_pass: [一般ユーザパスワード]
    ansible_become: true
    ansible_become_password: [Administratorパスワード]

执行Playbook

如果执行以下操作,并且成功输出了Yamaha设备的配置结果,则表示成功。

ansible-playbook -i inventory rtx.yml

最后

我认为使用Yamaha设备的公司很多,所以能够在官方模块中自动化是非常好的。

因为模块本身只能通过Ansible执行命令,所以在进行配置时可能存在着冪等性的问题。然而,例如配置备份等运维工作的示例,将其编码化对于实用性来说是有用的。

考虑到以前为了从服务器收集配置而强行安装Expect并编写脚本来完成任务,现在不需要再考虑登录到Yamaha设备上进行操作,这已经是非常令人感激的了!

我想试试在下一个版本中,用官方模块来尝试做些什么,看看能达到什么程度。