From: Sage Weil Date: Tue, 4 Feb 2020 20:43:11 +0000 (-0600) Subject: mgr/cephadm: teach _create_daemon how to provision prometheus X-Git-Tag: v15.1.1~412^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e6d007e081896407bfaa117e71332cfdd32d5a22;p=ceph-ci.git mgr/cephadm: teach _create_daemon how to provision prometheus Signed-off-by: Sage Weil --- diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index cea6c6b3b4c..bb0d420e811 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -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