Mastering Python Network Automation Tim Peters pdf download
Mastering Python Network Automation Tim Peters pdf download
install download
https://ebookmeta.com/product/mastering-python-network-
automation-tim-peters/
https://ebookmeta.com/product/mastering-python-networking-your-
one-stop-solution-to-using-python-for-network-automation-
programmability-and-devops-3rd-edition-eric-chou/
https://ebookmeta.com/product/network-automation-using-
python-3-an-administrators-handbook-1st-edition-jithin-aby-alex/
https://ebookmeta.com/product/introduction-to-ansible-network-
automation-a-practical-primer-brendan-choi/
https://ebookmeta.com/product/studies-in-chinese-literary-genres-
cyril-birch-editor/
3D and Circuit Integration of MEMS 1st Edition
Masayoshi Esashi
https://ebookmeta.com/product/3d-and-circuit-integration-of-
mems-1st-edition-masayoshi-esashi/
https://ebookmeta.com/product/star-wars-myths-fables-george-mann/
https://ebookmeta.com/product/a-course-of-modern-analysis-5th-
edition-e-t-whittaker/
https://ebookmeta.com/product/hate-crime-in-turkey-implications-
of-collective-action-media-representation-and-policy-making-1st-
edition-deniz-unan-goktan/
https://ebookmeta.com/product/beastly-bullies-loved-by-
three-7-1st-edition-evie-rae/
Export Control Law and Regulations Handbook A Practical
Guide to Military and Dual Use Goods Trade Restrictions
and Compliance 3rd edition Yann Aubin
https://ebookmeta.com/product/export-control-law-and-regulations-
handbook-a-practical-guide-to-military-and-dual-use-goods-trade-
restrictions-and-compliance-3rd-edition-yann-aubin/
MASTERING PYTHON
NETWORK AUTOMATION
Automating Container Orchestration,
Configuration, and Networking with
Terraform, Calico, HAProxy, and Istio
Tim Peters
Content
Preface
Chapter 1: Python Essentials for Networks
Role of Python in Network Programming
Overview
Factors Benefitting Networking
Learn to use Data Types
Numeric Data Types
Boolean Data Type
Sequence Data Types
Mapping Data Types
Set Data Types
Binary Data Types
Exploring Loops
For Loops
While Loops
Working with Functions
Defining Functions
Calling Functions
Default Arguments
Variable-length Arguments
Lambda Functions
Recursion
Global and Local Variables
Function Arguments
Nested Functions
Summary
Chapter 2: File Handling and Modules in Python
File Handling
Opening and Closing Files
Reading from Files
Writing to Files
Appending to Files
With Statement
Exception Handling:
Utilizing Modules
Creating a Module
Importing a Module
Built-In Modules
Creating Packages
Standard Library Modules
My First Python Script
Summary
Chapter 3: Preparing Network Automation Lab
Components of Network Automation Process
Network Devices
Network Emulator
Python Environment
Automation Scripts
Putting It All Together
Benefits of Network Automation Lab
Install NS3 Network Simulator
System Requirements
Install Required Dependencies
Download NS-3
Install Python
Update System
Install Python
Install pip
Install paramiko, Netmiko and Nornir
Install Virtual Environment
Create Virtual Environment
Activate the Virtual Environment
Install Python Libraries in Virtual Environment
Deactivate the Virtual Environment
Install Visual Studio Code
Download and Install VS Code
Install Python Extension
Configure Python Interpreter
Create Python Project
Write Python Code
Run Python Code
Summary
Chapter 4: Configuring Libraries and Lab Components
Nornir
Architecture of Nornir
Significance of Nornir
Paramiko
Architecture of Paramiko
Significance of Paramiko
Netmiko
Architecture of Netmiko
Significance of Netmiko
PyEZ
Architecture of PyEZ
Significance of PyEZ
Configure nornir, paramiko, netmiko and pyEZ
Installing and Configuring Nornir
Installing and Configuring Paramiko
Installing and Configuring Netmiko
Installing and Configuring PyEZ
Configure Ports
Configuring Ports on Switches
Configuring Ports on Routers
Configure Hosts
Configuring Hosts on Windows
Configuring Hosts on Linux
Configure Servers
Installing Server Operating System
Configuring Network Settings
Installing and Configuring Server Software
Configure Network Encryption
SSL/TLS
IPsec
SSH
VPN
Testing the Network Automation Environment
Test Connectivity between Hosts
Test Port Connectivity
Test SSH Connectivity
Test Network Automation Libraries
Test NS3 Emulator
Test Network Encryption
Summary
Chapter 5: Code, Test & Validate Network Automation
Understanding Network Automation Scripts
Procedure of Network Automation Scripts
Define Variables for Automation Scripts
Install Required Libraries
Import Libraries
Define Variables
Connect to Device
Send Configuration Commands
Close Connection
Create Script to Use Variables
Run the Script
Write Codes using Python Tools
Install Required Libraries and Tools
Import Libraries
Define Inventory
Define Tasks
Define Playbook
Execute the Script
Test and Validate the Script
Testing Network Automation Scripts
Set Up a Test Environment
Create Test Cases
Run the Code
Document Test Results
Debug Errors
Identify the Error or Issue
Review the Code
Use Print Statements
Use a Debugger
Fix the Error or Issue
Validate Network Automation Scripts
Prepare the Production Environment
Deploy Code to Production Environment or Devices
Run the Code on Production Environment or Devices
Verify the Output
Summary
Chapter 6: Automation of Configuration Management
Why Configuration Management?
Need of Configuration Management
Role of Python in Configuration Management
Server Provisioning with Terraform
Set up AWS Credentials
Install Terraform
Define Terraform Configuration
Initialize Terraform
Apply Terraform Configuration
Connect to EC2 Instance
Creating Server
Testing Server
Using Python to Automate System Settings
Import Necessary Modules
Define Timezone
Execute Command to Change Timezone
Verify Setting the Timezone
Using Python to Modify Base Configurations
Using Terraform to Modify Base Configurations
Automating System Identification
Install Terraform Module
Python Script to Retrieve System Information
Using Python to Automate Patches and Updates
Install Necessary Libraries
Check for Available Updates
Upgrade the System
Reboot the System
Schedule Regular Updates
Using Terraform to Roll Patches and Updates
Create Configuration File
Applying Configuration File
Identify Unstable and Non-compliant Configurations
Establish Connection with Device
Retrieve Running Configuration
Search Non-compliant Interfaces
Fixing Non-compliant Configurations
Summary
Chapter 7: Managing Docker and Container Networks
Docker and Containers
Docker & Container Fundmentals
Benefits & Applications
Role of Python in Containerization
Install and Configure Docker
Install Docker
Install Docker Python Module
Create Dockerfile
Build Docker Image
Run Docker Container
Test Docker Container
Using Python to Build Docker Images
Create DockerFile
Install Dependencies
Define Command
Build Docker Image
Run Container
Running Containers
Automate Running of Containers
Install Docker SDK for Python
Import Docker SDK
Connect to Docker Daemon
Define Container Configuration
Create Container
Start the Container
Stop and Remove Containers
Container Network Management
Overview
Managing Container Networks with Docker SDK
Summary
Chapter 8: Orchestrating Container & Workloads
Container Scheduling and Workload Automation
Network Service Disocvery
Understanding etcd
Service Discovery using etcd
Install etcd
Start etcd
Register Services
Discover Services
Automate Service Discovery
Sample Program to Automate Service Discovery
Kubernetes Load Balancers
Exploring HAProxy
Manage Load Balancer Servers using HAProxy
Import Required Libraries
Define API Endpoint URLs
Define Function to Add or Remove Servers
Call Function
Sample Program to Manage Load Balancer Servers
Automate Add/Manage SSL Certificate
Using Cryptography Library to Automate SSL
Step-by-step Illustration of Sample Program
Manage Container Storage
Sample Program
Step-by-step Illustration of Sample Program
Necessity of Container Performance
Why Container Performance?
Container Performance KPIs
Setting Up Container Performance Monitoring
Install the Required Libraries
Import Required Libraries
Connect to Docker API
Get Container List
Pull Performance Metrics
Print Container Metrics
Automated Rolling of Updates
Get Current Deployment Object
Update Deployment Object
Check Status of Deployment Rollout
Clean Up Resources
Summary
Chapter 9: Pod Networking
Pods and Pod Networking
What are Pods?
Pods beyond Containers
Networking in Pods
Setting Up Pod Network
Choose a Pod Network Provider
Install Pod Network Provider
Configure Pod Network
Verify the Pod Network
Exploring Calico
Overview
Characteristics of Calico
Getting Started with Calico
Using Calico to Setup Pod Network
Routing Protocols
Border Gateway Protocol (BGP)
Open Shortest Path First (OSPF)
Intermediate System to Intermediate System (IS-IS)
Routing Information Protocol (RIP)
Exploring Cilium
Key Features of Cilium
Cilium Architecture
Install Cilium
Automation of Network Policies
Overview
Steps for Network Policies Automation
Using Calico to Automate Network Policies
Workload Routing
Need of Workload Routing
Istio
Linkerd
Consul
Summary
Chapter 10: Implementing Service Mesh
Service-to-Service Communication
Remote Procedure Calls (RPCs)
Message-based Communication
Need of Service-to-Service
Rise of Service Mesh
Exploring Istio
Overview
Istio’s Capabilities
Installing Istio
Cluster Traffic
NodePort
LoadBalancer
Ingress
Istio Control Plane
Using Istio to Route Traffic
Metrics, Logs and Traces
Metrics
Logs
Traces
Using Grafana to Collect Metrics
Steps to Collect Metrics
Summary
Preface
With "Mastering Python Network Automation," you can streamline
container orchestration, configuration management, and resilient
networking with Python and its libraries, allowing you to emerge as a
skilled network engineer or a strong DevOps professional.
From the ground up, this guide walks readers through setting up a
network automation lab using the NS3 network simulator and Python
programming. This includes the installation of NS3, as well as python
libraries like nornir, paramiko, netmiko, and PyEZ, as well as the
configuration of ports, hosts, and servers. This book will teach you
the skills to become a proficient automation developer who can test
and fix any bugs in automation scripts. This book examines the
emergence of the service mesh as a solution to the problems
associated with service-to-service communication over time.
This book walks you through automating various container-related
tasks in Python and its libraries, including container orchestration,
service discovery, load balancing, container storage management,
container performance monitoring, and rolling updates. Calico and
Istio are two well-known service mesh tools, and you'll find out how
to set them up and configure them to manage traffic routing,
security, and monitoring.
Additional topics covered in this book include the automation of
network policies, the routing of workloads, and the collection and
monitoring of metrics, logs, and traces. You'll also pick up some tips
and tricks for collecting and visualising Istio metrics with the help of
tools like Grafana.
In this book you will learn how to:
Use of Istio for cluster traffic management, traffic routing,
and service mesh implementation.
Utilizing Cilium and Calico to solve pod networking and
automate network policy and workload routing.
Monitoring and managing Kubernetes clusters with etcd
and HAProxy load balancers and container storage.
Establishing network automation lab with tools like NS3
emulator, Python, Virtual Environment, and VS Code.
Establishing connectivity between hosts, port connectivity,
SSH connectivity, python libraries, NS3, and network
encryption.
GitforGits
Prerequisites
"Mastering Python Network Automation" is an essential guide for
network engineers, DevOps professionals, and developers who want
to streamline container orchestration and resilient networking with
the help of Terraform, Calico, and Istio. Knowing Python and basics
of networking is sufficient to pursue this book.
Codes Usage
Are you in need of some helpful code examples to assist you in your
programming and documentation? Look no further! Our book offers
a wealth of supplemental material, including code examples and
exercises.
Not only is this book here to aid you in getting your job done, but
you have our permission to use the example code in your programs
and documentation. However, please note that if you are
reproducing a significant portion of the code, we do require you to
contact us for permission.
But don't worry, using several chunks of code from this book in your
program or answering a question by citing our book and quoting
example code does not require permission. But if you do choose to
give credit, an attribution typically includes the title, author,
publisher, and ISBN. For example, "Mastering Python Network
Automation by Tim Peters".
If you are unsure whether your intended use of the code examples
falls under fair use or the permissions outlined above, please do not
hesitate to reach out to us at [email protected] .
Integers
An integer is a whole number, either positive or negative, without a
decimal point. In Python, integers are represented by the int class.
For example, 5, -10, and 0 are all integers.
x=5
y = -10
print(x, y)
Output:
5 -10
Floating-Point Numbers
A floating-point number is a number that has a decimal point. In
Python, floating-point numbers are represented by the float class.
For example, 3.14 and -2.5 are floating-point numbers.
x = 3.14
y = -2.5
print(x, y)
Output:
3.14 -2.5
Complex Numbers
A complex number is a number that has both a real and imaginary
part. In Python, complex numbers are represented by the complex
class. For example, 3 + 4j is a complex number where 3 is the real
part and 4j is the imaginary part.
x = 3 + 4j
y = -2 - 3j
print(x, y)
Output:
(3+4j) (-2-3j)
x = True
y = False
print(x, y)
Output:
True False
Strings
A string is a sequence of characters. In Python, strings are
represented by the str class. Strings can be enclosed in single quotes
('...') or double quotes ("...") or triple quotes ('''...''' or """...""").
x = 'Hello'
y = "World"
print(x, y)
Output:
Hello World
Lists
A list is a collection of items that are ordered and changeable. In
Python, lists are represented by the list class. Lists can contain any
data type, including other lists.
x = range(0, 10)
for i in x:
print(i)
Output:
0
1
2
3
4
5
6
7
8
9
Dictionaries
A dictionary is an unordered collection of key-value pairs. In Python,
dictionaries are represented by the dict class. Dictionaries are used
to store and retrieve data based on a key rather than an index.
Sets
A set is an unordered collection of unique elements. In Python, sets
are represented by the set class. Sets are used to perform
mathematical set operations such as union, intersection, and
difference.
x = {1, 2, 3, 4, 5}
y = {4, 5, 6, 7, 8}
print(x, y)
Output:
{1, 2, 3, 4, 5} {4, 5, 6, 7, 8}
Bytes
A bytes object is an immutable sequence of bytes. In Python, bytes
objects are represented by the bytes class.
x = b'Hello'
y = b'\x48\x65\x6c\x6c\x6f'
print(x, y)
Output:
b'Hello' b'Hello'
Bytearray
A bytearray object is a mutable sequence of bytes. In Python,
bytearray objects are represented by the bytearray class.
x = bytearray(b'Hello')
x[0] = 72
print(x)
Output:
bytearray(b'Hello')
Overall, Python supports various data types such as numeric,
boolean, sequence, mapping, set, and binary data types.
Understanding these data types and their characteristics is essential
to write efficient and effective Python programs.
Exploring Loops
Loops in Python are used to execute a set of instructions repeatedly.
There are two types of loops in Python: for loops and while loops. In
this tutorial, we will discuss both types of loops with practical
examples.
For Loops
For loops are used to iterate over a sequence (such as a list, tuple,
or string) or other iterable objects (such as a dictionary or a file).
The syntax of the for loop is as follows:
While Loops
While loops are used to execute a set of instructions repeatedly as
long as a certain condition is true. The syntax of the while loop is as
follows:
while condition:
# Code to be executed
The while loop first checks the condition. If the condition is true, it
executes the code block. Then, it checks the condition again and
continues until the condition becomes false.
Defining Functions
The syntax for defining a function in Python is as follows:
def function_name(parameters):
# Code to be executed
return return_value
The function definition starts with the def keyword, followed by the
name of the function, and a set of parentheses that may or may not
contain parameters. The code to be executed by the function is
indented and followed by an optional return statement that specifies
the value to be returned by the function.
Calling Functions
To call a function in Python, you simply write the name of the
function followed by a set of parentheses that may or may not
contain arguments.
Default Arguments
In Python, you can define default values for function parameters. If
a value is not passed for a parameter, the default value is used
instead.
Variable-length Arguments
In Python, you can define functions that accept a variable number of
arguments. There are two ways to define variable-length arguments:
using the *args syntax to pass a variable number of positional
arguments, or using the **kwargs syntax to pass a variable number
of keyword arguments.
Lambda Functions
Lambda functions, also known as anonymous functions, are small,
one-line functions that can be defined without a name. They are
useful for writing quick and simple functions that are only used once.
Recursion
In Python, you can define functions that call themselves. These
functions are called recursive functions, and they are useful for
solving problems that can be broken down into smaller subproblems.
Function Arguments
In Python, function arguments can be passed by reference or by
value. When an argument is passed by reference, any changes made
to the argument inside the function are reflected outside the
function. When an argument is passed by value, any changes made
to the argument inside the function are not reflected outside the
function.
Nested Functions
In Python, you can define functions inside other functions. These
functions are called nested functions, and they are useful for
organizing code and limiting the scope of variables.
Writing to Files
In Python, you can write data to files using the write() function. This
function writes data to a file and returns the number of characters
written to the file.
Appending to Files
In Python, you can append data to a file using the append()
function. This function adds data to the end of a file without
overwriting any existing data.
With Statement
In Python, you can use the with statement to open a file and
automatically close it when you are finished performing operations
on the file. This is a safer and more efficient way of working with
files, as it ensures that the file is properly closed even if an error
occurs.
Fig. 41.—Skeleton of
Hesperornis regalis, the
Giant Toothed-bird of
the Kansas Cretaceous.
Discovered by Charles M.
Sternberg. In American
Museum of Natural
History.
Fig. 42.—Slab of Fossil Crinoids,
Unitacrinus socialis, CONTAINING 160
CALYCES, COVERING FOUR BY SEVEN FEET.
Fig. 44.—Jaw of
Columbian Mammoth,
Elephas columbi.
How rich are the strata that compose the earth’s crust only a fossil
hunter can fully realize. Take, for instance, western Kansas, where
the soil beneath our feet is one vast cemetery. I know of a ravine in
Logan County which cuts through four great formations. The lower
levels, of reddish and blue chalk, are filled with the remains of
swimming lizards, with the wonderful Pteranodonts, the most
perfect flying machines ever known, with the toothed bird
Hesperornis, the royal bird of the West, and the fish-bird
Ichthyornis, with fish-like biconcave vertebræ, with fishes small and
great (one form over sixteen feet long), and huge sea-tortoises. Above
are the black shales of the Fort Pierre Cretaceous, thousands of feet
of which are exposed in the bad lands of the upper Missouri. In this
formation the dinosaurs reign supreme. Still higher are the mortar
beds of the Loup Fork Tertiary, where the dominant type changes
from reptiles to mammals. Here, in western Kansas, are found great
numbers of the short-limbed rhinoceros, the large land-turtle,
Testudo orthopygia, several inferior tusked mastodons, the saber-
toothed tiger, the three-toed horse, and a deer only about eighteen
inches high. Higher still, where the grass roots shoot down to feed on
the bones, are the Columbian mammoth, the one-toed horse, like our
species of to-day, a camel like our South American llama, and a bison
far larger than the present species.
The living bison has become almost extinct itself, through the agency
of man. And in the layer of soil which covers all these formations, an
old arrowhead and the crumbling bones of a modern buffalo give an
object lesson in the manner in which these relics of the earlier world
have been preserved. So races of animals, as of men, reach their
highest state of development, retrograde, and give place to other
races, which, living in the same regions, obey the same laws of
progress.
My readers will be pleased, I am sure, to know that just before these
pages go to press I am permitted to tell the story of our last great
hunt in Converse County, Wyoming, during July, August, and
September, 1908, for the largest skull of any known vertebrate, the
great three-horned dinosaur, Triceratops (Fig. 45). Only thirteen
good specimens are known to American museums, 7 of which are in
Yale University Museum, and were collected, I believe, by J. B.
Hatcher. From his field notes Mr. Hatcher has made a map of this
region with crosses to indicate the localities in which skulls have
been found, and 30 are so indicated, but I soon learned that he noted
broken and poor material, as well as the more perfect. With my three
sons I entered the region with enthusiasm on the hunt for one of
these skulls for the British Museum of Natural History.
Fig. 45.—Three-horned Dinosaur,
Triceratops sp.
How wonderful are the works of an Almighty hand! The life that now
is, how small a fraction of the life that has been! Miles of strata,
mountain high, are but the stony sepulchers of the life of the past.
How rapidly has the field expanded which I entered as a pioneer
some forty years ago! In 1867 I knew only five paleontologists—
Agassiz, Lesquereux, Marsh, Cope, and Leidy, with but few followers;
while to-day, Harvard, Princeton, the American, the Carnegie, the
Field, and the National Museums have all built up great collections
of the animals and plants of the past, and the number of publications
on fossil animals has reached an enormous total.
I had the pleasure of attending the meeting of the American
Association for the Advancement of Science that met in the American
Museum in New York at the mid-winter session in 1906. Professor
Osborn introduced me to his splendid Head Preparator, Mr.
Hermann, who has mounted the skeletons of the great
Brontosaurus, Allosaurus, and so many other examples of extinct
animals. Mr. Hermann was requested by the Professor to devote all
his spare time to showing me anything the exhibition and
storerooms contained, prepared or unprepared, and to do all in his
power to make my visit pleasant. I certainly felt at home in that
paradise of ancient animals, many of which I had collected for
science on my own explorations. The magnificent halls in which they
are exhibited are a wonderful tribute paid by the wealth and
intelligence of the citizen of Greater New York to science. How
admirable that Mr. Jesup should use his private fortune as the means
to take from the obscurity of the private dwelling of the late Professor
Cope his great collection, to which I was a contributor for eight years;
and he has placed it under Professor Henry F. Osborn, who with the
assistance of Drs. J. L. Wortman, W. D. Matthew, and others, has
brought order out of chaos and presented in intelligible shape not
only that collection but many others from the fossil fields of the
West.
It is a glorious thought to me that I have lived to see my wildest
dreams come true, that I have seen stately halls rise to be graced with
many of the animals of the past that lived in countless thousands,
and that I have had the pleasure of securing some of the treasures, in
the shape of complete skeletons, which now adorn those halls.
I stood on Columbia Heights that same year of 1906, and my heart
swelled with pride when I looked down on that teeming metropolis
and remembered that I too was a native of the Empire State. Then I
thought of my distant prairie state of Kansas, and gloried in the
thought that the best years of my life had been spent in her ancient
ocean and lake beds, those old cemeteries of creation.
That past life, at least a very small fraction of it, I have sought to
bring before my readers with pen pictures. We have men among us
who can put their conceptions of the ancient inhabitants of land and
sea and air on canvas, and among them are Mr. Charles R. Knight, of
the American Museum, and Mr. Sidney Prentice, of the Carnegie
Museum. Mr. Prentice I knew as a boy, and he has done me the
honor to assure me that my words of counsel have done something at
least toward assisting him to make the choice of following the work
not only of an artist in a paleontological museum, but in portraying
with pencil and brush the ideal pictures of the early denizens of earth
as in life. His success is shown in his restorations of Clidastes. The
results of Mr. Knight’s restorations of many of the extinct animals
brighten my pages, thanks to my friend Professor Henry F. Osborn,
so if I have failed in my pen pictures to take my readers into the
misty past, these brilliant restorations will certainly have the desired
effect.
I cannot hope in this short space to have given more than a passing
glance at the life of a fossil hunter. It has been one of joy to me; I
should not like to have missed making the discoveries I have made,
and I would willingly undergo the same hardships to accomplish the
same results. And if my story does anything to interest people in
fossils, I shall feel that I have not written in vain.
When I requested Professor William K. Gregory of Columbia
University to be the final reader of the manuscript of this book, “The
Life of a Fossil Hunter,” shall I ever forget his kind words? “I hope
you will not feel that you are under any personal obligations
whatever, because this slight service is simply laid upon me by the
necessities of the case, i. e., by the fact that your whole life and work
have placed all paleontologists under lasting obligations to you.”
Surely “my cup runneth over; I have a goodly heritage.” Greater than
their obligations to me, are mine to the men of science who have
described, published, but, above all, have prepared and exhibited the
noble monuments of creative genius which I have been so fortunate
as to discover and make known to the civilized world. My own body
will crumble in dust, my soul return to God who gave it, but the
works of His hands, those animals of other days, will give joy and
pleasure “to generations yet unborn.”
FINIS
INDEX
Adocus, 77
Amphibian, Long-horned, 253
Anderson, A. E., 58
Anseres, Fossil, 160
Aphelops megalodus, 123
Archælurus debilis, 189
Aspidophyllum trilobatum, 19
Ficus, 23
Flamingo, Fossil, 161
Flora, Tertiary, 172
Fossils, Formation of, 258–260
Method of Excavating, 41, 42, 88, 109, 110, 130
Ichthyornis, 269
Inoceramus, 135
Isaac, J. C., 47, 48, 61, 65, 74, 79, 80, 81, 83, 86, 93, 94, 98
Island, Cow, 79, 87, 89, 91, 98
Long, 132, 134