Skip to content
Snippets Groups Projects

Draft: Improve service discovery

Open ale requested to merge improve-service-discovery into master
+ 18
10
@@ -205,23 +205,27 @@ def _host_dns_map(name, inventory):
@@ -205,23 +205,27 @@ def _host_dns_map(name, inventory):
# Return all service-related DNS names for a specific host.
# 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.
# Use a set for deduplication when hostname == shard_id.
names = set([
names = set([
service_name,
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]:
if 'shard_id' in inventory['hosts'][name]:
names.add(inventory['hosts'][name]['shard_id'] + '.' + service_name)
shard_id = inventory['hosts'][name]['shard_id']
if assignments.is_master(service_name, name):
names.add(f'{shard_id}.{service_name}')
names.add(service_name + '-master')
names.add(f'{shard_id}.shard.{service_name}')
 
if is_leader:
 
names.add(f'{service_name}-master')
return list(names)
return list(names)
# Return host-specific parameters for the X509 service credentials
# Return host-specific parameters for the X509 service credentials
# associated with a service.
# associated with a service.
def _service_credential_params(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, assignments)
names = _host_service_names(name, service_name, inventory, is_leader, host_service_idx)
names.append('localhost')
names.append('localhost')
names.append(name)
names.append(name)
addrs = _host_addrs(name, inventory)
addrs = _host_addrs(name, inventory)
@@ -245,12 +249,15 @@ def _common_net_overlay(hosta, hostb, 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.
# Build the service discovery DNS map for a service as seen from src_host.
def _service_dns(src_host, service_name, service, inventory, assignments):
def _service_dns(src_host, service_name, service, inventory, assignments):
dns = {}
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,
# Find the overlay in common between source and target host,
# and use the target IP on that network.
# and use the target IP on that network.
overlay = _common_net_overlay(src_host, hostname, inventory)
overlay = _common_net_overlay(src_host, hostname, inventory)
addrs = _host_net_overlay_addrs(hostname, inventory, overlay)
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)
dns.setdefault(name, []).extend(addrs)
return dns
return dns
@@ -435,7 +442,8 @@ def _host_vars(name, inventory, services, assignments):
@@ -435,7 +442,8 @@ def _host_vars(name, inventory, services, assignments):
enabled_systemd_units.add(u)
enabled_systemd_units.add(u)
for c in services[s].get('service_credentials', []):
for c in services[s].get('service_credentials', []):
if c.get('enable_server', True):
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({
hv['float_host_service_credentials'].append({
'credentials': c, 'service': s,
'credentials': c, 'service': s,
'mode': 'server', 'x509_params': params})
'mode': 'server', 'x509_params': params})
Loading