Skip to content

Commit 979cfdc

Browse files
authored
Merge pull request gmr#113 from cbarbour/master
Add support for Node Metadata in API and Health classes
2 parents e567a9c + 8fd8a58 commit 979cfdc

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

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)

docs/history.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Version History
2424
- Address Python 2.6 incompatibility with the consulate cli and null data (#62, #61) - Wayne Walker
2525
- Added :class:`~consulate.api.lock.Lock` class for easier lock acquisition
2626
- New CLI feature to backup and restore ACLs (#71)
27+
- Added support for node metadata in :class:`consulate.Consul.api.catalog` & :class:`~consulate.Comsul.api.health`
2728

2829
- 0.6.0 - released *2015-07-22*
2930
- Added --recurse and --trim to cli kv_get (#58) - Matt Walker

0 commit comments

Comments
 (0)