前期准备
VMware安装
前往VMWare官网 下载对应最新的VMWare workstation并安装。
CentOS7安装并配置静态网络
创建CentOS7虚拟机后为虚拟机配置静态网络。具体配置方法可参考“CentOS7静态网络初始化配置与软件源的设置”
gns3创建新的项目
记得勾选弹出页面中配置保存的两个勾选框
VMWare与GNS3之间的连接
在gns3中添加网络云,将桥接到VMWare网卡
添加用于桥接网络的云。
配置桥接云使其桥接到VMWare的VMNet8
网卡
将云与路由器使用线相连实现VMWare与GNS3之间的互联。
配置网络
为了更好的模拟以太网,我们使用两台虚拟路由实现CentOS与gns3设备之间的互通。如下图所示。
gns3设备路由配置
关于gns3设备的接口ip及路由配置,可参考《CCNA网络设备基础命令记录》
CentOS7路由配置
CentOS虚拟机需要配置路由到gns3设备,否则只能访问直接相连的路由器,无法访问不同网段的设备,这里可参考《CentOS添加静态路由》配置CentOS虚拟机的路由。
gns3网络设备设置(支持远程控制、ssh连接等)
由于我们需要使用ansible
对网络设备进行操作管理,而ansible
使用的ssh协议对被控制端
进行控制的,所以需要网络设备开启ssh
协议,可参考《CCNA网络设备基础命令》查看如何对cisco设备开启ssh协议(部分设备不支持ssh)。
CentOS7安装并配置ansible
在CentOS中,可以使用yum
命令自动下载安装ansible
,但是这里笔者推荐使用python
的pip
工具进行安装,因为ansible
本身就是使用python
写的,对python非常友好,而且可以自动安装最新版本,无需额外的配置。若是在生产环境或者其他无法连接外网的情况下,可参考《离线状态下安装python packages》进行离线安装最新版的ansible。
CentOS7使用ansible控制gns3设备
ansible安装完成后,即可尝试着使用ansible对网络设备进行操作,由于这里是测试,所以我们只需要尝试着配置一台即可。可以尝试着获取cisco设备参数信息
和修改cisco设备参数信息
。
获取cisco设备参数信息
在CentOS的工作目录下,创建ansible_test
目录,并进入该目录。
$ mkdir ansible_test
$ cd ansible_test
编写被控制端设备的各项参数,新建hosts
文件,内容如下:
[cisco]
10.0.1.2
[cisco:vars]
ansible_ssh_user=cisco
ansible_ssh_pass=cisco
ansible_network_os=ios
ansible_become=True
ansible_become_method=enable
ansible_become_pass=cisco
编写测试playbook剧本,新建文件playbook01.yml
内容如下:
---
- name: Network Getting Started First Playbook
connection: network_cli
gather_facts: false
hosts: all
tasks:
- name: Get config for iOS devices
ios_facts:
gather_subset: all
- name: Display the config
debug:
msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
运行测试命令:
# ls
hosts playbook01.yml
# ansible-playbook -i hosts playbook01.yml
若是可以看到如下效果,
表示测试通过,表明ansible
已经可以访问到cisco设备的数据了。
修改cisco设备参数信息
编写更改cisco设备
参数的playbook剧本,新建playbook02.yml
,内容如下:
---
- name: Network Getting Started First Playbook
connection: network_cli
gather_facts: false
hosts: all
vars:
new_hostname: NEW-SSH-R2
tasks:
- name: Get config for IOS devices
ios_facts:
gather_subset: all
- name: Display the config
debug:
msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
- name: configure top level configuration
register: update
ios_config:
lines: hostname {{new_hostname}}
- name: Display the new config
when: update is succeeded
debug:
msg: "Update Succeeded , and now ,the hostname is {{new_hostname}}"
执行命令使ansible更改网络配置
# ansible-playbook -i hosts playbook02.yml
PLAY [Network Getting Started First Playbook] ************************************************************************************************************
TASK [Get config for IOS devices] ************************************************************************************************************************
ok: [10.0.1.2]
TASK [Display the config] ********************************************************************************************************************************
ok: [10.0.1.2] => {
"msg": "The hostname is SSH-R2 and the OS is 12.4(11)T2"
}
TASK [configure top level configuration] *****************************************************************************************************************
changed: [10.0.1.2]
TASK [Display the new config] ****************************************************************************************************************************
ok: [10.0.1.2] => {
"msg": "Update Succeeded , and now ,the hostname is NEW-SSH-R2"
}
PLAY RECAP ***********************************************************************************************************************************************
10.0.1.2 : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@gns3-server-30 ansible_test]#
重新回到该cisco设备上看,发现该设备的hostname已经更改为NEW-SSH-R2
,如下图所示:
表明此时已经成功使用ansible控制gns3模拟出来的cisco设备。
本例没有什么大的实际生产意义,但是可以作为教程参考例子帮助有一定网络基础和运维基础的IT人员学习使用。由于笔者的个人能力有限,文中多少会有些许差错,若有什么写的不恰当的地方,欢迎在评论区指正。