Supported Devices¶
General support matrix¶
_ EOS JunOS IOS-XR FortiOS NXOS IOS Pluribus PANOS MikroTik VyOS Module Name napalm-eos napalm-junos napalm-iosxr napalm-fortios napalm-nxos napalm-ios napalm-pluribus napalm-panos napalm-ros napalm-vyos Driver Name eos junos iosxr fortios nxos ios pluribus panos ros vyos Structured data Yes Yes No No Yes No No Yes Yes Yes Minimum version 4.15.0F 12.1 5.1.0 5.2.0 6.1 [1] 12.4(20)T N/A 7.0 3.30 1.1.6 Backend library pyeapi junos-eznc pyIOSXR pyFG pycsco netmiko pyPluribus netmiko, pan-python librouteros netmiko Caveats EOS FortiOS NXOS IOS PANOS VYOS
| [1] | NX-API support on the Nexus 5k, 6k and 7k families was introduced in version 7.2 |
Warning
Please, make sure you understand the caveats for your particular platforms before using the library.
Configuration support matrix¶
| _ | EOS | JunOS | IOS-XR | FortiOS | NXOS | IOS | Pluribus | PANOS | MikroTik | VyOS |
|---|---|---|---|---|---|---|---|---|---|---|
| Config. replace | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | No | Yes |
| Config. merge | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | No | Yes |
| Compare config | Yes | Yes | Yes [2] | Yes [2] | Yes [5] | Yes | No | Yes | No | Yes |
| Atomic Changes | Yes | Yes | Yes | No [3] | Yes/No [6] | Yes | Yes | Yes/No [6] | No | Yes |
| Rollback | Yes [3] | Yes | Yes | Yes | Yes/No [6] | Yes | No | Yes | No | Yes |
| [2] | (1, 2) Hand-crafted by the API as the device doesn’t support the feature. |
| [3] | (1, 2) Not supported but emulated. Check caveats. |
| [4] | Check the caveats, this is a dangerous operation in this device. |
| [5] | For merges, the diff is simply the merge config itself. See caveats. |
| [6] | (1, 2, 3) No for merges. See caveats. |
Warning
Before building a workflow to deploy configuration it is important you understand what the table above means; what are atomic changes and which devices support it, what does replacing or merging configuration mean, etc. The key to success is to test your workflow and to try to break things on a lab first.
Getters support matrix¶
Note
The following table is built automatically. Everytime there is a release of a supported driver a built is triggered. The result of the tests are aggreggated on the following table.
| EOS | FORTIOS | IOS | IOSXR | JUNOS | NXOS | PANOS | PLURIBUS | ROS | VYOS | |
|---|---|---|---|---|---|---|---|---|---|---|
| connection_tests | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} |
| get_arp_table | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| get_bgp_config | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| get_bgp_neighbors | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| get_bgp_neighbors_detail | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| get_config | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| get_environment | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| get_facts | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| get_firewall_policies | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| get_interfaces | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| get_interfaces_counters | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| get_interfaces_ip | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| get_lldp_neighbors | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| get_lldp_neighbors_detail | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
| get_mac_address_table | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
| get_network_instances | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| get_ntp_peers | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| get_ntp_servers | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ |
| get_ntp_stats | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ |
| get_optics | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| get_probes_config | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| get_probes_results | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| get_route_to | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| get_snmp_information | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| get_users | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| is_alive | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ping | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| post_connection_tests | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} |
| pre_connection_tests | {} | {} | {} | {} | {} | {} | {} | {} | {} | {} |
| traceroute | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
- ✅ - supported
- ❌ - not supported
- ☠ - broken
Other methods¶
| _ | EOS | JunOS | IOS-XR | FortiOS | NXOS | IOS | Pluribus | PANOS | ROS | VyOS |
|---|---|---|---|---|---|---|---|---|---|---|
| load_template | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| ping | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ |
| traceroute | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
Available configuration templates¶
set_hostname(JunOS, IOS-XR, IOS, PANOS) - Configures the hostname of the device.set_ntp_peers(JunOS, IOS-XR, EOS, NXOS, IOS) - Configures NTP peers of the device.delete_ntp_peers(JunOS, IOS-XR, EOS, NXOS, IOS): Removes NTP peers form device’s configuration.set_probes(JunOS, IOS-XR): Configures RPM/SLA probes.schedule_probes(IOS-XR): On Cisco devices, after defining the SLA probes, it is mandatory to schedule them. Defined also for JunOS as empty template, for consistency reasons.delete_probes(JunOS, IOS-XR): Removes RPM/SLA probes.
Caveats¶
Optional arguments¶
NAPALM supports passing certain optional arguments to some drivers. To do that you have to pass a dictionary via the
optional_args parameter when creating the object:
>>> from napalm import get_network_driver
>>> driver = get_network_driver('eos')
>>> optional_args = {'my_optional_arg1': 'my_value1', 'my_optional_arg2': 'my_value2'}
>>> device = driver('192.168.76.10', 'dbarroso', 'this_is_not_a_secure_password', optional_args=optional_args)
>>> device.open()
List of supported optional arguments¶
fortios_vdom(fortios) - VDOM to connect to.port(eos, iosxr, junos, ios, nxos, ros, vyos) - Allows you to specify a port other than the default.config_lock(iosxr, junos) - Lock the config during open() (default:False).dest_file_system(ios) - Destination file system for SCP transfers (default:flash:).auto_rollback_on_error(ios) - Disable automatic rollback (certain versions of IOS support configure replace, but not rollback on error) (default:True).global_delay_factor(ios, vyos) - Allow for additional delay in command execution (default:1).transport(eos, ios, nxos) - Protocol to connect with (see The transport argument for more information).enable_password(eos) - Password required to enter privileged exec (enable) (default:'').secret(ios) - Password required to enter privileged exec (enable) (default:'').ssh_strict(iosxr, ios, panos, vyos) - Automatically reject unknown SSH host keys (default:False, which means unknown SSH host keys will be accepted).allow_agent(ios, iosxr, panos, vyos) - Paramiko argument, enable connecting to the SSH agent (default:False).use_keys(iosxr, ios, panos, vyos) - Paramiko argument, enable searching for discoverable private key files in~/.ssh/(default:False).key_file(junos, vyos, ios, iosxr, vyos) - Path to a private key file. (default:False).api_key(panos) - Allow to specify the API key instead of username/password (default:'').ssh_config_file(junos, ios, iosxr, panos, vyos) - File name of OpenSSH configuration file.alt_host_keys(ios, iosxr, panos, vyos) - IfTrue, host keys will be loaded from the file specified inalt_key_file.alt_key_file(ios, iosxr, panos, vyos) - SSH host key file to use (ifalt_host_keysisTrue).keepalive(junos, iosxr, ios) - SSH keepalive interval, in seconds (default:30seconds).ignore_warning(junos) - Allows to set ignore_warning when loading configuration to avoid exceptions via junos-pyez. (default:False).
The transport argument¶
Certain drivers support providing an alternate transport in the optional_args, overriding the default protocol to connect with. Allowed transports are therefore device/library dependant:
| _ | EOS | NXOS | IOS |
|---|---|---|---|
| Default | https |
https |
ssh |
| Supported | http, https |
http, https |
telnet, ssh |
Adding optional arguments to NAPALM drivers¶
If you are a developer and want to add an optional argument to a driver, please, follow this pattern when naming the
argument; $driver_name-$usage if the argument applies only to a particular driver. For example, the optional
argument fortios_vdom is used only by the FortiOS driver to select a particular vdom. Otherwise, just name it
$driver_name-$usage. For example the port optional argument.