使用Ansible来更改Cisco路由器的IP地址
起因/源头
我打算通过Ansible来管理网络设备,于是进行了各种调查。不过,即使我复制粘贴了网上的playbook,也无法成功运行(出现错误),让我陷入了苦恼。为了给其他人提供参考,我在这里列举了一个成功的例子。
受到《软件设计2018年12月号》专题的启发,我进行了一次实验。
环境
Ansible服务器:已在Ubuntu16上安装并运行。
https://docs.ansible.com/ansible/2.9_zh_cn/installation_guide/intro_installation.html#ubuntu-ansible
XXX@XXX:~$ ansible --version
ansible 2.9.18
目标网络设备:Cisco1812J
Router#show version
Cisco IOS Software, C181X Software (C181X-ADVIPSERVICESK9-M), Version 12.4(15)T1, RELEASE SOFTWARE (fc2)
目錄結構
.
--- playbook.yml
--- ansible.cfg
--- group_vars
|--- ios.yml
--- inventory
库存
[ios]
my_router ansible_host=xxx.xxx.xxx.xxx #制御したいルータのIPアドレスを記載
iOS.yml.
iOS.yml文件。
ansible_network_os: ios
ansible_connection: network_cli
ansible_user: XXXXX #cisco routerのsshログインID
ansible_password: XXXXX #cisco routerのsshログインパスワード
ansible_become: yes
ansible_become_method: enable
ansible_become_pass: XXXXX #cisco routerのenableパスワード
剧本
想做的事情:改變路由器的主機名和FastEthernet0的IP地址。 ※將主機名更改為New_RouterName,將IP地址更改為1.1.1.1/24。請注意不要更改正在使用SSH訪問的物理端口的IP地址(^^;)
通過全局配置模式進行更改的和通過不同層級的接口配置模式進行更改的,需要如何改變寫法以進行驗證。
- hosts: ios
gather_facts: no
tasks:
- name: set hostname #hostnameの変更
ios_config:
lines:
- hostname New_RouterName
save_when: changed
- name: set ip address #IP addressの変更
ios_config:
lines:
- ip address 1.1.1.1 255.255.255.0
parents:
- interface FastEthernet 0
save_when: changed
卡住了
・虽然我并没有查到相关信息,但似乎有一种通过在“commands”中编写命令和通过在“lines”中以“-”传递命令的方法,所以最好仔细看一下模块的用法。
・当将IP地址设置为“/32”时,因为是实验,导致ansible出错。如果是LoopBack接口的话可能行得通。
・前提是从ansible服务器以ssh的方式连接到cisco设备。同时需要将配置方法写在group_vars下的ios.yml文件中。
・由于是yaml格式,如果不小心插入了制表符的话可能导致脚本无法执行。
・在对playbook格式进行检查时,可以使用–syntax-check选项:
ansible-playbook -i inventory playbook.yml –syntax-check
经常会提示错误的地方不一定是问题所在的行。如果感到有些奇怪,可以检查一下其后的行等。