Está en la página 1de 59

Universidad Politécnica Salesiana

Juan Fernando Cordova Arevalo


jcordovaa@est.ups.edu.ec

Módulo 1

VIDEO 1
Data Formats: Understanding and
using JSON, XML and YAML

Todo el código y los ejemplos de esta lección se encuentran en el:

netprog_basics/programming_fundamentals/data_formatsdirectorio

Clone y acceda a él con los siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics


cd netprog_basics/programming_fundamentals/data_formats
Common Data Formats in
Programming

JSON
XML

YAML

Demystify XML
cat address_list.xml

cat GigabitEthernet2.xml

Breakdown JSON
JSON - JavaScript Object Notation
cat address_list.json

cat GigabitEthernet2.json
Simplify YAML
YAML - “YAML Ain’t Markup Language”

cat address_list.yaml
cat GigabitEthernet2.yaml

VIDEO 2
APIs are Everywhere... but what are
they?

VIDEO3
REST APIs Part 1: HTTP is for more
than Web Browsing
Esta lección no tiene requisitos de:

configuración.netprog_basics/programming_fundamentals/rest_part_1directorio

Clone y acceda a él con los siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics


cd netprog_basics/programming_fundamentals/rest_part_1

What is REST?

A Look Under the Hood at


REST?
Some REST Examples
The Internet Chuck Norris Database

curl https://api.icndb.com/jokes/random

curl https://api.icndb.com/jokes/random?limitTo=nerdy

Network Programmability with RESTCONF


The Request:

DevNet$ curl -vk \


-u root:D_Vay\!_10\& \
-H 'accept: application/yang-data+json' \
https://ios-xe-mgmt.cisco.com:9443/restconf/data/ietf-interfaces:interfaces/
interface=GigabitEthernet2
VIDEO 4
REST APIs Part 2: Making REST API
Calls with Postman
Sending an API Request

Todo el código y los ejemplos de esta lección se encuentran en el:

netprog_basics/programming_fundamentals/rest_part_2directorio.

Clone y acceda a él con los siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics


cd netprog_basics/programming_fundamentals/rest_part_2

Descargamos Postman en Ubuntu


link:
https://linuxize.com/post/how-to-install-postman-on-ubuntu-18-04/

Comando para la instalación:


sudo snap install postman
postman 6.7.1 from 'postman-inc' installed
Post

https://{{apic}}/api/v1/ticket

body:
{
"username": "{{username}}",
"password": "{{password}}"
}

Test:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("token",jsonData.response.serviceTicket);

VIDEO 5
Python Part 1: Python Language
and Script Basics

Why Python for Network Engineers


Todo el código y los ejemplos de esta lección se encuentran en el:

netprog_basics/programming_fundamentals/python_part_1directorio.

Clone y acceda a él con los siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics


cd netprog_basics/programming_fundamentals/python_part_1

EXAMPLE 1
cat example1.py
python2.7 example1.py 56

EXAMPLE 2
cat example2.py
python3.5 example2.py
cat example2.log

EXAMPLE 3
cat example3.py
python3.5 example3.py
VIDEO 6
Python Part 2: Working with
Libraries and Virtual Environments

Python Libraries (Modules, Applications, etc)

Todo el código y los ejemplos de esta lección se encuentran en el:

netprog_basics/programming_fundamentals/python_part_2directorio.

Clone y acceda a él con los siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics


cd netprog_basics/programming_fundamentals/python_part_2

Instalar un paquete
pip install package

Upgrade un paquete
pip install --upgrade package

Desinstalar un paquete
pip uninstall package

Ver todo el paquete instalado


Pip freeze

Instalar requeriments.txt
pip install -r requeriments.txt

Configurar un entorno virtual

Instalar la libreria de entorno virtual.


pip install virtualenv
Create the Virtual Environment
virtualenv name
Especificar la version de python
virtualenv name --python=python3.7

Activar el entorno virtual.


source name /bin/activate*
Desactivar entorno virtual.
deactivate

apt-get install pip*

apt install python-pip

pip install virtualenv


virtualenv venv

virtualenv venv2 --python=python3.5

source venv/bin/activate
cd netprog_basics/programming_fundamentals/python_part_2

python3.5

>>> from pprint import pprint

>>> from common_vars import *

>>> print (books)

>>> pprint(books)

Detalles de acceso sobre Python 3.7 con sys.


python3.7 -i common_vars.py "CLI Arg 1" "CLI Arg 2"

>>> import sys

>>> sys.argv[1]

>>> sys.argv[2]

>>> sys.exit("Error Occurred")

Error Occurred
Interactuar con archivos, rutas y entornos con os

• Acceder y manipular directorios y archivos

• Nota: la apertura de archivos se puede hacer

open(filename)

Acceder y manipular variables de entorno

os.environ [var_name]
python3.5

>>> import os

>>> os.getcwd()

>>> os.chdir("../")

>>> os.getcwd()

>>> os.environ["USER"]

>>> os.environ["VAR_FROM_PYTHON"]

>>> os.environ["VAR_FROM_PYTHON"] = "Set from Python"


>>> os.environ["VAR_FROM_PYTHON"]

Crea, formatea y manipula fechas y horas

>>> import datetime

>>> right_now = datetime.datetime.now()

>>> four_weeks_from_now = right_now + datetime.timedelta(weeks=4)

>>> date_display_format = "%I:%m %p on %B %w, %Y"

>>> right_now.strftime(date_display_format)

>>> four_weeks_from_now.strftime(date_display_format)

virtualenv jokes --python=python3.5


pip install pyjokes

pyjokes

pyjoke

VIDEO 7
Python Part 3: Useful Python
Libraries for Network Engineers

Libraries to Work with Data


Todo el código y los ejemplos de esta lección se encuentran en el

netprog_basics/programming_fundamentals/python_part_3directorio.

Clone y acceda a él con los siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics

cd netprog_basics/programming_fundamentals/python_part_3

sudo pip install xmltodict

sudo pip install PyYAML


Treat XML like Python Dictionaries with xmltodict

python

import xmltodict

from pprint import pprint

xml_example = open("xml_example.xml").read()

pprint(xml_example)

xml_dict = xmltodict.parse(xml_example)

int_name = xml_dict["interface"]["name"]

int_name

xmltodict.unparse(xml_dict).
To JSON and back again with json

python

import json

from pprint import pprint

json_example = open("json_example.json").read()

pprint(json_example)

json_python = json.loads(json_example)

int_name = json_python["ietf-interfaces:interface"]["name"]

int_name

json.dumps(json_python)
YAML? Yep, Python Can Do That Too!
python

import yaml

from pprint import pprint

yml_example = open("yaml_example.yaml").read()

pprint(yml_example)

yaml_python = yaml.load(yml_example)

int_name = yaml_python["ietf-interfaces:interface"]["name"]

int_name

yaml.dump(yaml_python)

Import Spreadsheets and Data with csv


python

import csv

import pprint

csv_example = open("csv_example.csv").read()

csv_example

csv_example = open("csv_example.csv")

csv_python = csv.reader(csv_example)
for row in csv_python:

print("{} is in {} and has IP {}".format(row[0], row[2], row[1]))

Access Different APIs Easily


pip install requests

pip install ncclient


pip install netmiko
python
import requests

from pprint import pprint

router = {"ip": "10.10.20.48",

"port": "443",

"user": "developer",

"pass": "C1sco12345"}

headers = {"Accept": "application/yang-data+json"}

u = "https://{}:{}/restconf/data/interfaces/interface=GigabitEthernet1"

u = u.format(router["ip"], router["port"])

print(u)

r = requests.get(u,

headers = headers,

auth=(router["user"], router["pass"]),

verify=False)

from ncclient import manager

from pprint import pprint


import xmltodict

router = {"ip": "10.10.20.48",

"port": 830,

"user": "developer",

"pass": "C1sco12345"}

netconf_filter = """

<filter>

<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">

<interface>

<name>GigabitEthernet1</name>

</interface>

</interfaces>

</filter>

"""

m = manager.connect(host=router["ip"],

port=router["port"],

username=router["user"],

password=router["pass"],

hostkey_verify=False)

interface_netconf = m.get_config("running", netconf_filter)

interface_python = xmltodict.parse(interface_netconf.xml)["rpc-reply"]["data"]

pprint(interface_python["interfaces"]["interface"]["name"]["#text"])
Para cuando CLI es la única opción - netmiko
● Si no hay otra API disponible ...
● Se basa en la biblioteca paramiko para Conectividad SSH
● Soporte para una variedad de sistemas operativos y dispositivos de red
de proveedores
● Enviar y recibir texto claro
● El posprocesamiento de datos será clave

from netmiko import ConnectHandler

from pprint import pprint

router = {"device_type": "cisco_ios",

"host": "10.10.20.48",
"user": "developer",

"pass": "C1sco12345"}

net_connect = ConnectHandler(ip=router["host"],

username=router["user"],

password=router["pass"],

device_type=router["device_type"])

interface_cli = net_connect.send_command("show run int Gig1")

pprint(interface_cli)

MÓDULO 3
VIDEO 1
Getting the “YANG” of it with
Standard Data Models

Todo el código y los ejemplos de esta lección se encuentran en el:

netprog_basics/network_device_apis/yangdirectorio.

Clone y acceda a él con los siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics

cd netprog_basics/network_device_apis/yang

The Network is No Longer Isolated


python example1.py
Instalación de pyang
sudo apt-get install python-pip
sudo -H pip install pip==9.0.3

sudo -H pip install pyang

pip install pyang

whereis pyang

pyang -f tree ietf-interfaces.yang


VIDEO 2
Goodbye SNMP <hello> NETCONF!
Todo el código y los ejemplos de esta lección se encuentran en el:

netprog_basics/network_device_apis/netconfdirectorio. Clone y acceda a él con los

siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics

cd netprog_basics/network_device_apis/netconf

cat device_info.py
cat example1.py

python example1.py
cat example2.py
python example2.py

cat example3.py
python -i example3.py

VIDEO 3
Learn to CRUD with GET, POST
and DELETE using RESTCONF
Todo el código y los ejemplos de esta lección se encuentran en el:

netprog_basics/network_device_apis/restconfdirectorio. Clone y acceda a él con los

siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics

cd netprog_basics/network_device_apis/restconf

https://{{host}}:{{port}}/restconf/data/netconf-state/capabilities
https://{{host}}:{{port}}/restconf/data/ietf-interfaces:interfaces/interface=GigabitEthernet2
VIDEO 4-5
NX-API Part 1: Get Started with the
Native Nexus API
Todo el código y los ejemplos de esta lección se encuentran en el:

netprog_basics/network_device_apis/nxapidirectorio.

Clone y acceda a él con los siguientes comandos:

git clone https://github.com/CiscoDevNet/netprog_basics

cd netprog_basics/network_device_apis/nxapi

apt-get install gcc-multilib

También podría gustarte