]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/cephadm: teach _create_daemon how to provision prometheus
authorSage Weil <sage@redhat.com>
Tue, 4 Feb 2020 20:43:11 +0000 (14:43 -0600)
committerSage Weil <sage@redhat.com>
Thu, 13 Feb 2020 19:59:36 +0000 (13:59 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/pybind/mgr/cephadm/module.py

index cea6c6b3b4c32f4043c56c99526b743bbd491b6a..bb0d420e8118a3f06f36e7ff3c87c572318208e4 100644 (file)
@@ -1680,49 +1680,54 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin):
             extra_args = []
         name = '%s.%s' % (daemon_type, daemon_id)
 
-        # keyring
-        if not keyring:
-            if daemon_type == 'mon':
-                ename = 'mon.'
-            else:
-                ename = '%s.%s' % (daemon_type, daemon_id)
-            ret, keyring, err = self.mon_command({
-                'prefix': 'auth get',
-                'entity': ename,
-            })
+        if daemon_type == 'prometheus':
+            j = self._generate_prometheus_config()
+            extra_args.extend(['--config-json', '-'])
+        else:
+            # keyring
+            if not keyring:
+                if daemon_type == 'mon':
+                    ename = 'mon.'
+                else:
+                    ename = '%s.%s' % (daemon_type, daemon_id)
+                ret, keyring, err = self.mon_command({
+                    'prefix': 'auth get',
+                    'entity': ename,
+                })
 
-        # generate config
-        ret, config, err = self.mon_command({
-            "prefix": "config generate-minimal-conf",
-        })
-        if extra_config:
-            config += extra_config
-
-        if daemon_type != 'crash':
-            # crash_keyring
-            ret, crash_keyring, err = self.mon_command({
-                'prefix': 'auth get-or-create',
-                'entity': 'client.crash.%s' % host,
-                'caps': ['mon', 'profile crash',
-                         'mgr', 'profile crash'],
+            # generate config
+            ret, config, err = self.mon_command({
+                "prefix": "config generate-minimal-conf",
             })
-        else:
-            crash_keyring = None
+            if extra_config:
+                config += extra_config
+
+            if daemon_type != 'crash':
+                # crash_keyring
+                ret, crash_keyring, err = self.mon_command({
+                    'prefix': 'auth get-or-create',
+                    'entity': 'client.crash.%s' % host,
+                    'caps': ['mon', 'profile crash',
+                             'mgr', 'profile crash'],
+                })
+            else:
+                crash_keyring = None
 
-        j = json.dumps({
-            'config': config,
-            'keyring': keyring,
-            'crash_keyring': crash_keyring,
-        })
+            j = json.dumps({
+                'config': config,
+                'keyring': keyring,
+                'crash_keyring': crash_keyring,
+            })
+            extra_args.extend(['--config-and-keyrings', '-'])
 
-        # osd deployments needs an --osd-uuid arg
-        if daemon_type == 'osd':
-            if not osd_uuid_map:
-                osd_uuid_map = self.get_osd_uuid_map()
-            osd_uuid = osd_uuid_map.get(daemon_id, None)
-            if not osd_uuid:
-                raise OrchestratorError('osd.%d not in osdmap' % daemon_id)
-            extra_args.extend(['--osd-fsid', osd_uuid])
+            # osd deployments needs an --osd-uuid arg
+            if daemon_type == 'osd':
+                if not osd_uuid_map:
+                    osd_uuid_map = self.get_osd_uuid_map()
+                osd_uuid = osd_uuid_map.get(daemon_id, None)
+                if not osd_uuid:
+                    raise OrchestratorError('osd.%d not in osdmap' % daemon_id)
+                extra_args.extend(['--osd-fsid', osd_uuid])
 
         if reconfig:
             extra_args.append('--reconfig')
@@ -1731,7 +1736,6 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin):
             host, name, 'deploy',
             [
                 '--name', name,
-                '--config-and-keyrings', '-',
             ] + extra_args,
             stdin=j)
         self.log.debug('create_daemon code %s out %s' % (code, out))
@@ -2138,6 +2142,31 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin):
         spec = NodeAssignment(spec=spec, get_hosts_func=self._get_hosts, service_type='rbd-mirror').load()
         return self._update_service('rbd-mirror', self.add_rbd_mirror, spec)
 
+    def _generate_prometheus_config(self):
+        mgr_map = self.get('mgr_map')
+        mgr_scrape_list = []
+        # *** FIXME *** we should scrape all mgrs here ***
+        t = mgr_map.get('services', {}).get('prometheus', None)
+        if t:
+            t = t.split('/')[2]
+            mgr_scrape_list = [t]
+        j = json.dumps({
+            'prometheus.yml': """# generated by cephadm
+global:
+  scrape_interval: 5s
+  evaluation_interval: 10s
+rule_files:
+  - /etc/prometheus/alerting/*
+scrape_configs:
+  - job_name: 'ceph'
+    static_configs:
+    - targets: {mgr_scrape_list}
+""".format(
+    mgr_scrape_list=str(mgr_scrape_list)
+    )
+        })
+        return j
+
     def _get_container_image_id(self, image_name):
         # pick a random host...
         host = None