salt.modules.napalm_network module

NAPALM Network

Basic methods for interaction with the network device through the virtual proxy 'napalm'.

codeauthor:Mircea Ulinic <mircea@cloudflare.com> & Jerome Fleury <jf@cloudflare.com>
maturity:new
depends:napalm
platform:unix

Dependencies

New in version 2016.11.0.

salt.modules.napalm_network.arp(interface='', ipaddr='', macaddr='')

NAPALM returns a list of dictionaries with details of the ARP entries.

Parameters:
  • interface -- interface name to filter on
  • ipaddr -- IP address to filter on
  • macaddr -- MAC address to filter on
Returns:

List of the entries in the ARP table

CLI Example:

salt '*' net.arp
salt '*' net.arp macaddr='5c:5e:ab:da:3c:f0'

Example output:

[
    {
        'interface' : 'MgmtEth0/RSP0/CPU0/0',
        'mac'       : '5c:5e:ab:da:3c:f0',
        'ip'        : '172.17.17.1',
        'age'       : 1454496274.84
    },
    {
        'interface': 'MgmtEth0/RSP0/CPU0/0',
        'mac'       : '66:0e:94:96:e0:ff',
        'ip'        : '172.17.17.2',
        'age'       : 1435641582.49
    }
]
salt.modules.napalm_network.cli(*commands)

Returns a dictionary with the raw output of all commands passed as arguments.

Parameters:commands -- list of commands to be executed on the device
Returns:a dictionary with the mapping between each command and its raw output

CLI Example:

salt '*' net.cli "show version" "show chassis fan"

Example output:

{
    u'show version and haiku':  u'Hostname: re0.edge01.arn01
                                  Model: mx480
                                  Junos: 13.3R6.5
                                    Help me, Obi-Wan
                                    I just saw Episode Two
                                    You're my only hope
                                 ',
    u'show chassis fan' :   u'Item                      Status   RPM     Measurement
                              Top Rear Fan              OK       3840    Spinning at intermediate-speed
                              Bottom Rear Fan           OK       3840    Spinning at intermediate-speed
                              Top Middle Fan            OK       3900    Spinning at intermediate-speed
                              Bottom Middle Fan         OK       3840    Spinning at intermediate-speed
                              Top Front Fan             OK       3810    Spinning at intermediate-speed
                              Bottom Front Fan          OK       3840    Spinning at intermediate-speed
                             '
}
salt.modules.napalm_network.commit()

Commits the configuration changes made on the network device.

CLI Example:

salt '*' net.commit
salt.modules.napalm_network.compare_config()

Returns the difference between the running config and the candidate config.

CLI Example:

salt '*' net.compare_config
salt.modules.napalm_network.config_changed()

Will prompt if the configuration has been changed.

Returns:A tuple with a boolean that specifies if the config was changed on the device. And a string that provides more details of the reason why the configuration was not changed.

CLI Example:

salt '*' net.config_changed
salt.modules.napalm_network.config_control()

Will check if the configuration was changed. If differences found, will try to commit. In case commit unsuccessful, will try to rollback.

Returns:A tuple with a boolean that specifies if the config was changed/commited/rollbacked on the device. And a string that provides more details of the reason why the configuration was not commited properly.

CLI Example:

salt '*' net.config_control
salt.modules.napalm_network.connected()

Specifies if the proxy succeeded to connect to the network device.

CLI Example:

salt '*' net.connected
salt.modules.napalm_network.discard_config()

Discards the changes applied.

CLI Example:

salt '*' net.discard_config
salt.modules.napalm_network.environment()

Returns the environment of the device.

CLI Example:

salt '*' net.environment

Example output:

{
    'fans': {
        'Bottom Rear Fan': {
            'status': True
        },
        'Bottom Middle Fan': {
            'status': True
        },
        'Top Middle Fan': {
            'status': True
        },
        'Bottom Front Fan': {
            'status': True
        },
        'Top Front Fan': {
            'status': True
        },
        'Top Rear Fan': {
            'status': True
        }
    },
    'memory': {
        'available_ram': 16349,
        'used_ram': 4934
    },
    'temperature': {
       'FPC 0 Exhaust A': {
            'is_alert': False,
            'temperature': 35.0,
            'is_critical': False
        }
    },
    'cpu': {
        '1': {
            '%usage': 19.0
        },
        '0': {
            '%usage': 35.0
        }
    }
}
salt.modules.napalm_network.facts()

Returns characteristics of the network device. :return: a dictionary with the following keys:

  • uptime - Uptime of the device in seconds.
  • vendor - Manufacturer of the device.
  • model - Device model.
  • hostname - Hostname of the device
  • fqdn - Fqdn of the device
  • os_version - String with the OS version running on the device.
  • serial_number - Serial number of the device
  • interface_list - List of the interfaces of the device

CLI Example:

salt '*' net.facts

Example output:

{
    'os_version': u'13.3R6.5',
    'uptime': 10117140,
    'interface_list': [
        'lc-0/0/0',
        'pfe-0/0/0',
        'pfh-0/0/0',
        'xe-0/0/0',
        'xe-0/0/1',
        'xe-0/0/2',
        'xe-0/0/3',
        'gr-0/0/10',
        'ip-0/0/10'
    ],
    'vendor': u'Juniper',
    'serial_number': u'JN131356FBFA',
    'model': u'MX480',
    'hostname': u're0.edge05.syd01',
    'fqdn': u're0.edge05.syd01'
}
salt.modules.napalm_network.interfaces()

Returns details of the interfaces on the device.

Returns:Returns a dictionary of dictionaries. The keys for the first dictionary will be the interfaces in the devices.

CLI Example:

salt '*' net.interfaces

Example output:

{
    u'Management1': {
        'is_up': False,
        'is_enabled': False,
        'description': u'',
        'last_flapped': -1,
        'speed': 1000,
        'mac_address': u'dead:beef:dead',
    },
    u'Ethernet1':{
        'is_up': True,
        'is_enabled': True,
        'description': u'foo',
        'last_flapped': 1429978575.1554043,
        'speed': 1000,
        'mac_address': u'beef:dead:beef',
    }
}
salt.modules.napalm_network.ipaddrs()

Returns IP addresses configured on the device.

Returns:A dictionary with the IPv4 and IPv6 addresses of the interfaces. Returns all configured IP addresses on all interfaces as a dictionary of dictionaries. Keys of the main dictionary represent the name of the interface. Values of the main dictionary represent are dictionaries that may consist of two keys 'ipv4' and 'ipv6' (one, both or none) which are themselvs dictionaries witht the IP addresses as keys.

CLI Example:

salt '*' net.ipaddrs

Example output:

{
    u'FastEthernet8': {
        u'ipv4': {
            u'10.66.43.169': {
                'prefix_length': 22
            }
        }
    },
    u'Loopback555': {
        u'ipv4': {
            u'192.168.1.1': {
                'prefix_length': 24
            }
        },
        u'ipv6': {
            u'1::1': {
                'prefix_length': 64
            },
            u'2001:DB8:1::1': {
                'prefix_length': 64
            },
            u'FE80::3': {
                'prefix_length': u'N/A'
            }
        }
    }
}
salt.modules.napalm_network.lldp(interface='')

Returns a detailed view of the LLDP neighbors.

Parameters:interface -- interface name to filter on
Returns:A dictionary with the LLDL neighbors. The keys are the interfaces with LLDP activated on.

CLI Example:

salt '*' net.lldp
salt '*' net.lldp interface='TenGigE0/0/0/8'

Example output:

{
    'TenGigE0/0/0/8': [
        {
            'parent_interface': u'Bundle-Ether8',
            'interface_description': u'TenGigE0/0/0/8',
            'remote_chassis_id': u'8c60.4f69.e96c',
            'remote_system_name': u'switch',
            'remote_port': u'Eth2/2/1',
            'remote_port_description': u'Ethernet2/2/1',
            'remote_system_description': u'Cisco Nexus Operating System (NX-OS) Software 7.1(0)N1(1a)
                  TAC support: http://www.cisco.com/tac
                  Copyright (c) 2002-2015, Cisco Systems, Inc. All rights reserved.',
            'remote_system_capab': u'B, R',
            'remote_system_enable_capab': u'B'
        }
    ]
}
salt.modules.napalm_network.load_config(filename=None, text=None, test=False, commit=True, replace=False)

Populates the candidate configuration. It can be loaded from a file or from a string. If you send both a filename and a string containing the configuration, the file takes precedence.

If you use this method the existing configuration will be merged with the candidate configuration once you commit the changes.

Be aware that by default this method will commit the configuration. If there are no changes, it does not commit and the flag already_configured will be set as True to point this out.

Parameters:
  • filename -- Path to the file containing the desired configuration. By default is None.
  • text -- String containing the desired configuration.
  • test -- Dry run? If set as True, will apply the config, discard and return the changes. Default: False and will commit the changes on the device.
  • commit -- Commit? (default: True) Sometimes it is not needed to commit the config immediately after loading the changes. E.g.: a state loads a couple of parts (add / remove / update) and would not be optimal to commit after each operation. Also, from the CLI when the user needs to apply the similar changes before committing, can specify commit=False and will not discard the config.
  • replace -- Load and replace the configuration. Default: False.
Returns:

a dictionary having the following keys:

  • result (bool): if the config was applied successfully. It is False only in case of failure. In case

there are no changes to be applied and successfully performs all operations it is still True and so will be the already_configured flag (example below) * comment (str): a message for the user * already_configured (bool): flag to check if there were no changes applied * diff (str): returns the config changes applied

CLI Example:

salt '*' net.load_config text='ntp peer 192.168.0.1'
salt '*' net.load_config filename='/absolute/path/to/your/file'
salt '*' net.load_config filename='/absolute/path/to/your/file' test=True
salt '*' net.load_config filename='/absolute/path/to/your/file' commit=False

Example output:

{
    'comment': 'Configuration discarded.',
    'already_configured': False,
    'result': True,
    'diff': '[edit interfaces xe-0/0/5]+   description "Adding a description";'
}
salt.modules.napalm_network.load_template(template_name, template_source=None, template_path=None, test=False, commit=True, replace=False, **template_vars)

Renders a configuration template (Jinja) and loads the result on the device.

By default will commit the changes. To force a dry run, set test=True.

Parameters:
  • template_name -- Identifies the template name.
  • (optional) (template_path) -- Inline config template to be rendered and loaded on the device.
  • (optional) -- Specifies the absolute path to a different directory for the configuration templates. If not specified, by default will use the default templates defined in NAPALM.
  • test -- Dry run? If set to True, will apply the config, discard and return the changes. Default: False and will commit the changes on the device.
  • commit -- Commit? (default: True) Sometimes it is not needed to commit the config immediately after loading the changes. E.g.: a state loads a couple of parts (add / remove / update) and would not be optimal to commit after each operation. Also, from the CLI when the user needs to apply the similar changes before committing, can specify commit=False and will not discard the config.
  • replace -- Load and replace the configuration.
  • template_vars -- Dictionary with the arguments to be used when the template is rendered.
Returns:

a dictionary having the following keys:

  • result (bool): if the config was applied successfully. It is False only in case of failure. In case there are no changes to be applied and successfully performs all operations it is still True and so will be the already_configured flag (example below)
  • comment (str): a message for the user
  • already_configured (bool): flag to check if there were no changes applied
  • diff (str): returns the config changes applied

The template can use variables from the grains, pillar or opts, for example:

{% set router_model = grains.get('model') -%}
{% set router_vendor = grains.get('vendor') -%}
{% set hostname = pillar.get('proxy', {}).get('host') -%}
{% if router_vendor|lower == 'juniper' %}
system {
    host-name {{hostname}};
}
{% endif %}

CLI Example:

salt '*' net.load_template ntp_peers peers=[192.168.0.1]  # uses NAPALM default templates
salt '*' net.load_template set_hostname template_source='system { domain-name {{domain_name}}; }'
domain_name='test.com'
salt '*' net.load_template my_template template_path='/tmp/tpl/' my_param='aaa'  # will commit
salt '*' net.load_template my_template template_path='/tmp/tpl/' my_param='aaa' test=True  # dry run

Example output:

{
    'comment': '',
    'already_configured': False,
    'result': True,
    'diff': '[edit system]+  host-name edge01.bjm01'
}
salt.modules.napalm_network.mac(address='', interface='', vlan=0)

Returns the MAC Address Table on the device.

Parameters:
  • address -- MAC address to filter on
  • interface -- Interface name to filter on
  • vlan -- VLAN identifier
Returns:

A list of dictionaries representing the entries in the MAC Address Table

CLI Example:

salt '*' net.mac
salt '*' net.mac vlan=10

Example output:

[
    {
        'mac'       : '00:1c:58:29:4a:71',
        'interface' : 'xe-3/0/2',
        'static'    : False,
        'active'    : True,
        'moves'     : 1,
        'vlan'      : 10,
        'last_move' : 1454417742.58
    },
    {
        'mac'       : '8c:60:4f:58:e1:c1',
        'interface' : 'xe-1/0/1',
        'static'    : False,
        'active'    : True,
        'moves'     : 2,
        'vlan'      : 42,
        'last_move' : 1453191948.11
    }
]
salt.modules.napalm_network.ping(destination, source='', ttl=0, timeout=0, size=0, count=0)

Executes a ping on the network device and returns a dictionary as a result.

Parameters:
  • destination -- Hostname or IP address of remote host
  • source -- Source address of echo request
  • ttl -- IP time-to-live value (IPv6 hop-limit value) (1..255 hops)
  • timeout -- Maximum wait time after sending final packet (seconds)
  • size -- Size of request packets (0..65468 bytes)
  • count -- Number of ping requests to send (1..2000000000 packets)

CLI Example:

salt '*' net.ping 8.8.8.8
salt '*' net.ping 8.8.8.8 ttl=3 size=65468
salt '*' net.ping 8.8.8.8 source=127.0.0.1 timeout=1 count=100
salt.modules.napalm_network.rollback()

Rollbacks the configuration.

CLI Example:

salt '*' net.rollback
salt.modules.napalm_network.traceroute(destination, source='', ttl=0, timeout=0)

Calls the method traceroute from the NAPALM driver object and returns a dictionary with the result of the traceroute command executed on the device.

Parameters:
  • destination -- Hostname or address of remote host
  • source -- Source address to use in outgoing traceroute packets
  • ttl -- IP maximum time-to-live value (or IPv6 maximum hop-limit value)
  • timeout -- Number of seconds to wait for response (seconds)

CLI Example:

salt '*' net.traceroute 8.8.8.8
salt '*' net.traceroute 8.8.8.8 source=127.0.0.1 ttl=5 timeout=1

Docs for previous releases are available on readthedocs.org.

Latest Salt release: 2016.11.0

Table Of Contents

Previous topic

salt.modules.napalm_bgp module

Next topic

salt.modules.napalm_ntp module