前期準備
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人員學習使用。由於筆者的個人能力有限,文中多少會有些許差錯,若有什麼寫的不恰當的地方,歡迎在評論區指正。