# salt.modules.napalm_network

## NAPALM Network

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

codeauthor:

  Mircea Ulinic <ping@mirceaulinic.net> & Jerome Fleury <jf@cloudflare.com>

maturity:

  new

depends:

  napalm

platform:

  unix

### Dependencies

- `napalm proxy minion`

New in version 2016.11.0.

Changed in version 2017.7.0.

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

  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.blockreplace(marker_start, marker_end, content='', append_if_not_found=False, prepend_if_not_found=False, show_changes=True, append_newline=False, source='running', path=None, test=False, commit=True, debug=False, replace=True)

  New in version 2019.2.0.

  Replace content of the configuration source, delimited by the line markers.

  A block of content delimited by comments can help you manage several lines without worrying about old entries removal.

  marker_start

    The line content identifying a line as the start of the content block. Note that the whole line containing this marker will be considered, so whitespace or extra content before or after the marker is included in final output.

  marker_end

    The line content identifying a line as the end of the content block. Note that the whole line containing this marker will be considered, so whitespace or extra content before or after the marker is included in final output.

  content

    The content to be used between the two lines identified by `marker_start` and `marker_stop`.

  append_if_not_found: `False`

    If markers are not found and set to True then, the markers and content will be appended to the file.

  prepend_if_not_found: `False`

    If markers are not found and set to True then, the markers and content will be prepended to the file.

  append_newline: `False`

    Controls whether or not a newline is appended to the content block. If the value of this argument is `True` then a newline will be added to the content block. If it is `False`, then a newline will not be added to the content block. If it is `None` then a newline will only be added to the content block if it does not already end in a newline.

  show_changes: `True`

    Controls how changes are presented. If `True`, this function will return the of the changes made. If `False`, then it will return a boolean (`True` if any changes were made, otherwise False).

  source: `running`

    The configuration source. Choose from: `running`, `candidate`, or `startup`. Default: `running`.

  path: `None`

    Save the temporary configuration to a specific path, then read from there. This argument is optional, can be used when you prefers a particular location of the temporary file.

  test: `False`

    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: `True`

    Commit the configuration changes? Default: `True`.

  debug: `False`

    Debug mode. Will insert a new key in the output dictionary, as `loaded_config` containing the raw configuration loaded on the device.

  replace: `True`

    Load and replace the configuration. Default: `True`.

  CLI Example:

      salt '*' net.blockreplace 'ntp' 'interface' ''

salt.modules.napalm_network.cancel_commit(jid)

  New in version 2019.2.0.

  Cancel a commit scheduled to be executed via the `commit_in` and `commit_at` arguments from the `net.load_template` or `net.load_config` execution functions. The commit ID is displayed when the commit is scheduled via the functions named above.

  CLI Example:

      salt '*' net.cancel_commit 20180726083540640360

salt.modules.napalm_network.cli(*commands, **kwargs)

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

  commands

    List of commands to be executed on the device.

  textfsm_parse: `False`

    Try parsing the outputs using the TextFSM templates.

    New in version 2018.3.0.

    Note

    This option can be also specified in the minion configuration file or pillar as `napalm_cli_textfsm_parse`.

  textfsm_path

    The path where the TextFSM templates can be found. This option implies the usage of the TextFSM index file. `textfsm_path` can be either absolute path on the server, either specified using the following URL mschemes: `file://`, `salt://`, `http://`, `https://`, `ftp://`, `s3://`, `swift://`.

    New in version 2018.3.0.

    Note

    This needs to be a directory with a flat structure, having an index file (whose name can be specified using the `index_file` option) and a number of TextFSM templates.

    Note

    This option can be also specified in the minion configuration file or pillar as `textfsm_path`.

  textfsm_template

    The path to a certain the TextFSM template. This can be specified using the absolute path to the file, or using one of the following URL schemes:

    - `salt://`, to fetch the template from the Salt fileserver.

    - `http://` or `https://`

    - `ftp://`

    - `s3://`

    - `swift://`

    New in version 2018.3.0.

  textfsm_template_dict

    A dictionary with the mapping between a command and the corresponding TextFSM path to use to extract the data. The TextFSM paths can be specified as in `textfsm_template`.

    New in version 2018.3.0.

    Note

    This option can be also specified in the minion configuration file or pillar as `napalm_cli_textfsm_template_dict`.

  platform_grain_name: `os`

    The name of the grain used to identify the platform name in the TextFSM index file. Default: `os`.

    New in version 2018.3.0.

    Note

    This option can be also specified in the minion configuration file or pillar as `textfsm_platform_grain`.

  platform_column_name: `Platform`

    The column name used to identify the platform, exactly as specified in the TextFSM index file. Default: `Platform`.

    New in version 2018.3.0.

    Note

    This is field is case sensitive, make sure to assign the correct value to this option, exactly as defined in the index file.

    Note

    This option can be also specified in the minion configuration file or pillar as `textfsm_platform_column_name`.

  index_file: `index`

    The name of the TextFSM index file, under the `textfsm_path`. Default: `index`.

    New in version 2018.3.0.

    Note

    This option can be also specified in the minion configuration file or pillar as `textfsm_index_file`.

  saltenv: `base`

    Salt fileserver environment from which to retrieve the file. Ignored if `textfsm_path` is not a `salt://` URL.

    New in version 2018.3.0.

  include_empty: `False`

    Include empty files under the `textfsm_path`.

    New in version 2018.3.0.

  include_pat

    Glob or regex to narrow down the files cached from the given path. If matching with a regex, the regex must be prefixed with `E@`, otherwise the expression will be interpreted as a glob.

    New in version 2018.3.0.

  exclude_pat

    Glob or regex to exclude certain files from being cached from the given path. If matching with a regex, the regex must be prefixed with `E@`, otherwise the expression will be interpreted as a glob.

    New in version 2018.3.0.

    Note

    If used with `include_pat`, files matching this pattern will be excluded from the subset of files defined by `include_pat`.

  CLI Example:

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

  CLI Example with TextFSM template:

      salt '*' net.cli textfsm_parse=True textfsm_path=salt://textfsm/

  Example output:

      {
          'show version and haiku':  'Hostname: re0.edge01.arn01
                                        Model: mx480
                                        Junos: 13.3R6.5
                                          Help me, Obi-Wan
                                          I just saw Episode Two
                                          You're my only hope
                                       ',
          'show chassis fan' :   '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
                                   '
      }

  Example output with TextFSM parsing:

      {
        "comment": "",
        "result": true,
        "out": {
          "sh ver": [
            {
              "kernel": "9.1S3.5",
              "documentation": "9.1S3.5",
              "boot": "9.1S3.5",
              "crypto": "9.1S3.5",
              "chassis": "",
              "routing": "9.1S3.5",
              "base": "9.1S3.5",
              "model": "mx960"
            }
          ]
        }
      }

salt.modules.napalm_network.commit(inherit_napalm_device=None, **kwargs)

  Commits the configuration changes made on the network device.

  CLI Example:

      salt '*' net.commit

salt.modules.napalm_network.compare_config(inherit_napalm_device=None, **kwargs)

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

  CLI Example:

      salt '*' net.compare_config

salt.modules.napalm_network.config(source=None, **kwargs)

  New in version 2017.7.0.

  Return the whole configuration of the network device. By default, it will return all possible configuration sources supported by the network device. At most, there will be:

  - running config

  - startup config

  - candidate config

  To return only one of the configurations, you can use the `source` argument.

  source

    Which configuration type you want to display, default is all of them.

    Options:

    - running

    - candidate

    - startup

  Returns:

    The object returned is a dictionary with the following keys:

    - running (string): Representation of the native running configuration.

    - candidate (string): Representation of the native candidate configuration.

        If the device doesn't differentiate between running and startup configuration this will an empty string.

    - startup (string): Representation of the native startup configuration.

        If the device doesn't differentiate between running and startup configuration this will an empty string.

  CLI Example:

      salt '*' net.config
      salt '*' net.config source=candidate

salt.modules.napalm_network.config_changed(inherit_napalm_device=None, **kwargs)

  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(inherit_napalm_device=None, **kwargs)

  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/committed/rollbacked on the device. And a string that provides more details of the reason why the configuration was not committed properly.

  CLI Example:

      salt '*' net.config_control

salt.modules.napalm_network.confirm_commit(jid)

  New in version 2019.2.0.

  Confirm a commit scheduled to be reverted via the `revert_in` and `revert_at` arguments from the `net.load_template` or `net.load_config` execution functions. The commit ID is displayed when the commit confirmed is scheduled via the functions named above.

  CLI Example:

      salt '*' net.confirm_commit 20180726083540640360

salt.modules.napalm_network.connected(**kwargs)

  Specifies if the connection to the device succeeded.

  CLI Example:

      salt '*' net.connected

salt.modules.napalm_network.discard_config(inherit_napalm_device=None, **kwargs)

  Discards the changes applied.

  CLI Example:

      salt '*' net.discard_config

salt.modules.napalm_network.environment(**kwargs)

  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(**kwargs)

  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': '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': 'Juniper',
          'serial_number': 'JN131356FBFA',
          'model': 'MX480',
          'hostname': 're0.edge05.syd01',
          'fqdn': 're0.edge05.syd01'
      }

salt.modules.napalm_network.interfaces(**kwargs)

  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:

      {
          'Management1': {
              'is_up': False,
              'is_enabled': False,
              'description': '',
              'last_flapped': -1,
              'speed': 1000,
              'mac_address': 'dead:beef:dead',
          },
          'Ethernet1':{
              'is_up': True,
              'is_enabled': True,
              'description': 'foo',
              'last_flapped': 1429978575.1554043,
              'speed': 1000,
              'mac_address': 'beef:dead:beef',
          }
      }

salt.modules.napalm_network.ipaddrs(**kwargs)

  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 with the IP addresses as keys.

  CLI Example:

      salt '*' net.ipaddrs

  Example output:

      {
          'FastEthernet8': {
              'ipv4': {
                  '10.66.43.169': {
                      'prefix_length': 22
                  }
              }
          },
          'Loopback555': {
              'ipv4': {
                  '192.168.1.1': {
                      'prefix_length': 24
                  }
              },
              'ipv6': {
                  '1::1': {
                      'prefix_length': 64
                  },
                  '2001:DB8:1::1': {
                      'prefix_length': 64
                  },
                  'FE80::3': {
                      'prefix_length': 'N/A'
                  }
              }
          }
      }

salt.modules.napalm_network.lldp(interface='', **kwargs)

  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': 'Bundle-Ether8',
                  'interface_description': 'TenGigE0/0/0/8',
                  'remote_chassis_id': '8c60.4f69.e96c',
                  'remote_system_name': 'switch',
                  'remote_port': 'Eth2/2/1',
                  'remote_port_description': 'Ethernet2/2/1',
                  'remote_system_description': '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': 'B, R',
                  'remote_system_enable_capab': 'B'
              }
          ]
      }

salt.modules.napalm_network.load_config(filename=None, text=None, test=False, commit=True, debug=False, replace=False, commit_in=None, commit_at=None, revert_in=None, revert_at=None, commit_jid=None, inherit_napalm_device=None, saltenv='base', **kwargs)

  Applies configuration changes on the device. It can be loaded from a file or from inline string. If you send both a filename and a string containing the configuration, the file has higher precedence.

  By default this function will commit the changes. If there are no changes, it does not commit and the flag `already_configured` will be set as `True` to point this out.

  To avoid committing the configuration, set the argument `test` to `True` and will discard (dry run).

  To keep the changes but not commit, set `commit` to `False`.

  To replace the config, set `replace` to `True`.

  filename

    Path to the file containing the desired configuration. This can be specified using the absolute path to the file, or using one of the following URL schemes:

    - `salt://`, to fetch the template from the Salt fileserver.

    - `http://` or `https://`

    - `ftp://`

    - `s3://`

    - `swift://`

    Changed in version 2018.3.0.

  text

    String containing the desired configuration. This argument is ignored when `filename` is specified.

  test: False

    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: True

    Commit? Default: `True`.

  debug: False

    Debug mode. Will insert a new key under the output dictionary, as `loaded_config` containing the raw configuration loaded on the device.

    New in version 2016.11.2.

  replace: False

    Load and replace the configuration. Default: `False`.

    New in version 2016.11.2.

  commit_in: `None`

    Commit the changes in a specific number of minutes / hours. Example of accepted formats: `5` (commit in 5 minutes), `2m` (commit in 2 minutes), `1h` (commit the changes in 1 hour)`, `5h30m` (commit the changes in 5 hours and 30 minutes).

    Note

    This feature works on any platforms, as it does not rely on the native features of the network operating system.

    Note

    After the command is executed and the `diff` is not satisfactory, or for any other reasons you have to discard the commit, you are able to do so using the `net.cancel_commit` execution function, using the commit ID returned by this function.

    Warning

    Using this feature, Salt will load the exact configuration you expect, however the diff may change in time (i.e., if an user applies a manual configuration change, or a different process or command changes the configuration in the meanwhile).

    New in version 2019.2.0.

  commit_at: `None`

    Commit the changes at a specific time. Example of accepted formats: `1am` (will commit the changes at the next 1AM), `13:20` (will commit at 13:20), `1:20am`, etc.

    Note

    This feature works on any platforms, as it does not rely on the native features of the network operating system.

    Note

    After the command is executed and the `diff` is not satisfactory, or for any other reasons you have to discard the commit, you are able to do so using the `net.cancel_commit` execution function, using the commit ID returned by this function.

    Warning

    Using this feature, Salt will load the exact configuration you expect, however the diff may change in time (i.e., if an user applies a manual configuration change, or a different process or command changes the configuration in the meanwhile).

    New in version 2019.2.0.

  revert_in: `None`

    Commit and revert the changes in a specific number of minutes / hours. Example of accepted formats: `5` (revert in 5 minutes), `2m` (revert in 2 minutes), `1h` (revert the changes in 1 hour)`, `5h30m` (revert the changes in 5 hours and 30 minutes).

    Note

    To confirm the commit, and prevent reverting the changes, you will have to execute the `net.confirm_commit` function, using the commit ID returned by this function.

    Warning

    This works on any platform, regardless if they have or don't have native capabilities to confirming a commit. However, please be very cautious when using this feature: on Junos (as it is the only NAPALM core platform supporting this natively) it executes a commit confirmed as you would do from the command line. All the other platforms don't have this capability natively, therefore the revert is done via Salt. That means, your device needs to be reachable at the moment when Salt will attempt to revert your changes. Be cautious when pushing configuration changes that would prevent you reach the device.

    Similarly, if an user or a different process apply other configuration changes in the meanwhile (between the moment you commit and till the changes are reverted), these changes would be equally reverted, as Salt cannot be aware of them.

    New in version 2019.2.0.

  revert_at: `None`

    Commit and revert the changes at a specific time. Example of accepted formats: `1am` (will commit and revert the changes at the next 1AM), `13:20` (will commit and revert at 13:20), `1:20am`, etc.

    Note

    To confirm the commit, and prevent reverting the changes, you will have to execute the `net.confirm_commit` function, using the commit ID returned by this function.

    Warning

    This works on any platform, regardless if they have or don't have native capabilities to confirming a commit. However, please be very cautious when using this feature: on Junos (as it is the only NAPALM core platform supporting this natively) it executes a commit confirmed as you would do from the command line. All the other platforms don't have this capability natively, therefore the revert is done via Salt. That means, your device needs to be reachable at the moment when Salt will attempt to revert your changes. Be cautious when pushing configuration changes that would prevent you reach the device.

    Similarly, if an user or a different process apply other configuration changes in the meanwhile (between the moment you commit and till the changes are reverted), these changes would be equally reverted, as Salt cannot be aware of them.

    New in version 2019.2.0.

  saltenv: `base`

    Specifies the Salt environment name.

    New in version 2018.3.0.

  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

  - loaded_config (str): the configuration loaded on the device. Requires `debug` to be set as `True`

  - 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=None, template_source=None, context=None, defaults=None, template_engine='jinja', saltenv='base', template_hash=None, template_hash_name=None, skip_verify=False, test=False, commit=True, debug=False, replace=False, commit_in=None, commit_at=None, revert_in=None, revert_at=None, inherit_napalm_device=None, **template_vars)

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

  By default this function will commit the changes. If there are no changes, it does not commit, discards he config and the flag `already_configured` will be set as `True` to point this out.

  To avoid committing the configuration, set the argument `test` to `True` and will discard (dry run).

  To preserve the changes, set `commit` to `False`. However, this is recommended to be used only in exceptional cases when there are applied few consecutive states and/or configuration changes. Otherwise the user might forget that the config DB is locked and the candidate config buffer is not cleared/merged in the running config.

  To replace the config, set `replace` to `True`.

  template_name

    Identifies path to the template source. The template can be either stored on the local machine, either remotely. The recommended location is under the `file_roots` as specified in the master config file. For example, let's suppose the `file_roots` is configured as:

        file_roots:
          base:
            - /etc/salt/states

    Placing the template under `/etc/salt/states/templates/example.jinja`, it can be used as `salt://templates/example.jinja`. Alternatively, for local files, the user can specify the absolute path. If remotely, the source can be retrieved via `http`, `https` or `ftp`.

    Examples:

    - `salt://my_template.jinja`

    - `/absolute/path/to/my_template.jinja`

    - `http://example.com/template.cheetah`

    - `https:/example.com/template.mako`

    - `ftp://example.com/template.py`

    Changed in version 2019.2.0: This argument can now support a list of templates to be rendered. The resulting configuration text is loaded at once, as a single configuration chunk.

  template_source: None

    Inline config template to be rendered and loaded on the device.

  template_hash: None

    Hash of the template file. Format: `{hash_type: 'md5', 'hsum': <md5sum>}`

    New in version 2016.11.2.

  context: None

    Overrides default context variables passed to the template.

    New in version 2019.2.0.

  template_hash_name: None

    When `template_hash` refers to a remote file, this specifies the filename to look for in that file.

    New in version 2016.11.2.

  saltenv: `base`

    Specifies the template environment. This will influence the relative imports inside the templates.

    New in version 2016.11.2.

  template_engine: jinja

    The following templates engines are supported:

    - `cheetah`

    - `genshi`

    - `jinja`

    - `mako`

    - `py`

    - `wempy`

    New in version 2016.11.2.

  skip_verify: True

    If `True`, hash verification of remote file sources (`http://`, `https://`, `ftp://`) will be skipped, and the `source_hash` argument will be ignored.

    New in version 2016.11.2.

  test: False

    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: True

    Commit? (default: `True`)

  debug: False

    Debug mode. Will insert a new key under the output dictionary, as `loaded_config` containing the raw result after the template was rendered.

    New in version 2016.11.2.

  replace: False

    Load and replace the configuration.

    New in version 2016.11.2.

  commit_in: `None`

    Commit the changes in a specific number of minutes / hours. Example of accepted formats: `5` (commit in 5 minutes), `2m` (commit in 2 minutes), `1h` (commit the changes in 1 hour)`, `5h30m` (commit the changes in 5 hours and 30 minutes).

    Note

    This feature works on any platforms, as it does not rely on the native features of the network operating system.

    Note

    After the command is executed and the `diff` is not satisfactory, or for any other reasons you have to discard the commit, you are able to do so using the `net.cancel_commit` execution function, using the commit ID returned by this function.

    Warning

    Using this feature, Salt will load the exact configuration you expect, however the diff may change in time (i.e., if an user applies a manual configuration change, or a different process or command changes the configuration in the meanwhile).

    New in version 2019.2.0.

  commit_at: `None`

    Commit the changes at a specific time. Example of accepted formats: `1am` (will commit the changes at the next 1AM), `13:20` (will commit at 13:20), `1:20am`, etc.

    Note

    This feature works on any platforms, as it does not rely on the native features of the network operating system.

    Note

    After the command is executed and the `diff` is not satisfactory, or for any other reasons you have to discard the commit, you are able to do so using the `net.cancel_commit` execution function, using the commit ID returned by this function.

    Warning

    Using this feature, Salt will load the exact configuration you expect, however the diff may change in time (i.e., if an user applies a manual configuration change, or a different process or command changes the configuration in the meanwhile).

    New in version 2019.2.0.

  revert_in: `None`

    Commit and revert the changes in a specific number of minutes / hours. Example of accepted formats: `5` (revert in 5 minutes), `2m` (revert in 2 minutes), `1h` (revert the changes in 1 hour)`, `5h30m` (revert the changes in 5 hours and 30 minutes).

    Note

    To confirm the commit, and prevent reverting the changes, you will have to execute the `net.confirm_commit` function, using the commit ID returned by this function.

    Warning

    This works on any platform, regardless if they have or don't have native capabilities to confirming a commit. However, please be very cautious when using this feature: on Junos (as it is the only NAPALM core platform supporting this natively) it executes a commit confirmed as you would do from the command line. All the other platforms don't have this capability natively, therefore the revert is done via Salt. That means, your device needs to be reachable at the moment when Salt will attempt to revert your changes. Be cautious when pushing configuration changes that would prevent you reach the device.

    Similarly, if an user or a different process apply other configuration changes in the meanwhile (between the moment you commit and till the changes are reverted), these changes would be equally reverted, as Salt cannot be aware of them.

    New in version 2019.2.0.

  revert_at: `None`

    Commit and revert the changes at a specific time. Example of accepted formats: `1am` (will commit and revert the changes at the next 1AM), `13:20` (will commit and revert at 13:20), `1:20am`, etc.

    Note

    To confirm the commit, and prevent reverting the changes, you will have to execute the `net.confirm_commit` function, using the commit ID returned by this function.

    Warning

    This works on any platform, regardless if they have or don't have native capabilities to confirming a commit. However, please be very cautious when using this feature: on Junos (as it is the only NAPALM core platform supporting this natively) it executes a commit confirmed as you would do from the command line. All the other platforms don't have this capability natively, therefore the revert is done via Salt. That means, your device needs to be reachable at the moment when Salt will attempt to revert your changes. Be cautious when pushing configuration changes that would prevent you reach the device.

    Similarly, if an user or a different process apply other configuration changes in the meanwhile (between the moment you commit and till the changes are reverted), these changes would be equally reverted, as Salt cannot be aware of them.

    New in version 2019.2.0.

  defaults: None

    Default variables/context passed to the template.

    New in version 2016.11.2.

  template_vars

    Dictionary with the arguments/context to be used when the template is rendered.

    Note

    Do not explicitly specify this argument. This represents any other variable that will be sent to the template rendering system. Please see the examples below!

    Note

    It is more recommended to use the `context` argument to avoid conflicts between CLI arguments and template variables.

  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

  - loaded_config (str): the configuration loaded on the device, after rendering the template. Requires `debug` to be set as `True`

  - 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 os_version = grains.get('version') -%}
      {% set hostname = pillar.get('proxy', {}).get('host') -%}
      {% if router_vendor|lower == 'juniper' %}
      system {
          host-name {{hostname}};
      }
      {% elif router_vendor|lower == 'cisco' %}
      hostname {{hostname}}
      {% endif %}

  CLI Examples:

      salt '*' net.load_template set_ntp_peers peers=[192.168.0.1]  # uses NAPALM default templates

      # inline template:
      salt -G 'os:junos' net.load_template template_source='system { host-name {{host_name}}; }'         host_name='MX480.lab'

      # inline template using grains info:
      salt -G 'os:junos' net.load_template         template_source='system { host-name {{grains.model}}.lab; }'
      # if the device is a MX480, the command above will set the hostname as: MX480.lab

      # inline template using pillar data:
      salt -G 'os:junos' net.load_template template_source='system { host-name {{pillar.proxy.host}}; }'

      salt '*' net.load_template https://bit.ly/2OhSgqP hostname=example  # will commit
      salt '*' net.load_template https://bit.ly/2OhSgqP hostname=example test=True  # dry run

      salt '*' net.load_template salt://templates/example.jinja debug=True  # Using the salt:// URI

      # render a mako template:
      salt '*' net.load_template salt://templates/example.mako template_engine=mako debug=True

      # render remote template
      salt -G 'os:junos' net.load_template http://bit.ly/2fReJg7 test=True debug=True peers=['192.168.0.1']
      salt -G 'os:ios' net.load_template http://bit.ly/2gKOj20 test=True debug=True peers=['192.168.0.1']

      # render multiple templates at once
      salt '*' net.load_template "['https://bit.ly/2OhSgqP', 'salt://templates/example.jinja']" context="{'hostname': 'example'}"

  Example output:

      {
          'comment': '',
          'already_configured': False,
          'result': True,
          'diff': '[edit system]+  host-name edge01.bjm01',
          'loaded_config': 'system { host-name edge01.bjm01; }''
      }

salt.modules.napalm_network.mac(address='', interface='', vlan=0, **kwargs)

  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.optics(**kwargs)

  New in version 2017.7.0.

  Fetches the power usage on the various transceivers installed on the network device (in dBm), and returns a view that conforms with the OpenConfig model openconfig-platform-transceiver.yang.

  Returns:

    Returns a dictionary where the keys are as listed below:
      - intf_name (unicode)
          - physical_channels
              - channels (list of dicts)

                  - index (int)

                  - state
                      - input_power

                          - instant (float)

                          - avg (float)

                          - min (float)

                          - max (float)

                      - output_power

                          - instant (float)

                          - avg (float)

                          - min (float)

                          - max (float)

                      - laser_bias_current

                          - instant (float)

                          - avg (float)

                          - min (float)

                          - max (float)

  CLI Example:

      salt '*' net.optics

salt.modules.napalm_network.patch(patchfile, options='', saltenv='base', source_hash=None, show_changes=True, source='running', path=None, test=False, commit=True, debug=False, replace=True)

  New in version 2019.2.0.

  Apply a patch to the configuration source, and load the result into the running config of the device.

  patchfile

    A patch file to apply to the configuration source.

  options

    Options to pass to patch.

  source_hash

    If the patch file (specified via the `patchfile` argument) is an HTTP(S) or FTP URL and the file exists in the minion's file cache, this option can be passed to keep the minion from re-downloading the file if the cached copy matches the specified hash.

  show_changes: `True`

    Controls how changes are presented. If `True`, this function will return the of the changes made. If `False`, then it will return a boolean (`True` if any changes were made, otherwise False).

  source: `running`

    The configuration source. Choose from: `running`, `candidate`, or `startup`. Default: `running`.

  path: `None`

    Save the temporary configuration to a specific path, then read from there. This argument is optional, can the user prefers a particular location of the temporary file.

  test: `False`

    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: `True`

    Commit the configuration changes? Default: `True`.

  debug: `False`

    Debug mode. Will insert a new key in the output dictionary, as `loaded_config` containing the raw configuration loaded on the device.

  replace: `True`

    Load and replace the configuration. Default: `True`.

  CLI Example:

      salt '*' net.patch https://example.com/running_config.patch

salt.modules.napalm_network.ping(destination, source=None, ttl=None, timeout=None, size=None, count=None, vrf=None, **kwargs)

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

  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)

  vrf

    VRF (routing instance) for ping attempt

    New in version 2016.11.4.

  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.replace_pattern(pattern, repl, count=0, flags=8, bufsize=1, append_if_not_found=False, prepend_if_not_found=False, not_found_content=None, search_only=False, show_changes=True, backslash_literal=False, source=None, path=None, test=False, replace=True, debug=False, commit=True)

  New in version 2019.2.0.

  Replace occurrences of a pattern in the configuration source. If `show_changes` is `True`, then a diff of what changed will be returned, otherwise a `True` will be returned when changes are made, and `False` when no changes are made. This is a pure Python implementation that wraps Python's `sub()`.

  pattern

    A regular expression, to be matched using Python's `search()`.

  repl

    The replacement text.

  count: `0`

    Maximum number of pattern occurrences to be replaced. If count is a positive integer `n`, only `n` occurrences will be replaced, otherwise all occurrences will be replaced.

  flags (list or int): `8`

    A list of flags defined in the `re` module documentation from the Python standard library. Each list item should be a string that will correlate to the human-friendly flag name. E.g., `['IGNORECASE', 'MULTILINE']`. Optionally, `flags` may be an int, with a value corresponding to the XOR (`|`) of all the desired flags. Defaults to 8 (which supports 'MULTILINE').

  bufsize (int or str): `1`

    How much of the configuration to buffer into memory at once. The default value `1` processes one line at a time. The special value `file` may be specified which will read the entire file into memory before processing.

  append_if_not_found: `False`

    If set to `True`, and pattern is not found, then the content will be appended to the file.

  prepend_if_not_found: `False`

    If set to `True` and pattern is not found, then the content will be prepended to the file.

  not_found_content

    Content to use for append/prepend if not found. If None (default), uses `repl`. Useful when `repl` uses references to group in pattern.

  search_only: `False`

    If set to true, this no changes will be performed on the file, and this function will simply return `True` if the pattern was matched, and `False` if not.

  show_changes: `True`

    If `True`, return a diff of changes made. Otherwise, return `True` if changes were made, and `False` if not.

  backslash_literal: `False`

    Interpret backslashes as literal backslashes for the repl and not escape characters. This will help when using append/prepend so that the backslashes are not interpreted for the repl on the second run of the state.

  source: `running`

    The configuration source. Choose from: `running`, `candidate`, or `startup`. Default: `running`.

  path

    Save the temporary configuration to a specific path, then read from there.

  test: `False`

    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: `True`

    Commit the configuration changes? Default: `True`.

  debug: `False`

    Debug mode. Will insert a new key in the output dictionary, as `loaded_config` containing the raw configuration loaded on the device.

  replace: `True`

    Load and replace the configuration. Default: `True`.

  If an equal sign (`=`) appears in an argument to a Salt command it is interpreted as a keyword argument in the format `key=val`. That processing can be bypassed in order to pass an equal sign through to the remote shell command by manually specifying the kwarg:

      salt '*' net.replace_pattern "bind-address\s*=" "bind-address:"

  CLI Example:

      salt '*' net.replace_pattern PREFIX-LIST_NAME new-prefix-list-name
      salt '*' net.replace_pattern bgp-group-name new-bgp-group-name count=1

salt.modules.napalm_network.rollback(inherit_napalm_device=None, **kwargs)

  Rollbacks the configuration.

  CLI Example:

      salt '*' net.rollback

salt.modules.napalm_network.save_config(source=None, path=None)

  New in version 2019.2.0.

  Save the configuration to a file on the local file system.

  source: `running`

    The configuration source. Choose from: `running`, `candidate`, `startup`. Default: `running`.

  path

    Absolute path to file where to save the configuration. To push the files to the Master, use `cp.push` Execution function.

  CLI Example:

      salt '*' net.save_config source=running

salt.modules.napalm_network.traceroute(destination, source=None, ttl=None, timeout=None, vrf=None, **kwargs)

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

  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)

  vrf

    VRF (routing instance) for traceroute attempt

    New in version 2016.11.4.

  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