{%- from "grafana/map.jinja" import client with context %} {%- if client.get('enabled', False) %} {%- set datasources = [] %} {%- for datasource_name, datasource in client.datasource.iteritems() %} {%- do datasources.append(datasource.type) %} grafana_client_datasource_{{ datasource_name }}: grafana3_datasource.present: - name: {{ datasource.name|default(datasource_name) }} - type: {{ datasource.type }} {%- if datasource.port is defined %} - url: {{ datasource.get('protocol', 'http') }}://{{ datasource.host }}:{{ datasource.port }}{{ datasource.get('url_path', '') }} {%- else %} - url: {{ datasource.get('protocol', 'http') }}://{{ datasource.host }}{{ datasource.get('url_path', '') }} {%- endif %} {%- if datasource.access is defined %} - access: proxy {%- endif %} {%- if datasource.user is defined %} - user: {{ datasource.user }} - password: {{ datasource.password }} {%- endif %} {%- if datasource.get('is_default', False) %} - is_default: {{ datasource.is_default|lower }} {%- endif %} {%- if datasource.database is defined %} - database: {{ datasource.database }} {%- endif %} {%- if datasource.mode is defined %} - mode: {{ datasource.mode }} {%- if datasource.mode == 'keystone' %} - domain: {{ datasource.get('domain', 'default') }} - project: {{ datasource.get('project', 'service') }} {%- endif %} {%- endif %} {%- endfor %} {%- set raw_dict = {} %} {%- set final_dict = {} %} {%- set parameters = {} %} {%- if client.remote_data.engine == 'salt_mine' %} {%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %} {%- if node_grains.grafana is defined %} {%- set raw_dict = salt['grains.filter_by']({'default': raw_dict}, merge=node_grains.grafana.get('dashboard', {})) %} {%- set parameters = salt['grains.filter_by']({'default': parameters}, merge=node_grains.grafana.get('parameters', {})) %} {%- endif %} {%- endfor %} {%- endif %} {%- if client.dashboard is defined %} {%- set raw_dict = salt['grains.filter_by']({'default': raw_dict}, merge=client.dashboard) %} {%- endif %} {%- if client.parameters is defined %} {%- set parameters = salt['grains.filter_by']({'default': parameters}, merge=client.parameters) %} {%- endif %} {%- for dashboard_name, dashboard in raw_dict.iteritems() %} {%- if dashboard.get('format', 'yaml')|lower == 'yaml' %} # Dashboards in JSON format are considered as blob {%- set rows = [] %} {%- for row_name, row in dashboard.get('row', {}).iteritems() %} {%- set panels = [] %} {%- for panel_name, panel in row.get('panel', {}).iteritems() %} {%- set targets = [] %} {%- for target_name, target in panel.get('target', {}).iteritems() %} {%- do targets.extend([target]) %} {%- endfor %} {%- do panel.update({'targets': targets}) %} {%- do panels.extend([panel]) %} {%- endfor %} {%- do row.update({'panels': panels}) %} {%- do rows.extend([row]) %} {%- endfor %} {%- do dashboard.update({'rows': rows}) %} {%- endif %} {%- do final_dict.update({dashboard_name: dashboard}) %} {%- endfor %} {%- for dashboard_name, dashboard in final_dict.iteritems() %} {%- if dashboard.datasource is not defined or dashboard.datasource in datasources %} {%- if dashboard.get('enabled', True) %} grafana_client_dashboard_{{ dashboard_name }}: grafana3_dashboard.present: - name: {{ dashboard_name }} {%- if dashboard.get('format', 'yaml')|lower == 'json' %} {%- import dashboard.template as dashboard_template with context %} {%- set dash = dashboard_template|load_json %} - dashboard: {{ dash|json }} - dashboard_format: json {%- else %} - dashboard: {{ dashboard }} {%- if dashboard.base_dashboards is defined %} - base_dashboards_from_pillar: {{ dashboard.base_dashboards|yaml }} {%- endif %} {%- if dashboard.base_rows is defined %} - base_rows_from_pillar: {{ dashboard.base_rows|yaml }} {%- endif %} {%- if dashboard.base_panels is defined %} - base_panels_from_pillar: {{ dashboard.base_panels|yaml }} {%- endif %} {%- endif %} {%- else %} grafana_client_dashboard_{{ dashboard_name }}: grafana3_dashboard.absent: - name: {{ dashboard_name }} {%- endif %} {%- endif %} {%- endfor %} {%- endif %}