From 79f6e652c3f9d08b8b7a0f5f7dcaf12d04435bf0 Mon Sep 17 00:00:00 2001 From: Tatjana Dehler Date: Wed, 9 Mar 2022 16:23:49 +0100 Subject: [PATCH] mgr/cephadm: try to get FQDN for inventory address Fixes: https://tracker.ceph.com/issues/54502 Signed-off-by: Tatjana Dehler (cherry picked from commit 4f14993b1667fff309cd9cd6f9dad638a5a7e502) Conflicts: src/pybind/mgr/cephadm/services/monitoring.py Fixed conflict because ceph#44751 has not been backported to pacific (yet). --- .../mgr/cephadm/services/cephadmservice.py | 12 +++++++--- src/pybind/mgr/cephadm/services/monitoring.py | 22 +++++++++---------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/pybind/mgr/cephadm/services/cephadmservice.py b/src/pybind/mgr/cephadm/services/cephadmservice.py index d5063f067b92e..2f4d08318de13 100644 --- a/src/pybind/mgr/cephadm/services/cephadmservice.py +++ b/src/pybind/mgr/cephadm/services/cephadmservice.py @@ -2,6 +2,7 @@ import errno import json import logging import re +import socket from abc import ABCMeta, abstractmethod from typing import TYPE_CHECKING, List, Callable, TypeVar, \ Optional, Dict, Any, Tuple, NewType, cast @@ -239,9 +240,14 @@ class CephadmService(metaclass=ABCMeta): self.mgr.log.warning(f"Unable to update caps for {entity}") return keyring - def _inventory_get_addr(self, hostname: str) -> str: - """Get a host's address with its hostname.""" - return self.mgr.inventory.get_addr(hostname) + def _inventory_get_fqdn(self, hostname: str) -> str: + """Get a host's FQDN with its hostname. + + If the FQDN can't be resolved, the address from the inventory will + be returned instead. + """ + addr = self.mgr.inventory.get_addr(hostname) + return socket.getfqdn(addr) def _set_service_url_on_dashboard(self, service_name: str, diff --git a/src/pybind/mgr/cephadm/services/monitoring.py b/src/pybind/mgr/cephadm/services/monitoring.py index 598d8a919d7ca..3b738a330bec0 100644 --- a/src/pybind/mgr/cephadm/services/monitoring.py +++ b/src/pybind/mgr/cephadm/services/monitoring.py @@ -31,7 +31,7 @@ class GrafanaService(CephadmService): prom_services = [] # type: List[str] for dd in self.mgr.cache.get_daemons_by_service('prometheus'): assert dd.hostname is not None - addr = dd.ip if dd.ip else self._inventory_get_addr(dd.hostname) + addr = dd.ip if dd.ip else self._inventory_get_fqdn(dd.hostname) port = dd.ports[0] if dd.ports else 9095 prom_services.append(build_url(scheme='http', host=addr, port=port)) @@ -87,7 +87,7 @@ class GrafanaService(CephadmService): # TODO: signed cert dd = self.get_active_daemon(daemon_descrs) assert dd.hostname is not None - addr = dd.ip if dd.ip else self._inventory_get_addr(dd.hostname) + addr = dd.ip if dd.ip else self._inventory_get_fqdn(dd.hostname) port = dd.ports[0] if dd.ports else self.DEFAULT_SERVICE_PORT service_url = build_url(scheme='https', host=addr, port=port) self._set_service_url_on_dashboard( @@ -150,13 +150,13 @@ class AlertmanagerService(CephadmService): if dd.daemon_id == self.mgr.get_mgr_id(): continue assert dd.hostname is not None - addr = self._inventory_get_addr(dd.hostname) + addr = self._inventory_get_fqdn(dd.hostname) dashboard_urls.append(build_url(scheme=proto, host=addr, port=port)) for dd in self.mgr.cache.get_daemons_by_service('snmp-gateway'): assert dd.hostname is not None assert dd.ports - addr = dd.ip if dd.ip else self._inventory_get_addr(dd.hostname) + addr = dd.ip if dd.ip else self._inventory_get_fqdn(dd.hostname) deps.append(dd.name()) snmp_gateway_urls.append(build_url(scheme='http', host=addr, @@ -174,7 +174,7 @@ class AlertmanagerService(CephadmService): for dd in self.mgr.cache.get_daemons_by_service('alertmanager'): assert dd.hostname is not None deps.append(dd.name()) - addr = self._inventory_get_addr(dd.hostname) + addr = self._inventory_get_fqdn(dd.hostname) peers.append(build_url(host=addr, port=port).lstrip('/')) return { @@ -194,7 +194,7 @@ class AlertmanagerService(CephadmService): def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None: dd = self.get_active_daemon(daemon_descrs) assert dd.hostname is not None - addr = dd.ip if dd.ip else self._inventory_get_addr(dd.hostname) + addr = dd.ip if dd.ip else self._inventory_get_fqdn(dd.hostname) port = dd.ports[0] if dd.ports else self.DEFAULT_SERVICE_PORT service_url = build_url(scheme='http', host=addr, port=port) self._set_service_url_on_dashboard( @@ -265,7 +265,7 @@ class PrometheusService(CephadmService): if dd.daemon_id == self.mgr.get_mgr_id(): continue assert dd.hostname is not None - addr = self._inventory_get_addr(dd.hostname) + addr = self._inventory_get_fqdn(dd.hostname) mgr_scrape_list.append(build_url(host=addr, port=port).lstrip('/')) # scrape node exporters @@ -273,7 +273,7 @@ class PrometheusService(CephadmService): for dd in self.mgr.cache.get_daemons_by_service('node-exporter'): assert dd.hostname is not None deps.append(dd.name()) - addr = dd.ip if dd.ip else self._inventory_get_addr(dd.hostname) + addr = dd.ip if dd.ip else self._inventory_get_fqdn(dd.hostname) port = dd.ports[0] if dd.ports else 9100 nodes.append({ 'hostname': dd.hostname, @@ -285,7 +285,7 @@ class PrometheusService(CephadmService): for dd in self.mgr.cache.get_daemons_by_service('alertmanager'): assert dd.hostname is not None deps.append(dd.name()) - addr = dd.ip if dd.ip else self._inventory_get_addr(dd.hostname) + addr = dd.ip if dd.ip else self._inventory_get_fqdn(dd.hostname) port = dd.ports[0] if dd.ports else 9093 alertmgr_targets.append("'{}'".format(build_url(host=addr, port=port).lstrip('/'))) @@ -297,7 +297,7 @@ class PrometheusService(CephadmService): assert dd.hostname is not None deps.append(dd.name()) if dd.daemon_type == 'haproxy': - addr = self._inventory_get_addr(dd.hostname) + addr = self._inventory_get_fqdn(dd.hostname) haproxy_targets.append({ "url": f"'{build_url(host=addr, port=spec.monitor_port).lstrip('/')}'", "service": dd.service_name(), @@ -336,7 +336,7 @@ class PrometheusService(CephadmService): def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None: dd = self.get_active_daemon(daemon_descrs) assert dd.hostname is not None - addr = dd.ip if dd.ip else self._inventory_get_addr(dd.hostname) + addr = dd.ip if dd.ip else self._inventory_get_fqdn(dd.hostname) port = dd.ports[0] if dd.ports else self.DEFAULT_SERVICE_PORT service_url = build_url(scheme='http', host=addr, port=port) self._set_service_url_on_dashboard( -- 2.39.5