本書從網(wǎng)絡工程師的視角出發(fā),詳細講解了Python在網(wǎng)絡運維自動化中的應用,其中涉及Python網(wǎng)絡運維自動化的相關技術、工具以及實踐。
本書共10章,先對Python網(wǎng)絡運維自動化進行了全面的概述,然后講解了網(wǎng)絡工程師所需的Python基礎、數(shù)據(jù)格式與數(shù)據(jù)建模語言的相關知識。接著,本書介紹了網(wǎng)絡配置的結構化數(shù)據(jù)提取、網(wǎng)絡配置的模塊化管理、Netmiko詳解與實踐、模型驅動的新網(wǎng)絡管理方式及實踐、網(wǎng)絡管理工具集、網(wǎng)絡自動化框架Nornir和開源網(wǎng)管工具NetBox。本書依托于作者10余年的網(wǎng)絡運維經(jīng)驗,內容循序漸進,從腳本編寫、框架應用到系統(tǒng)平臺整合,逐步提升,結合豐富的代碼實例,全面介紹了Python網(wǎng)絡運維自動化的工具體系以及其在不同場景下的應用實現(xiàn)。
本書適合網(wǎng)絡工程師閱讀,也適合對網(wǎng)絡運維自動化感興趣的開發(fā)工程師學習,還適合作為高等院校網(wǎng)絡工程等相關專業(yè)的教材。
1.從理論到實戰(zhàn):從基礎理論入手,通過實戰(zhàn)案例教學,手把手教讀者掌握Python網(wǎng)絡運維自動化,解決運維工作中的日常問題,提升運維效率。
2.多個真實案例:各個章節(jié)提供多個真實運維場景下的Python腳本,幫助讀者深入理解如何運用Python解決網(wǎng)絡運維中的難題。
3.配套資源豐富:提供詳盡的配套代碼、PPT、配套視頻、思維導圖,讀者還可以加入本書讀者群,在群中與作者進行交流互動,尋求職業(yè)規(guī)劃建議。
王旭濤(九凈),某國有大型銀行數(shù)據(jù)中心網(wǎng)絡運維開發(fā)工程師,運營自媒體賬號NetDevOps加油站與同名知識專欄。擁有十余年的網(wǎng)絡運維自動化和智能化平臺規(guī)劃、設計、研發(fā)工作經(jīng)驗,對網(wǎng)絡運維自動化、智能化有較全面的理解。作為國內NetDevOps的早期踐行者、布道者,他通過撰寫文章、制作視頻教程、進行技術直播分享、在技術峰會上發(fā)表演講以及公開源代碼等多種形式,全面而系統(tǒng)地傳播NetDevOps文化、技術、工具和解決方案,得到受眾廣泛認可。
第 1章 Python網(wǎng)絡運維自動化概述 1
1.1 Python網(wǎng)絡運維自動化應對新挑戰(zhàn) 1
1.1.1 云計算時代網(wǎng)絡行業(yè)的變遷 1
1.1.2 云計算時代網(wǎng)絡運維的挑戰(zhàn) 2
1.1.3 Python網(wǎng)絡運維自動化的興起 2
1.2 Python網(wǎng)絡運維自動化的工具體系 3
1.2.1 數(shù)據(jù)工具集 3
1.2.2 網(wǎng)絡管理工具集 4
1.2.3 開源框架與系統(tǒng) 4
1.3 Python網(wǎng)絡運維自動化實踐之路 5
1.3.1 循序漸進地學習與實踐 5
1.3.2 有意識地培養(yǎng)數(shù)據(jù)意識 6
1.3.3 以場景為導向的實踐落地 6
1.4 小結 7
第 2章 網(wǎng)絡工程師的Python基礎 8
2.1 開發(fā)環(huán)境搭建 8
2.1.1 Python版本選擇與安裝 8
2.1.2 PyCharm的安裝與設置 11
2.2 變量、縮進與注釋 16
2.2.1 變量的定義與賦值 16
2.2.2 Python的縮進控制 17
2.2.3 Python的兩種注釋方法 17
2.3 基礎數(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ù)類型的轉換 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ù)及其調用 35
2.5.1 函數(shù)的定義 36
2.5.2 函數(shù)的調用 37
2.6 Python進階知識 38
2.6.1 類與面向對象 38
2.6.2 文本文件的讀寫操作 40
2.6.3 模塊與包 42
2.6.4 pip及第三方包的安裝 43
2.7 小結 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ù)轉換 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ù)轉換 56
3.4 XML規(guī)范及其使用 57
3.4.1 元素、標簽與屬性 58
3.4.2 列表數(shù)據(jù)的定義 59
3.4.3 命名空間 60
3.4.4 xmltodict包與XML數(shù)據(jù)轉換 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模塊的結構 66
3.6.2 YANG的基礎語法規(guī)范 67
3.6.3 pyang包圖形化解析YANG模型 70
3.7 小結 72
第4章 網(wǎng)絡配置的結構化數(shù)據(jù)提取 73
4.1 正則表達式的基礎知識 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ù)結合提取塊狀表數(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 小結 102
第5章 網(wǎng)絡配置的模板化管理 103
5.1 模板引擎Jinja2簡介 103
5.1.1 模板引擎的基本原理 103
5.1.2 Jinja2簡介 104
5.2 Jinja2的基礎語法及其使用 105
5.2.1 Jinja2的基礎語法 105
5.2.2 文件系統(tǒng)管理配置模板 109
5.2.3 過濾器的定義與使用 110
5.2.4 原子模板的嵌套組合 112
5.3 結構化數(shù)據(jù)驅動的Jinja2實戰(zhàn)詳解 115
5.3.1 利用表格承載數(shù)據(jù)并批量生成網(wǎng)絡配置文件 115
5.3.2 利用YAML文件承載數(shù)據(jù)并批量生成網(wǎng)絡配置文件 117
5.4 小結 120
第6章 Netmiko詳解與實戰(zhàn) 121
6.1 Netmiko快速上手 121
6.1.1 Netmiko簡介及其使用 121
6.1.2 Netmiko支持的網(wǎng)絡設備及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)絡運維自動化實戰(zhàn) 138
6.3.1 網(wǎng)絡設備的批量配置備份 138
6.3.2 網(wǎng)絡設備的批量信息巡檢 143
6.3.3 網(wǎng)絡設備的批量配置推送 146
6.4 小結 148
第7章 模型驅動的新網(wǎng)絡管理方式及實踐 149
7.1 新一代網(wǎng)絡管理協(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é)議的認證與資源導覽 174
7.4.4 基于RESTCONF實現(xiàn)模型數(shù)據(jù)的查詢和更新 175
7.5 小結 177
第8章 網(wǎng)絡管理工具集 178
8.1 IP地址管理工具包netaddr 178
8.1.1 netaddr簡介及基本使用 178
8.1.2 網(wǎng)絡展開及包含關系計算 181
8.1.3 網(wǎng)絡的劃分與合并 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請求的認證及自定義認證類 188
8.3 網(wǎng)絡抽象工具包NAPALM 190
8.3.1 NAPALM簡介 190
8.3.2 網(wǎng)絡設備結構化配置數(shù)據(jù)的獲取 192
8.4 小結 194
第9章 網(wǎng)絡自動化框架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)絡設備清單 198
9.2.2 配置文件 201
9.2.3 Nornir對象的創(chuàng)建 202
9.2.4 使用過濾器篩選網(wǎng)絡設備 203
9.2.5 task函數(shù)的定義及其調用 206
9.2.6 runbook的執(zhí)行結果 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)絡運維自動化實戰(zhàn) 220
9.4.1 網(wǎng)絡設備的批量配置備份 220
9.4.2 網(wǎng)絡設備的批量信息巡檢 222
9.4.3 網(wǎng)絡設備的批量配置推送 223
9.5 小結 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ù)中心基礎設施管理 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 小結 246