diff --git a/src/charm.py b/src/charm.py index 79a16578f9..d58057de80 100755 --- a/src/charm.py +++ b/src/charm.py @@ -93,7 +93,7 @@ TRACING_PROTOCOL, TRACING_RELATION_NAME, ) -from k8s_helpers import KubernetesHelpers +from k8s_helpers import KubernetesHelpers, k8s_domain from log_rotate_manager import LogRotateManager from mysql_k8s_helpers import MySQL, MySQLInitialiseMySQLDError from relations.mysql import MySQLRelation @@ -351,23 +351,7 @@ def get_unit_address(self, unit: Unit, relation_name: str = PEER) -> str: Translate juju unit name to resolvable hostname. """ unit_hostname = self.get_unit_hostname(unit.name) - unit_dns_domain = getfqdn(self.get_unit_hostname(unit.name)) - - # When fully propagated, DNS domain name should contain unit hostname. - # For example: - # Hostname: mysql-k8s-0.mysql-k8s-endpoints - # Fully propagated: mysql-k8s-0.mysql-k8s-endpoints.dev.svc.cluster.local - # Not propagated yet: 10-1-142-191.mysql-k8s.dev.svc.cluster.local - if unit_hostname not in unit_dns_domain: - logger.warning( - "get_unit_address: unit DNS domain name is not fully propagated yet, trying again" - ) - raise RuntimeError("unit DNS domain name is not fully propagated yet") - if unit_dns_domain == unit_hostname: - logger.warning("Can't get fully qualified domain name for unit. IS DNS not ready?") - raise RuntimeError("Can't get unit fqdn") - - return dotappend(unit_dns_domain) + return dotappend(f"{unit_hostname}.{self.model.name}.svc.{k8s_domain()}") def is_unit_busy(self) -> bool: """Returns whether the unit is busy.""" diff --git a/src/k8s_helpers.py b/src/k8s_helpers.py index edf8642475..d03b85bf6a 100644 --- a/src/k8s_helpers.py +++ b/src/k8s_helpers.py @@ -28,6 +28,11 @@ from charm import MySQLOperatorCharm +def k8s_domain() -> str: + """Return the Kubernetes domain.""" + return socket.getfqdn("kubernetes.default").split(".svc.")[-1] + + class KubernetesClientError(Exception): """Exception raised when client can't execute."""