Merge ~chris.sanders/charm-grafana:fix-template into ~prometheus-charmers/charm-grafana:master

Proposed by Chris Sanders
Status: Merged
Approved by: Jeremy Lounder
Approved revision: 1b82156fc0f5b2a56236e821ae6479e69dc18945
Merged at revision: 9bcd0fa07e51a0ee2347653286226efe15c3fff4
Proposed branch: ~chris.sanders/charm-grafana:fix-template
Merge into: ~prometheus-charmers/charm-grafana:master
Diff against target: 1324 lines (+169/-140)
9 files modified
layer.yaml (+3/-0)
reactive/grafana.py (+28/-4)
templates/dashboards/prometheus/CephCluster.json.j2 (+23/-23)
templates/dashboards/prometheus/CephOSD.json.j2 (+10/-10)
templates/dashboards/prometheus/CephPools.json.j2 (+7/-7)
templates/dashboards/prometheus/OpenStackCloud.json.j2 (+46/-46)
templates/dashboards/prometheus/RabbitMQ.json.j2 (+11/-11)
templates/dashboards/prometheus/Swift.json.j2 (+11/-11)
templates/dashboards/prometheus/Telegraf.json.j2 (+30/-28)
Reviewer Review Type Date Requested Status
Jeremy Lounder (community) Approve
Drew Freiberger (community) Abstain
Canonical IS Reviewers Pending
Review via email: mp+371766@code.launchpad.net

Commit message

Switch dashboard template variable syntax

Use << and >> in place of {{ and }} for jinja templates because Grafana
uses {{ }} for it's variables as well. This causes Grafana variables to
be removed from templates causing Telegraf metrics to have no disk,
host, or interface names in the labels.

Description of the change

The primary change is the first commit to fix the missing variable labels in Telegraf dashboard. The other two commits were necessary to get it to deploy so I could test it. I tested the change with the following bundle to check that dashboards still render, and Telegraf now has lables where they were missing before.

series: bionic
services:
  ceph-osd:
    series: bionic
    charm: cs:ceph-osd
    num_units: 3
    options:
      osd-devices: "/var/osd1"
  ceph-mon:
    series: bionic
    charm: cs:ceph-mon
    num_units: 1
    options:
      monitor-count: 1
      expected-osd-count: 3
  ceph-fs:
    series: bionic
    charm: cs:~openstack-charmers/ceph-fs
    num_units: 1
  prometheus:
    charm: cs:prometheus2
    num_units: 1
  grafana:
    charm: /home/chris/src/juju/charms/builds/grafana
    num_units: 1
    expose: True
    options:
      install_method: "snap"
  alertmanager:
    charm: cs:prometheus-alertmanager
    num_units: 1
  ceph-exporter:
    charm: cs:prometheus-ceph-exporter
    num_units: 1
  telegraf:
    charm: cs:telegraf
relations:
 - - "ceph-mon:osd"
   - "ceph-osd:mon"
 - - "ceph-fs:ceph-mds"
   - "ceph-mon:mds"
 - - "ceph-exporter"
   - "ceph-mon:client"
 - - "ceph-exporter:ceph-exporter"
   - "prometheus:target"
 - - "prometheus:grafana-source"
   - "grafana:grafana-source"
 - - "prometheus:alertmanager-service"
   - "alertmanager:alertmanager-service"
 - - "telegraf:prometheus-client"
   - "prometheus:target"
 - - "telegraf"
   - "ceph-exporter"
 - - "telegraf"
   - "alertmanager"
 - - "telegraf"
   - "ceph-fs"
 - - "telegraf"
   - "ceph-mon"
 - - "telegraf"
   - "ceph-osd"

To post a comment you must log in.
Revision history for this message
🤖 Canonical IS Merge Bot (canonical-is-mergebot) wrote :

This merge proposal is being monitored by mergebot. Change the status to Approved to merge.

Revision history for this message
🤖 Canonical IS Merge Bot (canonical-is-mergebot) wrote :

Unable to determine commit message from repository - please click "Set commit message" and enter the commit message manually.

Revision history for this message
Drew Freiberger (afreiberger) wrote :

I'm not seeing commit be44ba7's changes in this diff. I'm going to guess those are already merged into master and this MR is just confused.

Other than spelling mistake which won't affect functionality and some suggestions around the render_custom, I'm good with this rolling out, but would like to defer to IS reviewers for criticality of comments.

review: Abstain
Revision history for this message
Chris Sanders (chris.sanders) wrote :

> I'm not seeing commit be44ba7's changes in this diff. I'm going to guess
> those are already merged into master and this MR is just confused.

Yes it's showing the last commit of master, I presume to give an idea where this was based. That commit is already on master not part of this change.

> Other than spelling mistake which won't affect functionality and some
> suggestions around the render_custom, I'm good with this rolling out, but
> would like to defer to IS reviewers for criticality of comments.

I've fixed they typo and added a bug to charm-helpers, thanks.

Revision history for this message
Jeremy Lounder (jldev) :
review: Approve
Revision history for this message
🤖 Canonical IS Merge Bot (canonical-is-mergebot) wrote :

Change successfully merged at revision 9bcd0fa07e51a0ee2347653286226efe15c3fff4

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/layer.yaml b/layer.yaml
2index df345e6..6e51d38 100644
3--- a/layer.yaml
4+++ b/layer.yaml
5@@ -1,3 +1,6 @@
6 includes: ['layer:basic', 'layer:snap', 'interface:nrpe-external-master', 'interface:grafana-source', 'interface:http', 'interface:grafana-dashboard']
7 ignore: ['.*.swp' ]
8+options:
9+ basic:
10+ include_system_packages: true
11 repo: https://git.launchpad.net/grafana-charm
12diff --git a/reactive/grafana.py b/reactive/grafana.py
13index ba40c2f..01bfcda 100644
14--- a/reactive/grafana.py
15+++ b/reactive/grafana.py
16@@ -32,6 +32,7 @@ from charms.reactive import (
17
18 from charms.layer import snap
19 from charms.layer.grafana import import_dashboard
20+from jinja2 import Environment, FileSystemLoader, exceptions
21
22 SVCNAME = {'snap': 'snap.grafana.grafana',
23 'apt': 'grafana-server'}
24@@ -499,6 +500,27 @@ def check_datasource(ds):
25 conn.close()
26
27
28+# This isn't exposed in charmhelpers: https://github.com/juju/charm-helpers/issues/367
29+def render_custom(source, context, **parameters):
30+ """
31+ Renders a template from the template folder with custom environment
32+ parameters.
33+ source: template file name to render from
34+ context: template context variables
35+ parameters: initialization parameters for the jinja Environment
36+
37+ returns the rendered template content
38+ """
39+ template_folder = os.path.join(hookenv.charm_dir(), 'templates/dashboards/prometheus')
40+ environment = Environment(loader=FileSystemLoader(template_folder), **parameters)
41+ try:
42+ template = environment.get_template(source)
43+ except exceptions.TemplateNotFound as e:
44+ hookenv.log('Could not load template {} from {}'.format(source, template_folder))
45+ raise e
46+ return template.render(context)
47+
48+
49 def generate_prometheus_dashboards(gf_adminpasswd, ds):
50 # prometheus_host = ds
51 ds_name = '{} - {}'.format(ds['service_name'], ds['description'])
52@@ -517,6 +539,7 @@ def generate_prometheus_dashboards(gf_adminpasswd, ds):
53 'external_network': config['external_network'],
54 'bcache_enabled': "bcache_cache_hit_ratio" in prom_metrics,
55 'bonds_enabled': "bond_status" in prom_metrics,
56+ 'conntrack_enabled': "nf_conntrack_max" in prom_metrics,
57 }
58 # we ignore some phrases picked up by the regex because they're not real
59 # metric names. Let's add them to the list of metrics to make life easy.
60@@ -527,10 +550,11 @@ def generate_prometheus_dashboards(gf_adminpasswd, ds):
61 'neutron_public_ip_usage']
62 prom_metrics.extend(ignore_metrics)
63 for filename in os.listdir(templates_dir):
64- dashboard_str = render(source=filename,
65- target=None,
66- context=context,
67- templates_dir=templates_dir)
68+ dashboard_str = render_custom(source=filename,
69+ context=context,
70+ variable_start_string="<<",
71+ variable_end_string=">>",
72+ )
73 hookenv.log("Checking Dashboard Template: {}".format(filename))
74 expr = str(re.findall('"expr":(.*),', dashboard_str))
75 metrics = set(re.findall('[a-zA-Z0-9]*_[a-zA-Z0-9_]*', expr))
76diff --git a/templates/dashboards/prometheus/CephCluster.json.j2 b/templates/dashboards/prometheus/CephCluster.json.j2
77index 4bd7ef5..f940b40 100644
78--- a/templates/dashboards/prometheus/CephCluster.json.j2
79+++ b/templates/dashboards/prometheus/CephCluster.json.j2
80@@ -3,7 +3,7 @@
81 {
82 "__inputs": [
83 {
84- "name": "{{ datasource }}",
85+ "name": "<< datasource >>",
86 "label": "prometheus - Juju generated source",
87 "description": "",
88 "type": "datasource",
89@@ -72,7 +72,7 @@
90 "rgba(237, 129, 40, 0.89)",
91 "rgba(245, 54, 54, 0.9)"
92 ],
93- "datasource": "{{ datasource }}",
94+ "datasource": "<< datasource >>",
95 "editable": true,
96 "error": false,
97 "format": "none",
98@@ -166,7 +166,7 @@
99 "rgba(237, 129, 40, 0.89)",
100 "rgba(50, 172, 45, 0.97)"
101 ],
102- "datasource": "{{ datasource }}",
103+ "datasource": "<< datasource >>",
104 "editable": true,
105 "error": false,
106 "format": "none",
107@@ -246,7 +246,7 @@
108 "rgba(237, 129, 40, 0.89)",
109 "rgba(50, 172, 45, 0.97)"
110 ],
111- "datasource": "{{ datasource }}",
112+ "datasource": "<< datasource >>",
113 "editable": true,
114 "error": false,
115 "format": "none",
116@@ -326,7 +326,7 @@
117 "rgba(237, 129, 40, 0.89)",
118 "rgba(245, 54, 54, 0.9)"
119 ],
120- "datasource": "{{ datasource }}",
121+ "datasource": "<< datasource >>",
122 "editable": true,
123 "error": false,
124 "format": "bytes",
125@@ -406,7 +406,7 @@
126 "rgba(237, 129, 40, 0.89)",
127 "rgba(245, 54, 54, 0.9)"
128 ],
129- "datasource": "{{ datasource }}",
130+ "datasource": "<< datasource >>",
131 "editable": true,
132 "error": false,
133 "format": "bytes",
134@@ -486,7 +486,7 @@
135 "rgba(237, 129, 40, 0.89)",
136 "rgba(245, 54, 54, 0.9)"
137 ],
138- "datasource": "{{ datasource }}",
139+ "datasource": "<< datasource >>",
140 "editable": true,
141 "error": false,
142 "format": "percentunit",
143@@ -578,7 +578,7 @@
144 "rgba(237, 129, 40, 0.89)",
145 "rgba(50, 172, 45, 0.97)"
146 ],
147- "datasource": "{{ datasource }}",
148+ "datasource": "<< datasource >>",
149 "editable": true,
150 "error": false,
151 "format": "none",
152@@ -657,7 +657,7 @@
153 "rgba(237, 40, 40, 0.89)",
154 "rgba(245, 54, 54, 0.9)"
155 ],
156- "datasource": "{{ datasource }}",
157+ "datasource": "<< datasource >>",
158 "editable": true,
159 "error": false,
160 "format": "none",
161@@ -736,7 +736,7 @@
162 "rgba(237, 129, 40, 0.89)",
163 "rgba(50, 172, 45, 0.97)"
164 ],
165- "datasource": "{{ datasource }}",
166+ "datasource": "<< datasource >>",
167 "editable": true,
168 "error": false,
169 "format": "none",
170@@ -815,7 +815,7 @@
171 "rgba(237, 40, 40, 0.89)",
172 "rgba(245, 54, 54, 0.9)"
173 ],
174- "datasource": "{{ datasource }}",
175+ "datasource": "<< datasource >>",
176 "editable": true,
177 "error": false,
178 "format": "none",
179@@ -894,7 +894,7 @@
180 "rgba(237, 129, 40, 0.89)",
181 "rgba(245, 54, 54, 0.9)"
182 ],
183- "datasource": "{{ datasource }}",
184+ "datasource": "<< datasource >>",
185 "editable": true,
186 "error": false,
187 "format": "none",
188@@ -973,7 +973,7 @@
189 "rgba(237, 129, 40, 0.89)",
190 "rgba(245, 54, 54, 0.9)"
191 ],
192- "datasource": "{{ datasource }}",
193+ "datasource": "<< datasource >>",
194 "editable": true,
195 "error": false,
196 "format": "s",
197@@ -1052,7 +1052,7 @@
198 "rgba(237, 129, 40, 0.89)",
199 "rgba(245, 54, 54, 0.9)"
200 ],
201- "datasource": "{{ datasource }}",
202+ "datasource": "<< datasource >>",
203 "editable": true,
204 "error": false,
205 "format": "s",
206@@ -1146,7 +1146,7 @@
207 "bars": false,
208 "dashLength": 10,
209 "dashes": false,
210- "datasource": "{{ datasource }}",
211+ "datasource": "<< datasource >>",
212 "editable": true,
213 "error": false,
214 "fill": 4,
215@@ -1259,7 +1259,7 @@
216 "bars": false,
217 "dashLength": 10,
218 "dashes": false,
219- "datasource": "{{ datasource }}",
220+ "datasource": "<< datasource >>",
221 "decimals": 0,
222 "editable": true,
223 "error": false,
224@@ -1352,7 +1352,7 @@
225 "bars": false,
226 "dashLength": 10,
227 "dashes": false,
228- "datasource": "{{ datasource }}",
229+ "datasource": "<< datasource >>",
230 "editable": true,
231 "error": false,
232 "fill": 1,
233@@ -1455,7 +1455,7 @@
234 "bars": false,
235 "dashLength": 10,
236 "dashes": false,
237- "datasource": "{{ datasource }}",
238+ "datasource": "<< datasource >>",
239 "editable": true,
240 "error": false,
241 "fill": 1,
242@@ -1558,7 +1558,7 @@
243 "bars": false,
244 "dashLength": 10,
245 "dashes": false,
246- "datasource": "{{ datasource }}",
247+ "datasource": "<< datasource >>",
248 "editable": true,
249 "error": false,
250 "fill": 1,
251@@ -1685,7 +1685,7 @@
252 "bars": false,
253 "dashLength": 10,
254 "dashes": false,
255- "datasource": "{{ datasource }}",
256+ "datasource": "<< datasource >>",
257 "editable": true,
258 "error": false,
259 "fill": 1,
260@@ -1808,7 +1808,7 @@
261 "bars": false,
262 "dashLength": 10,
263 "dashes": false,
264- "datasource": "{{ datasource }}",
265+ "datasource": "<< datasource >>",
266 "editable": true,
267 "error": false,
268 "fill": 1,
269@@ -1888,7 +1888,7 @@
270 "bars": false,
271 "dashLength": 10,
272 "dashes": false,
273- "datasource": "{{ datasource }}",
274+ "datasource": "<< datasource >>",
275 "editable": true,
276 "error": false,
277 "fill": 1,
278@@ -1973,7 +1973,7 @@
279 "bars": false,
280 "dashLength": 10,
281 "dashes": false,
282- "datasource": "{{ datasource }}",
283+ "datasource": "<< datasource >>",
284 "editable": true,
285 "error": false,
286 "fill": 1,
287diff --git a/templates/dashboards/prometheus/CephOSD.json.j2 b/templates/dashboards/prometheus/CephOSD.json.j2
288index 010f2a9..edfbd35 100644
289--- a/templates/dashboards/prometheus/CephOSD.json.j2
290+++ b/templates/dashboards/prometheus/CephOSD.json.j2
291@@ -3,7 +3,7 @@
292 {
293 "__inputs": [
294 {
295- "name": "{{ datasource }}",
296+ "name": "<< datasource >>",
297 "label": "prometheus - Juju generated source",
298 "description": "",
299 "type": "datasource",
300@@ -72,7 +72,7 @@
301 "rgba(237, 40, 40, 0.89)",
302 "rgba(50, 172, 45, 0.97)"
303 ],
304- "datasource": "{{ datasource }}",
305+ "datasource": "<< datasource >>",
306 "editable": true,
307 "error": false,
308 "format": "none",
309@@ -172,7 +172,7 @@
310 "rgba(237, 40, 40, 0.89)",
311 "rgba(50, 172, 45, 0.97)"
312 ],
313- "datasource": "{{ datasource }}",
314+ "datasource": "<< datasource >>",
315 "editable": true,
316 "error": false,
317 "format": "none",
318@@ -272,7 +272,7 @@
319 "rgba(237, 129, 40, 0.89)",
320 "rgba(50, 172, 45, 0.97)"
321 ],
322- "datasource": "{{ datasource }}",
323+ "datasource": "<< datasource >>",
324 "editable": true,
325 "error": false,
326 "format": "none",
327@@ -370,7 +370,7 @@
328 "bars": false,
329 "dashLength": 10,
330 "dashes": false,
331- "datasource": "{{ datasource }}",
332+ "datasource": "<< datasource >>",
333 "decimals": 2,
334 "editable": true,
335 "error": false,
336@@ -486,7 +486,7 @@
337 "rgba(237, 129, 40, 0.89)",
338 "rgba(245, 54, 54, 0.9)"
339 ],
340- "datasource": "{{ datasource }}",
341+ "datasource": "<< datasource >>",
342 "editable": true,
343 "error": false,
344 "format": "percent",
345@@ -575,7 +575,7 @@
346 "bars": false,
347 "dashLength": 10,
348 "dashes": false,
349- "datasource": "{{ datasource }}",
350+ "datasource": "<< datasource >>",
351 "decimals": 2,
352 "editable": true,
353 "error": false,
354@@ -666,7 +666,7 @@
355 "bars": false,
356 "dashLength": 10,
357 "dashes": false,
358- "datasource": "{{ datasource }}",
359+ "datasource": "<< datasource >>",
360 "decimals": 2,
361 "editable": true,
362 "error": false,
363@@ -760,7 +760,7 @@
364 "bars": false,
365 "dashLength": 10,
366 "dashes": false,
367- "datasource": "{{ datasource }}",
368+ "datasource": "<< datasource >>",
369 "decimals": 5,
370 "editable": true,
371 "error": false,
372@@ -934,7 +934,7 @@
373 {
374 "allValue": null,
375 "current": {},
376- "datasource": "{{ datasource }}",
377+ "datasource": "<< datasource >>",
378 "hide": 0,
379 "includeAll": false,
380 "label": "OSD",
381diff --git a/templates/dashboards/prometheus/CephPools.json.j2 b/templates/dashboards/prometheus/CephPools.json.j2
382index c848ae3..ca44642 100644
383--- a/templates/dashboards/prometheus/CephPools.json.j2
384+++ b/templates/dashboards/prometheus/CephPools.json.j2
385@@ -3,7 +3,7 @@
386 {
387 "__inputs": [
388 {
389- "name": "{{ datasource }}",
390+ "name": "<< datasource >>",
391 "label": "prometheus - Juju generated source",
392 "description": "",
393 "type": "datasource",
394@@ -68,7 +68,7 @@
395 "bars": false,
396 "dashLength": 10,
397 "dashes": false,
398- "datasource": "{{ datasource }}",
399+ "datasource": "<< datasource >>",
400 "decimals": 2,
401 "editable": true,
402 "error": false,
403@@ -198,7 +198,7 @@
404 "rgba(237, 129, 40, 0.89)",
405 "rgba(50, 172, 45, 0.97)"
406 ],
407- "datasource": "{{ datasource }}",
408+ "datasource": "<< datasource >>",
409 "decimals": 2,
410 "editable": true,
411 "error": false,
412@@ -285,7 +285,7 @@
413 "bars": false,
414 "dashLength": 10,
415 "dashes": false,
416- "datasource": "{{ datasource }}",
417+ "datasource": "<< datasource >>",
418 "editable": true,
419 "error": false,
420 "fill": 1,
421@@ -374,7 +374,7 @@
422 "bars": false,
423 "dashLength": 10,
424 "dashes": false,
425- "datasource": "{{ datasource }}",
426+ "datasource": "<< datasource >>",
427 "decimals": 2,
428 "editable": true,
429 "error": false,
430@@ -465,7 +465,7 @@
431 "bars": false,
432 "dashLength": 10,
433 "dashes": false,
434- "datasource": "{{ datasource }}",
435+ "datasource": "<< datasource >>",
436 "decimals": 2,
437 "editable": true,
438 "error": false,
439@@ -646,7 +646,7 @@
440 {
441 "allValue": null,
442 "current": {},
443- "datasource": "{{ datasource }}",
444+ "datasource": "<< datasource >>",
445 "hide": 0,
446 "includeAll": false,
447 "label": "Pool",
448diff --git a/templates/dashboards/prometheus/OpenStackCloud.json.j2 b/templates/dashboards/prometheus/OpenStackCloud.json.j2
449index da319ef..7fc82e0 100644
450--- a/templates/dashboards/prometheus/OpenStackCloud.json.j2
451+++ b/templates/dashboards/prometheus/OpenStackCloud.json.j2
452@@ -3,7 +3,7 @@
453 {
454 "__inputs": [
455 {
456- "name": "{{ datasource }}",
457+ "name": "<< datasource >>",
458 "label": "prometheus - Juju generated source",
459 "description": "",
460 "type": "datasource",
461@@ -95,7 +95,7 @@
462 "rgba(237, 129, 40, 0.89)",
463 "rgba(50, 172, 45, 0.97)"
464 ],
465- "datasource": "{{ datasource }}",
466+ "datasource": "<< datasource >>",
467 "editable": true,
468 "error": false,
469 "format": "none",
470@@ -144,7 +144,7 @@
471 "tableColumn": "",
472 "targets": [
473 {
474- "expr": "sum(neutron_net_size{network_name=\"{{ external_network }}\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"{{ external_network }}\",cloud=\"$cloud\"})",
475+ "expr": "sum(neutron_net_size{network_name=\"<< external_network >>\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"<< external_network >>\",cloud=\"$cloud\"})",
476 "intervalFactor": 2,
477 "legendFormat": "",
478 "metric": "",
479@@ -153,7 +153,7 @@
480 }
481 ],
482 "thresholds": "",
483- "title": "Free IPs ({{ external_network }})",
484+ "title": "Free IPs (<< external_network >>)",
485 "type": "singlestat",
486 "valueFontSize": "100%",
487 "valueMaps": [
488@@ -174,7 +174,7 @@
489 "rgba(237, 129, 40, 0.89)",
490 "rgba(50, 172, 45, 0.97)"
491 ],
492- "datasource": "{{ datasource }}",
493+ "datasource": "<< datasource >>",
494 "editable": true,
495 "error": false,
496 "format": "none",
497@@ -223,7 +223,7 @@
498 "tableColumn": "",
499 "targets": [
500 {
501- "expr": "(sum(neutron_net_size{network_name=\"{{ external_network }}\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"{{ external_network }}\",cloud=\"$cloud\",ip_status=\"ACTIVE\"})) - (sum(neutron_net_size{network_name=\"{{ external_network }}\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"{{ external_network }}\",cloud=\"$cloud\"}))",
502+ "expr": "(sum(neutron_net_size{network_name=\"<< external_network >>\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"<< external_network >>\",cloud=\"$cloud\",ip_status=\"ACTIVE\"})) - (sum(neutron_net_size{network_name=\"<< external_network >>\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"<< external_network >>\",cloud=\"$cloud\"}))",
503 "intervalFactor": 2,
504 "legendFormat": "",
505 "metric": "",
506@@ -232,7 +232,7 @@
507 }
508 ],
509 "thresholds": "",
510- "title": "Unused IPs ({{ external_network }})",
511+ "title": "Unused IPs (<< external_network >>)",
512 "type": "singlestat",
513 "valueFontSize": "100%",
514 "valueMaps": [
515@@ -253,7 +253,7 @@
516 "rgba(237, 129, 40, 0.89)",
517 "rgba(50, 172, 45, 0.97)"
518 ],
519- "datasource": "{{ datasource }}",
520+ "datasource": "<< datasource >>",
521 "editable": true,
522 "error": false,
523 "format": "none",
524@@ -340,7 +340,7 @@
525 "bars": false,
526 "dashLength": 10,
527 "dashes": false,
528- "datasource": "{{ datasource }}",
529+ "datasource": "<< datasource >>",
530 "editable": true,
531 "error": false,
532 "fill": 4,
533@@ -418,7 +418,7 @@
534 "bars": false,
535 "dashLength": 10,
536 "dashes": false,
537- "datasource": "{{ datasource }}",
538+ "datasource": "<< datasource >>",
539 "editable": true,
540 "error": false,
541 "fill": 4,
542@@ -452,7 +452,7 @@
543 "steppedLine": false,
544 "targets": [
545 {
546- "expr": "sum(neutron_net_size{network_name=\"{{ external_network }}\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"{{ external_network }}\",cloud=\"$cloud\"})",
547+ "expr": "sum(neutron_net_size{network_name=\"<< external_network >>\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"<< external_network >>\",cloud=\"$cloud\"})",
548 "intervalFactor": 2,
549 "legendFormat": "",
550 "refId": "A",
551@@ -505,7 +505,7 @@
552 "rgba(237, 129, 40, 0.89)",
553 "rgba(50, 172, 45, 0.97)"
554 ],
555- "datasource": "{{ datasource }}",
556+ "datasource": "<< datasource >>",
557 "editable": true,
558 "error": false,
559 "format": "s",
560@@ -580,7 +580,7 @@
561 "value": "current"
562 }
563 ],
564- "datasource": "{{ datasource }}",
565+ "datasource": "<< datasource >>",
566 "editable": true,
567 "error": false,
568 "fontSize": "100%",
569@@ -641,7 +641,7 @@
570 {
571 "aliasColors": {},
572 "bars": false,
573- "datasource": "{{ datasource }}",
574+ "datasource": "<< datasource >>",
575 "editable": true,
576 "error": false,
577 "fill": 3,
578@@ -747,7 +747,7 @@
579 "value": "current"
580 }
581 ],
582- "datasource": "{{ datasource }}",
583+ "datasource": "<< datasource >>",
584 "editable": true,
585 "error": false,
586 "fontSize": "80%",
587@@ -803,7 +803,7 @@
588 "value": "current"
589 }
590 ],
591- "datasource": "{{ datasource }}",
592+ "datasource": "<< datasource >>",
593 "editable": true,
594 "error": false,
595 "fontSize": "80%",
596@@ -873,7 +873,7 @@
597 "rgba(237, 129, 40, 0.89)",
598 "rgba(50, 172, 45, 0.97)"
599 ],
600- "datasource": "{{ datasource }}",
601+ "datasource": "<< datasource >>",
602 "editable": true,
603 "error": false,
604 "format": "mbytes",
605@@ -952,7 +952,7 @@
606 "rgba(237, 129, 40, 0.89)",
607 "rgba(50, 172, 45, 0.97)"
608 ],
609- "datasource": "{{ datasource }}",
610+ "datasource": "<< datasource >>",
611 "editable": true,
612 "error": false,
613 "format": "none",
614@@ -1032,7 +1032,7 @@
615 "rgba(237, 129, 40, 0.89)",
616 "rgba(50, 172, 45, 0.97)"
617 ],
618- "datasource": "{{ datasource }}",
619+ "datasource": "<< datasource >>",
620 "editable": true,
621 "error": false,
622 "format": "gbytes",
623@@ -1112,7 +1112,7 @@
624 "rgba(237, 129, 40, 0.89)",
625 "rgba(50, 172, 45, 0.97)"
626 ],
627- "datasource": "{{ datasource }}",
628+ "datasource": "<< datasource >>",
629 "decimals": 1,
630 "editable": true,
631 "error": false,
632@@ -1193,7 +1193,7 @@
633 "rgba(237, 129, 40, 0.89)",
634 "rgba(50, 172, 45, 0.97)"
635 ],
636- "datasource": "{{ datasource }}",
637+ "datasource": "<< datasource >>",
638 "editable": true,
639 "error": false,
640 "format": "none",
641@@ -1272,7 +1272,7 @@
642 "rgba(237, 129, 40, 0.89)",
643 "rgba(50, 172, 45, 0.97)"
644 ],
645- "datasource": "{{ datasource }}",
646+ "datasource": "<< datasource >>",
647 "editable": true,
648 "error": false,
649 "format": "none",
650@@ -1351,7 +1351,7 @@
651 "rgba(237, 129, 40, 0.89)",
652 "rgba(50, 172, 45, 0.97)"
653 ],
654- "datasource": "{{ datasource }}",
655+ "datasource": "<< datasource >>",
656 "editable": true,
657 "error": false,
658 "format": "none",
659@@ -1426,7 +1426,7 @@
660 "bars": false,
661 "dashLength": 10,
662 "dashes": false,
663- "datasource": "{{ datasource }}",
664+ "datasource": "<< datasource >>",
665 "editable": true,
666 "error": false,
667 "fill": 1,
668@@ -1506,7 +1506,7 @@
669 "bars": false,
670 "dashLength": 10,
671 "dashes": false,
672- "datasource": "{{ datasource }}",
673+ "datasource": "<< datasource >>",
674 "editable": true,
675 "error": false,
676 "fill": 1,
677@@ -1586,7 +1586,7 @@
678 "bars": false,
679 "dashLength": 10,
680 "dashes": false,
681- "datasource": "{{ datasource }}",
682+ "datasource": "<< datasource >>",
683 "editable": true,
684 "error": false,
685 "fill": 1,
686@@ -1666,7 +1666,7 @@
687 "bars": false,
688 "dashLength": 10,
689 "dashes": false,
690- "datasource": "{{ datasource }}",
691+ "datasource": "<< datasource >>",
692 "editable": true,
693 "error": false,
694 "fill": 1,
695@@ -1746,7 +1746,7 @@
696 "bars": false,
697 "dashLength": 10,
698 "dashes": false,
699- "datasource": "{{ datasource }}",
700+ "datasource": "<< datasource >>",
701 "editable": true,
702 "error": false,
703 "fill": 1,
704@@ -1828,7 +1828,7 @@
705 "value": "current"
706 }
707 ],
708- "datasource": "{{ datasource }}",
709+ "datasource": "<< datasource >>",
710 "editable": true,
711 "error": false,
712 "fontSize": "100%",
713@@ -1894,7 +1894,7 @@
714 "value": "current"
715 }
716 ],
717- "datasource": "{{ datasource }}",
718+ "datasource": "<< datasource >>",
719 "editable": true,
720 "error": false,
721 "fontSize": "100%",
722@@ -1954,7 +1954,7 @@
723 "value": "current"
724 }
725 ],
726- "datasource": "{{ datasource }}",
727+ "datasource": "<< datasource >>",
728 "editable": true,
729 "error": false,
730 "fontSize": "100%",
731@@ -2014,7 +2014,7 @@
732 "value": "current"
733 }
734 ],
735- "datasource": "{{ datasource }}",
736+ "datasource": "<< datasource >>",
737 "editable": true,
738 "error": false,
739 "fontSize": "100%",
740@@ -2082,7 +2082,7 @@
741 {
742 "aliasColors": {},
743 "bars": false,
744- "datasource": "{{ datasource }}",
745+ "datasource": "<< datasource >>",
746 "decimals": 0,
747 "editable": true,
748 "error": false,
749@@ -2160,7 +2160,7 @@
750 {
751 "aliasColors": {},
752 "bars": false,
753- "datasource": "{{ datasource }}",
754+ "datasource": "<< datasource >>",
755 "editable": true,
756 "error": false,
757 "fill": 0,
758@@ -2235,7 +2235,7 @@
759 {
760 "aliasColors": {},
761 "bars": false,
762- "datasource": "{{ datasource }}",
763+ "datasource": "<< datasource >>",
764 "editable": true,
765 "error": false,
766 "fill": 0,
767@@ -2310,7 +2310,7 @@
768 {
769 "aliasColors": {},
770 "bars": false,
771- "datasource": "{{ datasource }}",
772+ "datasource": "<< datasource >>",
773 "editable": true,
774 "error": false,
775 "fill": 0,
776@@ -2385,7 +2385,7 @@
777 {
778 "aliasColors": {},
779 "bars": false,
780- "datasource": "{{ datasource }}",
781+ "datasource": "<< datasource >>",
782 "editable": true,
783 "error": false,
784 "fill": 0,
785@@ -2472,7 +2472,7 @@
786 {
787 "aliasColors": {},
788 "bars": false,
789- "datasource": "{{ datasource }}",
790+ "datasource": "<< datasource >>",
791 "editable": true,
792 "error": false,
793 "fill": 1,
794@@ -2549,7 +2549,7 @@
795 {
796 "aliasColors": {},
797 "bars": false,
798- "datasource": "{{ datasource }}",
799+ "datasource": "<< datasource >>",
800 "editable": true,
801 "error": false,
802 "fill": 1,
803@@ -2627,7 +2627,7 @@
804 {
805 "aliasColors": {},
806 "bars": false,
807- "datasource": "{{ datasource }}",
808+ "datasource": "<< datasource >>",
809 "editable": true,
810 "error": false,
811 "fill": 1,
812@@ -2721,7 +2721,7 @@
813 {
814 "allValue": null,
815 "current": {},
816- "datasource": "{{ datasource }}",
817+ "datasource": "<< datasource >>",
818 "hide": 0,
819 "includeAll": false,
820 "label": null,
821@@ -2741,7 +2741,7 @@
822 {
823 "allValue": null,
824 "current": {},
825- "datasource": "{{ datasource }}",
826+ "datasource": "<< datasource >>",
827 "hide": 2,
828 "includeAll": false,
829 "label": null,
830@@ -2761,7 +2761,7 @@
831 {
832 "allValue": null,
833 "current": {},
834- "datasource": "{{ datasource }}",
835+ "datasource": "<< datasource >>",
836 "hide": 2,
837 "includeAll": true,
838 "label": "External networks",
839@@ -2781,7 +2781,7 @@
840 {
841 "allValue": null,
842 "current": {},
843- "datasource": "{{ datasource }}",
844+ "datasource": "<< datasource >>",
845 "hide": 2,
846 "includeAll": true,
847 "label": null,
848@@ -2801,7 +2801,7 @@
849 {
850 "allValue": ".*",
851 "current": {},
852- "datasource": "{{ datasource }}",
853+ "datasource": "<< datasource >>",
854 "hide": 2,
855 "includeAll": true,
856 "label": null,
857@@ -2821,7 +2821,7 @@
858 {
859 "allValue": ".*",
860 "current": {},
861- "datasource": "{{ datasource }}",
862+ "datasource": "<< datasource >>",
863 "hide": 0,
864 "includeAll": true,
865 "label": "availability zone",
866diff --git a/templates/dashboards/prometheus/RabbitMQ.json.j2 b/templates/dashboards/prometheus/RabbitMQ.json.j2
867index f0d433e..aa2f706 100644
868--- a/templates/dashboards/prometheus/RabbitMQ.json.j2
869+++ b/templates/dashboards/prometheus/RabbitMQ.json.j2
870@@ -3,7 +3,7 @@
871 {
872 "__inputs": [
873 {
874- "name": "{{ datasource }}",
875+ "name": "<< datasource >>",
876 "label": "prometheus - Juju generated source",
877 "description": "",
878 "type": "datasource",
879@@ -60,7 +60,7 @@
880 "bars": false,
881 "dashLength": 10,
882 "dashes": false,
883- "datasource": "{{ datasource }}",
884+ "datasource": "<< datasource >>",
885 "fill": 1,
886 "id": 1,
887 "legend": {
888@@ -137,7 +137,7 @@
889 "bars": false,
890 "dashLength": 10,
891 "dashes": false,
892- "datasource": "{{ datasource }}",
893+ "datasource": "<< datasource >>",
894 "fill": 1,
895 "id": 2,
896 "legend": {
897@@ -246,7 +246,7 @@
898 "bars": false,
899 "dashLength": 10,
900 "dashes": false,
901- "datasource": "{{ datasource }}",
902+ "datasource": "<< datasource >>",
903 "fill": 1,
904 "id": 3,
905 "legend": {
906@@ -323,7 +323,7 @@
907 "bars": false,
908 "dashLength": 10,
909 "dashes": false,
910- "datasource": "{{ datasource }}",
911+ "datasource": "<< datasource >>",
912 "fill": 1,
913 "id": 5,
914 "legend": {
915@@ -400,7 +400,7 @@
916 "bars": false,
917 "dashLength": 10,
918 "dashes": false,
919- "datasource": "{{ datasource }}",
920+ "datasource": "<< datasource >>",
921 "fill": 1,
922 "id": 4,
923 "legend": {
924@@ -477,7 +477,7 @@
925 "bars": false,
926 "dashLength": 10,
927 "dashes": false,
928- "datasource": "{{ datasource }}",
929+ "datasource": "<< datasource >>",
930 "fill": 1,
931 "id": 6,
932 "legend": {
933@@ -566,7 +566,7 @@
934 "bars": false,
935 "dashLength": 10,
936 "dashes": false,
937- "datasource": "{{ datasource }}",
938+ "datasource": "<< datasource >>",
939 "fill": 1,
940 "id": 7,
941 "legend": {
942@@ -643,7 +643,7 @@
943 "bars": false,
944 "dashLength": 10,
945 "dashes": false,
946- "datasource": "{{ datasource }}",
947+ "datasource": "<< datasource >>",
948 "decimals": 2,
949 "fill": 1,
950 "id": 8,
951@@ -722,7 +722,7 @@
952 "bars": false,
953 "dashLength": 10,
954 "dashes": false,
955- "datasource": "{{ datasource }}",
956+ "datasource": "<< datasource >>",
957 "decimals": 2,
958 "fill": 1,
959 "id": 9,
960@@ -801,7 +801,7 @@
961 "bars": false,
962 "dashLength": 10,
963 "dashes": false,
964- "datasource": "{{ datasource }}",
965+ "datasource": "<< datasource >>",
966 "decimals": 2,
967 "fill": 1,
968 "id": 10,
969diff --git a/templates/dashboards/prometheus/Swift.json.j2 b/templates/dashboards/prometheus/Swift.json.j2
970index e9cf9ea..79eaf54 100644
971--- a/templates/dashboards/prometheus/Swift.json.j2
972+++ b/templates/dashboards/prometheus/Swift.json.j2
973@@ -3,7 +3,7 @@
974 {
975 "__inputs": [
976 {
977- "name": "{{ datasource }}",
978+ "name": "<< datasource >>",
979 "label": "prometheus - Juju generated source",
980 "description": "",
981 "type": "datasource",
982@@ -61,7 +61,7 @@
983 "bars": false,
984 "dashLength": 10,
985 "dashes": false,
986- "datasource": "{{ datasource }}",
987+ "datasource": "<< datasource >>",
988 "fill": 0,
989 "id": 1,
990 "legend": {
991@@ -139,7 +139,7 @@
992 "bars": false,
993 "dashLength": 10,
994 "dashes": false,
995- "datasource": "{{ datasource }}",
996+ "datasource": "<< datasource >>",
997 "fill": 1,
998 "id": 4,
999 "legend": {
1000@@ -229,7 +229,7 @@
1001 "bars": false,
1002 "dashLength": 10,
1003 "dashes": false,
1004- "datasource": "{{ datasource }}",
1005+ "datasource": "<< datasource >>",
1006 "fill": 4,
1007 "id": 2,
1008 "legend": {
1009@@ -308,7 +308,7 @@
1010 "bars": false,
1011 "dashLength": 10,
1012 "dashes": false,
1013- "datasource": "{{ datasource }}",
1014+ "datasource": "<< datasource >>",
1015 "description": "Deferred container updates",
1016 "fill": 1,
1017 "id": 3,
1018@@ -398,7 +398,7 @@
1019 "bars": false,
1020 "dashLength": 10,
1021 "dashes": false,
1022- "datasource": "{{ datasource }}",
1023+ "datasource": "<< datasource >>",
1024 "fill": 6,
1025 "id": 5,
1026 "legend": {
1027@@ -487,7 +487,7 @@
1028 "bars": false,
1029 "dashLength": 10,
1030 "dashes": false,
1031- "datasource": "{{ datasource }}",
1032+ "datasource": "<< datasource >>",
1033 "fill": 1,
1034 "id": 6,
1035 "legend": {
1036@@ -579,7 +579,7 @@
1037 "bars": false,
1038 "dashLength": 10,
1039 "dashes": false,
1040- "datasource": "{{ datasource }}",
1041+ "datasource": "<< datasource >>",
1042 "fill": 6,
1043 "id": 9,
1044 "legend": {
1045@@ -668,7 +668,7 @@
1046 "bars": false,
1047 "dashLength": 10,
1048 "dashes": false,
1049- "datasource": "{{ datasource }}",
1050+ "datasource": "<< datasource >>",
1051 "fill": 1,
1052 "id": 10,
1053 "legend": {
1054@@ -760,7 +760,7 @@
1055 "bars": false,
1056 "dashLength": 10,
1057 "dashes": false,
1058- "datasource": "{{ datasource }}",
1059+ "datasource": "<< datasource >>",
1060 "fill": 1,
1061 "id": 7,
1062 "legend": {
1063@@ -849,7 +849,7 @@
1064 "bars": false,
1065 "dashLength": 10,
1066 "dashes": false,
1067- "datasource": "{{ datasource }}",
1068+ "datasource": "<< datasource >>",
1069 "fill": 1,
1070 "id": 8,
1071 "legend": {
1072diff --git a/templates/dashboards/prometheus/Telegraf.json.j2 b/templates/dashboards/prometheus/Telegraf.json.j2
1073index a58f03e..556149f 100644
1074--- a/templates/dashboards/prometheus/Telegraf.json.j2
1075+++ b/templates/dashboards/prometheus/Telegraf.json.j2
1076@@ -3,7 +3,7 @@
1077 {
1078 "__inputs": [
1079 {
1080- "name": "{{ datasource }}",
1081+ "name": "<< datasource >>",
1082 "label": "prometheus - Juju generated source",
1083 "description": "",
1084 "type": "datasource",
1085@@ -85,7 +85,7 @@
1086 "rgba(237, 129, 40, 0.89)",
1087 "rgba(245, 54, 54, 0.9)"
1088 ],
1089- "datasource": "{{ datasource }}",
1090+ "datasource": "<< datasource >>",
1091 "format": "none",
1092 "gauge": {
1093 "maxValue": 100,
1094@@ -170,7 +170,7 @@
1095 "bars": false,
1096 "dashLength": 10,
1097 "dashes": false,
1098- "datasource": "{{ datasource }}",
1099+ "datasource": "<< datasource >>",
1100 "description": "",
1101 "fill": 1,
1102 "id": 1,
1103@@ -264,7 +264,7 @@
1104 "bars": false,
1105 "dashLength": 10,
1106 "dashes": false,
1107- "datasource": "{{ datasource }}",
1108+ "datasource": "<< datasource >>",
1109 "description": "",
1110 "fill": 6,
1111 "id": 4,
1112@@ -358,7 +358,7 @@
1113 "bars": false,
1114 "dashLength": 10,
1115 "dashes": false,
1116- "datasource": "{{ datasource }}",
1117+ "datasource": "<< datasource >>",
1118 "editable": true,
1119 "error": false,
1120 "fill": 4,
1121@@ -490,7 +490,7 @@
1122 "bars": false,
1123 "dashLength": 10,
1124 "dashes": false,
1125- "datasource": "{{ datasource }}",
1126+ "datasource": "<< datasource >>",
1127 "description": "",
1128 "fill": 1,
1129 "id": 14,
1130@@ -568,7 +568,7 @@
1131 "bars": false,
1132 "dashLength": 10,
1133 "dashes": false,
1134- "datasource": "{{ datasource }}",
1135+ "datasource": "<< datasource >>",
1136 "description": "",
1137 "fill": 1,
1138 "id": 15,
1139@@ -666,7 +666,7 @@
1140 "bars": false,
1141 "dashLength": 10,
1142 "dashes": false,
1143- "datasource": "{{ datasource }}",
1144+ "datasource": "<< datasource >>",
1145 "editable": true,
1146 "error": false,
1147 "fill": 1,
1148@@ -848,7 +848,7 @@
1149 "bars": false,
1150 "dashLength": 10,
1151 "dashes": false,
1152- "datasource": "{{ datasource }}",
1153+ "datasource": "<< datasource >>",
1154 "editable": true,
1155 "error": false,
1156 "fill": 3,
1157@@ -955,7 +955,7 @@
1158 "bars": false,
1159 "dashLength": 10,
1160 "dashes": false,
1161- "datasource": "{{ datasource }}",
1162+ "datasource": "<< datasource >>",
1163 "editable": true,
1164 "error": false,
1165 "fill": 0,
1166@@ -1062,7 +1062,7 @@
1167 "bars": false,
1168 "dashLength": 10,
1169 "dashes": false,
1170- "datasource": "{{ datasource }}",
1171+ "datasource": "<< datasource >>",
1172 "fill": 1,
1173 "id": 16,
1174 "legend": {
1175@@ -1170,7 +1170,7 @@
1176 "bars": false,
1177 "dashLength": 10,
1178 "dashes": false,
1179- "datasource": "{{ datasource }}",
1180+ "datasource": "<< datasource >>",
1181 "decimals": null,
1182 "fill": 1,
1183 "id": 23,
1184@@ -1254,7 +1254,7 @@
1185 "bars": true,
1186 "dashLength": 10,
1187 "dashes": false,
1188- "datasource": "{{ datasource }}",
1189+ "datasource": "<< datasource >>",
1190 "fill": 1,
1191 "id": 24,
1192 "legend": {
1193@@ -1333,7 +1333,7 @@
1194 "bars": true,
1195 "dashLength": 10,
1196 "dashes": false,
1197- "datasource": "{{ datasource }}",
1198+ "datasource": "<< datasource >>",
1199 "fill": 1,
1200 "id": 25,
1201 "legend": {
1202@@ -1417,9 +1417,9 @@
1203 "showTitle": true,
1204 "title": "Network",
1205 "titleSize": "h6"
1206- },
1207+ }
1208 {% if bcache_enabled %}
1209- {
1210+ ,{
1211 "collapse": true,
1212 "height": 250,
1213 "panels": [
1214@@ -1428,7 +1428,7 @@
1215 "bars": false,
1216 "dashLength": 10,
1217 "dashes": false,
1218- "datasource": "{{ datasource }}",
1219+ "datasource": "<< datasource >>",
1220 "editable": true,
1221 "error": false,
1222 "fill": 0,
1223@@ -1509,7 +1509,7 @@
1224 "bars": false,
1225 "dashLength": 10,
1226 "dashes": false,
1227- "datasource": "{{ datasource }}",
1228+ "datasource": "<< datasource >>",
1229 "editable": true,
1230 "error": false,
1231 "fill": 0,
1232@@ -1590,7 +1590,7 @@
1233 "bars": false,
1234 "dashLength": 10,
1235 "dashes": false,
1236- "datasource": "{{ datasource }}",
1237+ "datasource": "<< datasource >>",
1238 "editable": true,
1239 "error": false,
1240 "fill": 0,
1241@@ -1671,7 +1671,7 @@
1242 "bars": false,
1243 "dashLength": 10,
1244 "dashes": false,
1245- "datasource": "{{ datasource }}",
1246+ "datasource": "<< datasource >>",
1247 "editable": true,
1248 "error": false,
1249 "fill": 0,
1250@@ -1764,7 +1764,7 @@
1251 "bars": false,
1252 "dashLength": 10,
1253 "dashes": false,
1254- "datasource": "{{ datasource }}",
1255+ "datasource": "<< datasource >>",
1256 "fill": 1,
1257 "id": 18,
1258 "legend": {
1259@@ -1844,7 +1844,7 @@
1260 "bars": false,
1261 "dashLength": 10,
1262 "dashes": false,
1263- "datasource": "{{ datasource }}",
1264+ "datasource": "<< datasource >>",
1265 "fill": 1,
1266 "id": 19,
1267 "legend": {
1268@@ -1924,7 +1924,7 @@
1269 "bars": false,
1270 "dashLength": 10,
1271 "dashes": false,
1272- "datasource": "{{ datasource }}",
1273+ "datasource": "<< datasource >>",
1274 "fill": 1,
1275 "id": 20,
1276 "legend": {
1277@@ -2005,9 +2005,10 @@
1278 "showTitle": true,
1279 "title": "Bcache",
1280 "titleSize": "h6"
1281- },
1282+ }
1283 {% endif %}
1284- {
1285+ {% if conntrack_enabled %}
1286+ ,{
1287 "collapse": false,
1288 "height": 250,
1289 "panels": [
1290@@ -2016,7 +2017,7 @@
1291 "bars": false,
1292 "dashLength": 10,
1293 "dashes": false,
1294- "datasource": "{{ datasource }}",
1295+ "datasource": "<< datasource >>",
1296 "fill": 1,
1297 "id": 21,
1298 "legend": {
1299@@ -2095,7 +2096,7 @@
1300 "bars": false,
1301 "dashLength": 10,
1302 "dashes": false,
1303- "datasource": "{{ datasource }}",
1304+ "datasource": "<< datasource >>",
1305 "fill": 1,
1306 "id": 22,
1307 "legend": {
1308@@ -2177,6 +2178,7 @@
1309 "title": "Kernel",
1310 "titleSize": "h6"
1311 }
1312+ {% endif %}
1313 ],
1314 "schemaVersion": 14,
1315 "style": "dark",
1316@@ -2186,7 +2188,7 @@
1317 {
1318 "allValue": ".*",
1319 "current": {},
1320- "datasource": "{{ datasource }}",
1321+ "datasource": "<< datasource >>",
1322 "hide": 0,
1323 "includeAll": false,
1324 "label": "non-juju hosts",

Subscribers

People subscribed via source and target branches