Skip to content

Commit 9a02a8b

Browse files
author
Chris Barbour
committed
Added support for node metadata in API calls
1 parent e567a9c commit 9a02a8b

2 files changed

Lines changed: 25 additions & 6 deletions

File tree

consulate/api/catalog.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ def __init__(self, uri, adapter, dc=None, token=None):
1919
def register(self, node, address,
2020
datacenter=None,
2121
service=None,
22-
check=None):
22+
check=None,
23+
node_meta=None):
2324
"""A a low level mechanism for directly registering or updating
2425
entries in the catalog. It is usually recommended to use the agent
2526
local endpoints, as they are simpler and perform anti-entropy.
@@ -76,11 +77,20 @@ def register(self, node, address,
7677
'ServiceID': 'redis1'
7778
}
7879
80+
Example node_meta dict:
81+
82+
.. code:: python
83+
84+
'NodeMeta': {
85+
'somekey': 'somevalue'
86+
}
87+
7988
:param str node: The node name
8089
:param str address: The node address
8190
:param str datacenter: The optional node datacenter
8291
:param dict service: An optional node service
8392
:param dict check: An optional node check
93+
:param dict node_meta: Optional node metadata
8494
:rtype: bool
8595
8696
"""
@@ -91,6 +101,8 @@ def register(self, node, address,
91101
payload['Service'] = service
92102
if check:
93103
payload['Check'] = check
104+
if node_meta:
105+
payload['NodeMeta'] = node_meta
94106

95107
return self._put_response_body(['register'], None, payload)
96108

@@ -141,13 +153,15 @@ def node(self, node_id):
141153
"""
142154
return self._get(['node', node_id])
143155

144-
def nodes(self):
156+
def nodes(self, node_meta=None):
145157
"""Return all of the nodes for the current datacenter.
146158
159+
:param str node_meta: Desired node metadata
147160
:rtype: list
148161
149162
"""
150-
return self._get_list(['nodes'])
163+
query_params = {'node-meta': node_meta} if node_meta else {}
164+
return self._get_list(['nodes'], query_params)
151165

152166
def service(self, service_id):
153167
"""Return the service details for the given service

consulate/api/health.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,16 @@ class Health(base.Endpoint):
1414
1515
"""
1616

17-
def checks(self, service_id):
17+
def checks(self, service_id, node_meta=None):
1818
"""Return checks for the given service.
1919
2020
:param str service_id: The service ID
21+
:param str node_meta: Filter checks using node metadata
2122
:rtype: list
2223
2324
"""
24-
return self._get_list(['checks', service_id])
25+
query_params = {'node-meta': node_meta} if node_meta else {}
26+
return self._get_list(['checks', service_id], query_params)
2527

2628
def node(self, node_id):
2729
"""Return the health info for a given node.
@@ -32,10 +34,11 @@ def node(self, node_id):
3234
"""
3335
return self._get_list(['node', node_id])
3436

35-
def service(self, service_id, tag=None, passing=None):
37+
def service(self, service_id, tag=None, passing=None, node_meta=None):
3638
"""Returns the nodes and health info of a service
3739
3840
:param str service_id: The service ID
41+
:param str node_meta: Filter services using node metadata
3942
:rtype: list
4043
4144
"""
@@ -45,6 +48,8 @@ def service(self, service_id, tag=None, passing=None):
4548
query_params['tag'] = tag
4649
if passing:
4750
query_params['passing'] = ''
51+
if node_meta:
52+
query_params['node-meta'] = node_meta
4853

4954
return self._get_list(['service', service_id],
5055
query_params=query_params)

0 commit comments

Comments
 (0)