Upload
others
View
19
Download
9
Embed Size (px)
Citation preview
Jeff McLaughlinPrincipal Technical Marketing EngineerJune 19, 2018
CCIE Evolving Technologies Blueprint
IOS XE Programmability for Network Engineers
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
• CCIE Routing/Switching (2004)• Fun Stuff Studied: DLSw+, ATM, ISDN
• CCIE Security (2008)• Fun Stuff Studied: NAC Framework, PIX, VPN 3k concentrator
• JNCIE Service Provider (2014, expired)• CCIE Subject Matter Expert (Programmability/Automation)• Principal TME in Enterprise business unit• Manager of TME team for programmability and SD-Access• http://www.subnetzero.info
Your Host
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Confidential© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Agenda
• CCIE ET Programmability Overview
• Why Programmability
• Structured Data/YANG Models
• NETCONF/RESTCONF
• Config Mgmt Tools
• APIs
• Conclusion
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Programmability Panelists
Fabrizio Maccioni Krishna KothaJeremy Cohoe
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Confidential
CCIE ET Programmability Overview
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
CCIE Evolving Technologies 1.1 BlueprintThis domain, worth 10 percent overall, ensures that all CCIE/CCDE candidates have a clear understanding of important cloud, network programmability, and IoT concepts.
A.2 Network Programmability
A.2.a Describe architectural and operational considerations for a programmable networkA.2.a.i Data models and structures (YANG, JSON and XML)A.2.a.ii Device programmability (gRPC, NETCONF and RESTCONF)A.2.a.iii Controller based network design (policy driven configuration and northbound/ southbound APIs)A.2.a.iv Configuration management tools (agent and agent-less) and version control systems (Git and SVN)
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Confidential
Why Programmability?
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
8
Why automation and programmability?
.
.
.Administrator
Needs to configure
hostname switch1int g0/0
ip address 10.1.1.11/24vlan 100,200,300
hostname switch6int g0/0
ip address 10.1.1.16/24vlan 100,200,300
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
9
. . .
Programmability Reason #1 Do repetitive and tedious tasks more easily
Notepad is the most common automation tool.It’s just a very bad automation tool.
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
10
Programmability Reason #2 Programmatic Control of network devices
52037606 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
if error counters too high:then shutdown interface*
* pseudo-code
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Programmability Reason #3 Interaction between network devices and other systems
NETCONF REST API
DNA Center
party apps
11
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
12
Transactionality
Programmability Reason #4 Stop bad configuration being committed to devices
int g0/0ip address 10.1.1.0/24no shutdown
router bgp 65001 router-id 172.17.1.99bgp log-neighbor-changesneighbor 192.168.1.2 remote-as 40000neighbor 192.168.3.2 remote-as 50000address-family ipv4 unicastneighbor 192.168.1.2 activatenetwork 172.17.1.0 mask 255.255.255.0exit-address-family
CLI
NETCONF
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
13
Operational Simplification
How to find the red user's switch/port?
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
14
Operational Simplification
How to find the red user's switch/port?
# ping 172.16.100.101# show arp | i 172.16.100.101# show mac address-table address 001a.a24d.5141# show cdp neighbor g0/1 detail
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
15
Operational Simplification
How to find the red user's switch/port?
# show mac address-table address 001a.a24d.5141# show cdp neighbor g0/10 detail
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
16
Operational Simplification
How to find the red user's switch/port?
# show mac address-table address 001a.a24d.5141# show cdp neighbor g0/10 detailVlan Mac Address Type Ports---- ----------- -------- -----244 001a.a24d.5141 DYNAMIC Gi0/15
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
17
Operational Simplification
Programmability Reason #5 Automate complex troubleshooting tasks
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Confidential
DEMO TIME
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
User types command into WebexTeams
1Command pulled down by script2
Script sends NETCONF request3 Switch replies via NETCONF with data4
Data posted back to Webex room5
REST
NETCONF
19
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
EEM
User changes device config 1
Change detected by EEM2
Webex posts diff to room3
Catalyst 3850Python script diffs configs and sends diff to Webex4
EEM Triggers on-box Python script320
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Confidential
Structured Data/YANG Models
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
22
Human-Oriented Interface
Machine-Oriented Interface
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Machines using human-oriented interfaces can be highly inefficient!
23
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
24
YANG ModelsCLI
Human Oriented Interface Machine Oriented Interface
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
25
Structured vs Unstructured Data
Name:Age:Phone:
John Smith42+1-415-555-1212
Keys Values
John Smith 42 14155551212
StructuredUn-structured
• His age?• The year he graduated college?• Meaning of life, the universe & everything?
What is this?
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
26
Hierarchical Structured Data (XML-like)
<user1><name>John Smith</name><age>42</age><phone>+1-415-555-1212</phone>
</user1>
<user2><name>Sarah Kim</name><age>27</age><phone>+1-718-555-1212</phone>
</user2>
{{
First User
Second User
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
27
switch1# sh int e1/10Ethernet1/10 is up
Hardware: 1000/10000 Ethernet, address: 0005.73d0.9331 (bia 0005.73d0.9331)Description: To UCS-11MTU 1500 bytes, BW 1000000 Kbit, DLY 10 usec,
reliability 255/255, txload 1/255, rxload 1/255Switchport monitor is off EtherType is 0x8100 Last link flapped 8week(s) 2day(s)Last clearing of "show interface" counters 1d02h30 seconds input rate 944 bits/sec, 118 bytes/sec, 0 packets/sec30 seconds output rate 3110376 bits/sec, 388797 bytes/sec, 5221 packets/sec
Note inconsistent “key” format!
CLI = Unstructured Data
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
28
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip"><addresses><address><config>
<ip>172.26.194.212</ip><prefix-length>24</prefix-length>
</config></address>
</addresses></ipv4>
What we need:Standard, structured way to representconfiguration and operational data.
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
XML vs JSON
29
<interfaces xmlns:=“[…]yang:ietf-interfaces”> <interface>
<name>eth0</name> <type>ethernetCsmacd</type> <location>0</location><enabled>true</enabled><if-index>2</if-index>
</interface></interfaces>
{"ietf-interfaces:interfaces": {
"interface": [{
"name": "eth0”,"type": "ethernetCsmacd”,"location": "0”,"enabled": true, "if-index": 2
}]
}}
NETCONF/RESTCONF RESTCONF
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
30
<interface>Gigabit 1/0</interface><ifaddr>10.0.0.1/24</ifaddr>
Sends
Error!
Expecting
<interface><name>Gigabit 1/0</name><address>10.0.0.1/24</address></interface>
Expecting:
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
31
So why do we need YANG?
<interface>Ethernet 0/0</interface><name>Switch1 to UCS1</name><ipaddr>1.1.1.1/24</ipaddr>
<name>Ethernet 0/0</name><descr>Switch1 to UCS1</descr><ip>1.1.1.1/24</ip>
<ifname>Ethernet 0/0</ifname><ifalias>Switch1 to UCS1</ifalias><ifaddr>1.1.1.1/24</ifaddr>
Question: Which of these is correct?
Answer: They all are!
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
32
YANG Data Models
YANGModel
container ip {list vrf {
leaf rd}
}
Data
vrf redrd 1:1
XMLData
<vrf>red</vrf><rd>1:1</rd>
YANG models do not contain data or XML.YANG models are like templates used to generate consistent XML.
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
33
YANG Data Models
YANGModel
container ip {list vrf {
leaf rd}
}
Data
vrf redrd 1:1 XML
<vrf>red</vrf><rd>1:1</rd>
YANG models can be used as a template for generating structured data in many different formats.
JSON
{“vrf”: “red”“rd”: “1:1”}
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
YANG Configuration Model Example*
34
* Note: YANG model simplified for clarity
<ip><vrf><name>vrf_red</name><rd>65000:1</rd>
</vrf><vrf><name>vrf_green</name><rd>65000:2</rd>
</vrf></ip>
ip vrf vrf_redrd 65001:1
!ip vrf vrf_greenrd 65001:2
!
CLI
XMLYANGcontainer ip {list vrf {description"Configure an IP VPN Routing/Forwardinginstance";
leaf name {type string;
}
leaf rd {description"Specify Route Distinguisher";type rd-type;
}}
}
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
<ip><vrf><name>vrf_red</name><rd>65000:1</rd>
</vrf><vrf><name>vrf_green</name><rd>65000:2</rd>
</vrf></ip>
35
ip vrf vrf_redrd 65001:1
!ip vrf vrf_greenrd 65001:2
!
So why is this:
...better than this?
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
36
ip vrf vrf_redrd 65001:1
!ip vrf vrf_greenrd 65001:2
!
CLI
• Good for human consumption• Unstructured from a machine perspective
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
37
YANG-structured data
• Designed for machine consumption• Directly convertible to/from Python dicts!
<ip><vrf><name>vrf_red</name><rd>65000:1</rd>
</vrf><vrf><name>vrf_green</name><rd>65000:2</rd>
</vrf></ip>
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
38
Where are YANG models?
Models installed on device automatically with IOS-XE.
https://github.com/YangModels/yang/tree/master/vendor/cisco
Also can be downloaded from GitHub.
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
39
Who defines the YANG models?
Vendors Standards Bodies
• Only work on specific vendor devices• Greater feature coverage• Can be OS-unique (IOS-XE, XR, etc.)
• Multi-vendor support• More limited feature coverage• Allow vendor-specific extensions
Actually an "industry forum"
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native"><interface><GigabitEthernet><name>1/0/24</name><description>Configured by NETCONF!</description>
</GigabitEthernet></interface>
</native>
40
Important Point!Cisco’s data models and IETF/OpenConfig data models are just two ways of doing the same thing.
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"><interface><name>GigabitEthernet 1/0/24</name><description>Configured by NETCONF!</description>
</interface></interfaces>
IETF-defined model
Cisco-defined “native” model
Both of these do exactly the same thing!
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native"><interface><GigabitEthernet><name>1/0/24</name><description>Configured by NETCONF!</description>
</GigabitEthernet></interface>
</native>
41
Important Point!Cisco’s data models and IETF/OpenConfig data models are just two ways of doing the same thing.
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"><interface><name>GigabitEthernet 1/0/24</name><description>Configured by NETCONF!</description>
</interface></interfaces>
IETF-defined model
Both of these do exactly the same thing!
switch# show run interface g1/0/24interface GigabitEthernet 1/0/24description Configured by NETCONF!
Cisco-defined “native” model
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
42
Configuration vs. Operational data
# sh run int g0/0
interface GigabitEthernet0/0description Management Interfacevrf forwarding Mgmt-vrfip address 172.26.244.49 255.255.255.0
# sh int g0/0
GigabitEthernet0/0 is up, line protocol upHardware is RP management portDescription: Management Interface
Configuration data tells the device what to do. It is data that you see in a “show run”.
Operational data tells us how a device is operating, from show commands other than “show run”.
We can write configuration data (think “conf t”), and we can read configuration data (think “show run”).
Operational data is read-only.
Some data can be read either as config data or operational data!
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
43
Models and structured data are particularly important for efficiently reading operational data...
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
44
PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process 1 3 31 96 0.00% 0.00% 0.00% 0 Chunk Manager 2 3687 4786 770 0.07% 0.01% 0.00% 0 Load Meter
Challenge: Write a Python script to go through the list of nearly 500 running processes and print the names of only those with runtime of 10 seconds or greater.
Regex hard to understand
Tied directly to table layout
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
45
Regular Expressions
-Stackexchange user
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
46
PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process 1 3 31 96 0.00% 0.00% 0.00% 0 Chunk Manager 2 3687 4786 770 0.07% 0.01% 0.00% 0 Load Meter
Challenge: Write a Python script to go through the list of nearly 500 running processes and print the names of only those with runtime of 10 seconds or greater.
XML easily rendered as Python dict
Intuitive nomenclature
Uses YANG data models
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Confidential
NETCONF/RESTCONF/gRPC
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
48
YANG YANG
XML XML/JSON
SSH HTTP/S
NETCONF RESTCONF
YANG
gPB
HTTP/2
gRPC
Transport
Encoding
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
49
NETCONF protocol stack
CONTENT
OPERATIONS
SECURE TRANSPORT
MESSAGES
XML (based on YANG)
GET, EDIT-CONFIG, ETC
SSH (port 830)
RPC
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
NETCONF Highlights
• Transactional• Either all configuration is applied or nothing• Avoids inconsistent state• Both at Single Device and Network-wide level
• Error Management• OK or error code
• Capability Exchange
• Models Download from a Device
ssh -p 830 [email protected] -s netconf
50
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Main NETCONF Operations
Main Operations CLI Equivalent Description<get> show Retrieve running configuration and device state
information
<get-config> show run Retrieve all or part of specified configurationdatastore
<edit-config> config t + commands Loads all or part of a configuration to the specified configuration datastore
<delete-config> no (delete config) Delete a configuration datastore
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
NETCONF DatastoresTarget of Operations
Running is the only mandatory Datastore
“A Datastore holds a copy of the configuration data that is required to get a device from its initial default state into a desired operational state”
Running running-config
Start-up startup-config
Candidate work place for creating and manipulating configuration data
52
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
NETCONF Error Options
stop-on-error:
Abort the <edit-config> operation on the first error (Default)
continue-on-error:
Continue to process the configuration; record the error
rollback-on-error:
Stop processing <edit-config> and restore configuration to original state
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
54
Enabling NETCONF: 3 Steps
C3850-1#conf tEnter configuration commands, one per line. End with CNTL/Z.C3850-1(config)#aaa new-modelC3850-1(config)#aaa authentication login default localC3850-1(config)#aaa authorization exec default localC3850-1(config)#username admin password cisco
C3850-1(config)#line vty 0 15C3850-1(config-line)#transport input all
C3850-1(config)#netconf-yangC3850-1(config)#
Enable AAA
Enable SSH
Enable NETCONF
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
REST vs RESTCONF: not the same!
REST
APIGET
POST
PUT
DELETE
“A framework for client-server communications”
RESTCONF
“REST-like protocol for accessing YANG models”
55
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
56
RESTCONF protocol stack
CONTENT
OPERATIONS
SECURE TRANSPORT
XML/JSON (based on YANG)
GET, PUT, PATCH, etc.
HTTPS
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
RESTCONF vs NETCONF Operations
RESTCONF As compared to NETCONFGET <get-config>, <get>
POST <edit-config> (operation=“create”)
PUT <edit-config> (operation=“create/replace”)
PATCH <edit-config> (operation=“update”)
DELETE <delete-config> (operation=“delete”)
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
HTTPS Return codes
Return code Details1xx (Informational) Received and understood, please wait….
2xx (Success) received, understood, accepted, and processed successfully
3xx (Redirection) Client must take additional action (URL redirection)
4xx (Client error) Client is at fault
5xx (Server error) Server is at fault
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Enabling RESTCONF
Cat9k-1#conf tEnter configuration commands, one per line. End with CNTL/Z.
Cat9k-1(config)#restconf
Cat9k-1(config)#ip http secure-server
Enable RESTCONFEnable HTTP
server
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
• Google ecosystem with automatic GPB integration
• cross-platform client and server bindings for many languages:C, C++, C#, Go, Java, Node.js, Objective-C, PHP, Python, Ruby
• Feature rich:authentication, bidirectional streaming and flow control, blocking/nonblocking bindings, cancellation and timeouts
• HTTP/2 transport
• Not a standard!
60
gRPC definition“gRPC is an open source RPC (Remote Procedure Call) system
developed at Google”
http://www.grpc.ioGPB (Google Protocol Buffers )
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Confidential
DEMO: YANG/NETCONF
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Confidential
Configuration Management Tools
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Configuration Management Tools
Device
Highlights:
• Declarative model (intent)
• Idempotency
• Agent vs Agent-less Architectures
CMT Server
Desired State (Intent) configuration
Customer Value:
• config automation (medium)
• manages config drift (high)
• audit trail (very high)
Automate Servers, Applications and Networks configurations
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Most Popular Configuration Management ToolsEnterprise Networks
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
CMT Comparison
Agent required? Agentless • Agent-based• Moving to
agentless for network mgmt
Agent-based
Configuration File Playbook Manifest Cookbook
Config Language YAML Custom Custom
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Ansible Playbook Example
Playbook
Play
Task
Module
http://docs.ansible.com/ansible/latest/YAMLSyntax.html
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Ansible Inventory
Define the hosts and group of hosts• hosts by IP or FQDN• groups [<group-name>]• Optional parameters:
• nested groups• range• group variables
pip install
[cat3k]172.26.249.169
[cat9k]172.26.249.15[1:4]
[cat4500-X]10.200.98.82
[ios-xe:children]cat3kcat9kcat4500-X
[ios-xe:vars]ansible_network_os=ios
nested groups
range
group
group variables
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Ansible Playbook Run
To run an playbook
ansible-playbook <playbook>.yaml [options]
Common options:
• -u admin -k -K username and password at runtime
• -l 172.26.249.42 single or list of hosts
• -i ./hosts overrides inventory files
• -v verbose output
• -vvvv connection debug
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
Great word to remember!
Idempotency (from Latin "idem" = "the same thing"
In the context of configuration management tools, means:Only change what needs to be changed
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco Confidential
Conclusion
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
71
New e-Book!
Summarizes all aspects of IOS XE programmability
http://cs.co/IOS-XE-Programmability-Book
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
72
How do I learn Python?
Automate the Boring Stuff with Python, Al SweigartGreat introduction to Python focused on automation. (Not specifically network automation.) Covers Python 3.0 only. Assumes zero knowledge. Read Excel docs, generate PDFs, etc. Highly recommended.
Real Python. http://realpython.comThree-part course. Begins with basics assuming no knowledge. Covers Python 2.7 and 3.0. Parts II and III focus on web development with Python. Covers flask, Django, jinja2 templates. Many resources on the web site for free.
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
73
Cisco DevNet
http://developer.cisco.com
• Learning Labs• Sandboxes• API Documentation• Python, YDK, REST• And More!
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
74
"If a thing is worth doing, it is worth doing badly." - G.K.
Chesterton
© 2017 Cisco and/or its affiliates. All rights reserved. Cisco ConfidentialCisco Public
75
• Identify one problem you can solve with a script• Start small• Copy and modify scripts from DevNet• (developer.cisco.com)
• Go and study for your CCIE!