From 5be9202441785666f012a0c2c916eb93a1e23ee3 Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Fri, 4 Mar 2022 10:21:26 +0000 Subject: [PATCH] Introduce 'host' and 'shard' service discovery subdomains Start decoupling the service discovery namespaces. Individual backends can now be reached as "<host>.host.<service>" and "<shard_id>.shard.<service>", as well as the legacy names. --- plugins/inventory/float.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/plugins/inventory/float.py b/plugins/inventory/float.py index e9fa22b6..6038e2f2 100644 --- a/plugins/inventory/float.py +++ b/plugins/inventory/float.py @@ -205,23 +205,26 @@ def _host_dns_map(name, inventory): # Return all service-related DNS names for a specific host. -def _host_service_names(name, service_name, inventory, assignments): +def _host_service_names(name, service_name, inventory, is_leader): # Use a set for deduplication when hostname == shard_id. names = set([ service_name, name + '.' + service_name, + name + '.host.' + service_name, ]) if 'shard_id' in inventory['hosts'][name]: - names.add(inventory['hosts'][name]['shard_id'] + '.' + service_name) - if assignments.is_master(service_name, name): + shard_id = inventory['hosts'][name]['shard_id'] + names.add(shard_id + '.' + service_name) + names.add(shard_id + '.shard.' + service_name) + if is_leader: names.add(service_name + '-master') return list(names) # Return host-specific parameters for the X509 service credentials # associated with a service. -def _service_credential_params(name, service_name, inventory, assignments): - names = _host_service_names(name, service_name, inventory, assignments) +def _service_credential_params(name, service_name, inventory, is_leader): + names = _host_service_names(name, service_name, inventory, is_leader) names.append('localhost') names.append(name) addrs = _host_addrs(name, inventory) @@ -250,7 +253,8 @@ def _service_dns(src_host, service_name, service, inventory, assignments): # and use the target IP on that network. overlay = _common_net_overlay(src_host, hostname, inventory) addrs = _host_net_overlay_addrs(hostname, inventory, overlay) - for name in _host_service_names(hostname, service_name, inventory, assignments): + is_leader = assignments.is_master(service_name, hostname) + for name in _host_service_names(hostname, service_name, inventory, is_leader): dns.setdefault(name, []).extend(addrs) return dns @@ -415,7 +419,8 @@ def _host_vars(name, inventory, services, assignments): enabled_systemd_units.add(u) for c in services[s].get('service_credentials', []): if c.get('enable_server', True): - params = _service_credential_params(name, s, inventory, assignments) + params = _service_credential_params( + name, s, inventory, assignments.is_master(s, name)) hv['float_host_service_credentials'].append({ 'credentials': c, 'service': s, 'mode': 'server', 'x509_params': params}) -- GitLab