Preface |
|
xiii | |
1 Network Industry Trends |
|
1 | (18) |
|
The Rise of Software Defined Networking |
|
|
1 | (15) |
|
|
1 | (4) |
|
What Is Software Defined Networking? |
|
|
5 | (11) |
|
|
16 | (3) |
2 Network Automation |
|
19 | (18) |
|
|
20 | (2) |
|
|
20 | (1) |
|
|
21 | (1) |
|
|
21 | (1) |
|
Types of Network Automation |
|
|
22 | (8) |
|
|
22 | (3) |
|
|
25 | (1) |
|
|
26 | (1) |
|
|
27 | (1) |
|
|
27 | (1) |
|
|
28 | (1) |
|
|
28 | (2) |
|
Evolving the Management Plane from SNMP to Device APIs |
|
|
30 | (5) |
|
Application Programming Interfaces (APIs) |
|
|
30 | (4) |
|
Impact of Open Networking |
|
|
34 | (1) |
|
Network Automation in the SDN Era |
|
|
35 | (1) |
|
|
35 | (2) |
3 Linux |
|
37 | (50) |
|
Examining Linux in a Network Automation Context |
|
|
37 | (1) |
|
|
38 | (1) |
|
|
39 | (3) |
|
Red Hat Enterprise Linux, Fedora, and CentOS |
|
|
39 | (2) |
|
Debian, Ubuntu, and Other Derivatives |
|
|
41 | (1) |
|
Other Linux Distributions |
|
|
42 | (1) |
|
|
42 | (20) |
|
Navigating the Filesystem |
|
|
43 | (5) |
|
Manipulating Files and Directories |
|
|
48 | (6) |
|
|
54 | (3) |
|
|
57 | (5) |
|
|
62 | (23) |
|
|
62 | (11) |
|
|
73 | (4) |
|
|
77 | (2) |
|
|
79 | (6) |
|
|
85 | (2) |
4 Learning Python in a Network Context |
|
87 | (66) |
|
Should Network Engineers Learn to Code? |
|
|
88 | (2) |
|
Using the Python Interactive Interpreter |
|
|
90 | (2) |
|
Understanding Python Data Types |
|
|
92 | (27) |
|
|
93 | (9) |
|
|
102 | (2) |
|
|
104 | (3) |
|
Learning to Use Python Lists |
|
|
107 | (6) |
|
Learning to Use Python Dictionaries |
|
|
113 | (4) |
|
Learning About Python Sets and Tuples |
|
|
117 | (2) |
|
Adding Conditional Logic to Your Code |
|
|
119 | (2) |
|
Understanding Containment |
|
|
121 | (2) |
|
|
123 | (5) |
|
Understanding the while Loop |
|
|
123 | (1) |
|
Understanding the for Loop |
|
|
124 | (4) |
|
|
128 | (3) |
|
|
131 | (5) |
|
|
132 | (2) |
|
|
134 | (2) |
|
|
136 | (4) |
|
Creating a Basic Python Script |
|
|
136 | (1) |
|
Understanding the Shebang |
|
|
137 | (2) |
|
Migrating Code from the Python Interpreter to a Python Script |
|
|
139 | (1) |
|
Working with Python Modules |
|
|
140 | (2) |
|
Passing Arguments into a Python Script |
|
|
142 | (1) |
|
Using pip and Installing Python Packages |
|
|
143 | (2) |
|
Learning Additional Tips, Tricks, and General Information When Using Python |
|
|
145 | (6) |
|
|
151 | (2) |
5 Data Formats and Data Models |
|
153 | (26) |
|
Introduction to Data Formats |
|
|
153 | (3) |
|
|
155 | (1) |
|
|
156 | (6) |
|
|
157 | (3) |
|
Working with YAML in Python |
|
|
160 | (1) |
|
|
161 | (1) |
|
|
162 | (7) |
|
|
162 | (1) |
|
Using XML Schema Definition (XSD) for Data Models |
|
|
163 | (2) |
|
Transforming XML with XSLT |
|
|
165 | (4) |
|
Searching XML Using XQuery |
|
|
169 | (1) |
|
|
169 | (5) |
|
|
169 | (3) |
|
Working with JSON in Python |
|
|
172 | (1) |
|
Using JSON Schema for Data Models |
|
|
173 | (1) |
|
|
174 | (4) |
|
|
174 | (1) |
|
Taking a Deeper Dive into YANG |
|
|
175 | (3) |
|
|
178 | (1) |
6 Network Configuration Templates |
|
179 | (22) |
|
The Rise of Modern Template Languages |
|
|
180 | (2) |
|
Using Templates for Web Development |
|
|
181 | (1) |
|
Expanding On the Use of Templates |
|
|
182 | (1) |
|
The Value of Templates in Network Automation |
|
|
182 | (1) |
|
Jinja for Network Configuration Templates |
|
|
183 | (15) |
|
|
183 | (1) |
|
Dynamically Inserting Data into a Basic Jinja Template |
|
|
184 | (1) |
|
Rendering a Jinja Template File in Python |
|
|
185 | (2) |
|
|
187 | (6) |
|
|
193 | (4) |
|
Template Inheritance in Jinja |
|
|
197 | (1) |
|
Variable Creation in Jinja |
|
|
198 | (1) |
|
|
198 | (3) |
7 Working with Network APIs |
|
201 | (92) |
|
Understanding Network APIs |
|
|
202 | (13) |
|
Getting Familiar with HTTP-Based APIs |
|
|
202 | (4) |
|
|
206 | (9) |
|
|
215 | (16) |
|
Exploring HTTP-Based APIs |
|
|
215 | (7) |
|
|
222 | (9) |
|
Automating Using Network APIs |
|
|
231 | (60) |
|
Using the Python requests Library |
|
|
232 | (29) |
|
Using the Python ncclient Library |
|
|
261 | (25) |
|
|
286 | (5) |
|
|
291 | (2) |
8 Source Control with Git |
|
293 | (66) |
|
Use Cases for Source Control |
|
|
293 | (1) |
|
Benefits of Source Control |
|
|
294 | (1) |
|
|
294 | (1) |
|
|
294 | (1) |
|
|
295 | (1) |
|
Benefits of Source Control for Networking |
|
|
295 | (1) |
|
|
296 | (3) |
|
|
296 | (1) |
|
|
297 | (1) |
|
Overview of Git's Architecture |
|
|
298 | (1) |
|
|
299 | (24) |
|
|
299 | (1) |
|
|
299 | (1) |
|
Adding Files to a Repository |
|
|
300 | (2) |
|
Committing Changes to a Repository |
|
|
302 | (3) |
|
Changing and Committing Tracked Files |
|
|
305 | (3) |
|
|
308 | (3) |
|
Excluding Files from a Repository |
|
|
311 | (4) |
|
Viewing More Information About a Repository |
|
|
315 | (4) |
|
Distilling Differences Between Versions of Files |
|
|
319 | (4) |
|
|
323 | (13) |
|
|
328 | (1) |
|
|
329 | (2) |
|
Merging and Deleting Branches |
|
|
331 | (5) |
|
|
336 | (21) |
|
Collaborating Between Multiple Systems Running Git |
|
|
336 | (17) |
|
Collaborating Using Git-Based Online Services |
|
|
353 | (4) |
|
|
357 | (2) |
9 Automation Tools |
|
359 | (100) |
|
Reviewing Automation Tools |
|
|
359 | (2) |
|
|
361 | (37) |
|
Understanding How Ansible Works |
|
|
362 | (1) |
|
Constructing an Inventory File |
|
|
363 | (7) |
|
Executing an Ansible Playbook |
|
|
370 | (5) |
|
|
375 | (2) |
|
Writing Ansible Playbooks for Network Automation |
|
|
377 | (18) |
|
Using Third-Party Ansible Modules |
|
|
395 | (3) |
|
|
398 | (1) |
|
|
398 | (40) |
|
Understanding the Salt Architecture |
|
|
399 | (3) |
|
Getting Familiar with Salt |
|
|
402 | (16) |
|
Managing Network Configurations with Salt |
|
|
418 | (9) |
|
Executing Salt Functions Remotely |
|
|
427 | (2) |
|
Diving into Salt's Event-Driven Infrastructure |
|
|
429 | (6) |
|
Diving into Salt a Bit Further |
|
|
435 | (3) |
|
|
438 | (1) |
|
Event-Driven Network Automation with StackStorm |
|
|
438 | (19) |
|
|
439 | (2) |
|
|
441 | (1) |
|
|
442 | (10) |
|
|
452 | (2) |
|
|
454 | (3) |
|
|
457 | (1) |
|
|
457 | (2) |
10 Continuous Integration |
|
459 | (30) |
|
|
461 | (1) |
|
|
461 | (1) |
|
People, Process, and Technology |
|
|
462 | (1) |
|
|
462 | (1) |
|
Introduction to Continuous Integration |
|
|
462 | (7) |
|
Basics of Continuous Integration |
|
|
463 | (2) |
|
|
465 | (1) |
|
|
466 | (2) |
|
Why Continuous Integration for Networking? |
|
|
468 | (1) |
|
A Continuous Integration Pipeline for Networking |
|
|
469 | (19) |
|
|
470 | (6) |
|
|
476 | (5) |
|
Test/Dev/Staging Environment |
|
|
481 | (3) |
|
|
484 | (2) |
|
Testing Tools and Test-Driven Network Automation |
|
|
486 | (2) |
|
|
488 | (1) |
11 Building a Culture for Network Automation |
|
489 | (12) |
|
Organizational Strategy and Flexibility |
|
|
490 | (4) |
|
Transforming an Old-World Organization |
|
|
490 | (1) |
|
The Importance of Executive Buy-in |
|
|
491 | (1) |
|
|
492 | (2) |
|
|
494 | (1) |
|
|
495 | (3) |
|
Learn What You Don't Know |
|
|
495 | (1) |
|
|
496 | (1) |
|
|
497 | (1) |
|
Won't Automation Take My Job?! |
|
|
498 | (1) |
|
|
498 | (3) |
A Advanced Networking in Linux |
|
501 | (32) |
B Using NAPALM |
|
533 | (16) |
Index |
|
549 | |