0% found this document useful (0 votes)
43 views216 pages

Index - Network Programmability and Automation Fundamentals

The document is an index listing various symbols, operators, and programming concepts primarily related to Python, Linux, and regular expressions. It includes references to specific pages for each topic, covering a wide range of subjects from authentication methods to network automation. Additionally, it touches on APIs, scripting, and programming best practices.

Uploaded by

leandro.garijo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
43 views216 pages

Index - Network Programmability and Automation Fundamentals

The document is an index listing various symbols, operators, and programming concepts primarily related to Python, Linux, and regular expressions. It includes references to specific pages for each topic, covering a wide range of subjects from authentication methods to network automation. Additionally, it touches on APIs, scripting, and programming best practices.

Uploaded by

leandro.garijo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 216

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

You might also like