blob: 6d0ab4081f90ef312b58c218dc5c12c52d06187e [file] [log] [blame]
from collections import OrderedDict
def __virtual__():
return True
def _set_subtree(node, relationships):
return {
v: _set_subtree(v, relationships)
for v in [x['id'] for x in relationships if node in x['require']]
}
def _traverse_subtree(output, data):
for key, value in data.items():
output.append(key)
_traverse_subtree(output, value)
return output
def order_by_requisites(data):
'''
Returns dictionary ordered by require and require_by
CLI Examples:
.. code-block:: bash
salt-call modelutils.order_by_requisites "{'dict':'value'}""
Sample data
passed_data:
syslog2:
pattern: 'syslog.*'
syslog_tele1:
type: parser
require:
- syslog1
syslog1:
pattern: 'syslog.*'
require_in:
- syslog2
syslog_tele2:
require:
- syslog_tele1
'''
raw_key_list = []
ordered_key_list = []
output_dict = OrderedDict()
for datum_id, datum in data.items():
if 'require_in' in datum:
for req in datum['require_in']:
if 'require' not in data[req]:
data[req]['require'] = []
data[req]['require'].append(datum_id)
datum.pop('require_in')
for datum_id, datum in data.items():
if 'require' not in datum:
datum['require'] = ['top']
datum['id'] = datum_id
raw_key_list.append(datum)
tree_data = _set_subtree('top', raw_key_list)
_traverse_subtree(ordered_key_list, tree_data)
for key in ordered_key_list:
output_dict[key] = data[key]
return output_dict