網(wǎng)絡(luò)工程師的Python之路:網(wǎng)絡(luò)運維自動化實戰(zhàn)(第2版)
定 價:138 元
- 作者:王印
- 出版時間:2023/2/1
- ISBN:9787121450273
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP311.561
- 頁碼:592
- 紙張:
- 版次:01
- 開本:16開
本書第1版于2020年11月出版發(fā)行后大獲成功,Python及NetDevOps技術(shù)在國內(nèi)計算機網(wǎng)絡(luò)圈子里迅速走紅,國內(nèi)與NetDevOps相關(guān)的技術(shù)文章在網(wǎng)絡(luò)上如雨后春筍般大量涌現(xiàn),行業(yè)里也出現(xiàn)了很多要求掌握NetDevOps技術(shù)的網(wǎng)絡(luò)工程師職位,并且需求越來越多,NetDevOps是“下一代網(wǎng)絡(luò)工程師”必須掌握的技能已經(jīng)成為既定且不可逆的事實。以Python為主的NetDevOps技術(shù)知識更迭很快,第2版將在第1版的基礎(chǔ)上添加TextFSM詳解、Netmiko詳解、Nornir詳解、NETCONF詳解及RESTCONF詳解等5章內(nèi)容,并去掉pyping、pyntc、netdev等一些不再流行或者作者已經(jīng)公開宣布不再維護的模塊內(nèi)容。 另外,第2版將在思科設(shè)備的基礎(chǔ)上添加華為設(shè)備的內(nèi)容,由朱嘉盛老師執(zhí)筆,相信能對主要使用國產(chǎn)設(shè)備的國內(nèi)網(wǎng)絡(luò)工程師更加有益。
王印,知乎專欄“網(wǎng)路行者”作家,知乎ID:弈心,沙特阿卜杜拉國王科技大學(xué)(King Abdullah University of Science and Technology,KAUST)高級網(wǎng)絡(luò)工程師,14年海外從業(yè)經(jīng)驗,CCIE#40245。2009年起在新加坡先后任職于美國電信運營商AT&T、美國數(shù)據(jù)中心公司Equinix、新加坡陸路交通管理局(LTA)、新加坡石林IT咨詢公司(SFIT)、美國蘋果公司、蘇格蘭皇家銀行(RBS),對大型園區(qū)、金融行業(yè)的網(wǎng)絡(luò)設(shè)計與運維具有豐富的實戰(zhàn)經(jīng)驗。朱嘉盛,知乎專欄“網(wǎng)工手藝”作者,2010年畢業(yè)于華南理工大學(xué),網(wǎng)絡(luò)工程師13載,長期扎根網(wǎng)絡(luò)運維第一線。通信網(wǎng)從2G到5G,互聯(lián)網(wǎng)從幾乎空白建設(shè)運維到百萬級用戶規(guī)模,在這些領(lǐng)域均具備豐富的大網(wǎng)絡(luò)實戰(zhàn)經(jīng)驗。工作之余,熱愛閱讀與寫作,善于梳理知識,樂于分享和幫助新手。近年來深耕Python網(wǎng)絡(luò)自動化領(lǐng)域。在本書第1版發(fā)行后,將其中的思科設(shè)備實驗適配成華為設(shè)備實驗,并加入大量自己的理解與思考,同時在相關(guān)讀者群中堅持答疑和提供支撐服務(wù),引領(lǐng)眾多讀者成功將技術(shù)應(yīng)用到其他國產(chǎn)設(shè)備。
第1章 Python的安裝和使用 1
1.1 安裝Python 1
1.1.1 在Windows下安裝Python 3.10.6 1
1.1.2 在Linux下安裝Python 3.10.6 5
1.2 在Windows下使用Python 3.10.6 8
1.2.1 交互模式 8
1.2.2 腳本模式 10
1.2.3 運行Python腳本 13
1.3 在Linux下使用Python 3.10.6 16
1.3.1 交互模式 16
1.3.2 腳本模式 17
1.3.3 運行Python腳本 19
1.3.4 Shebang符號 19
第2章 Python基本語法 21
2.1 變量 21
2.2 注釋 24
2.3 方法和函數(shù) 25
2.4 數(shù)據(jù)類型 26
2.4.1 字符串 27
2.4.2 整數(shù)和浮點數(shù) 36
2.4.3 列表 39
2.4.4 字典 44
2.4.5 布爾類型 48
2.4.6 集合、元組、空值 51
第3章 Python進階語法 54
3.1 條件(判斷)語句 54
3.1.1 通過比較運算符作判斷 54
3.1.2 通過字符串方法+邏輯運算符作判斷 56
3.1.3 通過成員運算符作判斷 58
3.2 循環(huán)語句 60
3.2.1 while語句 60
3.2.2 for語句 63
3.3 文本文件的讀/寫 65
3.3.1 open()函數(shù)及其模式 65
3.3.2 文件讀取 66
3.3.3 文件寫入 74
3.3.4 with語句 77
3.4 自定義函數(shù) 78
3.4.1 函數(shù)的創(chuàng)建和調(diào)用 78
3.4.2 函數(shù)值的返回 80
3.4.3 嵌套函數(shù) 81
3.5 模塊 82
3.5.1 不帶自定義函數(shù)的模塊 82
3.5.2 帶自定義函數(shù)的模塊 83
3.5.3 Python內(nèi)建模塊和第三方模塊 84
3.5.4 from…import… 87
3.5.5 if __name__ == '__main__': 87
3.6 正則表達式 88
3.6.1 什么是正則表達式 89
3.6.2 正則表達式的驗證 89
3.6.3 正則表達式的規(guī)則 90
3.6.4 正則表達式在Python中的應(yīng)用 97
3.7 異常處理 102
3.8 類 106
3.8.1 怎么創(chuàng)建類 107
3.8.2 方法 109
3.8.3 繼承 110
第4章 Python網(wǎng)絡(luò)運維實驗(網(wǎng)絡(luò)模擬器) 112
4.1 實驗運行環(huán)境 112
4.1.1 實驗操作系統(tǒng) 112
4.1.2 思科實驗拓撲 113
4.1.3 華為實驗拓撲 114
4.2 Python中的Telnet和SSH模塊 114
4.2.1 Telnetlib 115
4.2.2 Paramiko和Netmiko 121
4.3 實驗1 input()函數(shù)和getpass模塊(思科設(shè)備) 135
4.3.1 實驗?zāi)康?136
4.3.2 實驗準備 136
4.3.3 實驗代碼 137
4.3.4 代碼分段講解 138
4.3.5 驗證 139
4.4 實驗1 input()函數(shù)和getpass模塊(華為設(shè)備) 145
4.5 實驗2 批量登錄地址不連續(xù)的交換機(思科設(shè)備) 147
4.5.1 實驗?zāi)康?147
4.5.2 實驗準備 147
4.5.3 實驗代碼 148
4.5.4 代碼分段講解 149
4.5.5 驗證 150
4.6 實驗2 批量登錄地址不連續(xù)的交換機(華為設(shè)備) 152
4.7 實驗3 異常處理的應(yīng)用(思科設(shè)備) 155
4.7.1 實驗?zāi)康?156
4.7.2 實驗準備 156
4.7.3 實驗代碼 157
4.7.4 代碼分段講解 159
4.7.5 驗證 160
4.8 實驗3 異常處理的應(yīng)用(華為設(shè)備) 162
4.9 實驗4 用Python實現(xiàn)網(wǎng)絡(luò)設(shè)備的配置備份(思科設(shè)備) 164
4.9.1 實驗?zāi)康?164
4.9.2 實驗準備 164
4.9.3 實驗代碼 167
4.9.4 代碼分段講解 168
4.9.5 驗證 170
4.10 實驗4 用Python實現(xiàn)網(wǎng)絡(luò)設(shè)備的配置備份(華為設(shè)備) 172
第5章 Python網(wǎng)絡(luò)運維實戰(zhàn)(真機) 175
5.1 實驗1 大規(guī)模批量修改交換機QoS的配置(思科設(shè)備) 175
5.1.1 實驗背景 176
5.1.2 實驗?zāi)康?177
5.1.3 實驗準備 177
5.1.4 實驗代碼 178
5.1.5 代碼分段講解 179
5.1.6 驗證 181
5.2 實驗2 pythonping的使用方法(思科設(shè)備) 184
5.2.1 實驗背景 185
5.2.2 實驗?zāi)康?185
5.2.3 實驗思路 185
5.2.4 實驗準備——腳本1 186
5.2.5 實驗代碼——腳本1 187
5.2.6 腳本1代碼分段講解 187
5.2.7 腳本1驗證 190
5.2.8 實驗準備——腳本2 190
5.2.9 實驗代碼——腳本2 191
5.2.10 腳本2代碼分段講解 193
5.2.11 腳本2驗證 196
5.3 實驗3 利用Python腳本檢查交換機的配置(思科設(shè)備) 197
5.3.1 實驗背景 197
5.3.2 實驗?zāi)康?198
5.3.3 實驗思路 198
5.3.4 實驗準備——腳本1 199
5.3.5 實驗代碼——腳本1 199
5.3.6 腳本1代碼分段講解 201
5.3.7 腳本1驗證 206
5.3.8 實驗準備——腳本2 206
5.3.9 實驗代碼——腳本2 207
5.3.10 腳本2代碼分段講解 208
5.3.11 腳本2驗證 210
5.4 實驗4 現(xiàn)網(wǎng)超長命令回顯處理(華為設(shè)備) 211
5.4.1 實驗背景 211
5.4.2 實驗?zāi)康?212
5.4.3 實驗思路 212
5.4.4 實驗準備——腳本1 213
5.4.5 腳本1驗證 214
5.4.6 實驗準備——腳本2 214
5.4.7 腳本2驗證 216
5.5 實驗5 自定義ping工具及exe打包(華為設(shè)備) 216
5.5.1 實驗背景 216
5.5.2 實驗?zāi)康?217
5.5.3 實驗思路 217
5.5.4 實驗準備——腳本 218
5.5.5 腳本驗證 219
5.5.6 腳本打包 220
5.5.7 打包驗證 220
第6章 Python內(nèi)置模塊與第三方模塊詳解 222
6.1 JSON 223
6.1.1 JSON基礎(chǔ)知識 223
6.1.2 JSON在Python中的使用 224
6.2 正則表達式的痛點問題 226
6.3 TextFSM和ntc-templates 227
6.3.1 TextFSM的安裝 228
6.3.2 TextFSM模板的創(chuàng)建和應(yīng)用 230
6.3.3 ntc-templates 234
6.4 NAPALM 238
6.4.1 什么是NAPALM 239
6.4.2 NAPALM的優(yōu)點 239
6.4.3 NAPALM的缺點 241
6.4.4 NAPALM的安裝 242
6.4.5 NAPALM的應(yīng)用 242
6.5 asyncio 248
6.5.1 同步與異步 248
6.5.2 異步在Python中的應(yīng)用 249
6.6 多線程 252
6.6.1 單線程與多線程 252
6.6.2 多線程在Python中的應(yīng)用 253
6.6.3 多線程在Netmiko中的應(yīng)用 257
6.7 CSV和Jinja2 260
6.7.1 CSV配置文件及csv模塊在Python中的使用 260
6.7.2 Jinja2配置模板 262
6.7.3 Jinja2在Python中的使用 264
6.7.4 將生成的配置命令上傳到交換機并執(zhí)行 267
第7章 TextFSM詳解 273
7.1 TextFSM的安裝及引例 274
7.1.1 TextFSM的安裝 274
7.1.2 TextFSM引例類比 275
7.1.3 TextFSM引例詳解 276
7.2 實驗1 單行回顯單行rule 280
7.2.1 安裝tabulate模塊 280
7.2.2 創(chuàng)建實驗文件夾 281
7.2.3 準備output.txt 282
7.2.4 準備template.txt 282
7.2.5 準備Python腳本 283
7.2.6 執(zhí)行Python腳本 286
7.2.7 模板匹配過程 286
7.2.8 實驗小結(jié) 286
7.3 實驗2 多行回顯單行rule 286
7.3.1 準備output.txt 287
7.3.2 準備template.txt 288
7.3.3 準備Python腳本 289
7.3.4 執(zhí)行Python腳本 289
7.3.5 模板匹配過程 290
7.3.6 實驗小結(jié) 291
7.4 實驗3 多行回顯多行rule,初識關(guān)鍵字 291
7.4.1 準備output.txt 291
7.4.2 準備template.txt 292
7.4.3 準備Python腳本 293
7.4.4 實驗調(diào)試 294
7.4.5 模板匹配過程 298
7.4.6 實驗小結(jié) 299
7.5 實驗4 關(guān)鍵字List和動作Continue.Record 299
7.5.1 準備output.txt 299
7.5.2 準備template.txt 300
7.5.3 準備Python腳本 300
7.5.4 實驗調(diào)測 301
7.5.5 模板匹配過程 308
7.5.6 實驗小結(jié) 308
7.6 TextFSM場景梳理及拓展 309
第8章 Netmiko詳解 310
8.1 實驗1 通過Netmiko登錄一臺交換機(思科設(shè)備) 311
8.2 實驗1 通過Netmiko登錄一臺交換機(華為設(shè)備) 314
8.3 實驗2 通過Netmiko向設(shè)備做配置(思科設(shè)備) 315
8.4 實驗2 通過Netmiko向設(shè)備做配置(華為設(shè)備) 319
8.5 實驗3 用Netmiko配合TextFSM或Genie將回顯格式化(思科設(shè)備) 321
8.6 實驗3 用Netmiko配合TextFSM或Genie將回顯格式化(華為設(shè)備) 327
8.7 實驗4 通過Netmiko連接多臺交換機(思科設(shè)備) 330
8.8 實驗4 通過Netmiko連接多臺交換機(華為設(shè)備) 335
8.9 實驗5 Netmiko配合Jinja2配置模板為設(shè)備做配置(思科設(shè)備) 336
8.10 實驗5 Netmiko配合Jinja2配置模板為設(shè)備做配置(華為設(shè)備) 340
8.11 實驗6 在Netmiko中使用enable密碼進入設(shè)備特權(quán)模式(思科設(shè)備) 342
8.12 實驗6 在Netmiko中使用enable密碼進入設(shè)備特權(quán)模式(華為設(shè)備) 346
8.13 實驗7 使用Netmiko向設(shè)備傳送文件(思科設(shè)備) 348
8.14 實驗7 使用Netmiko向設(shè)備傳送文件(華為設(shè)備) 351
8.15 實驗8 使用Netmiko處理設(shè)備提示命令(思科設(shè)備) 354
8.16 實驗8 使用Netmiko處理設(shè)備提示命令(華為設(shè)備) 357
8.17 實驗9 使用Netmiko獲取設(shè)備主機名(思科設(shè)備) 358
8.18 實驗9 使用Netmiko獲取設(shè)備主機名(華為設(shè)備) 360
8.19 Netmiko 4的新功能介紹 361
第9章 Nornir詳解 368
9.1 Nornir實驗準備(思科設(shè)備,CentOS系統(tǒng)) 370
9.2 Nornir實驗準備(華為設(shè)備,Windows系統(tǒng)) 374
9.3 實驗1 調(diào)用nornir_napalm獲取設(shè)備的facts和interfaces信息(思科設(shè)備) 378
9.4 實驗1 調(diào)用nornir_napalm獲取設(shè)備的facts和interfaces信息(華為設(shè)備) 381
9.5 實驗2 調(diào)用nornir_netmiko來獲取設(shè)備信息(思科設(shè)備) 383
9.6 實驗2 調(diào)用nornir_netmiko獲取設(shè)備信息(華為設(shè)備) 385
9.7 實驗3 使用filter()配合F()做高級過濾(思科設(shè)備) 386
9.8 實驗3 使用filter()配合F()做高級過濾(華為設(shè)備) 391
9.9 實驗4 使用filter()做簡單過濾(思科設(shè)備) 393
9.10 實驗4 使用filter()做簡單過濾(華為設(shè)備) 399
9.11 實驗5 在filter()中使用lambda過濾單個或多個設(shè)備(思科設(shè)備) 400
9.12 實驗5 在filter()中使用lambda過濾單個或多個設(shè)備(華為設(shè)備) 403
9.13 實驗6 用Nornir為設(shè)備做配置(思科設(shè)備) 405
9.14 實驗6 用Nornir為設(shè)備做配置(華為設(shè)備) 407
9.15 實驗7 用Nornir保存、備份設(shè)備配置(思科設(shè)備) 408
9.16 實驗7 用Nornir保存設(shè)備配置(華為設(shè)備) 411
9.17 實驗8 用Nornir配合Jinja2為設(shè)備做配置(思科設(shè)備) 412
9.18 實驗8 用Nornir配合Jinja2給設(shè)備做配置(華為設(shè)備) 420
9.19 實驗9 Nornir 3 + Scrapli(思科設(shè)備) 423
9.20 實驗9 Nornir 3 + Scrapli(華為設(shè)備) 432
9.21 實驗10 Nornir 3 + TextFSM(思科設(shè)備) 434
9.22 實驗10 Nornir 3 + TextFSM(華為設(shè)備) 437
9.23 實驗11 Nornir 3 + ipdb(思科設(shè)備) 438
9.24 實驗11 Nornir 3 + ipdb(華為設(shè)備) 444
9.25 實驗12 Nornir的Inventory(思科設(shè)備) 447
9.26 實驗12 Nornir的Inventory(華為設(shè)備) 451
9.27 實驗13 Nornir的Task(思科設(shè)備) 455
9.28 實驗13 Nornir的Task(華為設(shè)備) 461
9.29 實驗14 使用Nornir按需批量修改交換機配置(思科設(shè)備) 463
9.30 實驗14 使用Nornir按需批量修改交換機配置(華為設(shè)備) 467
第10章 NETCONF詳解 474
10.1 NETCONF的理論部分 475
10.2 YANG的理論部分 476
10.2.1 什么是數(shù)據(jù)模型 476
10.2.2 YANG模型 477
10.2.3 YANG模塊 478
10.2.4 從GitHub下載YANG模塊 478
10.2.5 pyang模塊 481
10.3 NETCONF的實驗部分 482
10.3.1 實驗拓撲和實驗環(huán)境 482
10.3.2 實驗步驟 483
10.4 ncclient 490
10.4.1 ncclient簡介 491
10.4.2 ncclient實戰(zhàn)應(yīng)用(get_config) 492
10.4.3 ncclient實戰(zhàn)應(yīng)用(edit_config) 503
10.5 NETCONF實驗(華為) 510
10.5.1 實驗拓撲 510
10.5.2 實驗?zāi)康?511
10.5.3 啟動NETCONF 511
10.5.4 聯(lián)動ncclient 515
第11章 RESTCONF詳解 519
11.1 RESTCONF簡介 519
11.1.1 HTTP方法和CRUD的對應(yīng)關(guān)系 520
11.1.2 Postman 520
11.2 RESTCONF實驗(Postman) 520
11.2.1 實驗環(huán)境 520
11.2.2 交換機初始配置 521
11.2.3 Postman初始配置 522
11.2.4 通過GET方法獲取交換機配置 525
11.2.5 通過PATCH方法更改交換機配置 529
11.2.6 通過PUT方法替換交換機配置 532
11.2.7 通過DELETE方法來刪除設(shè)備配置 536
11.3 RESTCONF實驗(Requests) 538
11.3.1 Requests模塊簡介 538
11.3.2 HTTP基礎(chǔ)知識回顧 538
11.3.3 Requests實驗環(huán)境 542
11.3.4 通過GET方法獲取交換機配置 543
11.3.5 使用?depth=修改深度 547
11.3.6 通過PATCH方法更改交換機配置 549
11.3.7 通過PUT方法替換交換機配置 552
11.3.8 通過POST方法添加交換機配置 556
11.3.9 通過DELETE方法刪除交換機配置 559
11.4 RESTCONF實驗(華為) 561
11.4.1 實驗拓撲 561
11.4.2 實驗?zāi)康?561
11.4.3 啟動RESTCONF 562
11.4.4 聯(lián)動Postman 564