Skip to content

Commit

Permalink
consul_io: fixed service availability check (ansible#34293)
Browse files Browse the repository at this point in the history
service is only up if the node publishing it is also available
  • Loading branch information
proxhavasi authored and ansibot committed Jan 19, 2018
1 parent a13958d commit 1c22d82
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions contrib/inventory/consul_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,17 +261,25 @@ def load_availability_groups(self, node, datacenter):
if self.config.has_config('availability'):
for service_name, service in iteritems(node['Services']):
for node in self.consul_api.health.service(service_name)[1]:
for check in node['Checks']:
if check['ServiceName'] == service_name:
ok = 'passing' == check['Status']
if ok:
suffix = self.config.get_availability_suffix(
'available_suffix', '_available')
else:
suffix = self.config.get_availability_suffix(
'unavailable_suffix', '_unavailable')
self.add_node_to_map(self.nodes_by_availability,
service_name + suffix, node['Node'])
if self.is_service_available(node, service_name):
suffix = self.config.get_availability_suffix(
'available_suffix', '_available')
else:
suffix = self.config.get_availability_suffix(
'unavailable_suffix', '_unavailable')
self.add_node_to_map(self.nodes_by_availability,
service_name + suffix, node['Node'])

def is_service_available(self, node, service_name):
'''check the availability of the service on the node beside ensuring the
availability of the node itself'''
consul_ok = service_ok = False
for check in node['Checks']:
if check['CheckID'] == 'serfHealth':
consul_ok = check['Status'] == 'passing'
elif check['ServiceName'] == service_name:
service_ok = check['Status'] == 'passing'
return consul_ok and service_ok

def consul_get_kv_inmemory(self, key):
result = filter(lambda x: x['Key'] == key, self.inmemory_kv)
Expand Down

0 comments on commit 1c22d82

Please sign in to comment.