Skip to content

Commit c94a2f5

Browse files
authored
Merge pull request ceph#62302 from thegreenbear/cephadm-sd-custom-containers
mgr/cephadm: enhanced service to allow discovery of custom containers Reviewed-by: Adam King <[email protected]> Reviewed-by: Redouane Kachach <[email protected]>
2 parents 3b6cf27 + 6745ec3 commit c94a2f5

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

src/pybind/mgr/cephadm/service_discovery.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def __init__(self, mgr: "CephadmOrchestrator", port: int = 0, host: str = ''):
138138

139139
@cherrypy.expose
140140
def index(self) -> str:
141-
return '''<!DOCTYPE html>
141+
return self.mgr.get_store('service_discovery/index') or '''<!DOCTYPE html>
142142
<html>
143143
<head><title>Cephadm HTTP Endpoint</title></head>
144144
<body>
@@ -175,6 +175,8 @@ def get_sd_config(self, service: str) -> List[Dict[str, Collection[str]]]:
175175
return self.nfs_sd_config()
176176
elif service == 'smb':
177177
return self.smb_sd_config()
178+
elif service.startswith("container"):
179+
return self.container_sd_config(service)
178180
else:
179181
return []
180182

@@ -282,6 +284,21 @@ def smb_sd_config(self) -> List[Dict[str, Collection[str]]]:
282284
})
283285
return srv_entries
284286

287+
def container_sd_config(self, service: str) -> List[Dict[str, Collection[str]]]:
288+
"""Return <http_sd_config> compatible prometheus config for a container service."""
289+
srv_entries = []
290+
for dd in self.mgr.cache.get_daemons_by_service(service):
291+
assert dd.hostname is not None
292+
addr = dd.ip if dd.ip else self.mgr.inventory.get_addr(dd.hostname)
293+
if not dd.ports:
294+
continue
295+
port = dd.ports[0]
296+
srv_entries.append({
297+
'targets': [build_url(host=addr, port=port).lstrip('/')],
298+
'labels': {'instance': dd.hostname}
299+
})
300+
return srv_entries
301+
285302
@cherrypy.expose(alias='prometheus/rules')
286303
def get_prometheus_rules(self) -> str:
287304
"""Return currently configured prometheus rules as Yaml."""

src/pybind/mgr/cephadm/tests/test_service_discovery.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ def get_daemons_by_service(self, service_type):
3131
return [FakeDaemonDescription('1.2.3.4', [9922], 'node0'),
3232
FakeDaemonDescription('1.2.3.5', [9922], 'node1')]
3333

34+
if service_type == 'container.custom-container':
35+
return [FakeDaemonDescription('1.2.3.4', [9123], 'node0'),
36+
FakeDaemonDescription('1.2.3.5', [9123], 'node1')]
37+
3438
return [FakeDaemonDescription('1.2.3.4', [9100], 'node0'),
3539
FakeDaemonDescription('1.2.3.5', [9200], 'node1')]
3640

@@ -224,6 +228,20 @@ def test_get_sd_config_smb(self):
224228
# check content
225229
assert cfg[0]['targets'] == ['1.2.3.4:9922']
226230

231+
def test_get_sd_config_custom_container(self):
232+
mgr = FakeMgr()
233+
root = Root(mgr, 5000, '0.0.0.0')
234+
cfg = root.get_sd_config('container.custom-container')
235+
236+
# check response structure
237+
assert cfg
238+
for entry in cfg:
239+
assert 'labels' in entry
240+
assert 'targets' in entry
241+
242+
# check content
243+
assert cfg[0]['targets'] == ['1.2.3.4:9123']
244+
227245
def test_get_sd_config_invalid_service(self):
228246
mgr = FakeMgr()
229247
root = Root(mgr, 5000, '0.0.0.0')

0 commit comments

Comments
 (0)