Added ability to disable endpoints, alerts and
recording rules and override alerts/recording
rules from reclass
Change-Id: Ie79409f350f4e7d223955c177718350c38ed8302
diff --git a/prometheus/collector.sls b/prometheus/collector.sls
index e5fb0d4..1da6ab9 100644
--- a/prometheus/collector.sls
+++ b/prometheus/collector.sls
@@ -1,4 +1,4 @@
-{%- set service_grains = {'prometheus': {'server': {'alert': {}, 'recording': [], 'target': {}}}} %}
+{%- set service_grains = {'prometheus': {'server': {'alert': {}, 'recording': {}, 'target': {}}}} %}
{%- for service_name, service in pillar.items() %}
{%- if service.get('_support', {}).get('prometheus', {}).get('enabled', False) %}
{%- set grains_fragment_file = service_name+'/meta/prometheus.yml' %}
diff --git a/prometheus/files/alerts.yml b/prometheus/files/alerts.yml
index d9ebc7e..97d0dde 100644
--- a/prometheus/files/alerts.yml
+++ b/prometheus/files/alerts.yml
@@ -3,57 +3,48 @@
{%- set alerts = {} %}
{%- set recordings = {} %}
-
-{%- for recording_rule in server.get('recording', []) %}
- {%- if recording_rule.name not in recordings %}
- {%- do recordings.update({recording_rule.name: recording_rule.query}) %}
- {%- endif %}
-{%- endfor %}
-
{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
{%- set server_grain = node_grains.get('prometheus', {}).get('server', {}) %}
- {%- for recording_rule in server_grain.get('recording', []) %}
- {%- if recording_rule.name not in recordings %}
- {%- do recordings.update({recording_rule.name: recording_rule.query}) %}
- {%- endif %}
+ {%- for recordingname, recording in server_grain.get('recording', {}).iteritems() %}
+ {%- do recordings.update({recordingname: recording}) %}
{%- endfor %}
{%- endfor %}
-{%- for recording_name, query in recordings.iteritems() %}
-{{ recording_name }} = {{ query }}
-{%- endfor %}
+{%- set recordings = salt['grains.filter_by']({'default': recordings}, merge=server.get('recording', {})) %}
-{%- for alertname, alert in server.get('alert', {}).iteritems() %}
- {%- if alertname not in alerts %}
- {%- do alerts.update({alertname: alert}) %}
+{%- for recordingname, recording in recordings.iteritems() %}
+ {%- if recording.get('enabled', True) %}
+ {{ recordingname }} = {{ recording.query }}
{%- endif %}
{%- endfor %}
{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
{%- set server_grain = node_grains.get('prometheus', {}).get('server', {}) %}
{%- for alertname, alert in server_grain.get('alert', {}).iteritems() %}
- {%- if alertname not in alerts %}
{%- do alerts.update({alertname: alert}) %}
- {%- endif %}
{%- endfor %}
{%- endfor %}
+{%- set alerts = salt['grains.filter_by']({'default': alerts}, merge=server.get('alert', {})) %}
+
{%- for alertname, alert in alerts.iteritems() %}
-ALERT {{ alertname }}
- IF {{ alert.if }}
- {%- if alert.for is defined %}FOR {{ alert.for }}{%- endif %}
- {%- if alert.labels is defined %}
- LABELS {
- {%- for name, value in alert.labels.iteritems() %}
- {{ name }} = "{{ value }}"{%- if not loop.last %},{%- endif %}
- {%- endfor %}
- }
- {%- endif %}
- {%- if alert.annotations is defined %}
- ANNOTATIONS {
- {%- for name, value in alert.annotations.iteritems() %}
- {{ name }} = "{{ value }}"{%- if not loop.last %},{%- endif %}
- {%- endfor %}
- }
+ {%- if alert.get('enabled', True) %}
+ ALERT {{ alertname }}
+ IF {{ alert.if }}
+ {%- if alert.for is defined %}FOR {{ alert.for }}{%- endif %}
+ {%- if alert.labels is defined %}
+ LABELS {
+ {%- for name, value in alert.labels.iteritems() %}
+ {{ name }} = "{{ value }}"{%- if not loop.last %},{%- endif %}
+ {%- endfor %}
+ }
+ {%- endif %}
+ {%- if alert.annotations is defined %}
+ ANNOTATIONS {
+ {%- for name, value in alert.annotations.iteritems() %}
+ {{ name }} = "{{ value }}"{%- if not loop.last %},{%- endif %}
+ {%- endfor %}
+ }
+ {%- endif %}
{%- endif %}
{%- endfor %}
diff --git a/prometheus/files/prometheus.yml b/prometheus/files/prometheus.yml
index 9b0d394..594bdba 100644
--- a/prometheus/files/prometheus.yml
+++ b/prometheus/files/prometheus.yml
@@ -25,11 +25,11 @@
{%- for job_name, targets in static_target.iteritems() %}
{%- set job = server.get('target', {}).get('static', {}).get(job_name, {}) %}
{%- set nodes = [] %}
- {%- for target in targets %}
+ {%- for target in targets + job.get('endpoint', []) %}
{%- set address = "'%s:%d'" | format(target.address, target.port) %}
{%- do nodes.append(address) %}
{%- endfor %}
- {%- if nodes|length > 0 %}
+ {%- if nodes|length > 0 and job.get('enabled', True) %}
- job_name: {{ job_name }}
{% if job.get('scheme') %}scheme: {{ job.scheme }}{%- endif %}
{%- if job.get('tls_config') %}
@@ -43,7 +43,7 @@
{%- endif %}
{%- endfor %}
-{% if server.get('target', {}).get('kubernetes') %}
+{%- if server.get('target', {}).get('kubernetes', {}).get('enabled', True) %}
{%- set kubernetes_target = server.target.kubernetes %}
- job_name: 'kubernetes-api'
scheme: https
@@ -164,7 +164,8 @@
target_label: kubernetes_pod_name
{%- endif %}
-{%- for target in server.get('target', {}).get('dns', []) %}
+{%- if server.get('target', {}).get('dns', {}).get('enabled', True) %}
+ {%- for target in server.get('target', {}).get('dns', {}).get('endpoint', []) %}
- job_name: {{ target.name }}
dns_sd_configs:
- names:
@@ -173,4 +174,5 @@
{%- endfor %}
type: {{ target.type }}
port: {{ target.port }}
-{%- endfor %}
+ {%- endfor %}
+{%- endif %}