Parsergen Module¶
-
class
genie.parsergen._parsergen.CmdCache¶ Bases:
objectThis class holds the CLI command cache and associated cache update logic.
-
cache= {}¶
-
refresh_cache(obj, show_command)¶ Refresh the cache
- Parameters
obj (
parsergen.oper_checkorparsergen.oper_fill_tabularobject) – Object that is asking for a cache refresh.show_command (
strortuple) – The show command to execute.
-
-
class
genie.parsergen._parsergen.Device(name, *args, **kwargs)¶ Bases:
objectDefining a device class to eliminate parsergen dependency on a device object
-
execute(*args, **kwargs)¶
-
is_connected(alias, *args, **kwargs)¶
-
-
genie.parsergen._parsergen.extend(regex_ext=None, show_cmds=None, regex_tags=None)¶ Allows an external module to extend
parsergen’sdictionaryofregular expressions, known show commands andregextags.parsergenkeeps its masterregular expressiondictionaryin the memberparsergen._glb_regex, its master show commanddictionaryin the memberparsergen._glb_show_commandsand its master regex tagdictionaryin the memberparsergen._glb_regex_tags.It is possible to register CLI show commands without specifying any regular expressions, since
oper_fill_tabularalso uses this CLI tag/command repository to format its CLI commands.- Parameters
regex_ext (A
dictofdictionariesofregular expressionskeyed by OS type and regex tag) – A series of tags (keys) and their correspondingregexes(values). Anyregexin this dictionary may also be expressed as alist(this feature allows the same regex tag to match multiple patterns, and is intended on enabling parsers to work correctly across multiple releases across which CLI text may have changed).show_cmds (A
dictofdictionariesofstrkeyed by OS type and generic CLI command tag) – A series of generic CLI command tags (keys) and their corresponding CLI command equivalents (values). The values may contain string formatting characters, including equal signs, as documented in How To Specify Show Commands.regex_tags (A
dictoflistsof regex tags keyed by OS type) – A series of tags (keys). This allowsparsergento store the original order order the tags were declared. This parameter must be specified in order to make use of theregex_tag_fill_patternparameter ofoper_filland in order to enable the auto-attrvalpair-reordering feature offered byoper_check.
-
genie.parsergen._parsergen.extend_markup(marked_up_input)¶ Allows an external module to extend
parsergen’s dictionary ofregular expressions,regextags and known show commands by specifying marked-up show command text (see Core documentation)This input text is transformed, and then automatically passed to
extend.- Parameters
marked_up_input (
str) – Marked-up show command input
-
genie.parsergen._parsergen.get_os_type(device, alias=None)¶ Get the OS of the given router
-
genie.parsergen._parsergen.isstr(s)¶
-
class
genie.parsergen._parsergen.oper_check(device=None, show_command=None, attrvalpairs=None, refresh_cache=False, negate=False, device_conn_alias=None, device_output=None, device_os=None)¶ Bases:
genie.predcore._predcore.PredicateOptionally run a show command on a device, parse user-requested fields, and compare these fields against expected values.
Create an object to parse and check CLI command output.
- Parameters
device (
Device()) – The device to run the show command on.show_command (
strortupleof (str,listof positional formatting args,dictof keyword formatting args)) – The key into the show command dictionary previously passed toextendor the actual show command to issue. If the corresponding show command dictionary string contains formatting fields, specify these arguments using atuple. Remember to useNoneas a placeholder if you are combining default and non-default fields(see How To Specify Show Commands).attrvalpairs (
listoftuples(str,strortuple)) – An ordered list of (attribute/value) pairs. Parsergen must have been taught the relationship between attributes and regular expressions, which is done via theextendAPI. If a value is expressed as atuple, then each member of the tuple is considered as a potential match. These pairs are reordered on behalf of the user if all attributes are present inparsergen._glb_regex_tag(which is automatically populated viaextend_markupand optionally populated viaextend).refresh_cache (
bool) – IfTrue, refresh the cache by running the indicated show command on the device, and then parse this output. IfFalse, parse the previously cached show command output for this device. Defaults toTrue.negate (
bool) – IfTrue, negate the result (ie. treat a failure like a success). Defaults toFalse.device_conn_alias (
str) – If specified, assume the device was connected to under the indicated alias. Otherwise, the default alias is assumed. For details, please see http://wwwin-pyats.cisco.com/documentation/latest/connections/manager.html#connection-manager
-
dump()¶ Dump the predicate’s internal state for debugging and logging purposes.
-
error(msg, line=9223372036854775807)¶
-
parse()¶ Perform the parsing and retrieve results.
- Returns
Returns
Trueif the parsing was successful. The values passed in asNonewill be filled inparsergen.ext_dictio[device_name]. ReturnsFalseif the parsing failed. The user may obtain a failure analysis by callingpython:stron the parsing object.- Return type
bool
-
process_attrvalpairs(attrvalpairs, os, reorder=True)¶ Process a list of tuples of attr/value pairs into a form that parsercare can use.
-
result(result)¶
-
test()¶ Override this method to actually perform the predicate test.
-
class
genie.parsergen._parsergen.oper_fill(device=None, show_command=None, attrvalpairs=None, refresh_cache=False, regex_tag_fill_pattern='', skip=False, device_conn_alias=None, device_output=None, device_os=None)¶ Bases:
genie.parsergen._parsergen.oper_checkOptionally run a show command on a device and parse user-requested fields.
Create an object to parse CLI command output.
- Parameters
device (
Device()) – The device to run the show command on.show_command (
strortupleof (str,listof positional formatting args,dictof keyword formatting args)) – The key into the show command dictionary previously passed toextendor the actual show command to issue. If the corresponding show command dictionary string contains formatting fields, specify these arguments using atuple. Remember to useNoneas a placeholder if you are combining default and non-default fields(see How To Specify Show Commands).attrvalpairs (
listoftuples(str,strortuple)) – An ordered list of attribute/value pairs. A value ofNonerequests a fill for that attribute. The very first value cannot beNone. Parsergen must have been taught the relationship between attributes and regular expressions, which is done via theextendAPI. If a value is expressed as atuple, then each member of the tuple is considered as a potential match.refresh_cache (
bool) – IfTrue, refresh the cache by running the indicated show command on the device, and then parse this output. IfFalse, parse the previously cached show command output for this device. Defaults toTrue.regex_tag_fill_pattern (
regular expression) – Regular expression to use to select a group of regex tags to fill. The tags will be added to the attrvalpairs list as (tag, None) in the same order as found inparsergen._glb_regex_tag(which is automatically populated viaextend_markupand optionally populated viaextend).skip (
bool) – Whether or not to ignore unmatched attributes (regex tags). IfTrue, then ignore any attributes (regex tags) whose associatedregexesdo not match the text to parse. One reason to specify this option could be when the text to parse could contain optional content lines. Defaults toFalse.device_conn_alias (
str) – If specified, assume the device was connected to under the indicated alias. Otherwise, the default alias is assumed. For details, please see http://wwwin-pyats.cisco.com/documentation/latest/connections/manager.html#connection-manager
Warning
If you specify a non-
Noneregex_tag_fill_patternthen ensure none of your (attr, value) pairs have a value ofNone, otherwise parser failure can result.Example use to obtain interface state values:
parsergen.oper_fill(R1, 'show interfaces', [ ('im.intf-name', 'GigabitEthernet0/0/0/1'), ('im.intf-status', None), ('im.intf-line-status', None), ('im.intf-mtu', None), ('im.intf-bw', None), ('im.intf-arptype', None) ], refresh_cache=True)
The values passed in as
Nonewill be filled inparsergen.ext_dictio[device_name].Note that, in case of output with multiple entries, eg datalist,
oper_fillneeds a hook in the code in order to target the desired values. For instance, in the above example, it’s using the name of the interfaces to hook into that section of the output.This class may not be the best choice to parse tabular data.
Note
Please consider using the
oper_fill_tabularclass for parsing tabular results as it is generally far easier. For output that contains both tabular and non-tabular data, it is also possible to use both mechanisms to parse different parts of the output.Example of accessing the filled in values:
>>> parsergen.ext_dictio[R1.name]['im.intf-line-status'] 'Up' >>> parsergen.ext_dictio[R1.name]['im.intf-mtu'] '1500'
-
class
genie.parsergen._parsergen.oper_fill_tabular(device=None, show_command=None, refresh_cache=True, header_fields=None, table_terminal_pattern=None, index=0, skip_header=None, table_title_pattern=None, right_justified=False, label_fields=None, is_run_command=False, skip_line=None, device_conn_alias=None, device_output=None, device_os=None, delimiter='')¶ Bases:
genie.parsergen.core.column_table_result_core_tClass that parses tabular “show” command output.
Example:show_command_output_example = ''' RP/0/0/CPU0:one#show rib clients Thu Sep 17 11:41:18.164 EDT Process Location Client ID Redist Proto bcdl_agent node0_0_CPU0 0 insync no ''' from genie.parsergen import oper_fill_tabular res = oper_fill_tabular( device=device1, show_command="show rib clients", header_fields = ["Process", "Location", "Client ID", "Redist", "Proto"]) print res.entries['bcdl_agent']['Location']
will print
node0_0_CPU0set second_show_command_output_example ''' RP/0/0/CPU0:one#show isis topology level 1 Sat Sep 19 14:46:33.902 EDT IS-IS ring paths to IPv4 Unicast (Level-1) routers System Id Metric Next-Hop Interface SNPA one -- two 10 two Gi0/0/0/0 *PtoP* two 10 two Gi0/0/0/1 02db.ebba.ecc4 three 20 two Gi0/0/0/0 *PtoP* three 20 two Gi0/0/0/1 02db.ebba.ecc4 ''' res = oper_fill_tabular ( device=device1, show_command="show isis topology level 1", header_fields= ["System Id", "Metric", "Next-Hop", "Interface", "SNPA"], index=[0,3]) print res.entries['three']['Gi0/0/0/1']['SNPA']
will print
02db.ebba.ecc4print res.entries['one']['']['Metric']
will print
--Note
The tabular parsing behavior may be customized via subclassing. Please refer to Use of Subclassing with the Tabular Parser and
tabular_parser_subclass.pyfor examples.Creates a results object that parses tabular “show” command output.
- Returns
Parsed results are obtained by using the column positions of the header field. The entry starts with the column of the first header character and ends just prior to the next header column.
The object returned has a dictionary named
entrieswhich is keyed by the entry value corresponding to the header atindex. Each key inentriesis indexed by the correspondingheader_fieldsname (orlabel_fieldsname if specified).- Parameters
device (
Device()) – The device to run the show command on.device_conn_alias (
str) – If specified, assume the device was connected to under the indicated alias. Otherwise, the default alias is assumed. For details, please see https://developer.cisco.com/docs/pyats/ ConnectionMeta - > Connection Managershow_command (
strortupleof (str,listof positional formatting args,dictof keyword formatting args)) – The key into the show command dictionary previously passed toextendor the actual show command to issue. If the corresponding show command dictionary string contains formatting fields, specify these arguments using atuple.refresh_cache (
bool) – IfTrue, refresh the cache by running the indicated show command on the device again, and then parse this output. IfFalse, parse the previously cached show command output. Defaults toTrue.header_fields (
listofstr) – List of column headings to parse. If not specified, it must be provided via a subclass viaget_init_info.table_terminal_pattern (
str) – If specified, this is the pattern to terminate the search for results.index (
intorlistofint) – Defaults to the first field (0). If more fields are required to guarantee uniqueness pass a list of indices inindexand that many dictionaries will be returned keyed by the given field values at those indices.skip_header (
str) – If specified, then the input between the header fields and this pattern are skipped before entries are looked for.table_title_pattern (
str) – If specified, this pattern allows multiple tables to be identified. Results will be a dictionary of matches keyed ongroup('Title')of the regex. (e.g., a pattern liker'(?P<Title>Port (\w+))'would match"Port GigabitEthernet_0_0_0_0 ..."and the key would be'GigabitEthernet_0_0_0_0').right_justified (
bool) – IfTrue, then the header labels are considered right justified. Defaults toFalse.label_fields (
listofstr) – If specified, then theentriesobject will contain these keys instead of those specified inheader_fields. There must be a corresponding entry inlabel_fieldsfor each entry inheader_fields.skip_line (
str) – If specified, then any line matching this pattern will be skipped.delimiter (
str) – Table delimiter pattern that allows for columns’ borders identification.