本書從網(wǎng)絡(luò)工程師的視角出發(fā),詳細講解了Python在網(wǎng)絡(luò)運維自動化中的應(yīng)用,其中涉及Python網(wǎng)絡(luò)運維自動化的相關(guān)技術(shù)、工具以及實踐。
本書共10章,先對Python網(wǎng)絡(luò)運維自動化進行了全面的概述,然后講解了網(wǎng)絡(luò)工程師所需的Python基礎(chǔ)、數(shù)據(jù)格式與數(shù)據(jù)建模語言的相關(guān)知識。接著,本書介紹了網(wǎng)絡(luò)配置的結(jié)構(gòu)化數(shù)據(jù)提取、網(wǎng)絡(luò)配置的模塊化管理、Netmiko詳解與實踐、模型驅(qū)動的新網(wǎng)絡(luò)管理方式及實踐、網(wǎng)絡(luò)管理工具集、網(wǎng)絡(luò)自動化框架Nornir和開源網(wǎng)管工具NetBox。本書依托于作者10余年的網(wǎng)絡(luò)運維經(jīng)驗,內(nèi)容循序漸進,從腳本編寫、框架應(yīng)用到系統(tǒng)平臺整合,逐步提升,結(jié)合豐富的代碼實例,全面介紹了Python網(wǎng)絡(luò)運維自動化的工具體系以及其在不同場景下的應(yīng)用實現(xiàn)。
本書適合網(wǎng)絡(luò)工程師閱讀,也適合對網(wǎng)絡(luò)運維自動化感興趣的開發(fā)工程師學(xué)習(xí),還適合作為高等院校網(wǎng)絡(luò)工程等相關(guān)專業(yè)的教材。
1.從理論到實戰(zhàn):從基礎(chǔ)理論入手,通過實戰(zhàn)案例教學(xué),手把手教讀者掌握Python網(wǎng)絡(luò)運維自動化,解決運維工作中的日常問題,提升運維效率。
2.多個真實案例:各個章節(jié)提供多個真實運維場景下的Python腳本,幫助讀者深入理解如何運用Python解決網(wǎng)絡(luò)運維中的難題。
3.配套資源豐富:提供詳盡的配套代碼、PPT、配套視頻、思維導(dǎo)圖,讀者還可以加入本書讀者群,在群中與作者進行交流互動,尋求職業(yè)規(guī)劃建議。
王旭濤(九凈),某國有大型銀行數(shù)據(jù)中心網(wǎng)絡(luò)運維開發(fā)工程師,運營自媒體賬號NetDevOps加油站與同名知識專欄。擁有十余年的網(wǎng)絡(luò)運維自動化和智能化平臺規(guī)劃、設(shè)計、研發(fā)工作經(jīng)驗,對網(wǎng)絡(luò)運維自動化、智能化有較全面的理解。作為國內(nèi)NetDevOps的早期踐行者、布道者,他通過撰寫文章、制作視頻教程、進行技術(shù)直播分享、在技術(shù)峰會上發(fā)表演講以及公開源代碼等多種形式,全面而系統(tǒng)地傳播NetDevOps文化、技術(shù)、工具和解決方案,得到受眾廣泛認(rèn)可。
第 1章 Python網(wǎng)絡(luò)運維自動化概述 1
1.1 Python網(wǎng)絡(luò)運維自動化應(yīng)對新挑戰(zhàn) 1
1.1.1 云計算時代網(wǎng)絡(luò)行業(yè)的變遷 1
1.1.2 云計算時代網(wǎng)絡(luò)運維的挑戰(zhàn) 2
1.1.3 Python網(wǎng)絡(luò)運維自動化的興起 2
1.2 Python網(wǎng)絡(luò)運維自動化的工具體系 3
1.2.1 數(shù)據(jù)工具集 3
1.2.2 網(wǎng)絡(luò)管理工具集 4
1.2.3 開源框架與系統(tǒng) 4
1.3 Python網(wǎng)絡(luò)運維自動化實踐之路 5
1.3.1 循序漸進地學(xué)習(xí)與實踐 5
1.3.2 有意識地培養(yǎng)數(shù)據(jù)意識 6
1.3.3 以場景為導(dǎo)向的實踐落地 6
1.4 小結(jié) 7
第 2章 網(wǎng)絡(luò)工程師的Python基礎(chǔ) 8
2.1 開發(fā)環(huán)境搭建 8
2.1.1 Python版本選擇與安裝 8
2.1.2 PyCharm的安裝與設(shè)置 11
2.2 變量、縮進與注釋 16
2.2.1 變量的定義與賦值 16
2.2.2 Python的縮進控制 17
2.2.3 Python的兩種注釋方法 17
2.3 基礎(chǔ)數(shù)據(jù)類型 18
2.3.1 數(shù)字 18
2.3.2 字符串 19
2.3.3 列表 24
2.3.4 字典 26
2.3.5 布爾 28
2.3.6 元組 30
2.3.7 集合 30
2.3.8 數(shù)據(jù)類型的轉(zhuǎn)換 31
2.4 判斷與循環(huán) 32
2.4.1 if判斷 32
2.4.2 for循環(huán) 33
2.4.3 while循環(huán) 35
2.5 函數(shù)及其調(diào)用 35
2.5.1 函數(shù)的定義 36
2.5.2 函數(shù)的調(diào)用 37
2.6 Python進階知識 38
2.6.1 類與面向?qū)ο?38
2.6.2 文本文件的讀寫操作 40
2.6.3 模塊與包 42
2.6.4 pip及第三方包的安裝 43
2.7 小結(jié) 44
第3章 數(shù)據(jù)格式與數(shù)據(jù)建模語言 45
3.1 數(shù)據(jù)格式簡介 45
3.2 JSON規(guī)范及其使用 45
3.2.1 JSON的規(guī)范 46
3.2.2 json模塊與JSON數(shù)據(jù)轉(zhuǎn)換 48
3.3 YAML規(guī)范及其使用 51
3.3.1 對象 51
3.3.2 數(shù)組 52
3.3.3 純量 53
3.3.4 多文檔的YAML數(shù)據(jù) 55
3.3.5 PyYAML包與YAML數(shù)據(jù)轉(zhuǎn)換 56
3.4 XML規(guī)范及其使用 57
3.4.1 元素、標(biāo)簽與屬性 58
3.4.2 列表數(shù)據(jù)的定義 59
3.4.3 命名空間 60
3.4.4 xmltodict包與XML數(shù)據(jù)轉(zhuǎn)換 61
3.5 表格數(shù)據(jù)與pandas 62
3.5.1 pandas簡介與安裝 63
3.5.2 pandas從表格讀取數(shù)據(jù) 63
3.5.3 pandas寫入數(shù)據(jù)到表格 64
3.6 數(shù)據(jù)建模語言YANG 66
3.6.1 YANG模塊的結(jié)構(gòu) 66
3.6.2 YANG的基礎(chǔ)語法規(guī)范 67
3.6.3 pyang包圖形化解析YANG模型 70
3.7 小結(jié) 72
第4章 網(wǎng)絡(luò)配置的結(jié)構(gòu)化數(shù)據(jù)提取 73
4.1 正則表達式的基礎(chǔ)知識 73
4.1.1 了解正則表達式 73
4.1.2 正則表達式的常用元字符 74
4.2 re模塊及其使用 75
4.2.1 search函數(shù)詳解 75
4.2.2 findall函數(shù)詳解 77
4.2.3 實戰(zhàn)1:search函數(shù)提取單條數(shù)據(jù) 78
4.2.4 實戰(zhàn)2:findall函數(shù)提取條形表數(shù)據(jù) 80
4.2.5 實戰(zhàn)3:findall與search函數(shù)結(jié)合提取塊狀表數(shù)據(jù) 82
4.3 配置解析引擎TextFSM 86
4.3.1 TextFSM簡介 86
4.3.2 值語法詳解 87
4.3.3 狀態(tài)語法詳解 88
4.3.4 規(guī)則和動作語法詳解 89
4.4 TextFSM模板實戰(zhàn)詳解 91
4.4.1 單條數(shù)據(jù)的提取 91
4.4.2 條形表數(shù)據(jù)的提取 92
4.4.3 在尾部進行分割的塊狀表數(shù)據(jù)提取 94
4.4.4 在頭部進行分割的塊狀表數(shù)據(jù)提取 95
4.4.5 列表類型的數(shù)據(jù)提取 97
4.4.6 缺失字段的向后填充 98
4.4.7 TextFSM模板庫ntc-templates 100
4.5 小結(jié) 102
第5章 網(wǎng)絡(luò)配置的模板化管理 103
5.1 模板引擎Jinja2簡介 103
5.1.1 模板引擎的基本原理 103
5.1.2 Jinja2簡介 104
5.2 Jinja2的基礎(chǔ)語法及其使用 105
5.2.1 Jinja2的基礎(chǔ)語法 105
5.2.2 文件系統(tǒng)管理配置模板 109
5.2.3 過濾器的定義與使用 110
5.2.4 原子模板的嵌套組合 112
5.3 結(jié)構(gòu)化數(shù)據(jù)驅(qū)動的Jinja2實戰(zhàn)詳解 115
5.3.1 利用表格承載數(shù)據(jù)并批量生成網(wǎng)絡(luò)配置文件 115
5.3.2 利用YAML文件承載數(shù)據(jù)并批量生成網(wǎng)絡(luò)配置文件 117
5.4 小結(jié) 120
第6章 Netmiko詳解與實戰(zhàn) 121
6.1 Netmiko快速上手 121
6.1.1 Netmiko簡介及其使用 121
6.1.2 Netmiko支持的網(wǎng)絡(luò)設(shè)備及device_type值的選擇 123
6.2 Netmiko的核心API 124
6.2.1 ConnectHandler函數(shù)詳解 125
6.2.2 send_command詳解 127
6.2.3 send_command_timing詳解 131
6.2.4 send_config_set和send_config_from_file詳解 134
6.3 基于Netmiko的網(wǎng)絡(luò)運維自動化實戰(zhàn) 138
6.3.1 網(wǎng)絡(luò)設(shè)備的批量配置備份 138
6.3.2 網(wǎng)絡(luò)設(shè)備的批量信息巡檢 143
6.3.3 網(wǎng)絡(luò)設(shè)備的批量配置推送 146
6.4 小結(jié) 148
第7章 模型驅(qū)動的新網(wǎng)絡(luò)管理方式及實踐 149
7.1 新一代網(wǎng)絡(luò)管理協(xié)議的誕生 149
7.1.1 CLI與SNMP的局限性 149
7.1.2 NETCONF、RESTCONF協(xié)議與YANG建模語言的誕生 150
7.2 NETCONF協(xié)議入門 153
7.2.1 NETCONF協(xié)議的框架 153
7.2.2 NETCONF協(xié)議的交互流程 153
7.2.3 NETCONF協(xié)議的配置數(shù)據(jù)及常見配置操作 157
7.3 基于ncclient的NETCONF配置操作 158
7.3.1 ncclient簡介 159
7.3.2 get-config操作 161
7.3.3 edit-config操作 164
7.3.4 get操作 167
7.3.5 解鎖更多的ncclient操作方法 169
7.4 RESTCONF協(xié)議入門 171
7.4.1 了解REST 171
7.4.2 Postman簡介及其安裝 173
7.4.3 RESTCONF協(xié)議的認(rèn)證與資源導(dǎo)覽 174
7.4.4 基于RESTCONF實現(xiàn)模型數(shù)據(jù)的查詢和更新 175
7.5 小結(jié) 177
第8章 網(wǎng)絡(luò)管理工具集 178
8.1 IP地址管理工具包netaddr 178
8.1.1 netaddr簡介及基本使用 178
8.1.2 網(wǎng)絡(luò)展開及包含關(guān)系計算 181
8.1.3 網(wǎng)絡(luò)的劃分與合并 182
8.2 HTTP請求工具包Requests 184
8.2.1 Requests簡介 184
8.2.2 發(fā)送GET請求 185
8.2.3 發(fā)送POST請求 186
8.2.4 發(fā)送PUT、PATCH、DELETE請求 187
8.2.5 HTTP請求的認(rèn)證及自定義認(rèn)證類 188
8.3 網(wǎng)絡(luò)抽象工具包NAPALM 190
8.3.1 NAPALM簡介 190
8.3.2 網(wǎng)絡(luò)設(shè)備結(jié)構(gòu)化配置數(shù)據(jù)的獲取 192
8.4 小結(jié) 194
第9章 網(wǎng)絡(luò)自動化框架Nornir 195
9.1 Nornir簡介 195
9.1.1 Nornir介紹及安裝 195
9.1.2 快速上手Nornir 196
9.2 Nornir runbook的編寫 198
9.2.1 網(wǎng)絡(luò)設(shè)備清單 198
9.2.2 配置文件 201
9.2.3 Nornir對象的創(chuàng)建 202
9.2.4 使用過濾器篩選網(wǎng)絡(luò)設(shè)備 203
9.2.5 task函數(shù)的定義及其調(diào)用 206
9.2.6 runbook的執(zhí)行結(jié)果 210
9.3 Nornir的常用插件包 212
9.3.1 nornir_netmiko簡介及其使用 212
9.3.2 nornir_table_inventory簡介及其使用 216
9.3.3 nornir_utils簡介及其使用 219
9.4 基于Nornir的網(wǎng)絡(luò)運維自動化實戰(zhàn) 220
9.4.1 網(wǎng)絡(luò)設(shè)備的批量配置備份 220
9.4.2 網(wǎng)絡(luò)設(shè)備的批量信息巡檢 222
9.4.3 網(wǎng)絡(luò)設(shè)備的批量配置推送 223
9.5 小結(jié) 225
第 10章 開源網(wǎng)管工具NetBox 226
10.1 NetBox簡介及安裝 226
10.1.1 NetBox的特點 226
10.1.2 基于Docker安裝NetBox 227
10.2 NetBox的核心功能 229
10.2.1 數(shù)據(jù)中心基礎(chǔ)設(shè)施管理 229
10.2.2 IP地址管理 235
10.3 NetBox的功能擴展 239
10.3.1 自定義字段custom_fields 239
10.3.2 nornir_netbox插件對接NetBox系統(tǒng) 240
10.3.3 開放的RESTful API體系 242
10.4 小結(jié) 246