Processors Plugins

Processors used to process loaded data before its rendered.

Multitemplate Processor

Plugin reference name: multitemplate

Processor to extract multiple template dictionaries from each data item based on suffix values.

Takes a list of dictionaries:

[{'device': 'r1',
  'hostname': 'r1',
  'lo0_ip': '1.1.1.1',
  'lo0_ip_rollback': '1.1.1.11',
  'template': 'test_path/device_base',
  'template_rollback': 'test_path/device_base_rollback'},
 {'device:a': 'r1',
  'device:b': 'r2',
  'interface:a': 'Eth1',
  'interface:b': 'Eth1',
  'ip:a': '10.0.0.1',
  'ip:b': '10.0.0.2',
  'mask': 24,
  'template:a': 'test_path/interf_cfg',
  'template:b': 'test_path/interf_cfg_b'}]

Returns:

[{'device': 'r1',
'hostname': 'r1',
'lo0_ip': '1.1.1.11',
'template': 'test_path/device_base_rollback'},
{'device': 'r1',
'hostname': 'r1',
'lo0_ip': '1.1.1.1',
'template': 'test_path/device_base'},
{'device': 'r1',
'interface': 'Eth1',
'ip': '10.0.0.1',
'mask': 24,
'template': 'test_path/interf_cfg'},
{'device': 'r2',
'interface': 'Eth1',
'ip': '10.0.0.2',
'mask': 24,
'template': 'test_path/interf_cfg_b'}]

Where template_name_key is template.

Multitemplate processor detects suffixes/endings, :a and :b in this case, and uses them to split dictionaries apart, populating them with values corresponding to certain suffixes.

Key names without suffixes considered as common values and shared across all dictionaries.

ttr.plugins.processors.multitemplate_processor.process(data, template_name_key, **kwargs)

Function to process multitemplate data items.

Parameters
  • data – (list), data to process - list of dictionaries

  • template_name_key – string, name of the template key

  • kwargs – (dict) any additional arguments ignored

Templates Split Processor

Plugin reference name: templates_split

Processor to support definition of several templates separated by delimiter (default - ;) consequentially splitting data into several items with dedicated template.

Takes a list of dictionaries, for example:

[{'device': 'r1',
  'hostname': 'r1',
  'lo0_ip': '1.1.1.1',
  'lo0_ip_rollback': '1.1.1.11',
  'template': 'device_base; isis_base; bgp_base'},
 {'device': 'r2',
  'hostname': 'r2',
  'lo0_ip': '1.1.1.2',
  'lo0_ip_rollback': '1.1.1.22',
  'template': 'device_base; bgp_base'}]

After splitting templates templates_split processor returns:

[{'device': 'r1',
  'hostname': 'r1',
  'lo0_ip': '1.1.1.1',
  'lo0_ip_rollback': '1.1.1.11',
  'template': 'device_base'},
 {'device': 'r1',
  'hostname': 'r1',
  'lo0_ip': '1.1.1.1',
  'lo0_ip_rollback': '1.1.1.11',
  'template': 'isis_base'},
 {'device': 'r1',
  'hostname': 'r1',
  'lo0_ip': '1.1.1.1',
  'lo0_ip_rollback': '1.1.1.11',
  'template': 'bgp_base'},
 {'device': 'r2',
  'hostname': 'r2',
  'lo0_ip': '1.1.1.2',
  'lo0_ip_rollback': '1.1.1.22',
  'template': 'device_base'},
 {'device': 'r2',
  'hostname': 'r2',
  'lo0_ip': '1.1.1.2',
  'lo0_ip_rollback': '1.1.1.22',
  'template': 'bgp_base'}]
ttr.plugins.processors.templates_split.process(data, template_name_key, split_char=';', **kwargs)

Function to split templates. e.g. if template_name_key value contains several templates, this processor will split them using split_char and produce data item for each template coping data accordingly.

Parameters
  • data – list of dictionaries to process

  • template_name_key – string, name of the template key

  • split_char – str, character to use to split template names

  • kwargs – (dict) any additional arguments ignored

Filtering Processor

Plugin reference name: filtering

Processor to filter data using glob patterns. Filtering done against result_name_key values.

Takes a list of dictionaries, for example:

[{'device': 'rr21',
  'lo0_ip': '1.1.1.1',
  'lo0_ip_rollback': '1.1.1.11',
  'template': 'device_base},
 {'device': 'core-1',
  'lo0_ip': '1.1.1.2',
  'lo0_ip_rollback': '1.1.1.22',
  'template': 'device_base}]

If filter pattern is core-* and result_name_key is device, filtering processor will return:

[{'device': 'core-1',
  'lo0_ip': '1.1.1.2',
  'lo0_ip_rollback': '1.1.1.22',
  'template': 'device_base}]
ttr.plugins.processors.filtering.process(data, result_name_key, filters=None, **kwargs)

Function to filter data using glob patterns.

Parameters
  • data – list of dictionaries to process

  • filters – list, list of glob patterns to use for filtering. Filtering successful if at list one pattern matches

  • result_name_key – (str) name of the key in data items value of which should be used as a key in results dictionary, default device. Filtering done against values defined under result_name_key

  • kwargs – (dict) any additional arguments ignored