17
1 EOS APIs Andrei Dvornic [email protected] My network deploys itselfHow about yours?

EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

1

EOS APIs Andrei Dvornic

[email protected]

My network deploys itself…

How about yours?

Page 2: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

2

EOS fundamentals

§  Standard Linux kernel

§  Unique multi-process state sharing architecture that separates networking state from the processing itself

§  ExtensibleOS

Linux Kernel

Data Plane

Page 3: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

3

My switch is a Linux server!

Arista#bash

Arista Networks EOS shell

[admin@localhost ~]$ uname -rpo

2.6.32.28.Ar-856351.EOS4102 x86_64 GNU/Linux

Page 4: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

4

EOS built-in extensibility

§  /mnt/flash/rc.eos §  executed during the first phase of EOS boot process

§  CLI Scheduler

(config)# #  schedule  myscript  interval  60  max-­‐log-­‐files  3  command  /mnt/flash/myScript  

§  Event Manager (config)# event-handler mydaemon

(config-event-handler)# action bash /usr/bin/immortalize --daemonize /mnt/flash/myDaemon

(config-event-handler)# trigger onBoot

§  Process manager (config)# daemon MYDAEMON

(config-daemon-MYDAEMON)# command /mnt/flash/myDaemon

 

Page 5: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

5

XMPP

 

vEOS-L2#xmpp send veos-l1 command show version message from user: [email protected] -------------------------------------------------- Arista vEOS Hardware version: Serial number: System MAC address: 0800.27f5.b860 Software image version: 4.13.0-1672898.4133F.1 (engineering build) Architecture: i386 Internal build version: 4.13.0-1672898.4133F.1 Internal build ID: 607a8116-2de1-4def-8ab9-9cccbc9da7e9 Uptime: 4 hours and 16 minutes Total memory: 2033864 kB Free memory: 197240 kB

Page 6: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

6

Command API

 

Nginx  

HTTP request

HTTP response

JSON EOS

Page 7: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

7

Command API

 

localhost(config)#  management  api  http-­‐commands    localhost(config-­‐mgmt-­‐api-­‐http-­‐cmds)#  no  shutdown  

     localhost#  show  management  api  http-­‐commands  Enabled:                Yes  HTTPS  server:      running,  set  to  use  port  443  HTTP  server:        shutdown,  set  to  use  port  80  ...  

Python example (more on GitHub/EOS Central)

from  jsonrpclib  import  Server  switch  =  Server(  ‘https://username:passw0rd@myswitch/command-­‐api’  )    response  =  switch.runCmds(  1,  [  ‘show  version’  ]  )  print  ‘The  system  MAC  addess  is  %s’  %  \                response[  0  ][  ‘systemMacAddress’  ]  print  ‘Switch  has  %d  bytes  of  memory  free!’  %  \              response[  0  ][  ‘memFree’  ]

Page 8: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

8

pyeapi

import pyeapi

pyeapi.connect_to('veos01')

vlans = node.api('vlans')

vlans.getall()

{'1': {'state': 'active', 'name': 'default', 'vlan_id': 1, 'trunk_groups': []},

'10': {'state': 'active', 'name': 'VLAN0010', 'vlan_id':

10, 'trunk_groups':

[]}}

vlans.create(100)

vlans.set_name(100, 'foo')

eAPI  

pyeapi  

eapish   Ansible  

Page 9: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

9

eapish – eAPI from bash

$ eapish show version --hosts veos01

$ eapish show version, show hostname --hosts veos01

$ eapish show version --hosts veos01,veos02,veos03

$ eapish vlan 100, name TEST_VLAN --hosts veos01,veos02,veos03 --config

eAPI  

eapish   Ansible  

pyeapi  

Page 10: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

10

Arista role for Ansible

$ ansible-playbook add_vlan.yml PLAY [example] ****************************************************************

TASK: [Configure EOS VLAN resources] ******************************************

ok: [s7152] => (item={'name': 'TEST_VLAN_100', 'vlanid': 100})

PLAY RECAP ********************************************************************

s7152 : ok=1 changed=0 unreachable=0 failed=0

eAPI  

eapish   Ansible  

pyeapi  

Page 11: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

11

What else?

eAPI  

eapish   Ansible   Puppet  

pyeapi   rbeapi   telemetry  

Splunk   Log  insight  

Page 12: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

12

Reactive eAPI

Nginx  react via eAPI

stream data

EOS

VM Google Protocol Buffers

Page 13: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

13

Reactive eAPI

Nginx  react via eAPI

stream data

EOS

VM Google Protocol Buffers

Page 14: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

14

Sim API

 

Nginx      

HTTP request

HTTP response

JSON

SimAPI  EOS

{ "cmds" : { "show my version": { "result" : { "version" : 1 } “delay” : 3 }, "show port-channel detail": { "plugin" : "show_port_channel_detail", …

Page 15: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

15

EOS SDK - Unleash the full power of EOS

Linux Kernel

Data Plane

Page 16: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

16

Automating deployment

Zero Touch Provisioning -  Switch is plugged in and connected -  Because it doesn’t have a startup-config yet, will enter ZTP mode:

1.  DHCP query is sent on all interfaces with a link 2.  the server returns an IP address (to-be-configured on the

receiving interface), along with the address of the config/bootstrap script (DHCP - option 66,67)

3.  switch configures IP address and retrieves config/bootstrap script

4.  switch applies config/runs bootstrap script 5.  switch reboots

ZTP  Server  APIs  enables  extensible  node  provisioning      

Page 17: EOS APIs - Meetupfiles.meetup.com/3747522/EOS.pdf · 3 My switch is a Linux server! Arista#bash Arista Networks EOS shell [admin@localhost ~]$ uname -rpo 2.6.32.28.Ar-856351.EOS4102

17

QUESTIONS?