Index
Symbols
& (ampersands)
&= operator, Python, 284
AND operator, Python, 281, 285–286
* (asterisks)
** assignment operator, Python, 281
**= operator, Python, 284
*= operator, Python, 284
assignment operator, Python, 281
regular expressions (regex), 185, 189
\ (backslashes)
\<, regular expressions (regex), 185, 188–189
\>, regular expressions (regex), 185, 188–189
regular expressions (regex), 186
^ (carets)
^= operator, Python, 284
regular expressions (regex), 185, 187
XOR operator, 281
{ } (curly braces)
{N}, regular expressions (regex), 186, 189–192
{N, M}, regular expressions (regex), 186, 189–192
regular expressions (regex), 185
$ (dollar signs), regular expressions (regex), 185, 187
. (dots),
.* notation, regular expressions (regex), 190
.. notation, Linux directories, 37
regular expressions (regex), 185, 189
= (equal signs)
= assignment operator, Python, 284
== (double equal sign)
conditional statements, 229
Jinja2 operator, 1019
Python operator, 285
conditional statements, 229
!= operator
Jinja2, 1019
Python, 285
/ (forward slashes)
/ assignment operator, Python, 281
/: root directory, Linux, 36–37
/= operator, Python, 284
< (left arrows)
< operator, Python, 285, 1019
<< operator, Python, 281
<= assignment operator
Jinja2, 1019
Python, 285
- (minus signs)
-= operator, Python, 284
- assignment operator, Python, 281
( ) (capture groups), regular expressions (regex), 185–186
% (percentage symbols)
%= operator, Python, 284
Modulo Operator, 274, 281
| (pipes), 58, 65–67, 281
| (OR operator)
Python, 281, 285
regular expressions (regex), 186
|= operator, Python, 284
+ (plus signs)
+ assignment operator, Python, 281
+= operator, Python, 284
regular expressions (regex), 186, 189–190, 192
#! (hashbangs), Linux shell scripting, 205–208
? (question marks), regular expressions (regex), 186, 189, 191–192
> (right arrows)
> Jinja2 operator, 1019
> Python operator, 285
>= (right arrow, equal sign)
assignment operator, Jinja2, 1019
assignment operator, Python, 285
>> signed right shift operator, Python, 281
>>= operator, Python, 284
; (semicolons)
;&, case-in constructs, 233–234
;; (double semicolons), case-in constructs, 233–234
;;&, case-in constructs, 233–234
Linux notation, 61–62
[ ] (square brackets)
[=] operator, Python, 284
[first_literal - last_literal], regular expressions (regex), 185
[literals], regular expressions (regex), 185
Python
lists, 286–287
strings, 278
regular expressions (regex), 185
~ (NOT) operator, Python, 281, 285
Numbers
0-RTT, TLS, 502–503
1xx information status codes, 411
2xx successful status codes, 411–412
3xx redirection status codes, 412
4xx server error status codes, 413–414
5xx client error status codes, 414
200 OK responses, static routing
DELETE method, 405–406
POST method, 394–401
PUT method, 403–404
absolute paths
Linux directories, 38–39
XPath expressions, 576–577
abstraction
API, 12–13
defined, 9–13
NaC, 12
OOP, 257
single sources of truth, 11–12
access tokens, OAuth protocol, 481–483
ACI (Application Centric Infrastructures), 13
ACL, Linux, 148–155
ad hoc command, Ansible, 994–997
Adj-SID, 824, 827, 839–842
AEAD (Authenticated Encryption with Associated Data), 495–496
AES-CCM protocol, 495
AES-GCM protocol, 495
alert protocol, TLS 1.3, 499
algorithms, 258–259
ampersands (&),
&= operator, Python, 284
AND operator, Python, 281, 285
analyzing cost/benefit analysis, 1112
anchors, YAML, 624–625
AND operator (&), Python, 281, 285–286
AND/OR logic, combining multiple conditional statements, 1022–1024
Android, Linux distributions, 26
annotation, JSON schemas, 596
Ansible, 15–16, 989
ad hoc command, 994–997
basics, 989–990
call flows, for a single command, 990–991
conditional statements, 1016–1019
AND/OR logic, 1022–1024
checking for substrings in variables, 1021–1022
checking for variables, 1019–1021
combining multiple conditional statements, 1022–1024
Jinja2 templates, 1045–1049
with loops, 1024–1027
with loops and variables, 1027–1033
configuring, 991–995
connection plug-ins, 1003–1004
filters, 1013–1015
help, 995–996
installing, 990
inventories
default paths, 992
IP addresses, 993–994
simple inventory files, 992–993
inventory files, defining variables, 1009–1011
IOS XE
clearing counters, 1060–1061
configuring, 1061–1069
configuring with ios_* modules, 1069–1073
configuring with iosxr_* modules, 1083–1084
preparing for Ansible management, 1055–1057
preparing for NETCONF management, 1095–1096
updating files with additional hosts/variables, 1057–1058
verifying Ansible management, 1057
verifying operational data, 1058–1060
IOS XR
configuring, 1078–1084
preparing for management, 1073–1074
preparing for NETCONF management, 1096–1098
verifying Ansible management, 1074–1075
verifying operational data, 1074–1078
ios_command module
clearing counters, 1060–1061
verifying operational data, 1058–1060
iosxr_command
input parameters, 1001
playbooks, 997–999
verifying operational data, 1074–1078
Jinja2 templates, 1034–1040
conditional statements, 1045–1049
loops, 1040–1043
playbooks, 1040–1043
variables, 1042–1043
Linux, host files, 993
loops
conditional statements with loops, 1024–1027
Jinja2 templates, 1040–1043
modules
control functions, 1001–1002
debug modules, 999
file modules, 1003
iosxr_command, parameters, 1001
network modules, 1003
return values, 1001–1002
structure of, 1000
utility modules, 1003
NETCONF
configuring, 1103–1107
IOS XE management, 1095–1096
IOS XR management, 1096–1098
NX-OS management, 1098
verifying operational data, 1098–1103
NX-OS
collecting show output with nxos_command, 1086–1088
configuring, 1090–1095
interactive commands, 1088–1089
preparing for management, 1084–1085
preparing for NETCONF management, 1098
verifying management, 1085–1086
verifying operational data, 1086–1089
overview of, 989–990
playbooks, 990, 997–1000
conditional statements with loops and variables, 1032–1033
defining variables, 1005–1006
Jinja2 templates, 1040–1043
Python, 991–992
variables, 999
Boolean variables, 1006
checking for substrings with conditional statements, 1021–1022
checking with conditional statements, 1019–1021
conditional statements with loops and variables, 1027–1033
defining from external files, 1007–1009
defining in inventory files, 1009–1011
defining in playbooks, 1005–1006
dictionary variables, 1007
importing from external files, 1007–1009
Jinja2 templates, 1042–1043
list variables, 1007
setting dynamically, 1011–1013
string variables, 1006
types of, 1006–1007
version command, 991–992
anywhere selection, XPath expressions, 576
API (Application Programming Interface)
abstraction, 12–13
automation, 12–13
AXL API, 944
CER API, 944
classifications, 882–883
CLI versus, 8
collaboration API, 942–944
AXL API, 944
CER API, 944
CUCM Serviceability API, 945
Finesse Desktop API, 946–947
PAWS API, 944
REST API, 945–946, 948–954
TSP API, 945
UDS API, 945
URL API, 945
xAPI, 946
XML API, 945
CUCM Serviceability API, 945
DNA Center API
device management, 934
Eastbound API, 933
event notifications, 935
Integration API, 935–936
Intent API, 934, 936–941
Northbound API, 933
Southbound API, 933
webhooks, 935
Westbound API, 933
eastbound API, 883
endpoints, 882
IOS XE
gNMI, insecure mode, 815
NETCONF, 918–922
programmability, 885–886
IOS XR
NETCONF, 916–918
programmability, 886–887
Linux, 24
Meraki API, 922, 923
Captive Portal API, 923
Dashboard API, 922–931
Location Scanning API, 923
MV Sense API, 923
Webhook Alerts API, 922
model-based industry-standard API
IOS XE programmability, 885
Open NX-OS programmability, 884
NETCONF
IOS XE, 918–922
IOS XR, 916–918
NX-OS, 905–916
northbound API, 883
NX-API CLI, use cases, 893–898
NX-API REST, use cases, 898–905
Open NX-OS
Bash shells, 887–891
Guest shells, 887, 891–892
NETCONF, 905–916
programmability, 884–885
use cases, 887–892
PAWS API, 944
platforms, 882
Postman, 436–437
installing, 438
interface, 438–441
usage, 441–446
resource server calls, OAuth protocol, 483
REST API, 322, 392–393, 945–946, 948–954
RESTful API, 883
RPC-based API, 883
rules of thumb, 1118
service layer API, IOS XR programmability, 886
southbound API, 883
transport protocols, 18–19
TSP API, 945
UDS API, 945
URL API, 945
vendor/API matrix, network programmability, 957–958
web/API development, 336–337
back end development, 336
Django, 337–345
Flask, 345–352
front end development, 336
Postman, 337–345
webhooks, 882
westbound API, 883
XML API, 945
transport protocols, 18–19
API resource, RESTCONF, 747–749
applications
developing
different environments, 311
Docker, 317–331
Git, 312–317
organizing development environment, 311–312
Python modules, 333–336
replicating product environments, 312
reusable code, 312
version control, 311
virtualenv tool, 331–333
Django
creating applications, 341–345
demo applications, 343–345
dockerizing, 326–331
hosting
containerized application hosting, 1116
IOS XE programmability, 886
IOS XR programmability, 887
iPerf, 1116
native application hosting, 1115–1116
Open NX-OS programmability, 885
rules of thumb, 1115–1116
Linux communication, 24
Python
machine learning, 382–384
network automation, architectures, 353–354, 371–375
network automation, Jinja2 templates, 363–375
network automation, NAPALM libraries, 354–359
network automation, Nornir libraries, 359–363, 367–369, 371–375
orchestration, 375–382
web/API development, Django, 337–345
web/API development, Flask, 345–352
web/API development, 336–337
back end development, 336
Django, 337–345
Flask, 345–352
front end development, 336
Postman, 337–345
web servers, running with Django, 338–339
Arch, Linux distributions, 26
architectures
BGP-LS peering architectures, 843–844
Linux, 23–25
microservice architectures, 782
network automation, 353–354
archiving utilities, Linux
bzip2, 67, 69
gzip, 67–68
tar, 67, 70–73
xz, 67, 69–70, 72–73
Arguments.bash script, Linux scripting, 213–214
arithmetic operators
Bash, 220–222, 229
Linux, 220–222
Python, 281–283
arrays
JSON arrays, 593
Linux scripting
adding/removing elements, 224–226
associative arrays, 222
concatenating, 221–226
declaring, 222–224
defined, 222
indexed arrays, 222–224
assignment operators, Python, 284
associative arrays, 222
asterisks (*)
Python
*= operator, 284
** assignment operator, 281
**= operator, 284
assignment operator, 281
regular expressions (regex), 185, 189–190
asymmetric keys, 490
attributes, XML, 558, 568, 570
augmentation, YANG modules, 656–658
authentication
host-based authentication, 517–518
HTTP/1.1, 469–471
base64 encoding, 472, 474
basic authentication, 472–474
OAuth protocol, 474–483
UTF-8 encoding, 472–473
workflows, 470
key-based authentication, SSH, 523–525
MAC, 493–494
NETCONF, 694
Nexus switches, 401–402, 463
password authentication, 517, 522–523, 525–526
peer authentication, 496–497
public key authentication, 516–517
SSH Authentication Protocol, 514–516
host-based authentication, 517–518
password authentication, 517, 522–523, 525–526
public key authentication, 516–517
authorization grants, OAuth protocol, 477–481
automation
API, 12–13
benefits, 6
broken processes, 1110
cloud computing, 1118
complexity, 1111–1112
configuration management automation
IOS XE programmability, 886
Open NX-OS programmability, 885
cost/benefit analysis, 1112
defined, 5–6
model-driven telemetry, 1113–1114
Network Programmability and Automation toolbox, 14–15
Ansible. See also separate entry, 15–16
Linux, 16–17
protocols, 18–19
Python, 15
virtualization, 17
YANG, 17
networks
architectures, 353–354
Jinja2 templates, 363–375
NAPALM libraries, 354–359, 371–375
Nornir libraries, 359–363, 367–369, 371–375
one-time automations, 1111
orchestration versus, 6–7
reusing automations, 1111
rules of thumb, 1109–1112, 1118
single sources of truth, 11–12
software/network engineers, 19–20
awk programming language, 194–197
AXL API, 944
back end web/API development, 336
backslashes (\), regular expressions (regex), 186
\<, regular expressions (regex), 185, 188–189
\>, regular expressions (regex), 185, 188–189
base64 encoding, HTTP/1.1 authentication, 472, 474
Bash, 184
Arguments.bash script, 213–214
arithmetic operators, 220–222, 229
CLI programmable interface creation, 963–967
Expect programming language, 245–246
file comparison operators, 230–232
functions, 244
HTTP, 447–454
integer comparison operators, 229–230
IOS XR programmability, 886
Linux, 29
Linux interface configuration, 969–970
Open NX-OS, 884, 887–891
scripting, 206–207, 213–214
SSH, 539–540, 548–549
string comparison operators, 228–229
string operators, 227–228
Bearer Tokens, HTTP, 475–476
beginnings/endings of words, matching, regular expressions (regex), 188–
189
benefit/cost analysis automation, 1112
BGP, SR-TE, 836–843
BGP-LS (BGP-Link State), 843
lab topologies, 845–846
link NLRI, 856–857
node NLRI, 854–855
NPF-XR, 845, 849, 851–854
peering, 843–844, 847–849
prefix NLRI, 858–859
routing, 846–847
routing types (overview), 850–854
bidirectional RPC, 785
binary message framing, HTTP/2, 506–507
BIOS (Basic Input/Output Systems), 27
bitwise operators, Python, 281–283
blkid command, Linux, 148–149
block ciphers, 492–493
blocking, head-of-line, 504
Boolean data, JSON, 593
Boolean variables, Ansible, 1006
boot directory, Linux, 36
boot process, Linux, 26–28
broken processes, automation, 1110
buffered/unbuffered access, Linux /dev directory, 120
built-in data types, YANG modules, 647–648
Business Edition (Cisco), 942
bytecode, Python, 265–267
generators, 264
interpreters, 264
bzip2 archiving utility, Linux, 67, 69
call flows, PCEP, 861–864
<cancel-commit> operations, NETCONF, 722–724
candidate configuration, NETCONF, 722–724, 732
capabilities, NETCONF, 731
candidate configuration capability, 732
confirmed commit capability, 732
distinct startup capability, 733
rollback-on-error capability, 732–733
URL capability, 733–734
validate capability, 733
writable-running capability, 732
XPath capability, 735
Capabilities RPC, gNMI, 810–811
CAPEX (Capital Expenditures), 2
Captive Portal API (Meraki), 923
capture groups ( ( ) ), regular expressions (regex), 185–186
career paths, software/network engineers, 1118–1119
carets (^)
^= operator, Python, 284
regular expressions (regex), 185, 187
XOR operator, 281
case-in constructs, Linux scripting, 232–234
;&233–234
;;, 233–234
;;&233–234
cat command, 41–42, 61–62
cat/proc/cpuinfo command, Linux, 87–88
CBC (Cipher Block Chaining), 492–493
CCM (Counter with CBC mode), 495–496
CentOS
Docker
containers, 322–325
installing, 318–320
Git, setting up, 313–314
OpenSSH installations, 522
SCP, 549–550
SSH setup, 521–526
CER API, 944
changing
CLI, 19
file users/groups, Linux, 146
channels, SSH Connection Protocol, 518–521
character classes, matching uppercase/lowercase characters in regular
expressions (regex), 187–188
child/parent relationships, XML, 555–556
chmod command, Linux, 144–146
chown command, Linux, 146
Chrome (Google), LocalRepo repositories, 114–117
ciphers, 492
block ciphers, 492–493
CBC, 492–493
CMAC, 494
CTR mode, 492–493
symmetric ciphers, 492
Cisco Business Edition, 942
Cisco collaboration portfolio, 942–944
Cisco devices
server status codes, 414
SSH setup, 545–549
Cisco Finesse, 943, 946–947
Cisco IOS XE
Ansible
clearing counters, 1060–1061
configuring IOS XE, 1061–1069
configuring IOS XE with ios_* modules, 1069–1073
configuring IOS XR with iosxr_* modules, 1083–1084
preparing IOS XE for Ansible management, 1055–1057
preparing IOS XE for NETCONF management, 1095–1096
updating files with additional hosts/variables, 1057–1058
verifying IOS XE for Ansible management, 1057
verifying operational data, 1058–1060
SSH setup, 526–531, 545–546
Cisco IOS XR
Ansible
configuring IOS XR, 1078–1084
preparing for management, 1073–1074
preparing IOS XR for NETCONF management, 1096–1098
verifying IOS XR for Ansible management, 1074–1075
verifying operational data, 1074–1078
PCEP configurations, 867–880
SSH setup, 532–536, 546–547
Cisco IP Phones, 944
Cisco Meeting Server, 943
Cisco Unified Contact Center, 943
Cisco Webex Board, 943
Cisco Webex Cloud Calling, 942
Cisco Webex Contact Center, 943
Cisco Webex Meetings, 943
REST API, 945–946, 948–954
TSP API, 945
URL API, 945
XML API, 945
Cisco Webex Room Series, 944
Cisco Webex Support, 943
Cisco Webex Teams, 942, 945–946, 948–954
classes, Python modules, 335–336
cleaning up networks, 1110
clear command, 30
CLI (Command-Line Interface)
API versus, 8
changing, 19
command shell, Linux, 28–30
loopback interfaces, CLI programmability, 962–963
network programmability, 958–959, 962–967
NX-API CLI
Open NX-OS programmability, 884
use cases, 893–898
as programmable CLI, 962–967
transport protocols, 19
unstructured data, 19
client registration, OAuth protocol, 476–477
client requests, HTTP, 388–392, 397–398
CONNECT method, 407
DELETE method, 405–406
GET method, 398
Bash shells, 447–454
Postman, 445–446
HEAD method, 398
header fields, 422–425
OPTIONS method, 407–408
POST method, 399–402
Postman, 443–445
Python and HTTP, 465
PUT method, 402–405
TRACE method, 408
client/server connections, HTTP, 394–395
client-streaming RPC, 785
cloning
git repositories, 316–317
YANG modules, 665
<close-session> operations, NETCONF, 721–722
cloud computing
Cisco Webex Cloud Calling, 942
rules of thumb, 1118
CMAC (Cipher-based MAC), 494
CMDB (Configuration Management Database), 12
code execution, Python, 263–269
bytecode, 265–267
generators, 264
interpreters, 264
code testing/verification, 269
compiling code, 265–266
executable Python files, 265
lexical analyzers, 263
numeric data, 269
simple Python program, 264
tokenizers, 263
collaboration
API, 942–944
AXL API, 944
CER API, 944
CUCM Serviceability API, 945
Finesse Desktop API, 946–947
PAWS API, 944
REST API, 945–946, 948–954
TSP API, 945
UDS API, 945
URL API, 945
xAPI, 946
XML API, 945
Cisco collaboration portfolio, 942–944
endpoints, 943
Cisco IP Phones, 944
Cisco Webex Room Series, 944
platforms, API, 942
AXL API, 944
CER API, 944
CUCM Serviceability API, 945
Finesse Desktop API, 946–947
PAWS API, 944
REST API, 945–946, 948–954
TSP API, 945
UDS API, 945
URL API, 945
xAPI, 946
XML API, 945
collections, YAML, 618–620
command shell, Linux, 28–30
comments
Linux scripting, 207–208
XML, 558
YAML, 616
<commit> operations, NETCONF, 722–724
commit phase, Git workflows, 317
compact GBP, 1113–1114
comparison operators
Jinja2, 1018–1019
Python, 284–285
compiling
Linux software installations, 94, 96–97
Python code, 265–266
complex elements, XML validation, 570–573
complex numbers, Python, 276
compose versions, Docker, 320–322
compression, HTTP/1.1, 396–397
computer science concepts, 255
concatenating
arrays, 221–226
strings, Python, 277
conditional statements
Ansible, 1016–1019
checking for substrings in variables, 1021–1022
checking for variables, 1019–1021
combining multiple conditional statements, 1022–1024
conditional statements with loops, 1024–1027
conditional statements with loops and variables, 1027–1033
Jinja2 templates, 1045–1049
AND/OR logic, 1022–1024
Jinja2 templates, 1045–1049
Linux scripting, 226
== (double equal sign), 229
= (equal sign), 229
case-in constructs, 232–234
if-then constructs, 226–232
nested code blocks with conditional statements, Python control flow, 295–
296
conferencing, 943
Cisco Meeting Server, 943
Cisco Webex Meetings, 943
REST API, 945–946, 948–954
TSP API, 945
URL API, 945
XML API, 945
Cisco Webex Support, 943
configuration files, Linux networking, 174–179
configuration management automation
IOS XE programmability, 886
IOS XR programmability, 887
Open NX-OS programmability, 885
configuring
Ansible, 991–995
candidate configuration capability, NETCONF, 732
CMDB, 12
IOS XE with Ansible
general configuration, 1061–1069
with ios_* modules, 1069–1073
with iosxr_* modules, 1083–1084
IOS XR with Ansible, general configuration, 1078–1083
NETCONF, 1103–1107
<cancel-commit> operations, 722–724
candidate configuration operations, 722–724
<close-session> operations, 721–722
<commit> operations, 722–724
configuration validation, 724–725
<copy-config> operations, 719
datastore configurations, 712–720
datastore operations, 720–721
<delete-config> operations, 719–720
<discard-changes> operations, 722–724
<edit-config> operations, 712–719
<kill-session> operations, 721–722
<lock> operations, 720–721
session operations, 721–722
<unlock> operations, 720–721
<validate> operations, 724–725
NX-OS
with nx-os_* modules, 1093–1095
with nx-os_config modules, 1086–1088
YAML configuration files, building, 635–637
confirmed commit capability, NETCONF, 732
CONNECT method, 407
connection plug-ins, Ansible, 1003–1004
connections, NetworkManager
attributes, 169–170
creating, 171–174
deleting, 171–174
listing, 169
constructors, Python modules, 335–336
Contact Center, 942–943
container nodes, YANG data modeling, 652–653
containerized application hosting, 1116
containers
Docker, 1115
Docker Swarm, 1115
hello-world containers, 322–325
virtualization, 317–318
Kubernetes, 1115
rules of thumb, 1114–1115
content layer
NETCONF, 693, 725–730
RESTCONF, 743
content parameter, RESTCONF, 771
control flow, Python
elif statements, 297–298
for loops, 301–302, 306
nested for loops, 303–304
range() function, 302–303
if-else statements, 296–300
nested code blocks with conditional statements, 295–296
while loops, 304–306
cookies, HTTP state management, 483–487
<copy-config> operations, 719
copying
directories, Linux, 49–51
files, Linux, 46–48
public keys onto servers, 524–525
SCP
CentOS, 549–550
SFTP comparisons, 550
cost/benefit analysis, automation, 1112
costs
CAPEX, 2
human operations, 2
networks, 2
OPEX, 2
cp command, 46–48, 49–51
CRLF, HTTP messages, 415, 418
cryptography, 488, 495–496
AEAD, 495–496
AES-CCM protocol, 495
AES-GCM protocol, 495
CCM, 495
ciphers, 492
block ciphers, 492–493
CBC, 492–493
CMAC, 494
CTR mode, 492–493
symmetric ciphers, 492
digital signatures, 496–497
encryption keys, 488–489
asymmetric keys, 490
DH protocol, 490–492
ephemeral keys, 490
generation/exchanges, 488–492
HKDF, 492
key exchange algorithm, 490
KM, 492
PFS, 490
PSK, 489
symmetric keys, 489
GCM, 495
MAC, 493–494
peer authentication, 496–497
.csv files, 1052
CTR mode, ciphers, 492–493
CUCM (Cisco Unified Communications Manager), 942
AXL API, 944
CER API, 944
CUCM Serviceability API, 945
PAWS API, 944
UDS API, 945
curly braces ({ })
{N}, regular expressions (regex), 186, 189–192
{N, M}, regular expressions (regex), 186, 189–192
regular expressions (regex), 185
daemons, Linux, 24
dashes (-)
-= operator, Python, 284
assignment operator, Python, 281
Dashboard API (Meraki), 922–931
data modeling, YANG, 642
defined, 639–640
importance of, 640–642
modules, 642–644
augmentation, 656–658
built-in data types, 647–648
cloning, 665
derived data types, 648–649
deviations, 658–662
home of, 664–666
IETF YANG modules, 670–671
native (vendor-specific) modules, 666–669
OpenConfig YANG modules, 671–673
structure of, 644–646
verifying downloaded modules, 665–666
nodes, 649
container nodes, 647–648
grouping, 654–656
leaf nodes, 649–651
leaf-list nodes, 651–652
list nodes, 647–648
pyang, 673–679, 683–687
pyangbind, 679–682
YANG 1.1, 662–663
data plane verification
SR, 830–831
SR-TE, 842–843
data resource, RESTCONF, 753–756
data streams, YAML
saving to files, 629
sorting, 630–631
data structures, Python, 286
dictionaries, 290–291
deleting, 292
functions, 292
if-else statements, 299–300
lists, 286–288
functions, 288–289
if-else statements, 298–299
nested lists, 289–290
slicing, 286–287
square brackets ([ ]), 286–287
value assignments, 286–288
sets, 294–295
tuples
deleting, 293
functions, 292–293
joining, 293
data types
JSON, 592–594
numbers, Python, numbers, 273–276
numbers data types, Python, numbers, 273–276
Python, 270, 276–280
XML, 567–568
data validation, JSON schemas, 609–614
databases, rules of thumb, 1117
datastores
NETCONF
configuring datastores, 712–720
datastore operations, 720–721
RESTCONF, 749–750
date command, Linux, 85–86
Debian, Linux distributions, 26
debugging
debug modules, Ansible, 999
SSH, 528–531, 533–534
decision tree algorithms, Python machine learning, 382–384
declaring
arrays, Linux scripting, 222–224
variables, Linux scripting, 218–219
XML declarations, 566–567
delegating PCEP, LSP delegation, 864–867
<delete-config> operations, 719–720
DELETE method, 405–406, 770–771
deleting
connections, NetworkManager, 171–174
dictionaries, Python, 292
directories, Linux, 50–51
files, Linux, 47, 48
groups, Linux user/group management, 141–142
tuples, Python, 293
users, Linux user/group management, 141
variables, Python, 272–273
dependencies, software, 95
dependency hell, 1114–1115
depsolve, 95
depth parameter, RESTCONF, 771
derived data types, YANG modules, 648–649
/dev directory, Linux storage, 36, 119–120
contents of, 120
device file types, 120–121
fdisk command, 121–125
file system creation, 125–126
hard disk partitions, 121–125
mkfs command, 125–126
mounting file systems, 126–128
unmounting file systems, 127
developing applications
different environments, 311
Docker, 317
CentOS containers, 322–325
clients, 322
commands list, 325–326
components of, 322
compose versions, 320–322
container virtualization, 317–318
docker images command, 325
docker pull command, 325
Dockerfile instructions, 326–328
dockerizing applications, 326–331
hello-world containers, 322–325
installing, 318–320
Python orchestration, 376–378
REST API, 322
servers, 322
verifying, 320–322
Git
commit phase, 317
flexibility, 312
initialization commands, 314
performance, 312
pull phase, 317
push phase, 317
repositories, 312–313, 314–317
security, 312
server setup, 313–314
workflows, 317
organizing development environment, 311–312
Python
machine learning, 382–384
modules, 333–336
network automation, architectures, 353–354, 371–375
network automation, Jinja2 templates, 363–375
network automation, NAPALM libraries, 354–359, 371–375
network automation, Nornir libraries, 359–363, 367–369, 371–375
orchestration, 375–382
web/API development, Django, 337–345
web/API development, Flask, 345–352
replicating product environments, 312
reusable code, 312
version control, 311
virtualenv tool, 331
creating virtual environments, 332–333
installing, 331
web/API development, 336–337
back end development, 336
Django, 337–345
Flask, 345–352
front end development, 336
Postman, 337–345
deviations, YANG modules, 658–662
device drivers, Linux, 23
device management, DNA Center, 934
device mappers, 135
DH (Diffie-Hellman) protocol, 490–492
dictionaries, Python, 290–291, 583–585
deleting, 292
functions, 292
if-else statements, 299–300
dictionary variables, Ansible, 1007
dict.items() function, Python, 292
dict.keys() function, Python, 292, 307–308
dict.values() function, Python, 292
dig command, Linux, 180–181
digital signatures, 496–497
directories
Linux, 48–49
/: root directory, 36
absolute paths, 38–39
attributes, 40–41
boot directory, 36
copying, 49–51
creating, 49, 51
deleting, 50–51
dev directory, 36
double dot notation (..), 37
etc directory, 36
home directory, 36
media directory, 37
mnt directory, 37
moving, 49, 51
navigating, 38–41
opt directory, 37
proc directory, 37
relative paths, 38–39
renaming, 50–51
root directory, 37
run directory, 37
srv directory, 37
sys directory, 37
tmp directory, 37
usr directory, 37
usr/bin directory, 37
usr/local directory, 37
usr/sbin directory, 37
var directory, 37
local/remote directory operations, SFTP, 542–543
direct-tcpip channels, SSH Connection Protocol, 521
disabling password authentication, 525–526
<discard-changes> operations, NETCONF, 722–724
distinct startup capability, NETCONF, 733
distributions, Linux, 26
Django, web/API development, 337
application web servers, 338–339
creating applications, 341–345
demo applications, 343–345
installing, 337–338
migrations, 338–339
models.py files, 343
serializer.py files, 343
settings.py files, 339–341
starting new projects, 337–338
urls.py files, 343
views.py files, 343
dmesg command, Linux, 90
dmidecode command, Linux, 88–89
DNA Center, 931–933
device management, 934
Eastbound API, 933
event notifications, 935
Integration API, 935–936
Intent API, 934, 936–941
Northbound API, 933
Southbound API, 933
webhooks, 935
Westbound API, 933
DNF (Dandified YUM), 95, 117
DNS (Domain Name System), 179–181
Docker, 317, 1115
CentOS containers, 322–325
clients, 322
commands list, 325–326
components of, 322
compose versions, 320–322
containers, virtualization, 317–318
docker images command, 325
docker pull command, 325
Docker Swarm, 1115
Dockerfile instructions, 326–328
dockerizing applications, 326–331
hello-world containers, 322–325
installing, 318–320
Python orchestration, 376–378
REST API, 322
servers, 322
verifying, 320–322
documentation, rules of thumb, 1111
dollar signs ($) metacharacter, regular expressions (regex), 185, 187
dots (.)
.* notation, regular expressions (regex), 190
.. notation, Linux directories, 37
regular expressions (regex), 185, 189
double asterisks (**), assignment operator, Python, 281
double dot notation (..), Linux directories, 37
double equal sign (==)
conditional statements, 229
Jinja2, 1019
Python, 285
double semicolons (;;), case-in constructs, 233–234
DRY principle, 311, 336
DTD (Document Type Definition), 563
example of, 563–564
joint XML/DTD files, 564–565
dynamic data type allocation, Python, 271–272
dynamically setting Ansible variables, 1011–1013
eastbound API, 883, 933
echo command, Linux, 208–210, 222–226
<edit-config> operations, 712–719
elif statements, Python control flow, 297–298
encapsulation, OOP, 257
encoding protocols, 18
encryption
AEAD, 495–496
keys, 488–489
asymmetric keys, 490
DH protocol, 490–492
ephemeral keys, 490
generation/exchanges, 488–492
HKDF, 492
key exchange algorithm, 490
KM, 492
PFS, 490
PSK, 489
symmetric keys, 489
end tags, XML, 555
endings/beginnings of words, matching with regular expressions (regex),
188–189
endpoints
API, 882
collaboration endpoints, 943
Cisco IP Phones, 944
Cisco Webex Room Series, 944
Enoch, Linux distributions, 26
entity bodies, HTTP, 391
entity header fields, HTTP, 416, 427–430
EPEL repositories, 111–112
ephemeral keys, 490
equal sign (=)
assignment operator, Python, 284
conditional statements, 229
double equal sign (==)
conditional statements, 229
Jinja2 operator, 1019
Python operator, 285
error reporting, RESTCONF, 746
etc directory, Linux, 36
event notifications, DNA Center, 935
exit() function, Python, 272
Expect programming language, Linux scripting, 245–246
expressions, XPath, 575–576
absolute path, 576
absolute path and multiple outputs, 577
anywhere selection, 576
path definitions, 578
predicates, 577
external JSON schemas, referencing, 602–609
F
FCAPS (Fault, Configuration, Accounting, Performance, Security), 3
fdisk command, Linux, 121–125
fetching/uploading files via SFTP, 543
fields parameter, RESTCONF, 771, 773–777
file comparison operators, Bash shells, 230–232
file modules, Ansible, 1003
files
Linux
attributes, 40–41
copying, 46–48
creating, 46
deleting, 47, 48
moving, 47, 48
permissions, 40
removing, 47, 48
renaming, 47, 48
permissions, changing with SFTP, 544–545
security management, Linux
ACL, 148–155
changing file users/groups, 146
creating files under different groups, 147
default users/groups of new files, 147
logging into different groups, 147–148
permissions, 143–146, 150–152
file systems, Linux, 35–37
creating file systems, 125–126
mounting file systems, 126–128
unmounting file systems, 127
filter parameter, RESTCONF, 771
filters, Ansible, 1013–1015
finding sources of truth, 1110–1111
findmnt command, Linux, 148–149
Finesse (Cisco), 943, 946–947
firewalld service, 155–158
Flask, web/API development
accessing in-memory employee data, 347–349
installing in virtual environments, 345–346
retrieving ID-based data, 349–350
simple applications, 346–347
float() function, Python, 275
floating point data, Python, 275
flow control, Python
elif statements, 297–298
for loops, 301–302, 306
nested for loops, 303–304
range() function, 302–303
if-else statements, 296–300
nested code blocks with conditional statements, 295–296
while loops, 304–306
for-do loops, 235–237
for loops, Python control flow, 301–302, 306
nested for loops, 303–304
range() function, 302–303
format() function, Python, 280
formatting
strings, Python, 280
XML, 561–562
forward slash (/)
/: root directory, Linux, 36
/= operator, Python, 284
assignment operator, Python, 281
forwarded-tcpip channels, SSH Connection Protocol, 520–521
forwarding
interfaces, Linux networking, 167
SR, 832
frames, HTTP/2, 504–505
binary message framing, 506–507
multiplexing, 505–506
from-import statements, Python modules, 334–335
front end web/API development, 336
funcname() function, Python, 307
functions
Linux scripting, 240–244
Python, 306–307
calling in code blocks, 307–309
defining in code blocks, 307–309
dictionary functions, 292
representations, 307
GBP, compact GBP, 1113–1114
GCM (Galois/Counter Mode), 495
general header fields, HTTP, 416, 418–422
<get> operations, NETCONF, 702–703
<get-config> operations, NETCONF, 702–703
GET method
HTTP client requests, 398
Bash shells, 447–454
Postman, 445–446
request messages, 389–391, 416–417
RESTCONF, 760–763
Get RPC, gNMI, 801–807
getfacl command, Linux, 149–155
Git
commit phase, 317
flexibility, 312
initialization commands, 314
performance, 312
pull phase, 317
push phase, 317
repositories, 312–313
cloning, 316–317
fetching remote repository updates, 314–315
setting up, 315–316
updating local repositories, 314–315
security, 312
server setup, 313–314
workflows, 317
gNMI (gRPC Network Management Interface), 798–799
anatomy of, 799–801
Capabilities RPC, 810–811
Get RPC, 801–807
insecure mode, IOS XE, 815
managing network elements, 814–818
network programmability, 961–962
Python
metaclasses, 815–816
sample Get script, 816–818
Set RPC, 807–810
Subscribe RPC, 811–814
GNU Bash Manual, 184
GNU C library (glibc), 24
GNU info files, 35
Google Chrome, LocalRepo repositories, 114–117
grep command, regular expressions (regex), 184–193
groupadd command, Linux, 141
groupdel command, Linux, 141–142
grouping nodes, YANG data modeling, 654–656
group/user management, Linux, 136–138
creating
groups, 141
new users, 138–141
deleting
groups, 141–142
users, 141
getting user information, 136
modifying user details, 142
passwords
changing, 141
setting user passwords, 138–141
gRPC (Google Remote Procedure Calls)
gNMI, 798–799
anatomy of, 799–801
Capabilities RPC, 810–811
Get RPC, 801–807
insecure mode, IOS XE, 815
managing network elements, 814–818
Python, metaclasses, 815–816
Python, sample Get script, 816–818
Set RPC, 807–810
Subscribe RPC, 811–814
history of, 782–784
networks
managing network elements, 814–818
programmability, 961–962
principles of, 782–784
Protobuf
example of, 788–789
in Python, 790–798
server sample, 794–797
as a transport, 784–786
guest shells
IOS XE programmability, 885
Open NX-OS, 884, 887, 891–892
GUI and Linux CLI, 28–29
gzip archiving utility, Linux, 67–68
handshake protocol, TLS 1.3, 499–502
hard disk partitions, /dev directory, 121–125
hard links, Linux, 51–55
hashbangs (#!), Linux shell scripting, 205–208
head and tail command, 45–46
HEAD method
HTTP client requests, 398
RESTCONF, 763
headers, HTTP, 389–391
client request header fields, 422–425
entity header fields, 416, 427–430
general header fields, 416, 418–422
overview of, 416–418
request header fields, 416
response header fields, 416
server response header fields, 425–427
head-of-line blocking, 504
hello messages, NETCONF, 696–698, 973–974
hello-world containers, Docker, 322–325
help
Ansible, 995–996
Linux, 31–35
SFTP, 541–542
hierarchical inheritance, OOP, 257
history command, 30
HKDF (HMAC-based Extract-and-Expand Key Derivation Function), 492
HMAC (Hash function-based MAC), 494
home directory, Linux, 36
host-based authentication, 517–518
hosting applications
containerized application hosting, 1116
iPerf, 1116
native application hosting, 1115–1116
rules of thumb, 1115–1116
HTTP (HyperText Transfer Protocol), 414
Bash shells, 447–454
client requests, 388–392, 397–398
CONNECT method, 407
DELETE method, 405–406
GET method, 398
GET method, Bash shells, 447–454
GET method, Postman, 445–446
HEAD method, 398
header fields, 422–425
OPTIONS method, 407–408
POST method, 399–402, 443–445, 465
PUT method, 402–405
TRACE method, 408
client/server connections, 394–395
entity bodies, 391
entity header fields, 427–430
GET, request messages, 389–391, 416–417
headers, 389–391
client request header fields, 422–425
entity header fields, 416, 427–430
general header fields, 416, 418–422
overview of, 416–418
request header fields, 416
response header fields, 416
server response header fields, 425–427
HTTP/1.1, 388, 504
authentication, 469–471
authentication, base64 encoding, 472, 474
authentication, basic authentication, 472–474
authentication, OAuth protocol, 474–483
authentication, UTF-8 encoding, 472–473
authentication, workflows, 470
compression, 396–397
persistent connections, 395–396
pipelining, 396
HTTP/2, 503–504, 507–508
frames, 504–505
frames, binary message framing, 506–507
frames, multiplexing, 505–506
messages, 504–505
streams, 505
HTTP/3, 504
HTTPS, 503
hyperlinks, 388
hypertext, 388
messages
CRLF, 416, 418
format of, 415
headers, client request header fields, 422–425
headers, entity header fields, 416, 427–430
headers, general header fields, 416, 418–422
headers, overview of, 416–418
headers, request header fields, 416
headers, response header fields, 416
headers, server response header fields, 425–427
HTTP/2, 504–505
start lines, 415
whitespaces, 416
methods, 389
CONNECT method, 407
DELETE method, 405–406
GET method, 398
GET method, Bash shells, 447–454
GET method, Postman, 445–446
HEAD method, 398
OPTIONS method, 407–408
POST method, 399–402, 443–445, 465
PUT method, 402–405
TRACE method, 408
overview, 387–392
POST method
Flask, 350–352
RESTCONF, 740, 745–746
Postman, 436–437
installing, 438
interface, 438–441
Python
requests packages, 464–467
socket modules, 455–457
TCP over Python, 455–457
urllib packages, 458–463
REST, framework, 392–394
RESTCONF, 740
HTTP headers, 745–746
request messages, 740
response messages, 740
RFC 2616, 416
RFC 3986, 393–394
RFC 6265, 484
RFC 6749, 475–476
RFC 6750, 475–476
RFC 7230, 416–417
RFC 7231, server status codes, 409–410
RFC 7540, 388
server status codes, 408–409
1xx information status codes, 411
2xx successful status codes, 411–412
3xx redirection status codes, 412
4xx server error status codes, 413–414
5xx client error status codes, 414
Cisco devices, 414
RFC 7231, 409–410
socket modules, 455–457
state management with cookies, 483–487
TCP over Python, 455–457
transactions, 389
client requests, 397–408
server status codes, 408–414
as transfer protocol, 387
URI, 389, 431, 432–436
urllib packages, 458–463
versions of, 388
HTTPS (HTTP over TSL), 503
human operations, costs, 2
hyperlinks, 388
hypertext, 388
IaC (Infrastructure as Code), . See also NaC, 12
IBN (Intent-Based Networking)
defined, 13–14
intent assurance, 14
intent fulfillment, 14
id command, Linux, 136
identity operators, Python, 284–285
IETF drafts, SDN, 823
IETF YANG modules, 670–671
if-else statements, Python control flow, 296–300
if-then constructs, Linux scripting, 226–232
import statements, Python modules, 333–334
importing Ansible variables from external files, 1007–1009
indexed arrays, 222–224
info command, 35
inheritance, OOP, 256–257
initialization commands, Git, 314
inode numbers, 40
input() function, Python, 298
input, Linux scripting, 213
Arguments.bash script, 213–214
read command, 214–217
input/output redirection, Linux, 57–59
>> notation, 61–62
piping (|), 58, 65–67
stderr, 59, 62–65
stdin, 59, 61
stdout, 59, 61, 62–65
tee command, 66–67
insecure mode, gNMI in IOS XE, 815
insert parameter, RESTCONF, 771
installing
Ansible, 990
Django, 337–338
Docker, 318–320
Flask in virtual environments, 345–346
OpenSSH, CentOS installations, 522
Postman, 438
protoc on Python, 790–791
Python, 260–263
software on Linux, 94–96
virtualenv tool, 331
instance identifiers, 850
int() function, Python, 275
integer comparison operators, Bash shells, 229–230
integer operations, Python, 275
Integration API, DNA Center, 935–936
Intent API, DNA Center, 934, 936–941
intent assurance, 14
intent fulfillment, 14
interface state (Linux), toggling, 161
interfaces, network programmability
CLI programmable interfaces, 962–967
Linux, 967–973
NETCONF/YANG, 973–978
RESTCONF/YANG, 978–987
interpreters, 28
inventories, Ansible
default paths, 992
IP addresses, 993–994
simple inventory files, 992–993
inventory files, Ansible, 1009–1011
IOS XE
Ansible
clearing counters, 1060–1061
configuring IOS XE, 1061–1069
configuring IOS XE with ios_* modules, 1069–1073
configuring IOS XR with iosxr_* modules, 1083–1084
preparing IOS XE for Ansible management, 1055–1057
preparing IOS XE for NETCONF management, 1095–1096
updating files with additional hosts/variables, 1057–1058
verifying IOS XE for Ansible management, 1057
verifying operational data, 1058–1060
gNMI, insecure mode, 815
Jinja2 templates, 367–371
NETCONF, 918–922
programmability, 885–886
SSH setup, 526–531, 545–546
IOS XR
Ansible
configuring IOS XR, 1078–1084
preparing for management, 1073–1074
preparing IOS XR for NETCONF management, 1096–1098
verifying IOS XR for Ansible management, 1074–1075
verifying operational data, 1074–1078
Jinja2 templates, 367–371
NETCONF, 916–918
PCEP configurations, 867–880
programmability, 886–887
SSH setup, 532–536, 546–547
ios_command module, Ansible
clearing counters, 1060–1061
verifying operational data, 1058–1060
iosxr_command, Ansible
input parameters, 1001
playbooks, 997–999
verifying operational data, 1074–1078
IP addresses
adding to/removing from Linux interfaces, 161–162
Ansible inventories, 993–994
ip command, Linux, 158–167
IP Phones (Cisco), 944
IP VPN, JSON schemas, 597–598, 601–602, 607–609
iPerf, application hosting, 1116
IS-IS IGP, SR configuration, 825–827
is not operator, Python, 285
is operator, Python, 285
ITIL 4 management practices, 3–5
Jinja2
!= operator, 1019
< operator, 1019
<= operator, 1019
> operator, 1019
>= operator, 1019
comparison operators, 1018–1019
Python functions, 1049
join() function, 1050–1051
map() function, 1054–1055
split() function, 1051–1054
templates, 363–364, 1034–1040
conditional statements, 1045–1049
IOS XE, 367–371
IOS XR, 367–371
loops, 1040–1043
NAPALM libraries, 371–375
Netmiko libraries, 364–367
Nornir libraries, 367–369, 371–375
NX-OS, 367–371
nx-os_config modules, 1091–1093
playbooks, 1043–1045
variables, 1042–1043
YAML and, 635–637
jobs, Linux, 74
displaying status, 80
stopping, 80–81
join() function, 1050–1051
joining tuples, Python, 293
joint XML/DTD files, 564–565
journald command, Linux, 93–94
JSD (JSON Schema Definition), 595
JSON (JavaScript Object Notation)
arrays, 593
Boolean data, 593
characteristics, 591
data example, 591–592
data format, 592–594
data types, 592–594
defined, 591
JSD, 595
JTOX drivers and pyang, 683–687
null values, 593
numbers, 593
objects
key/pair values, 592
out of range objects and data validation, 613–614
referencing external JSON schemas, 606–607
repetitive objects, 598–602
simple JSON object example, 592
typos and data validation, 611–612
unexpected keys and data validation, 612–613
schemas
annotation, 596
basic schema without content, 596–597
data validation, 609–614
definitions in, 598–601
IP VPN, 597–598, 601–602, 607–609
JSD, 595
keywords, 596
properties of, 597–598
purpose of, 595–596
referencing external schemas, 602–609
repetitive objects, 598–602
structure of, 595–598
validation keywords, 596–597
strings, 593
YAML versus, 615–616
JTOX drivers and pyang, 683–687
kernels, Linux
kernel space, 23–24
LKM, 25
microkernel kernels, 25
monolithic kernels, 25
SCI, 24
key/pair values, JSON objects, 592
keys
authentication, SSH, 523–525
encryption, 488–489
asymmetric keys, 490
DH protocol, 490–492
ephemeral keys, 490
generation/exchanges, 488–492
HKDF, 492
key exchange algorithm, 490
KM, 492
PFS, 490
PSK, 489
symmetric keys, 489
RSA keys, Linux network programmability, 971–973
keywords, JSON schemas, 596
kill command, Linux system maintenance, 78–80, 81
<kill-session> operations, NETCONF, 721–722
KM (Keying Material), 492
Kubernetes, 378–382, 1115
L
lab topologies
BGP-LS, 845–846
PCEP, 867
SR, 825
lastlog command, Linux, 91
leading spaces, XML documents, 555
leaf nodes, YANG data modeling, 649–651
leaf-list nodes, YANG data modeling, 651–652
left arrow (<)
Jinja2 operator, 1019
Python operator, 285
left arrow, equal sign (<=)
Jinja2 operator, 1019
Python operator, 285
left shift operator (<<), Python, 281
less command, 43–44
lexical analyzers, Python code execution, 263
libraries
NAPALM libraries, 354–359
Netmiko libraries, Jinja2 templates, 364–367
Nornir libraries, 354–359, 371–375
libsolv, 95
link NLRI, BGP-LS, 856–857
links, Linux
hard links, 51–55
soft links, 55–57
symlinks, 56–57
Linux, 16–17, 21, 25
>> notation, 61–62
ACL, 148–155
API, 24
applications, communication, 24
architecture, 23–25
archiving utilities
bzip2, 67, 69
gzip, 67–68
tar, 67, 70–73
xz, 67, 69–70, 72–73
Bash shells, 29
IOS XR programmability, 886
Open NX-OS, 886, 887–891
BIOS, 27
blkid command, 148–149
boot process, 26–28
bzip2 archiving utility, 67, 69
cat command, 41–42, 61–62
cat/proc/cpuinfo command, 87–88
chmod command, 144–146
clear command, 30
command shell, 28–30
comments in scripts, 207–208
compiling software, 94, 96–97
cp command, 46–48, 49–51
daemons, 24
date command, 85–86
depsolve, 95
/dev directory, storage, 119–120
contents of, 120
device file types, 120–121
fdisk command, 121–125
file system creation, 125–126
hard disk partitions, 121–125
mkfs command, 125–126
mounting file systems, 126–128
unmounting file systems, 127
development, 22
device drivers, 23
device mappers, 135
dig command, 180–181
directories, 48–49
/: root directory, 36
absolute paths, 38–39
attributes, 40–41
boot directory, 36
copying, 49–51
creating, 49, 51
deleting, 50–51
dev directory, 36
double dot notation (..), 37
etc directory, 36
home directory, 36
media directory, 37
mnt directory, 37
moving, 49, 51
navigating, 38–41
opt directory, 37
proc directory, 37
relative paths, 38–39
renaming, 50–51
root directory, 37
run directory, 37
srv directory, 37
sys directory, 37
tmp directory, 37
usr directory, 37
usr/bin directory, 37
usr/local directory, 37
usr/sbin directory, 37
var directory, 37
distributions, 26
dmesg command, 90
dmidecode command, 88–89
DNF, 95, 117
double dot notation (..), Linux directories, 37
echo command, 208–210, 222–226
EPEL repositories, 111–112
fdisk command, 121–125
file security management
ACL, 148–155
changing file users/groups, 146
creating files under different groups, 147
default users/groups of new files, 147
logging into different groups, 147–148
permissions, 143–148, 150–152
file systems, 35–37
creating, 125–126
mounting, 126–128
unmounting, 127
files
attributes, 40–41
creating, 46
permissions, 40
viewing, 41–46
findmnt command, 148–149
getfacl command, 149–155
GNU C library (glibc), 24
GNU info files, 35
grep command, regular expressions (regex), 184–193
groupadd command, 141
groupdel command, 141–142
Guest shells, Open NX-OS, 884, 886, 887, 891–892
gzip archiving utility, 67–68
hard links, 51–55
head and tail command, 45–46
help, 31–35
history command, 30
history of, 21–22
host files and Ansible, 993
id command, 136
info command, 35
inode numbers, 40
interpreters, 28
ip command, 158–167
jobs, 74
displaying status, 80
stopping, 80–81
journald command, 93–94
kernels
kernel space, 23–24
LKM, 25
microkernel kernels, 25
monolithic kernels, 25
SCI, 24
kill command, 78–80, 81
lastlog command, 91
less command, 43–44
libsolv, 95
links
hard links, 51–55
soft links, 55–57
symlinks, 56–57
ls command, 31–34, 39, 143–144
lspci command, 90
lvdisplay command, 132–133
LVM, 128–135
man command, 34
MBR, 27
mkdir command, 49, 51, 134–135
mkfs command, 125–126, 133–134
more command, 42–43, 44
mv command, 47, 48, 50–51
networking, 158–159
adding/removing IP addresses from interfaces, 161–162
configuration files, 174–179
DNS, 179–181
ip command, 158–167
NetworkManager, 168–174
ping command, 164–167, 178–179, 181
programmability, 960, 967–973
routing tables, 163–168
scripting, 174–179
sysctl command, 167–168
toggling interface state, 161
newgrp command, 138, 146–148
package management software, 95
DNF, 95, 117
RPM, 95, 97–101
YUM, 95, 101–117
patches, 22
pgrep command, 78
pinfo command, 35
ping command, 164–167, 178–179, 181
piping (|), 58, 65–67
POST, 27
printf command, 210–213
processes, 73–74, 80–81
ps command, 74–77
pvdisplay command, 130–131, 133
pwd command, 29, 138–140
read command, 214–217
redirecting input/output, 57–59
>> notation, 61–62
piping (|), 58, 65–67
stderr, 59, 62–65
stdin, 59
stdin, sort command, 59–61
stdout, 59, 62–65
stdout, sort command, 61
tee command, 66–67
resource utilization, 83–85
rm command, 47, 48
rmdir command, 50–51
RPM, 95, 97–101
RSA keys, network programmability, 971–973
ryslogd command, 91–93
scale command, 221–222
scripting, 183
Arguments.bash script, 213–214
arithmetic operations, 220–222
arrays, adding/removing elements, 224–226
arrays, associative arrays, 222
arrays, concatenating, 221–226
arrays, declaring, 222–224
arrays, defined, 222
arrays, indexed arrays, 222–224
awk programming language, 194–197
Bash scripting, 184
Bash shells, 206–207, 213–214
Bash shells, Arguments.bash script, 213–214
case-in constructs, 232–234
comments, 207–208
conditional statements, 226
conditional statements, case-in constructs, 232–234
conditional statements, double equal sign (==), 229
conditional statements, equal sign (=), 229
conditional statements, if-then constructs, 226–232
Expect programming language, 245–246
functions, 240–244
GNU Bash Manual, 184
if-then constructs, 226–232
input, 213
input, Arguments.bash script, 213–214
input, read command, 214–217
loops, 234–235
loops, for-do loops, 235–237
loops, until-do loops, 239–240
loops, while-do loops, 237–239
networks, 174–179
output, 208
output, echo command, 208–210
output, POSIX, 210
output, printf command, 210–213
regular expressions (regex), 184–193
scale command, 221–222
sed command, 197–205
shells, 183
shells, structure of, 205–208
variables, 217–218
variables, declaring, 218–219
variables, one-dimensional variables, 218
variables, value assignments, 218–219
security, 135
ACL, 148–155
file security management, 143–148
system security, 155–158
user/group management, 136–142
sed command, 197–205
services, 74, 81–83
setfacl command, 151–155
sg command, 146–147
shells, 183, 205–208
shred command, 48
soft links, 55–57
software
dependencies, 95
installation/maintenance, 94–96
software repositories, 95–96
EPEL repositories, 111–112
listing, 110–111
LocalRepo repositories, 112–117
sort command, stdin, 59–61
source code, software installation, 94
SSH, network programmability, 971–973
stat command, 62–63
stderr, 59, 62–65
stdin, 59, 61
stdout, 59, 61, 62–65
storage, 119
/dev directory, 119–128
LVM, 128–135
physical storage, 119–128
su command, 29–30
sudo command, 136
sudo yum remove httpd command, 109
sudo yum update command, 110
symlinks, 56–57
sysctl command, 167–168
syslog messages, 93–94
system calls, 24
system daemons, 24
system information
cat/proc/cpuinfo command, 87–88
date command, 85–86
dmesg command, 90
dmidecode command, 88–89
lspci command, 90
timedatectl command, 86
update command, 86–87
system logs, 91
journald command, 93–94
lastlog command, 91
rotation, 91
ryslogd command, 91–93
tail command, 91
system maintenance, 73
jobs, 74, 80–81
kill command, 78–80, 81
pgrep command, 78
processes, 73–74, 80–81
ps command, 74–77
services, 74, 81–83
systemctl command, 81–83
threads, 73
system security, 155–158
systemctl command, 81–83
tar archiving utility, 67, 70–73
tee command, 66–67
Terminal, 29
threads, 73
time stamps, 41
timedatectl command, 86
today, 22
top command, 83–85
touch command, 46, 48
update command, 86–87
usage, 22
user space (userland), 23–24
useradd command, 138–140
userdel command, 141
user/group management, 136–138
changing passwords, 141
creating groups, 141
creating new users, 138–141
deleting groups, 141–142
deleting users, 141
getting user information, 136
modifying user details, 142
setting user passwords, 138–141
usermod command, 142
vgdisplay command, 132, 133–134
volumes
logical volumes, 132–133
physical volumes, 130–131
volume groups, 132, 133–134
mounting, 134–135
xz archiving utility, 67, 69–70, 72–73
YUM, 95, 101
commands list, 102–103
sudo yum remove httpd command, 109
sudo yum update command, 110
yum info command, 104–105
yum install command, 106–109
yum list command, 103
yum repolist all command, 110–111
yum search command, 103–104
yum-config-manager command, 111–112
list nodes, YANG data modeling, 653–654
list variables, Ansible, 1007
list.append() function, Python, 288–289
list.pop() function, Python, 288–289
list.reverse() function, Python, 289
lists, Python, 286–287
accessing data/operations, 287–288
functions, 288–289
if-else statements, 298–299
nested lists, 289–290
slicing, 286–287
square brackets ([ ]), 286–287
value assignments, 286–288
list.sort() function, Python, 289
LKM, Linux, 25
local Git repositories, updating, 314–315
local/remote directory operations, SFTP, 542–543
LocalRepo repositories, 112–117
Location Scanning API (Meraki), 923
<lock> operations, NETCONF, 720–721
logical AND/OR, combining multiple conditional statements, 1022–1024
logical operators
Python, 284–285, 297–298
XPath values, 577
logins, SFTP, 541
loopback interfaces
CLI programmability, 962–963
NETCONF programmability, 975–978
loops
Ansible
conditional statements with loops, 1024–1027
Jinja2 templates, 1040–1043
for loops, Python control flow, 301–302, 306
nested for loops, 303–304
range() function, 302–303
Jinja2 templates, 1040–1043
Linux scripting, 234–235
for-do loops, 235–237
until-do loops, 239–240
while-do loops, 237–239
nx-os_config modules, 1090–1091
while loops, 304–306
lowercase/uppercase characters (regular expressions), matching, 187–188
ls command, 31–34, 39, 143–144
LSP, PCEP
PCC, 874–876, 879–880
PCE, 876–880
lspci command, Linux, 90
lvdisplay command, Linux, 132–133
LVM (Logical Volume Manager), 128–135
MAC (Message Authentication Code), 493–494
machine learning, Python, 378–382
man command, 34
managing
CMDB, 12
configuration management automation
IOS XE programmability, 886
Open NX-OS programmability, 885
devices, DNA Center, 934
file security management, Linux
ACL, 148–155
changing file users/groups, 146
creating files under different groups, 147
default users/groups of new files, 147
logging into different groups, 147–148
permissions, 143–148, 150–152
IOS XE with Ansible
clearing counters, 1060–1061
NETCONF, 1095–1096
preparing for management, 1055–1057
preparing for NETCONF management, 1095–1096
updating files with additional hosts/variables, 1057–1058
verifying management, 1057
verifying operational data, 1058–1060
IOS XR with Ansible
NETCONF, 1096–1098
preparing for management, 1073–1074
preparing for NETCONF management, 1096–1098
verifying operational data, 1074–1078
ITIL 4 management practices, 3–5
NETCONF, verifying operational data, 1098–1103
networks
defined, 3–5
device management with NETCONF/YANG, 975–978
FCAPS, 3
NX-OS with Ansible
collecting show output with nxos_command, 1086–1088
configuring with nx-os_* modules, 1093–1095
configuring with nx-os_config modules, 1086–1088
interactive commands, 1088–1089
NETCONF, 1098
preparing for management, 1084–1085
preparing for NETCONF management, 1098
verifying management, 1085–1086
verifying operational data, 1086–1089
package management software, 95
DNF, 95, 117
RPM, 95, 97–101
YUM, 95, 101–117
state management, HTTP, 483–487
user/group management, Linux, 136–138
changing passwords, 141
creating groups, 141
creating new users, 138–141
deleting groups, 141–142
deleting users, 141
getting user information, 136
modifying user details, 142
setting user passwords, 138–141
manual software compilation/installation, Linux, 96–97
map() function, 1054–1055
mappings, YAML, 618–620
matching
anything/everything with .* notation, regular expressions (regex), 190
beginnings/endings of words, regular expressions (regex), 188–189
uppercase/lowercase characters, regular expressions (regex), 187–188
MBR (Master Boot Records), 27
media directory, Linux, 37
Meeting Server (Cisco), 943
membership operators, Python, 285–286
Meraki API, 922, 923
Captive Portal API, 923
Dashboard API, 922–931
Location Scanning API, 923
MV Sense API, 923
Webhook Alerts API, 922
merge keys, YAML, 624–625
messages, HTTP
CRLF, 415, 418
format of, 415
headers
client request header fields, 422–425
entity header fields, 416, 427–430
general header fields, 416, 418–422
overview of, 416–418
request header fields, 416
response header fields, 416
server response header fields, 425–427
HTTP/2, 504–505
MAC, 493–494
start lines, 415
whitespaces, 416
messages layer
NETCONF, 693, 695–696
hello messages, 696–698
rpc messages, 698–699
rpc-reply messages, 699–701
RESTCONF, 742–743, 759
constructing messages, 745
content parameter, 771
DELETE method, 770–771
depth parameter, 771
editing data, 759–763
error reporting, 746
fields parameter, 771, 773–777
filter parameter, 771
GET method, 760–763
HEAD method, 763
HTTP headers, 745–746
insert parameter, 771
OPTIONS method, 759–760
PATCH method, 767–770
point parameter, 771
POST method, 763–765
PUT method, 765–767
query parameters, 771–777
request messages, 743–744
response messages, 744–745
retrieving data, 759–763
start-time parameter, 771
stop-time parameter, 771
with-defaults parameter, 771
methods, HTTP, 389
CONNECT method, 407
DELETE method, 405–406
GET method, 398
Bash shells, 447–454
Postman, 445–446
HEAD method, 398
OPTIONS method, 407–408
POST method, 399–402
Postman, 443–445
Python and HTTP, 465
PUT method, 402–405
TRACE method, 408
microkernel kernels, Linux, 25
microservice architectures, 782
migrations, Django, 338–339
minus sign (-)
-= operator, Python, 284
assignment operator, Python, 281
mkdir command, 49, 51, 134–135
mkfs command, Linux, 125–126, 133–134
mnt directory, Linux, 37
model-based industry-standard API
IOS XE programmability, 885
IOS XR programmability, 886
Open NX-OS programmability, 884
model-driven telemetry
rules of thumb, 1113–1114
SNMP, 1113
syslog, 1113
modeling data, YANG, 639–640, 642
importance of, 640–642
modules, 642–644
augmentation, 656–658
built-in data types, 647–648
cloning, 665
derived data types, 648–649
deviations, 658–662
home of, 664–666
IETF YANG modules, 670–671
native (vendor-specific) modules, 666–669
OpenConfig YANG modules, 671–673
structure of, 644–646
verifying downloaded modules, 665–666
nodes, 649
container nodes, 647–648
grouping, 654–656
leaf nodes, 649–651
leaf-list nodes, 651–652
list nodes, 647–648
pyang, 673–679, 683–687
pyangbind, 679–682
YANG 1.1, 662–663
models.py files, Django, 343
modifying user details, Linux user/group management, 142
modules
Ansible
control functions, 1001–1002
debug modules, 999
file modules, 1003
ios_command module, 1058–1061
iosxr_command, parameters, 1001
network modules, 1003
return values, 1001–1002
structure of, 1000
utility modules, 1003
Python
application development, 333–336
classes, 335–336
constructors, 335–336
from-import statements, 334–335
import statements, 333–334
YANG data modeling, 642–644
augmentation, 656–658
built-in data types, 647–648
cloning, 665
derived data types, 648–649
deviations, 658–662
home of, 664–666
IETF YANG modules, 670–671
native (vendor-specific) modules, 666–669
OpenConfig YANG modules, 671–673
structure of, 644–646
verifying downloaded modules, 665–666
Modulo Operator (%), 274, 281
monitoring networks, streaming telemetry, 1113–1114
monolithic kernels, Linux, 25
more command, 42–43, 44
mounting
file systems, 126–128
volumes, LVM, 134–135
moving
directories, Linux, 49, 51
files, Linux, 47, 48
MPLS FIB, SR, 828–830
MPLS LSP, PCEP, 864–867
multi-level inheritance, OOP, 257
multiple inheritance, OOP, 257
multiplexing frames, HTTP/2, 505–506
mv command, 47, 48, 50–51
MV Sense API (Meraki), 923
NaC (Network as Code), 12
namespaces, XML, 559–561
NAPALM libraries, network automation, 354–359, 371–375
native (vendor-specific) YANG modules, 666–669
native application hosting, 1115–1116
ncclient, NETCONF, 735–739
negative/positive values, arithmetic operators, Python, 282
nested code blocks with conditional statements, Python control flow, 295–
296
nested for loops, 303–304
nested lists, Python, 289–290
nesting format, XML, 561–562
nesting relationships, XML, 555–556
NETCONF, 689
Ansible and
configuring, 1103–1107
IOS XE management, 1095–1096
IOS XR management, 1096–1098
NX-OS management, 1098
verifying operational data, 1098–1103
architecture, 692–693
authentication, 694
<cancel-commit> operations, 722–724
candidate configuration operations, 722–724
capabilities, 731
candidate configuration capability, 732
confirmed commit capability, 732
distinct startup capability, 733
rollback-on-error capability, 732–733
URL capability, 733–734
validate capability, 733
writable-running capability, 732
XPath capability, 735
<close-session> operations, 721–722
<commit> operations, 722–724
configuration validation, 724–725
connections, 694
content layer, 693, 725–730
YANG, 725–729
<copy-config> operations, 719
data delivery, 694
data integrity/confidentiality, 694
datastores
configuring, 712–720
operations, 720–721
<delete-config> operations, 719–720
<discard-changes> operations, 722–724
<edit-config> operations, 712–719
<get> operations, 702–703
<get-config> operations, 702–703
hello messages, 696–698, 973–974
high-level operations, 691–692
IOS XE, 918–922
IOS XR, 916–918
<kill-session> operations, 721–722
<lock> operations, 720–721
messages layer, 693, 695–696
hello messages, 696–698
rpc messages, 698–699
rpc-reply messages, 699–701
ncclient, 735–739
netconf_get module
configuring, 1103–1107
verifying operational data, 1098–1103
NETCONF/YANG, network programmability, 973–978
network programmability, 960, 973–978
NX-OS, 905–916
operations layer, 693, 701–702
<cancel-commit> operations, 722–724
candidate configuration operations, 722–724
<close-session> operations, 721–722
<commit> operations, 722–724
configuration validation, 724–725
<copy-config> operations, 719
datastore configurations, 712–720
datastore operations, 720–721
<delete-config> operations, 719–720
<discard-changes> operations, 722–724
<edit-config> operations, 712–719
<get> operations, 702–703
<get-config> operations, 702–703
<kill-session> operations, 721–722
<lock> operations, 720–721
session operations, 721–722
subtree filters, 703–710
<unlock> operations, 720–721
<validate> operations, 724–725
XPath filters, 710–712
over SSH, 694–695
overview, 689–692
Python, ncclient, 735–739
reliability, 694
RESTCONF and, 740–742
rpc messages, 691, 698–699
rpc-reply messages, 691, 699–701
session operations, 721–722
transport layer, 692–693
NETCONF over SSH, 694–695
transport protocol requirements, 693–694
<unlock> operations, 720–721
<validate> operations, 724–725
Working Group, 689–690
XML attributes, 558
YANG, 725–729
NETCONF/YANG
configuring, 1103–1107
netconf_get module, 1103–1107
verifying operational data, 1098–1103
Netmiko libraries, Jinja2 templates, 364–367
network modules, Ansible, 1003
NetworkManager, 168–169
connections
attributes, 169–170
creating, 171–174
deleting, 171–174
listing, 169
interfaces, listing, 171
networks
abstraction, defined, 9–13
Ansible. See also seperate entry, 15–16
automation
architectures, 353–354
Jinja2 templates, 363–375
NAPALM libraries, 354–359, 371–375
Nornir libraries, 359–363, 367–369, 371–375
CAPEX, 2
cleaning up, 1110
engineers
automation, 19–20
career paths, questions, 1118–1119
FCAPS, 3
IBN, 13–14
IP VPN, JSON schemas, 597–598, 601–602, 607–609
Linux, 16–17, 158–159
adding/removing IP addresses from interfaces, 161–162
configuration files, 174–179
DNS, 179–181
ip command, 158–167
NetworkManager, 168–171
ping command, 164–167, 178–179, 181
routing tables, 163–168
scripting, 174–179
sysctl command, 167–168
toggling interface state, 161
managing
defined, 3–5
devices with NETCONF/YANG, 973–978
devices with RESTCONF/YANG, 978–987
FCAPS, 3
monitoring, streaming telemetry, 1113–1114
Network Programmability and Automation toolbox, 14–15
Ansible. See also seperate entry, 15–16
Linux, 16–17
protocols, 18–19
Python, 15
virtualization, 17
YANG, 17
OPEX, 2
overlay networks, 9, 821
programmability, 253–254
CLI, 958–959, 962–967
gNMI, 961–962
gRPC, 961–962
Linux shells, 960, 967–973
NETCONF/YANG, 973–978
network programmability, 960
RESTCONF, 961
RESTCONF/YANG, 978–987
SNMP, 959–960
vendor/API matrix, 957–958
protocols, 18
encoding, 18
transport protocols, 18–19
Python, 15
SDN, 13, 819
BGP-LS, 843
BGP-LS, lab topologies, 845–846
BGP-LS, link NLRI, 856–857
BGP-LS, node NLRI, 854–855
BGP-LS, NPF-XR, 845, 849, 851–854
BGP-LS, peering, 843–844, 847–849
BGP-LS, prefix NLRI, 858–859
BGP-LS, routing, 846–847
BGP-LS, routing types (overview), 850–854
controllers, 821–823
network requirements, 819–821
overlay networks, 821
PCEP, call flows, 861–864
PCEP, IOS XR configurations, 867–880
PCEP, LSP delegation, 864–867
PCEP, PCC, 860–861, 867–870, 874–880
PCEP, PCE, 860–861, 869–874, 876–880
PCEP, RFC, 860–861
PCEP, state synchronization, 863
SR, Adj-SID, 824, 827, 839–842
SR, data plane verification, 830–831
SR, forwarding, 832
SR, IETF drafts, 823
SR, lan topologies, 825
SR, MPLS FIB for NPF-XR, 828–830
SR, Node-SID, 824
SR, NPF-XR, 835
SR, Prefix-SID, 824, 827, 834–836
SR, segments, 824, 825–827
SR, SR algorithm, 827
SR, SRGB, 824, 827, 831
SR, SRLB, 824
SR, SR-MPLS, 824
SR, SR-TE, 832–843
underlay networks, 821–822
underlay networks, 9, 821–822
virtualization, 17
VLAN, awareness, 8–9
VPN, IP VPN, 597–598, 601–602, 607–609
YANG, 17
Neutron ML2 (OpenStack), Open NX-OS programmability, 885
newgrp command, Linux, 138, 146–148
Nexus switches
authentication, 401–402, 463
static routing
DELETE method, 405–406
POST method, 399–401
PUT method, 402–405
NLRI, BGP-LS
link NLRI, 856–857
node NLRI, 854–855
prefix NLRI, 858–859
nodes
XPath, 574
YAML, 617
YANG data modeling, 649
container nodes, 647–648
grouping, 654–656
leaf nodes, 649–651
leaf-list nodes, 651–652
list nodes, 647–648
Node-SID, 824
Nornir libraries, network automation, 359–363, 367–369, 371–375
northbound API, 883, 933
not in operator, Python, 286
NOT operator (~), Python, 281, 285
notifications, DNA Center, 935
NPF-XR
BGP-LS, 845, 849, 851–854
SR, 835
SR-TE, 836–843
NSX, 13
null values, JSON, 593
number data types, Python, 273–276
numbers, JSON, 593
NX-API CLI
Open NX-OS programmability, 884
use cases, 893–898
NX-API REST
Open NX-OS programmability, 884
use cases, 898–905
NX-OS
Ansible
collecting show output with nxos_command, 1086–1088
configuring with nx-os_* modules, 1093–1095
configuring with nx-os_config modules, 1090–1093
interactive commands, 1088–1089
preparing for management, 1084–1085
preparing NX-OS for NETCONF management, 1098
verifying management, 1085–1086
verifying operational data, 1086–1089
Bash shells, 887–891
Guest shells, 887, 891–892
Jinja2 templates, 367–371
NETCONF, 905–916
nxos_command
collecting show output, 1086–1088
configuring with nx-os_* modules, 1093–1095
configuring with nx-os_config modules, 1086–1088
interactive commands, 1088–1089
nx-os_config modules
configuring NX-OS, 1086–1088
Jinja2 templates, 1091–1093
loops, 1090–1091
variables, 1090–1091
programmability, 884–885
SSH setup, 537–540, 547–548
use cases, 887–892
OAuth protocol, HTTP/1.1 authentication, 474–475
access tokens, 481–483
API resource server calls, 483
authorization grants, 477–481
Bearer Tokens, 475–476
client registration, 476–477
workflows, 476
objects
JSON objects
defined, 593
key/pair values, 592
out of range objects and data validation, 613–614
referencing external JSON schemas, 606–607
repetitive objects, 598–602
simple JSON object example, 592
typos and data validation, 611–612
unexpected keys and data validation, 612–613
Python objects, serializing with YAML, 628–629
octal notation, file permissions, 145–146
one-dimensional variables, 218
one-time automations, 1111
OOP (Object-Oriented Programming), 256
abstraction, 257
encapsulation, 257
inheritance, 256–257
polymorphism, 257
OpenConfig YANG modules, 671–673
OpenFlow, IOS XE programmability, 886
Open NX-OS
Bash shells, 887–891
NETCONF, 905–916
programmability, 884–885
use cases, 887–892
OpenSSH, 510, 522
OpenStack Neutron ML2, Open NX-OS programmability, 885
operations layer,
NETCONF, 693, 701–702
<cancel-commit> operations, 722–724
candidate configuration operations, 722–724
<close-session> operations, 721–722
<commit> operations, 722–724
configuration validation, 724–725
<copy-config> operations, 719
datastores, 712–721
<delete-config> operations, 719–720
<discard-changes> operations, 722–724
<edit-config> operations, 712–719
<get> operations, 702–703
<get-config> operations, 702–703
<kill-session> operations, 721–722
<lock> operations, 720–721
session operations, 721–722
subtree filters, 703–710
<unlock> operations, 720–721
<validate> operations, 724–725
XPath filters, 710–712
RESTCONF, 743
operations resource, RESTCONF, 756–758
OR operator (|)
Python, 281, 285
regular expressions (regex), 186
operators
Python, 281
arithmetic operators, 281–283
assignment operators, 284
bitwise operators, 281–283
comparison operators, 284–285
identity operators, 284–285
logical operators, 284–285, 297–298
membership operators, 285–286
XPath operator values, 577
OPEX (Operating Expenses), 2
opt directory, Linux, 37
OPTIONS method, 407–408, 759–760
orchestration, 375–376
automation versus, 6–7
defined, 6–7
Docker, 376–378
Kubernetes, 378–382
tools (overview), 7
output/input redirection, Linux, 57–59
>> notation, 61–62
piping (|), 58, 65–67
stderr, 59, 62–65
stdin, 59, 61
stdout, 59, 61, 62–65
tee command, 66–67
output, Linux scripting, 208
echo command, 208–210
printf command, 210–213
overlay networks, 9, 821
package management software
DNF, 95, 117
RPM, 95, 97–101
YUM, 95, 101
commands list, 102–103
sudo yum remove httpd command, 109
sudo yum update command, 110
yum info command, 104–105
yum install command, 106–109
yum list command, 103
yum repolist all command, 110–111
yum search command, 103–104
yum-config-manager command, 111–112
pair/key values, JSON objects, 592
parent/child relationships, XML, 555–556
parentheses ( ( ) ), regular expressions (regex), 185
partitions, /dev directory, 121–125
passwords
authentication, 517, 522–523, 525–526
user/group management, Linux
changing passwords, 141
setting user passwords, 138–141
PATCH method, RESTCONF, 767–770
patches, 22
pattern validation, XML, 569–570
PAWS API, 944
PCC (Path Computation Clients), 860–861
LSP configuration, 874–880
SR-TE configuration, 867–870
PCE (Path Computation Elements)
LSP configuration, 876–880
PCEP, 860–861
SR-PCE, 874
SR-TE configuration, 869–874
PCEP (Path Computation Element Protocol)
call flows, 861–864
IOS XR configurations, 867–880
lab topologies, 867
LSP delegation, 864–867
PCC, 860–861
LSP configuration, 874–880
SR-TE configuration, 867–870
PCE, 860–861
LSP configuration, 876–880
SR-PCE, 874
SR-TE configuration, 869–874
peering, 867
RFC, 860–861
state synchronization, 863
peer authentication, 496–497
peering
BGP-LS, 843–844, 847–849
PCEP, 867
percentage symbols (%)
%= operator, Python, 284
Modulo Operator, 274, 281
performance, Git, 312
periods (.),
.* notation, regular expressions (regex), 190
.. notation, Linux directories, 37
regular expressions (regex), 185, 189
permissions
file permissions, changing with SFTP, 544–545
file security management, Linux, 143–144, 150–152
octal notation, 145–146
symbolic notation, 144–145
persistent connections, HTTP/1.1, 395–396
person_in_list() function, Python, 307–308
PFS (Perfect Forward Secrecy), 490
pgrep command, Linux system maintenance, 78
pinfo command, 35
ping command, Linux, 164–167, 178–179, 181
pipes (|), 58, 65–67, 281
| (OR operator)
Python, 281, 285
regular expressions (regex), 186
|= operator, Python, 284
pipelining, HTTP/1.1, 396
platforms, API, 882
playbooks, Ansible, 990, 997–1000
conditional statements with loops and variables, 1032–1033
Jinja2 templates, 1040–1043
variables, defining, 1005–1006
+ (plus signs)
+ assignment operator, Python, 281
+= operator, Python, 284
regular expressions (regex), 186, 189, 190, 192
point parameter, RESTCONF, 771
polymorphism, OOP, 257
positive/negative values, arithmetic operators, Python, 282
POSIX (Portable Operating System Interface), Linux scripting, 210
POST (Power-On Self-Tests), 27
POST method
Flask, 350–352
HTTP client requests, 399–402
Postman, 443–445
Python and HTTP, 465
RESTCONF, 763–765
Postman, 436–437
HTTP
GET request messages, 447–454
POST method, 443–445
installing, 438
interface, 438–441
usage, 441–446
web/API development, 345
pound signs, #! (hashbangs), 205–208
predefined entries, XML, 557
predicates, XML expressions, 577
prefix NLRI, BGP-LS, 858–859
prefixes, XML namespaces, 560–561
Prefix-SID, 824, 827, 834–836
print_persons() function, Python, 307–309
printf command, Linux, 210–213
proc directory, Linux, 37
processes, Linux, 73–74, 80–81
product environments, replicating, 312
programmable interfaces, 881–882
API
classifications, 882–883
eastbound API, 883
endpoints, 882
IOS XE, gNMI insecure mode, 815
IOS XE, NETCONF, 918–922
IOS XE, programmability, 885–886
IOS XR, NETCONF, 916–918
IOS XR, programmability, 886–887
NETCONF on IOS XE, 918–922
NETCONF on IOS XR, 916–918
NETCONF on NX-OS, 905–916
northbound API, 883
NX-API CLI, use cases, 893–898
NX-API REST, use cases, 898–905
Open NX-OS, Bash shells, 887–891
Open NX-OS, Guest shells, 887, 891–892
Open NX-OS, NETCONF, 905–916
Open NX-OS, programmability, 884–885
Open NX-OS, use cases, 887–892
platforms, 882
RESTful API, 883
RPC-based API, 883
southbound API, 883
webhooks, 882
westbound API, 883
collaboration platforms, 942
Cisco collaboration portfolio, 942–944
collaboration API, 944–954
DNA Center, 931–933
device management, 934
Eastbound API, 933
event notifications, 935
Integration API, 935–936
Intent API, 934, 936–941
Northbound API, 933
Southbound API, 933
webhooks, 935
Westbound API, 933
Meraki API, 922, 923
Captive Portal API, 923
Dashboard API, 922–931
Location Scanning API, 923
MV Sense API, 923
Webhook Alerts API, 922
programming
API, 7–8
algorithms, 258–259
computer science concepts, 255
defined, 7–8, 249–250
IOS XE, 885–886
IOS XR, 886–887
Network Programmability and Automation toolbox, 14–15
Ansible. See also seperate entry, 15–16
Linux, 16–17
protocols, 18–19
Python, 15
virtualization, 17
YANG, 17
networks, 253–254
CLI, 958–959, 962–967
gNMI, 961–962
gRPC, 961–962
Linux shells, 960, 967–973
NETCONF/YANG, 973–978
network programmability, 960
RESTCONF, 961
RESTCONF/YANG, 978–987
SNMP, 959–960
vendor/API matrix, 957–958
OOP, 256
abstraction, 257
encapsulation, 257
inheritance, 256–257
polymorphism, 257
Open NX-OS, 884–885
pseudocode, 251–253
Python
bytecode, 265–267
bytecode generators, 264
bytecode interpreters, 264
code execution, 263–269
code testing/verification, 269
compiling code, 265–266
complex numbers, 276
data structures, 286–295
data types, 270
data types, numbers, 273–276
data types, strings, 276–280
dictionaries, 290–292
executable Python files, 265
float() function, 275
floating point data, 275
format() function, 280
fundamentals, 260
installing, 260–263
int() function, 275
integer operations, 275
lexical analyzers, 263
lists, 286–290
Modulo Operator (%), 274
numeric data, 269
operators, 281–286
sets, 294–295
simple Python program, 264
slicing string indexes, 278–279
square brackets ([ ]), 278
str.lower() function, 279–280
str.replace() function, 279–280
str.strip() function, 279–280
str.upper() function, 279–280
sum() function, 249–250
tokenizers, 263
tuples, 292–293
variables, 270–273
scripting languages vs scripting, 250–253
service providers, SDN, 819
BGP-LS, 843
BGP-LS, lab topologies, 845–846
BGP-LS, link NLRI, 856–857
BGP-LS, node NLRI, 854–855
BGP-LS, NPF-XR, 845, 849, 851–854
BGP-LS, peering, 843–844, 847–849
BGP-LS, prefix NLRI, 858–859
BGP-LS, routing, 846–847
BGP-LS, routing types (overview), 850–854
controllers, 821–823
network requirements, 819–821
overlay networks, 821
PCEP, call flows, 861–864
PCEP, IOS XR configurations, 867–880
PCEP, lab topologies, 867
PCEP, LSP delegation, 864–867
PCEP, PCC, 860–861, 867–870, 874–880
PCEP, PCE, 860–861, 869–874, 876–880
PCEP, peering, 867
PCEP, RFC, 860–861
PCEP, state synchronization, 863
SR, Adj-SID, 824, 827, 839–842
SR, data plane verification, 830–831
SR, forwarding, 832
SR, IETF drafts, 823
SR, lan topologies, 825
SR, MPLS FIB for NPF-XR, 828–830
SR, Node-SID, 824
SR, NPF-XR, 835
SR, Prefix-SID, 824, 827, 834–836
SR, segments, 824, 825–827
SR, SR algorithm, 827
SR, SRGB, 824, 827, 831
SR, SRLB, 824
SR, SR-MPLS, 824
SR, SR-TE, 832–843
underlay networks, 821–822
web application development, 250–251
Protobuf, gRPC, 786–790
example of, 788–789
in Python, 790–798
protocols, 18
encoding, 18
gRPC
gNMI, 798–799
gNMI, anatomy of, 799–801
gNMI, Capabilities RPC, 810–811
gNMI, Get RPC, 801–807
gNMI, insecure mode in IOS XE, 815
gNMI, managing network elements, 814–818
gNMI, Python metaclasses, 815–816
gNMI, Python sample Get script, 816–818
gNMI, Set RPC, 807–810
gNMI, Subscribe RPC, 811–814
history of, 782–784
managing network elements, 814–818
principles of, 782–784
Protobuf, example of, 788–789
Protobuf, Python, 790–798
server sample, 794–797
as a transport, 784–786
Protobuf, gRPC, 786–790
example of, 788–789
Python, 790–798
Python installations, 790–791
SCP
CentOS, 549–550
SFTP comparisons, 550
SFTP, 540–541
fetching/uploading files, 543
help, 541–542
local/remote directory operations, 542–543
logins, 541
SCP comparisons, 550
SSH Authentication Protocol, 514–516
host-based authentication, 517–518
password authentication, 517
public key authentication, 516–517
SSH Connection Protocol, 518–521
SSH-TRANS, 513–514
transport protocols, 18–19, 781–782
ps command, Linux system maintenance, 74–77
pseudocode, 251–253
PSK (Pre-Shared Keys), 489
public keys
authentication, 516–517
copying onto servers, 524–525
pull phase, Git workflows, 317
push phase, Git workflows, 317
PUT method, 402–405, 765–767
pvdisplay command, Linux, 130–131, 133
pwd command, 29, 138–140
pyang, YANG data modeling, 673–679, 683–687
pyangbind, YANG data modeling, 679–682
Python, 15
Ansible, 991–992
code execution, 263–269
bytecode, 265–267
bytecode generators, 264
bytecode interpreters, 264
code testing/verification, 269
compiling code, 265–266
executable Python files, 265
lexical analyzers, 263
numeric data, 269
simple Python program, 264
tokenizers, 263
code testing/verification, 269
comparison operators, 284–285
compiling code, 265–266
complex numbers, 276
control flow
elif statements, 297–298
if-else statements, 296–300
for loops, 301–304, 306
nested code blocks with conditional statements, 295–296
while loops, 304–306
data structures, 286
dictionaries, 290–292
lists, 286–290
sets, 294–295
tuples, 292–293
data types, 270
numbers, 273–276
strings, 276–280
dictionaries, 290–291, 583–585
deleting, 292
functions, 292
if-else statements, 299–300
dict.items() function, 292
dict.keys() function, 292, 307–308
dict.values() function, 292
DRY principle, 311, 336
exit() function, 272
float() function, 275
floating point data, 275
format() function, 280
funcname() function, 307
functions, 306–307
calling in code blocks, 307–309
defining in code blocks, 307–309
dict.items() function, 292
dict.keys() function, 292, 307–308
dict.values() function, 292
exit() function, 272
float() function, 275
format() function, 280
funcname() function, 307
input() function, 298
int() function, 275, 1049–1055
join() function, 1050–1051
list.append() function, 288–289
list.pop() function, 288–289
list.reverse() function, 289
list.sort() function, 289
map() function, 1054–1055
person_in_list() function, 307–308
print_persons() function, 307–309
range() function, 302–303
representations, 307
set.add() function, 294
set.difference() function, 294–295
set.pop() function, 294
set.remove() function, 294
set.union() function, 294–295
set.update() function, 294
split() function, 1051–1054
str.lower() function, 279–280
str.replace() function, 279–280
str.reverse() function, Python, 292–293
str.strip() function, 279–280
str.upper() function, 279–280, 292–293
sum() function, 249–250
validate_person() function, 307–308, 309
fundamentals, 260
gNMI
metaclasses, 815–816
sample Get script, 816–818
gRPC and Protobuf, 790–798
HTTP
requests packages, 464–467
socket modules, 455–457
TCP over Python, 455–457
urllib packages, 458–463
installing, 260–263
JSON schemas, data validation, 609–610
machine learning, 382–384
modules
application development, 333–336
classes, 335–336
constructors, 335–336
from-import statements, 334–335
import statements, 333–334
NETCONF, ncclient, 735–739
network automation
architectures, 353–354, 371–375
Jinja2 templates, 363–375
NAPALM libraries, 354–359, 371–375
Nornir libraries, 359–363, 367–369, 371–375
network device management
NETCONF/YANG, 976–978
RESTCONF/YANG, 984–987
objects, serializing with YAML, 628–629
operators, 281
& operator, 281
&= operator, 284
**= operator, 284
*= operator, 284
^ operator, 281
^= operator, 284
= operator, 284
== operator, 285
!= operator, 285
/= operator, 284
< operator, 285
<= operator, 285
<< operator, 281
-= operator, Python, 284
% operator, 274, 281
| operator, 281, 285
|= operator, 284
+= operator, 284
> operator, 285
>= operator, 285
>> (signed right shift) operator, 281
>>= operator, 284
[ ], square brackets, 278
[=] operator, 284
~ operator, 281, 285
and operator, 281, 285
arithmetic operators, 281–283
assignment operators, 284
bitwise operators, 281–283
identity operators, 284–285
in operator, 286
integer operations, 275
is not operator, 285
is operator, 285
logical operators, 284–285
logical operators, if-else statements, 297–298
membership operators, 285–286
not in operator, 286
NOT operator, 281, 285
OR operator, 281, 285
orchestration, 375–376
Docker, 376–378
Kubernetes, 378–382
protoc installations, 790–791
PyYAML, 626–628
requests packages, 464–467
RESTCONF, 777–779
sets, 294–295
slicing, lists, 286–287
slicing string indexes, 278–279
socket modules, 455–457
tuples
deleting, 293
functions, 292–293
joining, 293
urllib packages, 458–463
variables, 270–271
deleting, 272–273
dynamic data type allocation, 271–272
scope, 272
web/API development
Django, 337–345
Flask, 345–352
XML files, processing, 580
dictionaries, 583–585
element mergers, 585–587
element name/attribute extraction, 581–582
properties/methods, 580–581
rerunning processing for updated documents, 587–588
script creation, 580–581
value extraction, 582–583
YAML
loading multiple documents, 632–633
PyYAML, 626–628
saving data streams to files, 629
serializing Python objects, 628–629
sorting data streams, 630–631
yaml.dump() method, 628–631
yaml.load() method, 631–632
yaml.load_all() method, 632–633
yaml.scan() method, 633–635
PyYAML, 626–628
query parameters, RESTCONF, 771–777
question mark (?), regular expressions (regex), 186, 189, 191–192
range() function, Python, 302–303
read command, Linux, 214–217
record protocol, TLS 1.3, 499, 503
Red Hat, Linux distributions, 26
redirecting input/output, Linux, 57–59
| (piping), 58, 65–67
>> notation, 61–62
stderr, 59, 62–65
stdin, 59, 61
stdout, 59, 61, 62–65
tee command, 66–67
regexp, XML content validation, 569
regular expressions (regex)
* metacharacter, 185, 189–190
\ metacharacter, 186
\< metacharacter, 185, 188–189
\> metacharacter, 185, 188–189
^ metacharacter, 185, 187
{ }, 185
{N, M} metacharacter, 186, 189–192
{N} metacharacter, 186, 189–192
$ metacharacter, 185, 187
. metacharacter, 185, 189
.* notation, 190
( ) (capture groups), 186
( ) (parentheses), 185
| OR operator, 186
+ metacharacter, 186, 189, 190, 192
? metacharacter, 186, 189, 191–192
[ ] (square brackets), 185
[first_literal - last_literal] metacharacter, 185
[literals] metacharacter, 185
grep command, 184–193
matching uppercase/lowercase characters, 187–188
printing lines without patterns, 192–193
repetition metacharacters, 185–186, 190–191
testing, 186
relative paths, Linux directories, 38–39
remote subnets, Linux routing tables, 166–167
remote/local directory operations, SFTP, 542–543
removing Linux
directories, 50–51
files, 47, 48
routing table entries, 168
renaming Linux
directories, 50–51
files, 47, 48
repetition metacharacters, regular expressions (regex), 185–186, 190–191
repetitive objects, JSON schemas, 598–602
replicating product environments, 312
repositories
Docker, 318
Git, 312–313
cloning, 316–317
fetching remote repository updates, 314–315
setting up, 315–316
updating local repositories, 314–315
software, 95–96
EPEL repositories, 111–112
listing, 110–111
LocalRepo repositories, 112–117
request header fields, HTTP, 416
request messages, RESTCONF, 740, 743–744
request targets, CONNECT method (HTTP), 407
request packages, Python and HTTP, 464–467
resources
Linux resource utilization, 83–85
RESTCONF, 746–747
API resource, 747–749
data resource, 753–758
datastore resource, 749–750
schema resource, 750–753
YANG library version resource, 758
response header fields, HTTP, 416
response messages, RESTCONF, 740, 744–745
REST framework, 392–394
REST API, 322, 392–393, 945–946, 948–954
RESTCONF, 739
architecture, 742–743
content layer, 743
editing data, 763–771
error reporting, 746
HTTP, 740
headers, 745–746
response messages, 740
messages layer, 742–743, 759
constructing messages, 745
content parameter, 771
with-defaults parameter, 771
DELETE method, 770–771
depth parameter, 771
editing data, 763–771
error reporting, 746
fields parameter, 771, 773–777
filter parameter, 771
GET method, 760–763
HEAD method, 763
HTTP headers, 745–746
insert parameter, 771
OPTIONS method, 759–760
PATCH method, 767–770
point parameter, 771
POST method, 763–765
PUT method, 765–767
query parameters, 771–777
request messages, 743–744
response messages, 744–745
retrieving data, 759–763
start-time parameter, 771
stop-time parameter, 771
NETCONF and, 740–742
network programmability, 961, 978–987
operations layer, 743
overview, 739–742
Python, 777–779
request messages, 740, 743–744
resources, 746–747
API resource, 747–749
data resource, 753–758
datastore resource, 749–750
schema resource, 750–753
YANG library version resource, 758
response messages, 744–745
RESTCONF/YANG, network programmability, 978–987
retrieving data, 759–763
transport layer, 742, 743
RESTful API, 883
resuming stopped processes, 80–81
reusing
automations, 1111
code, application development, 312
RFC 2616, HTTP headers, 416
RFC 3986, HTTP, 393–394
RFC 6265, HTTP state management, 484
RFC 6749, HTTP, OAuth protocol, 475–476
RFC 6750, HTTP, OAuth protocol with Bearer Tokens, 475–476
RFC 7230, HTTP headers, 416–417
RFC 7231, HTTP/1.1 server status codes, 409–410
RFC 7457, TLS, 488
RFC 7540, HTTP, 388
RFC 8446, TLS, 487
RFC, PCEP, 860–861
right arrows (>)
> Jinja2 operator, 1019
> Python operator, 285
>= (right arrow, equal sign)
assignment operator, Jinja2, 1019
assignment operator, Python, 285
>> signed right shift operator, Python, 281
>>= operator, Python, 284
rm command, 47, 48
rmdir command, 50–51
rollback-on-error capability, NETCONF, 732–733
root directory (/:), Linux, 36–37
rotating Linux system logs, 91
routing (static)
200 OK responses
DELETE method, 405–406
POST method, 394–401
PUT method, 403–404
Nexus switches
DELETE method, 405–406
POST method, 399–401
PUT method, 403–404
routing tables, Linux, 163–166
forwarding interfaces, 167
remote subnets, 166–167
removing entries, 168
viewing, 163
RPC (Remote Procedure Calls)
bidirectional RPC, 785
Capabilities RPC, gNMI, 810–811
client-streaming RPC, 785
Get RPC, gNMI, 801–807
gRPC
gNMI, 798–799
gNMI, anatomy of, 799–801
gNMI, Capabilities RPC, 810–811
gNMI, Get RPC, 801–807
gNMI, insecure mode in IOS XE, 815
gNMI, managing network elements, 814–818
gNMI, Python metaclasses, 815–816
gNMI, Python sample Get script, 816–818
gNMI, Set RPC, 807–810
gNMI, Subscribe RPC, 811–814
history of, 782–784
managing network elements, 814–818
principles of, 782–784
Protobuf, example of, 788–789
Protobuf, Python, 790–798
server sample, 794–797
as a transport, 784–786
server-streaming RPC, 785
Set RPC, gNMI, 807–810
Subscribe RPC, gNMI, 811–814
unary RPC, 785
RPC-based API, 883
rpc messages, 691, 698–699
rpc-reply messages, 691, 699–701
RPM (RPM Package Manager), 95, 97–101
RSA keys
generating/verifying, SSH NX-OS setups, 538–539
Linux network programmability, 971–973
rules of thumb
API, 1118
application hosting, 1115–1116
automation, 1109–1110
complexity, 1111–1112
cost/benefit analysis, 1112
reusing automations, 1111
cleaning up networks, 1110
containers, 1114–1115
databases, 1117
documentation, 1111
model-driven telemetry, 1113–1114
search engines, 1117
software development methodologies, 1116–1117
run directory, Linux, 37
ryslogd command, Linux, 91–93
saving YAML data streams, 629
scalars, YAML, 620–621
scale command, Linux, 221–222
schema resource, RESTCONF, 750–753
schemas, JSON, 595
annotation, 596
basic schema without content, 596–597
data validation, 609–614
definitions in, 598–601
external schemas, referencing, 602–609
IP VPN, 597–598, 601–602, 607–609
keywords, 596
properties of, 597–598
purpose of, 595–596
repetitive objects, 598–602
structure of, 595–598
validation keywords, 596–597
SCI, Linux kernels, 24
scope, Python variables, 272
SCP (Secure Copy Protocol)
CentOS, 549–550
SFTP comparisons, 550
scripting, Linux, 183
Arguments.bash script, 213–214
arithmetic operations, 220–222
arrays
adding/removing elements, 224–226
associative arrays, 222
concatenating, 221–226
declaring, 222–224
defined, 222
indexed arrays, 222–224
awk programming language, 194–197
Bash scripting, 184
Bash shells, 206–207, 213–214
case-in constructs, 232–234
comments, 207–208
conditional statements, 226
== (double equal sign), 229
= (equal sign), 229
case-in constructs, 232–234
if-then constructs, 226–232
Expect programming language, 245–246
functions, 240–244
GNU Bash Manual, 184
if-then constructs, 226–232
input, 213
Arguments.bash script, 213–214
read command, 214–217
loops, 234–235
for-do loops, 235–237
until-do loops, 239–240
while-do loops, 237–239
networks, 174–179
output, 208
echo command, 208–210
printf command, 210–213
POSIX, 210
prigramming languages vs scripting, 250–253
regular expressions (regex), 184–193
* metacharacter, 185, 189–190
\ metacharacter, 186
\< metacharacter, 185, 188–189
\> metacharacter, 185, 188–189
^ metacharacter, 185, 187
{ }, 185
{N, M} metacharacter, 186, 189–192
{N} metacharacter, 186, 189–192
$ metacharacter, 185, 187
. metacharacter, 185, 189
.* notation, 190
( ) (capture groups), 186
( ) (parentheses), 185
| OR operator, 186
+ metacharacter, 186, 189, 190, 192
? metacharacter, 186, 189, 191–192
[ ] (square brackets), 185
[first_literal - last_literal] metacharacter, 185
[literals] metacharacter, 185
grep command, 184–193
matching uppercase/lowercase characters, 187–188
printing lines without patterns, 192–193
repetition metacharacters, 185–186, 190–191
testing, 186
scale command, 221–222
sed command, 197–205
shells, 183, 205–208
variables, 217–218
declaring, 218–219
one-dimensional variables, 218
value assignments, 218–219
web application development, 250–251
SDLC (Software Development Life Cycle), 1116
SDN (Software-Defined Networking), 13, 819
BGP-LS, 843
lab topologies, 845–846
link NLRI, 856–857
node NLRI, 854–855
NPF-XR, 845, 849, 851–854
peering, 843–844, 847–849
prefix NLRI, 858–859
routing, 846–847
routing types (overview), 850–854
controllers, 821–823
network requirements, 819–821
overlay networks, 821
PCEP
call flows, 861–864
IOS XR configurations, 867–880
lab topologies, 867
LSP delegation, 864–867
PCC, 860–861
PCC, LSP configuration, 874–880
PCC, SR-TE configuration, 867–870
PCE, 860–861
PCE, LSP configuration, 876–880
PCE, SR-PCE, 874
PCE, SR-TE configuration, 869–874
peering, 867
RFC, 860–861
state synchronization, 863
SR
Adj-SID, 824, 827, 839–842
data plane verification, 830–831
forwarding, 832
IETF drafts, 823
lab topologies, 825
MPLS FIB for NPF-XR, 828–830
Node-SID, 824
NPF-XR, 835
Prefix-SID, 824, 827, 834–836
segments, 824, 825–827
SR algorithm, 827
SRGB, 824, 827, 831
SRLB, 824
SR-MPLS, 824
SR-TE, 832–843
underlay networks, 821–822
search engines, rules of thumb, 1117
security
AEAD, 495–496
AES-CCM protocol, 495
AES-GCM protocol, 495
CCM, 495
ciphers, 492
block ciphers, 492–493
CBC, 492–493
CMAC, 494
CTR mode, 492–493
symmetric ciphers, 492
digital signatures, 496–497
encryption keys, 488–489
asymmetric keys, 490
DH protocol, 490–492
ephemeral keys, 490
generation/exchanges, 488–492
HKDF, 492
key exchange algorithm, 490
KM, 492
PFS, 490
PSK, 489
symmetric keys, 489
GCM, 495
Git, 312
Linux, 135
ACL, 148–155
file security management, 143–148
system security, 155–158
user/group management, 136–142
MAC, 493–494
peer authentication, 496–497
TLS, 487–488
0-RTT, 502–503
HTTPS, 503
TLS 1.3, 498–499
TLS 1.3, alert protocol, 499
TLS 1.3, handshake protocol, 499–502
TLS 1.3, record protocol, 499, 503
workflows, 499–500
sed command, Linux, 197–205
Segment Routing. See SR
segments, 824
sequences, YAML, 618–620
serializer.py files, Django, 343
server response header fields, HTTP, 425–427
servers
application web servers, running with Django, 338–339
Docker servers, 322
Git servers, setting up, 313–314
HTTP client/server connections, 394–395
public keys, copying onto servers, 524–525
SFTP logins, 541
status codes, HTTP, 408–409
1xx information status codes, 411
2xx successful status codes, 411–412
3xx redirection status codes, 412
4xx server error status codes, 413–414
5xx client error status codes, 414
Cisco devices, 414
RFC 7231, 409–410
server-streaming RPC, 785
service layer API, IOS XR programmability, 886
service provider programmability, SDN, 819
BGP-LS, 843
lab topologies, 845–846
link NLRI, 856–857
node NLRI, 854–855
NPF-XR, 845, 849, 851–854
peering, 843–844, 847–849
prefix NLRI, 858–859
routing, 846–847
routing types (overview), 850–854
controllers, 821–823
network requirements, 819–821
overlay networks, 821
PCEP
call flows, 861–864
IOS XR configurations, 867–880
lab topologies, 867
LSP delegation, 864–867
PCC, 860–861
PCC, LSP configuration, 874–880
PCC, SR-TE configuration, 867–870
PCE, 860–861
PCE, LSP configuration, 876–880
PCE, SR-PCE, 874
PCE, SR-TE configuration, 869–874
peering, 867
RFC, 860–861
state synchronization, 863
SR
Adj-SID, 824, 827, 839–842
data plane verification, 830–831
forwarding, 832
IETF drafts, 823
lab topologies, 825
MPLS FIB for NPF-XR, 828–830
Node-SID, 824
NPF-XR, 835
Prefix-SID, 824, 827, 834–836
segments, 824, 825–827
SR algorithm, 827
SRGB, 824, 827, 831
SRLB, 824
SR-MPLS, 824
SR-TE, 832–843
underlay networks, 821–822
services, Linux, 74, 81–83
session channels, SSH Connection Protocol, 519–520
session operations, NETCONF, 721–722
Set RPC, gNMI, 807–810
set.add() function, Python, 294
set.difference() function, Python, 294–295
setfacl command, Linux, 151–155
set.pop() function, Python, 294
set.remove() function, Python, 294
sets, Python, 294–295
settings.py files, Django, 339–341
set.union() function, Python, 294–295
set.update() function, Python, 294
SFTP (Secure File Transfer Protocol)
fetching/uploading files, 543
help, 541–542
local/remote directory operations, 542–543
logins, 541
SCP comparisons, 550
SSH (Secure Shell), 540–541
sg command, Linux, 146–147
shells
Bash shells
Arguments.bash script, 213–214
arithmetic operations, 220–222
arithmetic operators, 229
CLI programmable interface creation, 963–967
Expect programming language, 245–246
file comparison operators, 230–232
functions, 244
integer comparison operators, 229–230
Linux interface configuration, 969–970
scripting, 206–207, 213–214
string comparison operators, 228–229
string operators, 227–228
Linux shells, 183
network programmability, 960, 967–973
scripts, 205–208
SSH, Linux network programmability, 971–973
shred command, 48
signatures, digital, 496–497
signed right shift (>>) operator, Python, 281
single inheritance, OOP, 257
single sources of truth. See SSoT
Slackware, Linux distributions, 26
slicing, Python
lists, 286–288
string indexes, 278–279
SNMP (Simple Network Management Protocol)
model-driven telemetry, 1113
network programmability, 959–960
socket modules, Python and HTTP, 455–457
soft links, Linux, 55–57
software
compiling, manually, Linux, 96–97
dependencies, 95
dependency hell, 1114–1115
development methodologies, 1116–1117
engineers
automation, 19–20
career paths, questions, 1118–1119
installing on Linux, 94–96
package management software, 95
DNF, 95, 117
RPM, 95, 97–101
YUM, 95, 101–117
repositories, 95–96
EPEL repositories, 111–112
listing, 110–111
LocalRepo repositories, 112–117
rules of thumb, 1116–1117
SDLC, 1116
SDN, 13
sort command, 59–61
stdin, 59–61
stdout, 61
sorting YAML data streams, 630–631
source code, Linux software installations, 94
sources of truth, 11–12
automation, reusing automations, 1111
finding, 1110–1111
southbound API, 883, 933
space characters in value fields, XML, 562
split() function, 1051–1054
square brackets ([ ])
[=] operator, Python, 284
[first_literal - last_literal], regular expressions (regex), 185
[literals], regular expressions (regex), 185
Python
lists, 286–287
strings, 278
regular expressions (regex), 185
SR (Segment Routing)
Adj-SID, 824, 827, 839–842
data plane verification, 830–831
forwarding, 832
IETF drafts, 823
lab topologies, 825
MPLS FIB for NPF-XR, 828–830
Node-SID, 824
NPF-XR, 835
Prefix-SID, 824, 827, 834–836
segments, 824, 825–827
SR algorithm, 827
SRGB, 824, 827, 831
SRLB, 824
SR-MPLS, 824
SR-TE
Adj-SID, 839–842
BGP, 836–839
data plane verification, 842–843
NPF-XR, 836–843
PCEP PCC configuration, 839–842
PCEP PCE configuration, 869–874
policy components, 833–834
Prefix-SID, 834–836
process of, 832–833
SRGB (Segment Routing Global Blocks), 824, 827, 831
SRLB (Segment Routing Local Blocks), 824
SR-PCE, 874
srv directory, Linux, 37
SSH (Secure Shell)
Authentication Protocol, 514–516
host-based authentication, 517–518
password authentication, 517, 522–523, 525–526
public key authentication, 516–517
Bash shells, 539–540, 548–549
Connection Protocol, 518–521
debugging, 528–531, 533–534
key-based authentication, 523–525
Linux network programmability, 971–973
NETCONF over SSH, 694–695
OpenSSH, 510, 522
overview, 509–510
protocol setup flow, 510
public keys, copying onto servers, 524–525
remote access requirements, 510
SCP
CentOS, 549–550
SFTP comparisons, 550
setting up, 521
CentOS, 521–526
Cisco devices, 545–549
IOS XE, 526–531, 545–546
IOS XR, 532–536, 546–547
NX-OS, 537–540, 547–548
SFTP, 540–541
fetching/uploading files, 543
help, 541–542
local/remote directory operations, 542–543
logins, 541
SCP comparisons, 550
SSH1, 510–512
SSH2, 512
IOS XE configurations, 527
IOS XR configurations, 532–533
SSH-TRANS, 513–514
tunneling, 520
verifying sessions, 533–534
SSoT (Single Sources of Truth), 11–12, 1110–1111
start lines, HTTP messages, 415
start tags, XML, 555
start-time parameter, RESTCONF, 771
stat command, 62–63
state management, HTTP, 483–487
state synchronization, PCEP, 863
statements (conditional)
Ansible, 1016–1019
checking for substrings in variables, 1021–1022
checking for variables, 1019–1021
combining multiple conditional statements, 1022–1024
conditional statements with loops, 1024–1027
conditional statements with loops and variables, 1027–1033
Jinja2 templates, 1045–1049
AND/OR logic, 1022–1024
Jinja2 templates, 1045–1049
Linux scripting, 226
== (double equal sign), 229
= (equal sign), 229
case-in constructs, 232–234
if-then constructs, 226–232
nested code blocks with conditional statements, Python control flow, 295–
296
static routing
200 OK responses
DELETE method, 405–406
POST method, 394–401
PUT method, 403–404
Nexus switches
DELETE method, 405–406
POST method, 399–401
PUT method, 402–405
stderr, Linux, 59, 62–65
stdin, Linux, 59–61
stdout, Linux, 59, 61, 62–65
stopping jobs, 80–81
stop-time parameter, RESTCONF, 771
storage, Linux, 119
/dev directory, 119–120
contents of, 120
device file types, 120–121
fdisk command, 121–125
file system creation, 125–126
hard disk partitions, 121–125
mkfs command, 125–126
mounting file systems, 126–128
unmounting file systems, 127
LVM, 128–135
streaming telemetry, 1113–1114
streams, HTTP/2, 505
string comparison operators, Bash shells, 228–229
string data types, Python, 276–277
concatenating, 277
formatting, 280
indexes, 277–279
string operators, Bash shells, 227–228
string variables, Ansible, 1006
strings, JSON, 593
str.lower() function, Python, 279–280
str.replace() function, Python, 279–280
str.reverse() function, Python, 292–293
str.strip() function, Python, 279–280
str.upper() function, Python, 279–280, 292–293
stylesheets, XSLT, 578–579
su command, 29–30
subnets (remote), Linux routing tables, 166–167
Subscribe RPC, gNMI, 811–814
subtree filters, NETCONF, 703–710
sudo command, Linux, 136
sudo yum remove httpd command, Linux, 109
sudo yum update command, Linux, 110
sum() function, Python, 249–250
switches (Nexus)
authentication, 401–402, 463
static routing
DELETE method, 405–406
POST method, 399–401
PUT method, 402–405
symbolic notation, file permissions, 144–145
symlinks, Linux, 56–57
symmetric ciphers, 492
symmetric keys, 489
sys directory, Linux, 37
sysctl command, Linux, 167–168
syslog, model-driven telemetry, 1113
syslog messages, Linux, 93–94
system calls, Linux, 24
system daemons, Linux, 24
system information, Linux
cat/proc/cpuinfo command, 87–88
date command, 85–86
dmesg command, 90
dmidecode command, 88–89
lspci command, 90
timedatectl command, 86
update command, 86–87
system logs, Linux, 91
journald command, 93–94
lastlog command, 91
rotation, 91
ryslogd command, 91–93
tail command, 91
system maintenance, Linux, 73
jobs, 74
displaying status, 80
stopping, 80–81
kill command, 78–80, 81
pgrep command, 78
processes, 73–74, 80–81
ps command, 74–77
services, 74, 81–83
systemctl command, 81–83
threads, 73
system security, Linux, 155–158
systemctl command, Linux system maintenance, 81–83
tags
XML
child/parent relationships, 555–556
creating, 557
defined, 555
end tags, 555
predefined entries, 557
prefixes, 560–561
start tags, 555
using multiple times, 558–559
values, 555
YAML, 617, 621–624
tail command, Linux system logs, 91
tar archiving utility, Linux, 67, 70–73
TCP over Python, 455–457
TE (Traffic Engineering), SR-TE
Adj-SID, 839–842
BGP, 836–839
data plane verification, 842–843
NPF-XR, 836–843
PCEP PCC configuration, 839–842
PCEP PCE configuration, 869–874
policy components, 833–834
Prefix-SID, 834–836
process of, 832–833
tee command, 66–67
telemetry
IOS XE programmability, 886
IOS XR programmability, 887
model-driven telemetry, 1113–1114
Open NX-OS programmability, 885
streaming telemetry, 1113–1114
templates, Jinja2, 363–364
Ansible, 1034–1040
conditional statements, 1045–1049
loops, 1040–1043
playbooks, 1040–1043
variables, 1042–1043
IOS XE, 367–371
IOS XR, 367–371
NAPALM libraries, 371–375
Netmiko libraries, 364–367
Nornir libraries, 367–369, 371–375
NX-OS, 367–371
nx-os_config modules, 1091–1093
Terminal, 29
testing
Python code, 269
regular expressions (regex), 186
repetition metacharacters, 190–191
threads, Linux, 73
thumb, rules of
API, 1118
application hosting, 1115–1116
automation, 1109–1110
complexity, 1111–1112
cost/benefit analysis, 1112
reusing automations, 1111
cleaning up networks, 1110
containers, 1114–1115
databases, 1117
documentation, 1111
model-driven telemetry, 1113–1114
search engines, 1117
software development methodologies, 1116–1117
time stamps, Linux files, 41
timedatectl command, Linux, 86
TLS (Transport Layer Security), 487–488
0-RTT, 502–503
HTTPS, 503
TLS 1.3, 498–499
alert protocol, 499
handshake protocol, 499–502
record protocol, 499, 503
workflows, 499–500
tmp directory, Linux, 37
toggling interface state, Linux, 161
tokenizers, Python code execution, 263
top command, Linux resource utilization, 83–85
touch command, 46, 48
TRACE method, 408
Traffic Engineering. See TE
transactions, HTTP, 389
client requests, 397–398
CONNECT method, 407
DELETE method, 405–406
GET method, 398
GET method, Bash shells, 447–454
GET method, Postman, 445–446
HEAD method, 398
OPTIONS method, 407–408
POST method, 399–402, 443–445, 465
PUT method, 402–405
TRACE method, 408
server status codes, 408–409
1xx information status codes, 411
2xx successful status codes, 411–412
3xx redirection status codes, 412
4xx server error status codes, 413–414
5xx client error status codes, 414
Cisco devices, 414
RFC 7231, 409–410
transport layer
NETCONF, 692–693
over SSH, 694–695
transport protocol requirements, 693–694
RESTCONF, 742, 743
transport protocols, 18–19
gRPC
gNMI, 798–799
gNMI, anatomy of, 799–801
gNMI, Capabilities RPC, 810–811
gNMI, Get RPC, 801–807
gNMI, insecure mode in IOS XE, 815
gNMI, managing network elements, 814–818
gNMI, Python metaclasses, 815–816
gNMI, Python sample Get script, 816–818
gNMI, Set RPC, 807–810
gNMI, Subscribe RPC, 811–814
history of, 782–784
managing network elements, 814–818
principles of, 782–784
Protobuf, example of, 788–789
Protobuf, Python, 790–798
server sample, 794–797
as a transport, 784–786
requirements for efficent transport, 781–782
truth, sources of, 11–12
automations, 1111
finding, 1110–1111
TSP API (Transport Service Provider API), 945
tunneling, SSH, 520
tuples, Python
deleting, 293
functions, 292–293
joining, 293
two asterisks (**), assignment operator, Python, 281
two dot notation (..), Linux directories, 37
two equal signs (==)
conditional statements, 229
Jinja2, 1019
Python, 285
two semicolons (;;), case-in constructs, 233–234
UDS API, 945
unary RPC, 785
unbuffered/buffered access, Linux /dev directory, 120
underlay networks, 9, 821–822
Unified Communications, 942
Cisco Business Edition, 942
Cisco Webex Cloud Calling, 942
Cisco Webex Contact Center, 943
Cisco Webex teams, 942
Contact Center, 942–943
CUCM, 942
AXL API, 944
CER API, 944
CUCM Serviceability API, 945
PAWS API, 944
UDS API, 945
Unified Contact Center (Cisco), 943
Unified Contact Center (Cisco), 943
<unlock> operations, NETCONF, 720–721
unmounting Linux file systems, 127
unstructured data, CLI, 19
until-do loops, 239–240
update command, Linux, 86–87
updating
IOS XE with Ansible hosts/variables, 1057–1058
local Git repositories, 314–315
remote Git repositories, fetching updates, 314–315
uploading files via SFTP, 543
uppercase/lowercase characters, matching, regular expressions (regex),
187–188
URI (Universal Resource Identifiers), 389, 431, 432–436
URL (Uniform Resource Locators), 431, 432
API, 945
NETCONF, 733–734
urllib packages, Python and HTTP, 458–463
urls.py files, Django, 343
URN (Uniform Resource Names), 431–432
user space (userland), Linux, 23–24
useradd command, Linux, 138–140
userdel command, Linux, 141
user/group management, Linux, 136–138
changing passwords, 141
creating groups, 141
creating new users, 138–141
deleting groups, 141–142
deleting users, 141
getting user information, 136
modifying user details, 142
setting user passwords, 138–141
usermod command, Linux, 142
usr directory, Linux, 37
usr/bin directory, Linux, 37
usr/local directory, Linux, 37
usr/sbin directory, Linux, 37
UTF-8 encoding, HTTP/1.1 authentication, 472–473
utility modules, Ansible, 1003
validate capability, NETCONF, 733
<validate> operations, 724–725
validate_person() function, Python, 307–308, 309
validating
data, JSON schemas, 609–614
JSON schemas, 596–597
NETCONF configurations, 724–725
XML, 562–563
DTD, 563–565, 574
XSD, 565–574
value assignments
lists, Python, 286–288
variables, 218–219
value fields (XML), space characters in, 562
values, XML, 555
var directory, Linux, 37
variables
Ansible, 999
Boolean variables, 1006
checking for substrings with conditional statements, 1021–1022
checking with conditional statements, 1019–1021
conditional statements with loops and variables, 1027–1033
defining from external files, 1007–1009
defining in inventory files, 1009–1011
defining in playbooks, 1005–1006
dictionary variables, 1007
importing from external files, 1007–1009
Jinja2 templates, 1042–1043
list variables, 1007
setting dynamically, 1011–1013
string variables, 1006
types of, 1006–1007
Jinja2 templates, 1042–1043
Linux scripting, 217–218
declaring, 218–219
one-dimensional variables, 218
value assignments, 218–219
nx-os_config modules, 1090–1091
Python, 270–271
deleting, 272–273
dynamic data type allocation, 271–272
scope, 272
vendor/API matrix, network programmability, 957–958
vendor-specific (native) YANG modules, 666–669
verifying
data planes
SR, 830–831
SR-TE, 842–843
Docker, 320–322
IOS XE with Ansible
ios_command module, 1058–1060
verifying management, 1057
verifying operational data, 1058–1060
IOS XR with Ansible
verifying management, 1074–1075
verifying operational data, 1074–1078
NETCONF
configuring, 1103–1107
operational data, 1098–1103
NX-OS with Ansible
collecting show output with nxos_command, 1086–1088
configuring with nx-os_* modules, 1093–1095
configuring with nx-os_config modules, 1086–1088
interactive commands, 1088–1089
verifying management, 1085–1086
verifying operational data, 1086–1089
Python code, 269
YANG modules, downloaded, 665–666
version command, Ansible, 991–992
version control, application development, 311
vgdisplay command, Linux, 132, 133–134
viewing
Linux files, 41–46
routing tables, Linux, 163
views.py files, Django, 343
virtual environments
creating with virtualenv tool, 332–333
Flask installations, 345–346
virtualenv tool, 331
installing, 331
virtual environments, creating, 332–333
virtualization
defined, 8–9
Docker containers, 317–318
Network Programmability and Automation toolbox, 17
single sources of truth, 11–12
VLAN, awareness, 8–9
VLAN (Virtual Local-Area Networks), awareness, 8–9
volumes, Linux
logical volumes, 132–133
mounting, 134–135
physical volumes, 130–131
volume groups, 132, 133–134
VPN (Virtual Private Networks), IP VPN and JSON schemas, 597–598, 601–
602, 607–609
W
web application development, 250–251
web/API development, 336–337
back end development, 336
Django, 337
application web servers, 338–339
creating applications, 341–345
demo applications, 343–345
installing, 337–338
migrations, 338–339
models.py files, 343
serializer.py files, 343
settings.py files, 339–341
starting new projects, 337–338
urls.py files, 343
views.py files, 343
Flask
accessing in-memory employee data, 347–349
installing in virtual environments, 345–346
retrieving ID-based data, 349–350
simple applications, 346–347
front end development, 336
Postman, 345
Webex Board (Cisco), 943
Webex Cloud Calling (Cisco), 942
Webex Contact Center (Cisco), 943
Webex devices, xAPI, 946
Webex Meetings (Cisco), 943
REST API, 945–946, 948–954
TSP API, 945
URL API, 945
XML API, 945
Webex Room Series (Cisco), 944
Webex Support (Cisco), 943
Webex Teams (Cisco), 942, 945–946, 948–954
Webhook Alerts API (Meraki), 922
webhooks, 882, 933, 935
well-formed XML documents, 562
westbound API, 883, 933
while loops, control flow, 304–306
while-do loops, 237–239
whitespaces, HTTP messages, 416
Wind River, Linux distributions, 26
with-defaults parameter, RESTCONF, 771
writable-running capability, NETCONF, 732
x11 channels, SSH Connection Protocol, 520
xAPI (Experience API), 946
XML (Extensible Markup Language)
API, 945
attributes, 558, 568
AXL API, 944
basic XML document example, 554
child/parent relationships, 555–556
comments, 558
data types, 567–568
declarations, 566–567
DTD, 563
example of, 563–564
joint XML/DTD files, 564–565
formatting rules, 561–562
history of, 553–554
leading spaces in XML documents, 555
namespaces, 559–561
nesting
format, 561–562
relationships, 555–556
overview, 553–554
predefined entries, 557
Python and XML processing, 580
dictionaries, 583–585
element mergers, 585–587
element name/attribute extraction, 581–582
properties/methods, 580–581
rerunning processing for updated documents, 587–588
script creation, 580–581
value extraction, 582–583
space characters in value fields, 562
tags
child/parent relationships, 555–556
creating, 557
defined, 555
end tags, 555
predefined entries, 557
prefixes, 560–561
start tags, XML, 555
using multiple times, 558–559
values, 555
usage, 553–554
validation, 562–563
DTD, 563–565, 574
XSD, 565–574
values, 555
well-formed XML documents, 562
XPath, 574, 575
expressions, 575–576
expressions, absolute path, 576
expressions, absolute path and multiple outputs, 577
expressions, anywhere selection, 576
expressions, path definitions, 578
expressions, predicates, 577
logical operator values, 577
nodes, 574–575
XSD, 565
attribute validation, 570–571
attributes, 568
complex elements, 570–573
content validation, predefined values, 568–569
content validation, regexp, 569
data types, 567–568
declarations, 566–567
DTD comparisons, 574
element validation, 567
example of, 565–566
pattern validation, 569–570
XSLT, 578, 579
elements of, 578
stylesheets, 578–579
YAML versus, 615–616
XOR operator (^), Python, 281
XPath, 574
expressions, 575–576
absolute path, 576
absolute path and multiple outputs, 577
anywhere selection, 576
path definitions, 578
predicates, 577
logical operator values, 577
NETCONF
capabilities, 735
filters, 710–712
nodes, 574–575
syntax elements, 575
XSD (XML Schema Definition), 565
attribute validation, 570–571
attributes, 568
complex elements, 570–573
content validation
predefined values, 568–569
regexp, 569
data types, 567–568
declarations, 566–567
DTD comparisons, 574
element validation, 567
example of, 565–566
pattern validation, 569–570
XSLT (XML Stylesheet Language Transformation), 578, 579
elements of, 578
stylesheets, 578–579
xz archiving utility, Linux, 67, 69–70, 72–73
Y-Z
YAML (YAML Ain’t Markup Language), 615
anchors, 624–625
collections, 618–620
comments, 616
configuration files, building, 635–637
data readability, 616
data representation, 615
data streams
saving to files, 629
sorting, 630–631
data types, 616
example of, 625–626
files
creating, 616
extensions, 616
rules for creating, 616
Jinja templates, 635–637
JSON versus, 615–616
mappings, 618–620
merge keys, 624–625
multiple documents, loading, 632–633
nodes, 617
performance, 616
purpose of, 616
Python
PyYAML, 626–628
saving data streams to files, 629
serializing Python objects, 628–629
sorting data streams, 630–631
yaml.dump() method, 628–631
yaml.load() method, 631–632
yaml.load_all() method, 632–633
yaml.scan() method, 633–635
scalars, 620–621
sequences, 618–620
speed, 616
starting/closing documents, 616–617
structure of, 617–618
tags, 617, 621–624
usability, 616
XML versus, 615–616
yaml.dump() method, 628–631
yaml.load() method, 631–632
yaml.load_all() method, 632–633
yaml.scan() method, 633–635
YANG (Yet Another Next Generation), 17
content layer, NETCONF, 725–729
data modeling, 639–640, 642
importance of, 640–642
modules, 642–644
modules, augmentation, 656–658
modules, built-in data types, 647–648
modules, cloning, 665
modules, derived data types, 648–649
modules, deviations, 658–662
modules, home of, 664–666
modules, IETF YANG modules, 670–671
modules, native (vendor- specific) modules, 666–669
modules, OpenConfig YANG modules, 671–673
modules, structure of, 644–646
modules, verifying downloaded modules, 665–666
nodes, 649
nodes, container nodes, 647–648
nodes, grouping, 654–656
nodes, leaf nodes, 649–651
nodes, leaf-list nodes, 651–652
nodes, list nodes, 647–648
pyang, 673–679
pyang, JTOX drivers, 683–687
pyangbind, 679–682
YANG 1.1, 662–663
JSD, 595
NETCONF/YANG
configuring, 1103–1107
netconf_get module, 1103–1107
network programmability, 973–978
verifying operational data, 1098–1103
RESTCONF
data resource, 753–756
schema resource, 750–753
YANG library version resource, 758
RESTCONF/YANG, network programmability, 978–987
YANG 1.1, 662–663
YUM (Yellowdog Updater Modified), 95, 101
commands list, 102–103
sudo yum remove httpd command, 109
sudo yum update command, 110
yum info command, 104–105
yum install command, 106–109
yum list command, 103
yum repolist all command, 110–111
yum search command, 103–104
yum-config-manager command, 111–112