diff --git a/plugins/inventory/float.py b/plugins/inventory/float.py index e9fa22b63c7dd47b8fa403c1edbef121c09dda39..49f81dc55397b5d2311f2262b99a8ff9a48ede9b 100644 --- a/plugins/inventory/float.py +++ b/plugins/inventory/float.py @@ -205,23 +205,27 @@ 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, host_service_idx): # Use a set for deduplication when hostname == shard_id. names = set([ service_name, - name + '.' + service_name, + f'{name}.{service_name}', + f'{name}.host.{service_name}', + f'{host_service_idx}.index.{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): - names.add(service_name + '-master') + shard_id = inventory['hosts'][name]['shard_id'] + names.add(f'{shard_id}.{service_name}') + names.add(f'{shard_id}.shard.{service_name}') + if is_leader: + names.add(f'{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, host_service_idx): + names = _host_service_names(name, service_name, inventory, is_leader, host_service_idx) names.append('localhost') names.append(name) addrs = _host_addrs(name, inventory) @@ -245,12 +249,15 @@ def _common_net_overlay(hosta, hostb, inventory): # Build the service discovery DNS map for a service as seen from src_host. def _service_dns(src_host, service_name, service, inventory, assignments): dns = {} - for hostname in assignments.get_by_service(service_name): + for host_service_idx, hostname in enumerate( + assignments.get_by_service(service_name)): # Find the overlay in common between source and target host, # 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, host_service_idx): dns.setdefault(name, []).extend(addrs) return dns @@ -415,7 +422,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), idx) hv['float_host_service_credentials'].append({ 'credentials': c, 'service': s, 'mode': 'server', 'x509_params': params})