Introduction |
|
xxix | |
|
|
|
Chapter 1 The Network Programmability And Automation Ecosystem |
|
|
1 | (20) |
|
|
2 | (12) |
|
|
3 | (2) |
|
|
5 | (1) |
|
|
6 | (1) |
|
|
7 | (1) |
|
Virtualization And Abstraction |
|
|
8 | (5) |
|
Software-Defined Networking |
|
|
13 | (1) |
|
|
13 | (1) |
|
Your Network Programmability And Automation Toolbox |
|
|
14 | (5) |
|
|
15 | (1) |
|
|
15 | (1) |
|
|
16 | (1) |
|
|
17 | (1) |
|
|
17 | (1) |
|
|
18 | (1) |
|
|
18 | (1) |
|
Transporting The Protocols |
|
|
18 | (1) |
|
Software And Network Engineers: The New Era |
|
|
19 | (2) |
|
|
|
Chapter 2 Linux Fundamentals |
|
|
21 | (98) |
|
|
21 | (5) |
|
|
21 | (1) |
|
|
22 | (1) |
|
|
22 | (1) |
|
|
23 | (3) |
|
|
26 | (1) |
|
|
26 | (2) |
|
A Linux Command Shell Primer |
|
|
28 | (3) |
|
|
31 | (4) |
|
Files And Directories In Linux |
|
|
35 | (22) |
|
|
35 | (3) |
|
File And Directory Operations |
|
|
38 | (1) |
|
|
38 | (3) |
|
|
41 | (5) |
|
|
46 | (2) |
|
|
48 | (3) |
|
|
51 | (1) |
|
|
51 | (4) |
|
|
55 | (2) |
|
Input And Output Redirection |
|
|
57 | (10) |
|
|
67 | (6) |
|
|
73 | (21) |
|
Job, Process, And Service Management |
|
|
73 | (10) |
|
|
83 | (2) |
|
|
85 | (6) |
|
|
91 | (3) |
|
Installing And Maintaining Software On Linux |
|
|
94 | (24) |
|
Manual Compilation And Installation |
|
|
96 | (1) |
|
|
97 | (4) |
|
|
101 | (16) |
|
|
117 | (1) |
|
|
118 | (1) |
|
Chapter 3 Linux Storage, Security, And Networks |
|
|
119 | (64) |
|
|
119 | (16) |
|
|
119 | (9) |
|
|
128 | (7) |
|
|
135 | (23) |
|
User And Group Management |
|
|
136 | (7) |
|
|
143 | (5) |
|
|
148 | (7) |
|
|
155 | (3) |
|
|
158 | (23) |
|
|
159 | (9) |
|
The Network Manager Service |
|
|
168 | (6) |
|
Network Scripts And Configuration Files |
|
|
174 | (5) |
|
|
179 | (2) |
|
|
181 | (2) |
|
Chapter 4 Linux Scripting |
|
|
183 | (66) |
|
Regular Expressions And The Grep Utility |
|
|
184 | (9) |
|
The Awk Programming Language |
|
|
193 | (3) |
|
|
196 | (7) |
|
General Structure Of Shell Scripts |
|
|
203 | (4) |
|
|
207 | (8) |
|
|
207 | (4) |
|
|
211 | (4) |
|
|
215 | (8) |
|
|
216 | (4) |
|
Indexed And Associative Arrays |
|
|
220 | (3) |
|
|
223 | (9) |
|
|
224 | (6) |
|
|
230 | (2) |
|
|
232 | (6) |
|
|
232 | (4) |
|
|
236 | (1) |
|
|
237 | (1) |
|
|
238 | (4) |
|
|
242 | (4) |
|
|
246 | (3) |
|
|
|
Chapter 5 Python Fundamentals |
|
|
249 | (62) |
|
Scripting Languages Versus Programming Languages |
|
|
250 | (3) |
|
|
253 | (2) |
|
Computer Science Concepts |
|
|
255 | (5) |
|
Object-Oriented Programming |
|
|
256 | (2) |
|
|
258 | (2) |
|
|
260 | (49) |
|
|
260 | (3) |
|
|
263 | (7) |
|
|
270 | (1) |
|
|
270 | (3) |
|
|
273 | (3) |
|
|
276 | (5) |
|
|
281 | (5) |
|
|
286 | (1) |
|
|
286 | (4) |
|
|
290 | (2) |
|
|
292 | (2) |
|
|
294 | (1) |
|
|
295 | (1) |
|
|
296 | (5) |
|
|
301 | (3) |
|
|
304 | (2) |
|
|
306 | (3) |
|
|
309 | (1) |
|
|
310 | (1) |
|
Chapter 6 Python Applications |
|
|
311 | (76) |
|
Organizing The Development Environment |
|
|
311 | (22) |
|
|
312 | (5) |
|
|
317 | (14) |
|
|
331 | (2) |
|
|
333 | (3) |
|
|
336 | (49) |
|
|
336 | (1) |
|
|
337 | (8) |
|
|
345 | (8) |
|
|
353 | (1) |
|
|
354 | (5) |
|
|
359 | (4) |
|
|
363 | (12) |
|
|
375 | (1) |
|
|
376 | (2) |
|
|
378 | (4) |
|
|
382 | (3) |
|
|
385 | (2) |
|
|
|
|
387 | (82) |
|
|
387 | (5) |
|
|
392 | (2) |
|
|
394 | (3) |
|
Client/Server Communication |
|
|
394 | (1) |
|
Http/1.1 Connection Enhancements |
|
|
395 | (1) |
|
|
395 | (1) |
|
|
396 | (1) |
|
|
396 | (1) |
|
|
397 | (18) |
|
|
397 | (1) |
|
|
398 | (1) |
|
|
398 | (1) |
|
|
399 | (3) |
|
|
402 | (3) |
|
|
405 | (2) |
|
|
407 | (1) |
|
|
407 | (1) |
|
|
408 | (1) |
|
|
408 | (3) |
|
1Xx Informational Status Codes |
|
|
411 | (1) |
|
2Xx Successful Status Codes |
|
|
411 | (1) |
|
3Xx Redirection Status Codes |
|
|
412 | (1) |
|
4Xx Client Error Status Codes |
|
|
413 | (1) |
|
5Xx Server Error Status Codes |
|
|
414 | (1) |
|
Server Status Codes On Cisco Devices |
|
|
414 | (1) |
|
|
415 | (16) |
|
Http General Header Fields |
|
|
418 | (1) |
|
Cache Servers: Cache-Control And Pragma |
|
|
418 | (2) |
|
|
420 | (1) |
|
|
420 | (1) |
|
|
420 | (1) |
|
|
421 | (1) |
|
|
421 | (1) |
|
|
422 | (1) |
|
Client Request Header Fields |
|
|
422 | (1) |
|
Content Negotiation Header Fields: Accept, Accept-Charset, Accept-Encoding And Accept-Language |
|
|
423 | (1) |
|
Client Authentication Credentials: Authorization, Proxy-Authorization And Cookie |
|
|
423 | (1) |
|
|
424 | (1) |
|
|
424 | (1) |
|
|
424 | (1) |
|
Request Context: From, Referer And User-Agent |
|
|
424 | (1) |
|
|
425 | (1) |
|
Server Response Header Fields |
|
|
425 | (1) |
|
|
425 | (1) |
|
Validator Header Fields: Etag And Last-Modified |
|
|
425 | (1) |
|
Response Authentication Challenges: X-Authenticate And Set-Cookie |
|
|
426 | (1) |
|
Response Control Header Fields: Location, Retry-After, And Vary |
|
|
426 | (1) |
|
|
427 | (1) |
|
The Http Entity Header Fields |
|
|
427 | (1) |
|
Control Header Fields: Allow |
|
|
428 | (1) |
|
Representation Metadata Header Fields: Content-X |
|
|
428 | (2) |
|
|
430 | (1) |
|
|
430 | (1) |
|
|
431 | (5) |
|
|
431 | (1) |
|
|
432 | (1) |
|
|
432 | (3) |
|
|
435 | (1) |
|
Absolute And Relative References |
|
|
436 | (1) |
|
|
436 | (11) |
|
Downloading And Installing Postman |
|
|
438 | (1) |
|
|
438 | (3) |
|
|
441 | (6) |
|
|
447 | (8) |
|
|
455 | (12) |
|
Tcp Over Python: The Socket Module |
|
|
455 | (3) |
|
|
458 | (6) |
|
|
464 | (3) |
|
|
467 | (2) |
|
|
469 | (40) |
|
|
469 | (18) |
|
|
472 | (2) |
|
|
474 | (2) |
|
|
476 | (1) |
|
|
477 | (4) |
|
|
481 | (2) |
|
Api Call To The Resource Server |
|
|
483 | (1) |
|
State Management Using Cookies |
|
|
483 | (4) |
|
Transport Layer Security (Tls) And Https |
|
|
487 | (16) |
|
|
488 | (1) |
|
Key Generation And Exchange |
|
|
488 | (4) |
|
Stream And Block Data Encryption |
|
|
492 | (1) |
|
Message Integrity And Authenticity |
|
|
493 | (2) |
|
Encryption And Message Integrity And Authenticity Combined |
|
|
495 | (1) |
|
Digital Signatures And Peer Authentication |
|
|
496 | (2) |
|
Tls 1.3 Protocol Operation |
|
|
498 | (2) |
|
The Tls Version 1.3 Handshake |
|
|
500 | (2) |
|
|
502 | (1) |
|
|
503 | (1) |
|
|
503 | (1) |
|
|
503 | (5) |
|
Streams, Messages, And Frames |
|
|
504 | (1) |
|
|
505 | (1) |
|
|
506 | (1) |
|
Other Http/2 Optimizations |
|
|
507 | (1) |
|
|
508 | (1) |
|
|
509 | (44) |
|
|
509 | (12) |
|
|
510 | (2) |
|
|
512 | (1) |
|
Ssh Transport Layer Protocol |
|
|
513 | (1) |
|
Ssh Authentication Protocol |
|
|
514 | (4) |
|
|
518 | (3) |
|
|
521 | (5) |
|
|
521 | (5) |
|
Enabling Ssh On Cisco Devices |
|
|
526 | (14) |
|
Configuring And Verifying Ssh On Cisco Ios Xe |
|
|
526 | (6) |
|
Configuring Ssh On Ios Xr |
|
|
532 | (5) |
|
|
537 | (3) |
|
|
540 | (11) |
|
Setting Up Sftp On Cisco Devices |
|
|
545 | (4) |
|
|
549 | (2) |
|
|
551 | (1) |
|
|
551 | (2) |
|
|
|
|
553 | (38) |
|
Xml Overview, History, And Usage |
|
|
553 | (1) |
|
Xml Syntax And Components |
|
|
554 | (8) |
|
Xml Document Building Blocks |
|
|
554 | (4) |
|
Xml Attributes, Comments, And Namespaces |
|
|
558 | (3) |
|
|
561 | (1) |
|
|
562 | (12) |
|
|
563 | (2) |
|
|
565 | (9) |
|
Brief Comparison Of Xsd And Dtd |
|
|
574 | (1) |
|
|
574 | (4) |
|
|
574 | (4) |
|
Xml Stylesheet Language Transformations (Xslt) |
|
|
578 | (2) |
|
Processing Xml Files With Python |
|
|
580 | (8) |
|
|
588 | (3) |
|
|
591 | (24) |
|
Javascript Object Notation (Json) |
|
|
591 | (4) |
|
Json Data Format And Data Types |
|
|
592 | (3) |
|
Json Schema Definition (Jsd) |
|
|
595 | (19) |
|
Structure Of The Json Schema |
|
|
595 | (3) |
|
Repetitive Objects In The Json Schema |
|
|
598 | (4) |
|
Referencing External Json Schemas |
|
|
602 | (7) |
|
Using Json Schemas For Data Validation |
|
|
609 | (5) |
|
|
614 | (1) |
|
|
615 | (24) |
|
|
616 | (10) |
|
|
618 | (2) |
|
|
620 | (1) |
|
|
621 | (3) |
|
|
624 | (1) |
|
|
625 | (1) |
|
Handling Yaml Data Using Python |
|
|
626 | (11) |
|
|
637 | (2) |
|
|
|
|
639 | (50) |
|
|
639 | (3) |
|
|
639 | (1) |
|
Why Data Modeling Matters |
|
|
640 | (2) |
|
|
642 | (21) |
|
Structure Of A Yang Module |
|
|
644 | (2) |
|
Data Types In A Yang Module |
|
|
646 | (1) |
|
|
647 | (1) |
|
|
648 | (1) |
|
|
649 | (1) |
|
|
649 | (2) |
|
|
651 | (1) |
|
|
652 | (1) |
|
|
653 | (1) |
|
|
654 | (2) |
|
Augmentations In Yang Modules |
|
|
656 | (2) |
|
Deviations In Yang Modules |
|
|
658 | (4) |
|
|
662 | (1) |
|
|
663 | (10) |
|
|
664 | (2) |
|
Native (Vendor-Specific) Yang Modules |
|
|
666 | (4) |
|
|
670 | (1) |
|
|
671 | (2) |
|
|
673 | (15) |
|
|
673 | (6) |
|
|
679 | (4) |
|
Using Pyang To Create Jtox Drivers |
|
|
683 | (5) |
|
|
688 | (1) |
|
|
|
Chapter 14 Netconf And Restconf |
|
|
689 | (92) |
|
|
689 | (50) |
|
|
689 | (3) |
|
|
692 | (1) |
|
The Netconf Transport Layer |
|
|
693 | (1) |
|
Netconf Transport Protocol Requirements |
|
|
693 | (1) |
|
|
694 | (1) |
|
The Netconf Messages Layer |
|
|
695 | (1) |
|
|
696 | (2) |
|
|
698 | (1) |
|
|
699 | (2) |
|
The Netconf Operations Layer |
|
|
701 | (1) |
|
Retrieving Data: <Get> And <Get-Config> |
|
|
702 | (10) |
|
Changing Configuration: <Edit-Config>, <Copy-Config>, And <Delete-Config> |
|
|
712 | (8) |
|
Datastore Operations: <Lock> And <Unlock> |
|
|
720 | (1) |
|
Session Operations: <Close-Session> And <Kill-Session> |
|
|
721 | (1) |
|
Candidate Configuration Operations: <Commit>, <Discard-Changes>, And <Cancel-Commit> |
|
|
722 | (2) |
|
Configuration Validation: <Validate> |
|
|
724 | (1) |
|
The Netconf Content Layer |
|
|
725 | (6) |
|
|
731 | (1) |
|
The Writable Running Capability |
|
|
732 | (1) |
|
The Candidate Configuration Capability |
|
|
732 | (1) |
|
The Confirmed Commit Capability |
|
|
732 | (1) |
|
The Rollback-On-Error Capability |
|
|
732 | (1) |
|
|
733 | (1) |
|
The Distinct Startup Capability |
|
|
733 | (1) |
|
|
733 | (2) |
|
|
735 | (1) |
|
Netconf Using Python: Ncclient |
|
|
735 | (4) |
|
|
739 | (40) |
|
|
739 | (3) |
|
|
742 | (1) |
|
The Restconf Transport Layer |
|
|
743 | (1) |
|
The Restconf Messages Layer |
|
|
743 | (1) |
|
|
743 | (1) |
|
|
744 | (1) |
|
Constructing Restconf Messages |
|
|
745 | (1) |
|
|
745 | (1) |
|
|
746 | (1) |
|
|
746 | (1) |
|
|
747 | (2) |
|
|
749 | (1) |
|
|
750 | (3) |
|
|
753 | (3) |
|
|
756 | (2) |
|
The Yang Library Version Resource |
|
|
758 | (1) |
|
Methods And The Restconf Operations Layer |
|
|
759 | (1) |
|
Retrieving Data: Options, Get, And Head |
|
|
759 | (4) |
|
Editing Data: Post, Put, Patch, And Delete |
|
|
763 | (8) |
|
|
771 | (6) |
|
|
777 | (2) |
|
|
779 | (2) |
|
Chapter 15 Grpc, Protobuf, And Gnmi |
|
|
781 | (38) |
|
Requirements For Efficient Transport |
|
|
781 | (1) |
|
History And Principles Of Grpc |
|
|
782 | (2) |
|
|
784 | (2) |
|
The Protocol Buffers Data Format |
|
|
786 | (4) |
|
Working With Grpc And Protobuf In Python |
|
|
790 | (8) |
|
|
798 | (1) |
|
|
799 | (15) |
|
|
801 | (6) |
|
|
807 | (3) |
|
|
810 | (1) |
|
|
811 | (3) |
|
Managing Network Elements With Gnmi/Grpc |
|
|
814 | (4) |
|
|
818 | (1) |
|
Chapter 16 Service Provider Programmability |
|
|
819 | (62) |
|
The Sdn Framework For Service Providers |
|
|
819 | (4) |
|
Requirements For Service Provider Networks Of The Future |
|
|
819 | (2) |
|
Sdn Controllers For Service Provider Networks |
|
|
821 | (2) |
|
|
823 | (20) |
|
|
823 | (9) |
|
Segment Routing Traffic Engineering |
|
|
832 | (11) |
|
|
843 | (16) |
|
|
843 | (7) |
|
|
850 | (4) |
|
|
854 | (2) |
|
|
856 | (2) |
|
|
858 | (1) |
|
Path Computation Element Protocol (Pcep) |
|
|
859 | (21) |
|
|
861 | (4) |
|
Pcep Call Flow With Delegation |
|
|
865 | (2) |
|
Configuring Pcep In Cisco Ios Xr |
|
|
867 | (13) |
|
|
880 | (1) |
|
Part VIII Programmability Applications |
|
|
|
Chapter 17 Programming Cisco Platforms |
|
|
881 | (76) |
|
|
882 | (1) |
|
|
883 | (39) |
|
|
884 | (1) |
|
Open Nx-Os Programmability |
|
|
884 | (1) |
|
|
885 | (1) |
|
|
886 | (1) |
|
|
887 | (1) |
|
|
887 | (6) |
|
|
893 | (5) |
|
|
898 | (7) |
|
|
905 | (17) |
|
|
922 | (9) |
|
|
922 | (1) |
|
Meraki Use Case: Dashboard Api |
|
|
923 | (8) |
|
|
931 | (11) |
|
|
933 | (1) |
|
|
934 | (1) |
|
|
934 | (1) |
|
Event Notifications And Webhooks |
|
|
935 | (1) |
|
|
935 | (1) |
|
|
936 | (6) |
|
|
942 | (12) |
|
Cisco's Collaboration Portfolio |
|
|
942 | (2) |
|
|
944 | (1) |
|
Cisco Unified Communications Manager (Cucm) |
|
|
944 | (1) |
|
|
945 | (1) |
|
|
945 | (1) |
|
|
946 | (1) |
|
|
946 | (2) |
|
|
948 | (6) |
|
|
954 | (3) |
|
Chapter 18 Programming Non-Cisco Platforms |
|
|
957 | (32) |
|
General Approaches To Programming Networks |
|
|
957 | (5) |
|
|
957 | (1) |
|
Programmability Via The Cli |
|
|
958 | (1) |
|
|
959 | (1) |
|
Programmability Via The Linux Shell |
|
|
960 | (1) |
|
Programmability Via Netconf |
|
|
960 | (1) |
|
Programmability Via Restconf And Rest Apis |
|
|
961 | (1) |
|
Programmability Via Grpc/Gnmi |
|
|
961 | (1) |
|
|
962 | (25) |
|
Converting The Traditional Cli To A Programmable One |
|
|
962 | (5) |
|
Classical Linux-Based Programmability |
|
|
967 | (6) |
|
Managing Network Devices With Netconf/Yang |
|
|
973 | (5) |
|
Managing Network Devices With Restconf/Yang |
|
|
978 | (9) |
|
|
987 | (2) |
|
|
989 | (120) |
|
|
989 | (14) |
|
|
990 | (6) |
|
Ad Hoc Commands And Playbooks |
|
|
996 | (4) |
|
The World Of Ansible Modules |
|
|
1000 | (3) |
|
Extending Ansible Capabilities |
|
|
1003 | (31) |
|
|
1003 | (2) |
|
|
1005 | (8) |
|
|
1013 | (3) |
|
|
1016 | (8) |
|
|
1024 | (10) |
|
|
1034 | (21) |
|
|
1034 | (6) |
|
Variables, Loops, And Conditions |
|
|
1040 | (9) |
|
Using Python Functions In Jinja2 |
|
|
1049 | (1) |
|
|
1050 | (1) |
|
|
1051 | (3) |
|
|
1054 | (1) |
|
Using Ansible For Cisco Ios Xe |
|
|
1055 | (18) |
|
Operational Data Verification Using The Ios_Command Module |
|
|
1058 | (3) |
|
General Configuration Using The Ios_Config Module |
|
|
1061 | (8) |
|
Configuration Using Various Ios_* Modules |
|
|
1069 | (4) |
|
Using Ansible For Cisco Ios Xr |
|
|
1073 | (11) |
|
Operational Data Verification Using The Iosxr_Command Module |
|
|
1075 | (3) |
|
General Configuration Using The Iosxr_Config Module |
|
|
1078 | (5) |
|
Configuration Using Various Iosxr_* Modules |
|
|
1083 | (1) |
|
Using Ansible For Cisco Nx-Os |
|
|
1084 | (11) |
|
Operational Data Verification Using The Nxos_Command Module |
|
|
1086 | (4) |
|
General Configuration Using The Nxos_Config Module |
|
|
1090 | (3) |
|
Configuration Using Various Nxos_* Modules |
|
|
1093 | (2) |
|
Using Ansible In Conjunction With Netconf |
|
|
1095 | (13) |
|
Operational Data Verification Using The Netconf_Get Module |
|
|
1098 | (5) |
|
General Configuration Using The Netconf_Config Module |
|
|
1103 | (5) |
|
|
1108 | (1) |
|
|
|
|
1109 | (12) |
|
|
1109 | (3) |
|
Automate The Painful Stuff |
|
|
1109 | (1) |
|
Don't Automate A Broken Process |
|
|
1110 | (1) |
|
|
1110 | (1) |
|
Find Your Sources Of Truth |
|
|
1110 | (1) |
|
Avoid Automation You Can't Reuse |
|
|
1111 | (1) |
|
|
1111 | (1) |
|
Understand What Level Of Complexity You're Willing To Handle |
|
|
1111 | (1) |
|
Do A Cost/Benefit Analysis |
|
|
1112 | (1) |
|
|
1112 | (6) |
|
|
1113 | (1) |
|
Containers: Docker And Kubernetes |
|
|
1114 | (1) |
|
|
1115 | (1) |
|
Software Development Methodologies |
|
|
1116 | (1) |
|
|
1117 | (1) |
|
What Does All This Mean For Your Career? |
|
|
1118 | (3) |
Index |
|
1121 | |