grain:
    {# Setup basic structure for all roles so updates can apply #}
    {%- set service_grains = {
      'log_collector': {
        'decoder': {},
        'input': {},
        'trigger': {},
        'filter': {},
        'splitter': {},
        'encoder': {},
        'output': {},
      },
      'metric_collector': {
        'decoder': {},
        'input': {},
        'trigger': {},
        'alarm': {},
        'filter': {},
        'splitter': {},
        'encoder': {},
        'output': {},
      },
      'remote_collector': {
        'decoder': {},
        'input': {},
        'trigger': {},
        'alarm': {},
        'filter': {},
        'splitter': {},
        'encoder': {},
        'output': {},
      },
      'aggregator': {
        'decoder': {},
        'input': {},
        'trigger': {},
        'alarm_cluster': {},
        'filter': {},
        'splitter': {},
        'encoder': {},
        'output': {},
      },
      'ceilometer_collector': {
        'decoder': {},
        'input': {},
        'filter': {},
        'splitter': {},
        'encoder': {},
        'output': {},
      }
    } %}

    {# Loading the other services' support metadata for local roles #}
    {%- macro load_support_file(support_fragment_file) %}{% include support_fragment_file ignore missing %}{% endmacro %}
    {%- for svc_name, svc in pillar.iteritems() %}
      {%- if svc.get('_support', {}).get('heka', {}).get('enabled', False) %}
        {%- set heka_fragment_file = svc_name+'/meta/heka.yml' %}
        {%- set heka_yaml = load_support_file(heka_fragment_file)|load_yaml %}
        {%- set service_grains = salt['grains.filter_by']({'default': service_grains}, merge=heka_yaml) %}
      {%- endif %}
    {%- endfor %}
  heka:
    heka:
      {{ salt['heka_alarming.grains_for_mine'](service_grains)|yaml(False)|indent(6) }}

{#-
  vim: syntax=jinja
-#}
