From 900880050a2e57bcf477d8ebad3b38c001710be5 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 21 May 2021 13:31:31 -0400 Subject: [PATCH] mgr/cephadm: use known host addr If the host IP/addr is known, use that. The addr might even be a FQDN instead of an IP address, in which case we want to look that up instead of the bare hostname. Signed-off-by: Sage Weil --- src/pybind/mgr/cephadm/services/ingress.py | 8 ++++---- src/pybind/mgr/cephadm/services/iscsi.py | 2 +- src/pybind/mgr/cephadm/tests/test_services.py | 6 ++++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/pybind/mgr/cephadm/services/ingress.py b/src/pybind/mgr/cephadm/services/ingress.py index ca0648f373174..f78f558a2d8f8 100644 --- a/src/pybind/mgr/cephadm/services/ingress.py +++ b/src/pybind/mgr/cephadm/services/ingress.py @@ -99,7 +99,7 @@ class IngressService(CephService): assert(d.ports) servers.append({ 'name': f"{spec.backend_service}.{rank}", - 'ip': d.ip or resolve_ip(str(d.hostname)), + 'ip': d.ip or resolve_ip(self.mgr.inventory.get_addr(str(d.hostname))), 'port': d.ports[0], }) else: @@ -114,7 +114,7 @@ class IngressService(CephService): servers = [ { 'name': d.name(), - 'ip': d.ip or resolve_ip(str(d.hostname)), + 'ip': d.ip or resolve_ip(self.mgr.inventory.get_addr(str(d.hostname))), 'port': d.ports[0], } for d in daemons if d.ports ] @@ -232,7 +232,7 @@ class IngressService(CephService): # other_ips in conf file and converter to ips if host in hosts: hosts.remove(host) - other_ips = [resolve_ip(h) for h in hosts] + other_ips = [resolve_ip(self.mgr.inventory.get_addr(h)) for h in hosts] keepalived_conf = self.mgr.template.render( 'services/ingress/keepalived.conf.j2', @@ -243,7 +243,7 @@ class IngressService(CephService): 'interface': interface, 'state': state, 'other_ips': other_ips, - 'host_ip': resolve_ip(host), + 'host_ip': resolve_ip(self.mgr.inventory.get_addr(host)), } ) diff --git a/src/pybind/mgr/cephadm/services/iscsi.py b/src/pybind/mgr/cephadm/services/iscsi.py index 82b08a206c98f..c87307e1b7364 100644 --- a/src/pybind/mgr/cephadm/services/iscsi.py +++ b/src/pybind/mgr/cephadm/services/iscsi.py @@ -96,7 +96,7 @@ class IscsiService(CephService): if not spec: logger.warning('No ServiceSpec found for %s', dd) continue - ip = utils.resolve_ip(dd.hostname) + ip = utils.resolve_ip(self.mgr.inventory.get_addr(dd.hostname)) # IPv6 URL encoding requires square brackets enclosing the ip if type(ip_address(ip)) is IPv6Address: ip = f'[{ip}]' diff --git a/src/pybind/mgr/cephadm/tests/test_services.py b/src/pybind/mgr/cephadm/tests/test_services.py index 46dfbab4d973f..2c32dffd9738a 100644 --- a/src/pybind/mgr/cephadm/tests/test_services.py +++ b/src/pybind/mgr/cephadm/tests/test_services.py @@ -16,6 +16,11 @@ from orchestrator import OrchestratorError from orchestrator._interface import DaemonDescription +class FakeInventory: + def get_addr(self, name: str) -> str: + return '1.2.3.4' + + class FakeMgr: def __init__(self): self.config = '' @@ -23,6 +28,7 @@ class FakeMgr: self.mon_command = MagicMock(side_effect=self._check_mon_command) self.template = MagicMock() self.log = MagicMock() + self.inventory = FakeInventory() def _check_mon_command(self, cmd_dict, inbuf=None): prefix = cmd_dict.get('prefix') -- 2.39.5