mirror of
https://github.com/ceph/ceph
synced 2026-08-02 07:03:18 +00:00
Merge pull request #67339 from kginonredhat/wip-74658-fix-prometheus_sd_config-returns-hostnames-instead-of-IP
mgr/cephadm: prometheus_sd_config() returns hostnames instead of IP addresses Reviewed-by: Redouane Kachach <rkachach@ibm.com> Reviewed-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
commit
b4b8d2121f
@ -169,11 +169,14 @@ class Root:
|
||||
"""
|
||||
targets = []
|
||||
mgr_daemons = self.mgr.cache.get_daemons_by_service('mgr')
|
||||
host = service_registry.get_service('mgr').get_active_daemon(mgr_daemons).hostname or ''
|
||||
fqdn = self.mgr.get_fqdn(host)
|
||||
port = self.mgr.get_module_option_ex(
|
||||
'prometheus', 'server_port', PrometheusService.DEFAULT_MGR_PROMETHEUS_PORT)
|
||||
targets.append(f'{fqdn}:{port}')
|
||||
dd = service_registry.get_service('mgr').get_active_daemon(mgr_daemons)
|
||||
if dd:
|
||||
assert dd.hostname is not None
|
||||
addr = dd.ip if dd.ip else self.mgr.inventory.get_addr(dd.hostname)
|
||||
port_val = self.mgr.get_module_option_ex(
|
||||
'prometheus', 'server_port', PrometheusService.DEFAULT_MGR_PROMETHEUS_PORT)
|
||||
port: Optional[int] = int(port_val) if port_val is not None else None
|
||||
targets.append(build_url(host=addr, port=port).lstrip('/'))
|
||||
return [{"targets": targets, "labels": {}}]
|
||||
|
||||
def alertmgr_sd_config(self) -> List[Dict[str, Collection[str]]]:
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
from unittest.mock import MagicMock
|
||||
from typing import List
|
||||
from cephadm.services.service_discovery import Root
|
||||
from cephadm.services.service_registry import service_registry
|
||||
|
||||
@ -128,7 +129,10 @@ class FakeMgr:
|
||||
return -1, '', 'error'
|
||||
|
||||
def get_module_option_ex(self, module, option, default_value):
|
||||
return "9283"
|
||||
# Port value for prometheus server_port (used by prometheus_sd_config).
|
||||
if module == 'prometheus' and option == 'server_port':
|
||||
return 9283
|
||||
return default_value
|
||||
|
||||
def daemon_is_self(self, d_type, d_id) -> bool:
|
||||
if d_type == 'mgr' and d_id == 'fake_active_mgr':
|
||||
@ -152,8 +156,27 @@ class TestServiceDiscovery:
|
||||
assert 'labels' in entry
|
||||
assert 'targets' in entry
|
||||
|
||||
# check content
|
||||
assert cfg[0]['targets'] == ['node0:9283']
|
||||
# check content - should return IP address instead of hostname
|
||||
assert cfg[0]['targets'] == ['1.2.3.4:9283']
|
||||
|
||||
def test_get_sd_config_prometheus_uses_ip_when_hostname_unresolvable(self, monkeypatch):
|
||||
mgr = FakeMgr()
|
||||
|
||||
def _mgr_daemons_no_ip(service_type: str) -> List[FakeDaemonDescription]:
|
||||
if service_type == 'mgr':
|
||||
return [
|
||||
FakeDaemonDescription(None, [9922], 'node0', daemon_type='mgr', daemon_id='fake_active_mgr'),
|
||||
FakeDaemonDescription('1.2.3.5', [9922], 'node1', daemon_type='mgr', daemon_id='fake_standby_mgr'),
|
||||
]
|
||||
return FakeCache().get_daemons_by_service(service_type)
|
||||
|
||||
monkeypatch.setattr(mgr.cache, 'get_daemons_by_service', _mgr_daemons_no_ip)
|
||||
|
||||
root = Root(mgr)
|
||||
cfg = root.get_sd_config('mgr-prometheus')
|
||||
|
||||
# Expect fallback to inventory IP (FakeInventory returns 1.2.3.4)
|
||||
assert cfg == [{"targets": ["1.2.3.4:9283"], "labels": {}}]
|
||||
|
||||
def test_get_sd_config_node_exporter(self):
|
||||
mgr = FakeMgr()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user