From f30012c282c909e957dcd881e56148ee3ff05a09 Mon Sep 17 00:00:00 2001 From: Patrick Seidensal Date: Mon, 24 Feb 2020 14:54:50 +0100 Subject: [PATCH] mgr/cephadm: dynamically add Grafana data sources depending on which Prometheus services have been deployed. Signed-off-by: Patrick Seidensal --- src/pybind/mgr/cephadm/module.py | 58 +++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index cb0066e805f..4edf6d2de57 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -2224,7 +2224,46 @@ scrape_configs: return j def _generate_grafana_config(self): - return json.dumps({ + def generate_grafana_ds_config(hosts: List[str]) -> str: + config = '''# generated by cephadm +deleteDatasources: +{delete_data_sources} + +datasources: +{data_sources} +''' + delete_ds_template = ''' + - name: '{name}' + orgId: 1\n'''.lstrip('\n') + ds_template = ''' + - name: '{name}' + type: 'prometheus' + access: 'proxy' + orgId: 1 + url: 'http://{host}:9095' + basicAuth: false + isDefault: {is_default} + editable: false\n'''.lstrip('\n') + + delete_data_sources = '' + data_sources = '' + for i, host in enumerate(hosts): + name = "Dashboard %d" % (i + 1) + data_sources += ds_template.format( + name=name, + host=host, + is_default=str(i == 0).lower() + ) + delete_data_sources += delete_ds_template.format( + name=name + ) + return config.format( + delete_data_sources=delete_data_sources, + data_sources=data_sources, + ) + + prom_services = [ps.nodename for ps in self.cache.get_daemons_by_type('prometheus')] + config_file = json.dumps({ 'files': { "grafana.ini": """# generated by cephadm [users] @@ -2245,21 +2284,7 @@ scrape_configs: admin_password = admin allow_embedding = true """, - "provisioning/datasources/ceph-dashboard.yml": """# generated by cephadm -deleteDatasources: - - name: 'Dashboard' - orgId: 1 - -datasources: - - name: 'Dashboard' - type: 'prometheus' - access: 'proxy' - orgId: 1 - url: 'http://localhost:9095' - basicAuth: false - isDefault: true - editable: false -""", + 'provisioning/datasources/ceph-dashboard.yml': generate_grafana_ds_config(prom_services), 'certs/cert_file': '''# generated by cephadm -----BEGIN CERTIFICATE----- MIIDLTCCAhWgAwIBAgIUEH0mq6u93LKsWlNXst5pxWcuqkQwDQYJKoZIhvcNAQEL @@ -2312,6 +2337,7 @@ mEl75h1ToBX9yvnH39o50g== -----END PRIVATE KEY-----''', } }) + return config_file def add_prometheus(self, spec): return self._add_daemon('prometheus', spec, self._create_prometheus) -- 2.39.5