<% syslog_config = pillar.get('syslog_ng', {}) %>\ <%! def rule_builder(rule): if rule is None: return '' elif type(rule) is bool: return {True: 'yes', False: 'no'}[rule] elif type(rule) is int: return rule elif type(rule) is list: return ' '.join([rule_builder(v) for v in rule]) elif type(rule) is dict: return ' '.join([ '%s(%s)' % (k,rule_builder(v)) for k, v in rule.items()]) else: if rule[0] == '=': return rule[1:] return '"%s"' % rule %>\ @version: ${ syslog_config.get('version', '3.3') } % for module in syslog_config.get('module', ['tfjson']): @module ${ rule_builder(module) } % endfor % for inc in syslog_config.get('include', []): @include ${ rule_builder(inc) } % endfor options { % for rule in syslog_config.get('options', []): ${ rule_builder(rule) }; % endfor }; % for obj in ('source', 'destination', 'filter', 'parser', 'rewrite', 'template'): % for params in syslog_config.get(obj, []): % for name, rules in params.items(): ${ obj } ${ name } { % for rule in rules: ${ rule_builder(rule) }; % endfor }; % endfor % endfor % endfor % for loggers in syslog_config.get('log', []): log { % for rule in loggers: ${ rule_builder(rule) }; % endfor }; % endfor