Arista eAPI Driver Overview
The Arista eAPI is a REST api that allows commands to be executed on the device. The caller can choose to return the results in ‘plain text’ or as JSON data (ie “attribute = value” format)
Executing API commands is implemented in self._run_commands()
You can execute any “show” command, or any “config” command in this way.
We implement get_my_basic_info() and get_my_client_data() by running various ‘show’ commands via the REST API.
Commands are execute are:
get_my_basic_info()
The commands below are returned in JSON format, and parsed as needed. See around line 91.
show version # get various system information.
show vlan
show interfaces # get the interfaces on the device, and their settings.
show interfaces switchport # get the layer-2 configuration of interfaces (vlans).
show interfaces transceiver properties # get optical transceiver info.
show port-channel # info any any port-channels that may be configured.
show vrf # any VRFs that may be configured.
get_my_client_data()
The commands below are returned in JSON format, and parsed as needed. See around line 345.
show mac address-table # the layer-2 switching table
show arp vrf all # IP-to-Mac info on all VRFs defined.
show ipv6 neighbors vrf all # IPv6-to-Mac info on all VRFs defined.
show lldp neighbors detail # neighbor device info.
Making Changes
To make changes, we send the following “config” commands via the eAPI.
Commands are wrapped with the following
configure terminal
<commands sent>
end
Enable/Disable Interface:
interfaces {name}
(no) shutdown
Enable/Disable Interface PoE:
Not supported yet! (no test device :-) )
Set Interface Description:
interface {name}
description <new description>
Clear Interface Description:
interfaces {name}
no description
Change Interface Vlan - access mode:
interface {name}
switchport access vlan {new_vlan_id}
Change Interface Vlan - trunk mode:
interface name
switchport trunk native vlan {new_vlan_id}
Set Untagged and 802.1q-tagged vlans
If interface is set in “access” mode:
interface {name}
switchport mode access
switchport access vlan {untagged_vlan}
no switchport trunk native vlan # not needed, added for config clarity!
no switchport trunk allowed vlan
or if interface is set to “802.1q-tagged” mode:
interface {name}
switchport mode trunk
no switchport access vlan # not needed, added for config clarity!
switchport trunk native vlan {untagged_vlan}
If “Allow All is set, we added
switchport trunk allow vlan all
Else we add the list of allowed vlans:
switchport trunk allowed vlan none # clear all tagged vlans
switch trunk allowed vlan add x, y, z # add vlans allowed.
VLAN Edit/Delete
To create a new vlan:
vlan {vlan_id}
name {vlan_name}
To rename a vlan:
vlan {vlan_id}
'name {vlan_name}' or 'no name'
To delete a vlan:
no vlans {vlan_id}