Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Use Ansible with Junos PyEZ Tables to Retrieve Operational Information from Junos Devices

Module Overview

Junos PyEZ operational (op) Tables provide a simple and efficient way to extract information from complex operational command output. Juniper Networks provides Ansible modules that enable you to leverage Junos PyEZ op Tables from within Ansible playbooks. Table 1 outlines the modules.

Table 1: Junos PyEZ Table Modules

Content Set

Module Name

juniper.device collection

table

Juniper.junos role

juniper_junos_table

Note:

Starting in Juniper.junos Release 2.0.0, the juniper_junos_table module replaces the functionality of the junos_get_table module.

Note:

The modules do not work with configuration Tables and Views.

Understanding Junos PyEZ Tables

Junos PyEZ is a microframework for Python that enables you to manage and automate Junos devices. Junos PyEZ supports using simple YAML definitions, which are referred to as Tables and Views, to retrieve and filter operational command output and configuration data from Junos devices.

Junos PyEZ operational (op) Tables extract information from the output of operational commands or RPCs. The Junos PyEZ jnpr.junos.op modules contain predefined Table and View definitions for some common RPCs. You can also create custom Tables and Views.

When you use Ansible to manage Junos devices, the table and juniper_junos_table modules can use Junos PyEZ Tables to retrieve data from a device. The modules can reference the predefined operational Tables and Views that are included with the Junos PyEZ distribution, or they can reference user-defined Tables and Views that reside on the Ansible control node.

For general information about Junos PyEZ Tables and Views, see the following sections and related documentation in the Junos PyEZ Developer Guide:

How to Use the Juniper Networks Ansible Modules with Junos PyEZ Tables

The table and juniper_junos_table modules can include the following arguments to specify the Table to use:

  • file—Filename of the YAML file that defines the Junos PyEZ Table and View.

  • path—(Optional) Path to the directory containing the YAML file with the Table and View definitions. The default file path is the location of the predefined Junos PyEZ op Tables, which reside in the Junos PyEZ install path under the jnpr/junos/op directory.

  • table—(Optional) Name of the Table that will be used to retrieve the data. This option is only required when a file contains multiple Table definitions or the file contains a single Table that does not include "Table" in its name.

For example, the following task retrieves data by using a custom table named FPCTable, which is defined in the fpc.yaml file located in the playbook directory:

The module’s response includes the resource key, which contains a list of items returned by the Table. Each list item is a dictionary containing the field names defined by the View and the value extracted from the data for each of the corresponding fields.

Consider the following predefined Table and View, ArpTable and ArpView, in the arp.yml file of the Junos PyEZ distribution. ArpTable executes the <get-arp-table-information> RPC with the <no-resolve/> option, which is equivalent to the show arp no-resolve CLI command. The corresponding View extracts the MAC address, IP address, and interface name for each <arp-table-entry> item in the response.

The following Ansible playbook executes the table module, which uses ArpTable to retrieve Address Resolution Protocol (ARP) information from Junos devices. Because ArpTable is included with the Junos PyEZ distribution and resides in the default directory for the predefined Junos PyEZ op Tables, the path module argument is not required to specify the file location. In addition, because ArpTable is the only Table defined in the file and includes ”Table" in its name, the table argument is not required to specify the Table.

The playbook output, which is truncated for brevity, includes the corresponding fields, as defined by the View, for each <arp-table-entry> item returned by the device.

The following Ansible playbook leverages the predefined Junos PyEZ operational Table, OspfInterfaceTable to retrieve information about OSPF interfaces on Junos devices. The ospf.yml file defines multiple Tables and Views, so the module call includes the table argument to specify which Table to use.

Specify RPC Arguments

Junos PyEZ operational Tables have an optional args key that defines the default command options and arguments for the RPC executed by that Table. The application executes the RPC with the default options unless the user overrides the defaults. In Junos PyEZ applications, you can override the default command options or pass additional options and arguments to the RPC when calling the get() method.

The table and juniper_junos_table modules also enable you to override the default command options defined in the Table or pass additional options and arguments to the RPC by using the kwargs argument. The kwargs value is a dictionary of command options and values, which must be supported by the RPC and the device on which the RPC is executed.

For example, the predefined Junos PyEZ op Table EthPortTable in the ethport.yml file executes the <get-interface-information> RPC with the media command option and returns information for all interfaces that match the given regular expression for the interface name.

The following Ansible playbook uses EthPortTable to extract information about the interfaces on Junos devices. The kwargs argument includes interface_name: "ge-1/0/0", which overrides the EthPortTable default for interface_name and instructs the module to retrieve the requested fields for only the ge-1/0/0 interface.

For more information about the default and user-supplied command options and arguments in Junos PyEZ Tables, see Defining Junos PyEZ Operational Tables and Using Junos PyEZ Operational Tables and Views.

Release History Table
Release
Description
2.0.0
Starting in Juniper.junos Release 2.0.0, the juniper_junos_table module replaces the functionality of the junos_get_table module.