可編程網(wǎng)絡(luò)自動(dòng)化
本書提供了可編程網(wǎng)絡(luò)自動(dòng)化的基本技能,使用了包括Linux、Python、JSON和XML在內(nèi)的一系列技術(shù)。本書涵蓋以下內(nèi)容:Python編程基礎(chǔ)、網(wǎng)絡(luò)自動(dòng)化所需的Linux基礎(chǔ)、數(shù)據(jù)格式和數(shù)據(jù)模型,并介紹了Jinja模板及其在創(chuàng)建網(wǎng)絡(luò)設(shè)備配置中的適用性、應(yīng)用程序接口在網(wǎng)絡(luò)自動(dòng)化中的作用、使用Git進(jìn)行源代碼管理以在自動(dòng)化過程中管理代碼更改,等等。
與系統(tǒng)管理員一樣,網(wǎng)絡(luò)工程師如今也發(fā)現(xiàn)無法再手動(dòng)完成所有工作。隨著網(wǎng)絡(luò)行業(yè)迎來新協(xié)議、新技術(shù)、新交付模型,企業(yè)對(duì)敏捷性和靈活性的需求愈加迫切,網(wǎng)絡(luò)自動(dòng)化也隨之變得至關(guān)重要。本書向網(wǎng)絡(luò)工程師展示了如何使用包括Linux、Python、JSON和XML在內(nèi)的一系列工具,通過代碼實(shí)現(xiàn)網(wǎng)絡(luò)自動(dòng)化。
網(wǎng)絡(luò)自動(dòng)化的核心是簡(jiǎn)化與網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)拓?fù)、網(wǎng)絡(luò)服務(wù)和網(wǎng)絡(luò)連通性的配置、管理、操作相關(guān)的任務(wù)。通過學(xué)習(xí)本書,你將掌握完成這一關(guān)鍵轉(zhuǎn)變所需的基本技能和工具。
本書包含以下內(nèi)容。
* Python基礎(chǔ)知識(shí):數(shù)據(jù)類型、條件邏輯、循環(huán)、函數(shù)、類、模塊
* 網(wǎng)絡(luò)自動(dòng)化涉及的Linux基礎(chǔ)知識(shí)
* 數(shù)據(jù)格式與數(shù)據(jù)模型:YAML、XML、JSON、YANG
* 網(wǎng)絡(luò)配置模板,如Jinja模板
* 使用網(wǎng)絡(luò)API實(shí)現(xiàn)網(wǎng)絡(luò)自動(dòng)化
* 在自動(dòng)化過程中使用Git控制源代碼
* 使用Ansible、Salt、StackStorm等自動(dòng)化工具
* 關(guān)鍵的持續(xù)集成工具和技術(shù)
賈森·埃德爾曼(Jason Edelman),網(wǎng)絡(luò)工程師,持有CCIE認(rèn)證和VCDX-NV認(rèn)證,典型的“CLI愛好者”和“路由器玩家”。他的公司Network to Code致力于幫助廠商和用戶利用新的工具和技術(shù)提高工作效率。
斯科特·S. 洛(Scott S. Lowe),VMware公司的工程架構(gòu)師,在從事計(jì)算虛擬化工作多年后投身于云計(jì)算和網(wǎng)絡(luò)虛擬化,著有多本關(guān)于vSphere和OpenStack的技術(shù)圖書。
馬特·奧斯瓦爾特(Matt Oswalt),Cloudflare公司的軟件工程師,致力于解決軟件開發(fā)和網(wǎng)絡(luò)基礎(chǔ)設(shè)施交叉領(lǐng)域的技術(shù)和非技術(shù)難題,同時(shí)講授與Docker和可編程網(wǎng)絡(luò)自動(dòng)化相關(guān)的在線課程。
本書贊譽(yù) xiii
前言 xv
第 1 章 網(wǎng)絡(luò)行業(yè)發(fā)展趨勢(shì) 1
1.1 SDN的興起 1
1.1.1 OpenFlow 1
1.1.2 什么是軟件定義網(wǎng)絡(luò) 4
1.2 小結(jié) 13
第 2 章 網(wǎng)絡(luò)自動(dòng)化 14
2.1 為什么要實(shí)現(xiàn)網(wǎng)絡(luò)自動(dòng)化 15
2.1.1 簡(jiǎn)化架構(gòu) 15
2.1.2 確定性結(jié)果 15
2.1.3 業(yè)務(wù)敏捷性 16
2.2 網(wǎng)絡(luò)自動(dòng)化的類型 16
2.2.1 設(shè)備配給 16
2.2.2 數(shù)據(jù)采集 18
2.2.3 遷移 19
2.2.4 配置管理 20
2.2.5 合規(guī)性 20
2.2.6 報(bào)告 21
2.2.7 故障排除 21
2.3 管理平面從SNMP向設(shè)備API的演變 22
2.3.1 應(yīng)用程序接口(API) 22
2.3.2 開放網(wǎng)絡(luò)運(yùn)動(dòng)的影響 25
2.4 SDN時(shí)代的網(wǎng)絡(luò)自動(dòng)化 26
2.5 小結(jié) 26
第 3 章 Linux 27
3.1 網(wǎng)絡(luò)自動(dòng)化場(chǎng)景中的Linux 27
3.2 Linux簡(jiǎn)史 28
3.3 Linux發(fā)行版 28
3.3.1 Red Hat Enterprise Linux、Fedora和CentOS 29
3.3.2 Debian、Ubuntu和其他衍生版 30
3.3.3 其他Linux發(fā)行版 31
3.4 Linux交互 31
3.4.1 文件系統(tǒng)導(dǎo)航 32
3.4.2 操作文件和目錄 35
3.4.3 運(yùn)行程序 40
3.4.4 守護(hù)進(jìn)程 42
3.5 Linux聯(lián)網(wǎng) 46
3.5.1 使用接口 46
3.5.2 作為端主機(jī)的路由 54
3.5.3 作為路由器的路由 58
3.5.4 橋接(交換) 59
3.6 小結(jié) 64
第 4 章 在網(wǎng)絡(luò)場(chǎng)景中學(xué)習(xí)Python 65
4.1 網(wǎng)絡(luò)工程師是否應(yīng)該學(xué)習(xí)代碼 65
4.2 使用Python交互式解釋器 67
4.3 理解Python數(shù)據(jù)類型 69
4.3.1 學(xué)習(xí)使用字符串 69
4.3.2 學(xué)習(xí)使用數(shù)字 77
4.3.3 學(xué)習(xí)使用布爾值 79
4.3.4 學(xué)習(xí)使用Python列表 81
4.3.5 學(xué)習(xí)使用Python字典 85
4.3.6 學(xué)習(xí)Python集合與元組 89
4.4 向代碼中添加條件邏輯 90
4.5 理解容納 92
4.6 在Python中使用循環(huán) 93
4.6.1 理解while循環(huán) 94
4.6.2 理解for循環(huán) 94
4.7 使用Python函數(shù) 97
4.8 處理文件 101
4.8.1 讀取文件 101
4.8.2 寫入文件 103
4.9 創(chuàng)建Python程序 105
4.9.1 創(chuàng)建一個(gè)基本的Python腳本 105
4.9.2 理解shebang 105
4.9.3 將代碼從Python解釋器遷移到Python腳本 107
4.10 使用Python模塊 108
4.11 傳入Python腳本參數(shù) 109
4.12 使用pip與安裝Python包 111
4.13 使用Python時(shí)的其他一些提示、技巧和一般信息 112
4.14 小結(jié) 117
第 5 章 數(shù)據(jù)格式與數(shù)據(jù)模型 118
5.1 數(shù)據(jù)格式簡(jiǎn)介 118
5.2 YAML 121
5.2.1 YAML基礎(chǔ) 121
5.2.2 在Python中使用YAML 123
5.2.3 YAML的數(shù)據(jù)模型 124
5.3 XML 125
5.3.1 XML基礎(chǔ) 125
5.3.2 將XML模式定義用于數(shù)據(jù)模型 126
5.3.3 使用XSLT轉(zhuǎn)換XML 128
5.3.4 使用XQuery搜索XML 131
5.4 JSON 131
5.4.1 JSON基礎(chǔ) 131
5.4.2 在Python中使用JSON 133
5.4.3 使用JSON模式描述數(shù)據(jù)模型 134
5.5 使用YANG描述數(shù)據(jù)模型 135
5.5.1 YANG概述 135
5.5.2 深入YANG 136
5.6 小結(jié) 139
第 6 章 網(wǎng)絡(luò)配置模板 140
6.1 現(xiàn)代模板語(yǔ)言的興起 140
6.1.1 使用模板進(jìn)行Web開發(fā) 141
6.1.2 拓展模板應(yīng)用 142
6.2 模板在網(wǎng)絡(luò)自動(dòng)化中所體現(xiàn)的價(jià)值 142
6.3 使用Jinja生成網(wǎng)絡(luò)配置模板 143
6.3.1 為什么是Jinja 143
6.3.2 在基本Jinja模板中動(dòng)態(tài)插入數(shù)據(jù) 143
6.3.3 在Python中渲染Jinja模板 144
6.3.4 條件與循環(huán) 146
6.3.5 Jinja過濾器 151
6.3.6 Jinja模板繼承 154
6.3.7 在Jinja中創(chuàng)建變量 155
6.4 小結(jié) 155
第 7 章 使用網(wǎng)絡(luò)API 156
7.1 理解網(wǎng)絡(luò)API 156
7.1.1 熟悉基于HTTP的API 157
7.1.2 深入NETCONF 160
7.2 探究網(wǎng)絡(luò)API 166
7.2.1 探究基于HTTP的API 166
7.2.2 探究NETCONF 172
7.3 使用網(wǎng)絡(luò)API實(shí)現(xiàn)自動(dòng)化 180
7.3.1 使用requests庫(kù) 180
7.3.2 使用Python ncclient庫(kù) 206
7.3.3 使用netmiko 226
7.4 小結(jié) 231
第 8 章 使用Git控制源代碼 233
8.1 源代碼控制用例 233
8.2 源代碼控制的好處 234
8.2.1 跟蹤變更 234
8.2.2 可審計(jì)性 234
8.2.3 流程和工作流 234
8.3 源代碼控制對(duì)網(wǎng)絡(luò)的好處 234
8.4 Git 235
8.4.1 Git簡(jiǎn)史 235
8.4.2 Git術(shù)語(yǔ) 236
8.4.3 Git架構(gòu)概述 236
8.5 使用Git 237
8.5.1 安裝Git 237
8.5.2 創(chuàng)建倉(cāng)庫(kù) 238
8.5.3 向倉(cāng)庫(kù)中添加文件 238
8.5.4 向倉(cāng)庫(kù)提交變更 239
8.5.5 變更并提交已跟蹤的文件 242
8.5.6 撤銷暫存 244
8.5.7 從倉(cāng)庫(kù)中排除文件 246
8.5.8 查看倉(cāng)庫(kù)的更多信息 249
8.5.9 找出文件不同版本之間的差異 253
8.6 Git分支 256
8.6.1 創(chuàng)建分支 260
8.6.2 檢出分支 261
8.6.3 合并分支和刪除分支 263
8.7 使用Git進(jìn)行協(xié)作 266
8.7.1 在運(yùn)行Git的多個(gè)系統(tǒng)之間協(xié)作 267
8.7.2 使用基于Git的在線服務(wù)進(jìn)行協(xié)作 279
8.8 小結(jié) 283
第 9 章 自動(dòng)化工具 284
9.1 回顧自動(dòng)化工具 284
9.2 使用Ansible 286
9.2.1 理解Ansible的工作原理 286
9.2.2 構(gòu)建清單文件 287
9.2.3 執(zhí)行Ansible劇本 294
9.2.4 使用變量文件 297
9.2.5 編寫用于實(shí)現(xiàn)網(wǎng)絡(luò)自動(dòng)化的Ansible劇本 299
9.2.6 使用第三方Ansible模塊 314
9.2.7 Ansible小結(jié) 316
9.3 使用Salt實(shí)現(xiàn)自動(dòng)化 317
9.3.1 理解Salt架構(gòu) 317
9.3.2 熟悉Salt 320
9.3.3 使用Salt管理網(wǎng)絡(luò)配置 333
9.3.4 遠(yuǎn)程執(zhí)行Salt函數(shù) 341
9.3.5 深入Salt的事件驅(qū)動(dòng)基礎(chǔ)設(shè)施 342
9.3.6 進(jìn)一步深入Salt 347
9.3.7 Salt小結(jié) 350
9.4 使用StackStorm實(shí)現(xiàn)事件驅(qū)動(dòng)網(wǎng)絡(luò)自動(dòng)化 350
9.4.1 StackStorm概念 350
9.4.2 StackStorm架構(gòu) 352
9.4.3 動(dòng)作和工作流 353
9.4.4 傳感器和觸發(fā)器 362
9.4.5 規(guī)則 364
9.4.6 StackStorm小結(jié) 366
9.5 小結(jié) 366
第 10 章 持續(xù)集成 367
10.1 重要的先決條件 368
10.1.1 越簡(jiǎn)單越好 369
10.1.2 人、流程和技術(shù) 369
10.1.3 學(xué)習(xí)編寫代碼 369
10.2 CI簡(jiǎn)介 369
10.2.1 CI基礎(chǔ) 370
10.2.2 持續(xù)交付 371
10.2.3 測(cè)試驅(qū)動(dòng)開發(fā) 372
10.2.4 為什么要對(duì)網(wǎng)絡(luò)進(jìn)行CI 374
10.3 用于網(wǎng)絡(luò)的CI管道 374
10.3.1 同行評(píng)審 376
10.3.2 構(gòu)建自動(dòng)化 380
10.3.3 測(cè)試/開發(fā)/類生產(chǎn)環(huán)境 384
10.3.4 部署工具 387
10.3.5 測(cè)試工具和測(cè)試驅(qū)動(dòng)的網(wǎng)絡(luò)自動(dòng)化 388
10.4 小結(jié) 390
第 11 章 打造網(wǎng)絡(luò)自動(dòng)化文化 391
11.1 組織策略和靈活性 392
11.1.1 改造舊日組織 392
11.1.2 獲得管理層認(rèn)同的重要性 393
11.1.3 構(gòu)建與購(gòu)買 393
11.2 擁抱失敗 394
11.3 技能和教育 395
11.3.1 探索未知 396
11.3.2 注重基礎(chǔ) 396
11.3.3 認(rèn)證 397
11.3.4 自動(dòng)化不會(huì)搶走我的飯碗嗎 397
11.4 小結(jié) 398
附錄A Linux高級(jí)聯(lián)網(wǎng) 399
附錄B 使用NAPALM 423